# Subscription attributes

The system attributes behind consent: the five per-channel fields that store the marketing preference, the suppression state, the acceptance and refusal dates and the marketing level, and which channels carry a set.

**Language:** en
**Audience:** platform
**TLDR:** Consent is stored as five system attributes per channel: _accepts_marketing_* (the preference: accepted, declined or no preference, the default), _is_subscribed_* (suppression: subscribed by default), the acceptance date (you can send it; if you don't, Instasent fills it in), the decline date (read-only, filled in by Instasent) and _level_marketing_* (free text you set yourself). They show in the attribute manager under their display names and work as columns and in segment filters.
**Translation key:** platform.consent.subscription-attributes
**Search keywords:** subscription attributes, consent attributes, accepts marketing, subscribed, marketing consent, subscription status, acceptance date, refusal date, marketing level, double opt-in, consent date, per channel attributes, sms consent attributes, whatsapp consent, email consent, system attributes, Accepts email marketing, Accepts SMS/RCS marketing, Accepts WhatsApp marketing, SMS/RCS marketing level, Email marketing level, WhatsApp marketing level
**Related pages:** /platform/es/consent/subscription-attributes, /platform/en/consent, /platform/en/consent/marketing-preference-vs-suppression, /platform/en/consent/rcs-sms-shared-consent, /platform/en/audience/attributes-events
**Docs index (every page):** https://docs.instasent.com/llms.txt
**This zone's index:** https://docs.instasent.com/platform/en/llms.txt
**This page:** https://docs.instasent.com/platform/en/consent/subscription-attributes/ (HTML) · https://docs.instasent.com/platform/en/consent/subscription-attributes.md (Markdown)
**Other language (es):** https://docs.instasent.com/platform/es/consent/subscription-attributes.md

Underneath the checkboxes you see on the profile, consent is stored as **system attributes**
on every contact: the two axes — the marketing preference and channel suppression — each get
their own field, with a separate set **per channel**. They're ordinary attributes, so they
appear in the [attributes manager](/platform/en/audience/attributes-events) like any system
field (their names start with an underscore), and you can use them as columns and in segment
filters. In the filter search they show under their **display name** — for example,
`_accepts_marketing_sms` shows as **Accepts SMS/RCS marketing** and `_accepts_marketing_email`
as **Accepts email marketing**. This page lists them one by one.

## Five attributes per channel

Each channel that tracks consent has the same five attributes. Taking SMS as the example:

- `_accepts_marketing_sms` — `three-state`
  The **marketing preference**: accepted (opted in), declined (opted out), or no
  preference (unset). The default is **no preference**.
- `_is_subscribed_sms` — `yes/no`
  The **suppression** axis: subscribed or suppressed. The default is
  **subscribed**.
- `_date_accepts_marketing_sms` — `date`
  When the contact **accepted** marketing. You can send it yourself, for example the date
  you collected the consent, as a column in an import or through the API. If you don't,
  Instasent fills it in with the moment the preference was set to accepted.
- `_date_unaccepts_marketing_sms` — `date`
  When the contact **declined** marketing. **Read-only**: Instasent fills it in with the
  moment the preference was set to declined.
- `_level_marketing_sms` — `text`
  A free text field for the **level of marketing consent**, if you track one: for example
  single opt-in, double opt-in or a complaint. There is no fixed list of values. You set it
  yourself (in an import, through a connector or the API); Instasent doesn't fill it in and
  doesn't use it to decide who receives marketing.

The two dates give each contact a dated record of when they opted in or out, which is what
you rely on for compliance. Because the acceptance date can come from your own data, an import
can carry the consent date you already hold.

Of the five, only the **decline date** is read-only. The acceptance date and the marketing
level are yours to write, and the marketing preference follows its own rule below. **Suppression**
(`_is_subscribed_*`) can't be set by a CSV import: a suppression column in the file is not
applied. The connectors that send your data by attribute name (Zapier, Make, n8n, Activepieces
and Pabbly Connect) and the Ingest API can write it like any other attribute, so only send it
to record a real block. The
**marketing preference** (`_accepts_marketing_*`) *can* arrive in an import while no value is
set yet, but **once the contact has set it themselves** — via STOP/START or an unsubscribe
link — an import no longer overwrites it; from then on only your team, the subscription API or
the contact change it.

## Which channels have a set

The same five attributes exist per channel, but not every channel is an active sending
channel in Instasent today:

| Channel      | Attribute set  | Notes                                                                                                                                                                    |
| ------------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **SMS**      | `_*_sms`       | The active channel. **Also governs RCS** — RCS has no attributes of its own.                                                                                             |
| **RCS**      | — (shares SMS) | No own set; reads and writes the SMS attributes. See [Shared consent](/platform/en/consent/rcs-sms-shared-consent).                                                      |
| **WhatsApp** | `_*_whatsapp`  | Provisioned, **not yet an active sending channel**. The attributes exist so that WhatsApp consent (for example a marketing column in a CSV) is captured from now on.     |
| **Email**    | `_*_email`     | The model includes Email, but it **isn't an active sending channel** in this Instasent release (the rollout is SMS-first). The attributes exist and show on the profile. |

> **Note**: **RCS doesn't have its own consent.** There is no `_accepts_marketing_rcs` or
> `_is_subscribed_rcs`. RCS consent *is* SMS consent — the `_*_sms` attributes govern both
> channels. This is why the profile shows a single **SMS / RCS** row. The full behaviour is
> in [Shared consent](/platform/en/consent/rcs-sms-shared-consent).

## Using them

These attributes behave like any system attribute:

- **As columns** — add them to the [audience table](/platform/en/audience/audience-table) to
  see consent at a glance across contacts.
- **In segments** — filter a [segment](/platform/en/audience/segments) on them, for example
  contacts who accept SMS marketing and are subscribed.
- **On the profile** — they're surfaced together in the **Channel preferences** card (see
  [How consent works](/platform/en/consent/marketing-preference-vs-suppression)), not as raw
  attribute rows.

For how these attributes are set in the first place — by a contact, your team, a campaign or
the API — see [Opt-outs & reactivation](/platform/en/consent/opt-outs-reactivation) and
[Manage via API](/platform/en/consent/managing-via-api).

---

This is one page of the Instasent documentation. For the complete machine-readable index of every guide and API reference, fetch https://docs.instasent.com/llms.txt — start there for full context.
