Consent Posture: The Unknown-Consent Policies
A consent ledger answers questions about the contacts it has rows for. This page is about everyone else: the contact you imported last night, the recipient a form integration never wrote a record for, the B2B lead your CRM sync created without a consent flag. Orbit ships two tenant-owned policies — owner-gated, audit-logged, both readable and writable over the API — that decide what those contacts may lawfully receive:
Both are posture knobs, not legal advice: Orbit enforces the posture you
set and keeps the audit trail — it never decides that a send is
“compliant.” Choosing the policy that matches your jurisdictions and
lawful bases remains your responsibility, ideally with counsel.
The per-contact consent ledger itself — recording, lookup, expiry,
receipts — is documented in
Consent Management & Receipts. This
page covers the org-level posture that resolves the contacts the
ledger says nothing about.
The consent-state model
Every(contact, channel) pair resolves to one of three states:
The
unknown state is the policy surface. Under refuse (the default)
the marketing-send gate answers “no” for an unknown contact — the same
conservative posture opt-in jurisdictions (GDPR, UK PECR, Brazil LGPD)
expect, where marketing before consent is a violation regardless of any
flag. Under allow_with_logging the same lookup answers “yes” and
emits a per-contact audit row recording the contact, the channel, the
resolved policy, and the timestamp — the durable trail a reviewer
compares against your lawful-basis claim.
The two policies
Unknown marketing policy — refuse vs allow_with_logging
Endpoint: GET / PATCH /api/v1/settings/compliance/unknown-marketing-policy
(owner-only on the write).
The marketing-send gate resolves this policy per send. refuse is the
fail-closed default every unconfigured tenant ships with: unknown
contacts receive no marketing. allow_with_logging opts into the open
model — the US double-opt-out posture, CAN-SPAM, TCPA non-consumer
paths, and B2B legitimate-interest programs — where “we never asked”
does not by itself block a send you can substantiate under another
lawful basis.
Because loosening widens who you lawfully market to (every
unknown-consent contact at once), the PATCH is a deliberate, documented
decision — not a frictionless toggle:
Omit either field while loosening and the API refuses with
422 VALIDATION_ERROR. Tightening back to refuse carries no fields —
it never widens marketing reach, so it needs no justification.
Every accepted change — in either direction — is written to the
tamper-evident audit log as an immutable before→after record: the
previous policy, the new policy, the administrator (user + IP), and the
reason and lawful basis you supplied. Separately, once
allow_with_logging is active, the marketing-send gate emits a
per-contact audit row for each unknown-consent contact it lets
through. If a regulator later argues the lawful basis was unsupported,
those rows identify exactly who was reached under the policy so you can
substantiate — or remediate — at row-level granularity instead of
arguing from a global claim.
Consent default policy — permit_on_missing vs deny_on_missing
Endpoint: GET / PATCH /api/v1/settings/compliance/consent-default-policy
(owner-only on the write).
This is the sibling posture for the CDP side: the destination-fanout and
subscription consent checks (/cdp/consent/check) read it when a
contact has no consent ledger row at all — a shape distinct from a
ledger-mediated unknown state.
permit_on_missing(default) — the US TCPA legitimate-relationship posture: a missing row does not block the fanout. Existing tenants behave exactly as before the toggle shipped.deny_on_missing— the EU GDPR Art 6/7 affirmative-opt-in posture: an unrecorded data subject is treated as a refusal.
rtbf), explicit opt-out — are never inverted by this setting.
How the posture meets the rest of the stack
The two knobs sit between the consent ledger and the send path — they are read by gates, not consulted by the ledger itself:- Marketing-send gate. Every marketing send (live and scheduled)
passes a per-contact consent check before dispatch.
opted_inpasses;opted_outfails the send with a recorded block reason;unknownresolves through your unknown marketing policy. Underrefusea blocked live send returns403withconsent_required: true; underallow_with_loggingthe send proceeds and the per-contact audit row lands in your audit log. - Suppression layer. Suppression entries are dropped before
dispatch regardless of policy — a suppressed address loses to
allow_with_loggingexactly as it loses torefuse. See Opt-Out & Suppression Lists. - Compliance health. The org compliance-health score counts consent coverage as 30% of its 0–100 blend. Loosening the policy does not raise coverage — it widens reach without adding evidence. A loosened posture with a low coverage score is the combination a reviewer flags, so treat the score’s ranked fixes as the prompt to record consent, not just to permit sends.
- CDP fanout and subscriptions. The destination-fanout and
subscription consent checks resolve row-absence through the consent
default policy. With
deny_on_missing, an unrecorded contact simply does not fan out to the destination. - Audit chain. Both PATCH surfaces are owner-only and both write an immutable before→after entry to the tamper-evident audit log. The loosening justification + lawful basis are part of that entry, so an accidental or insufficiently-reviewed loosening is always attributable after the fact.
Choosing a posture
Match the policy to the regime your traffic actually falls under. When your program spans regimes, the conservative knob wins for the strict half of your audience.
A posture choice is defensible exactly as much as the consent records
behind it. If you loosen the policy, expect the audit trail — your own
justification, the lawful basis you attested, and the per-contact rows —
to be the first thing a reviewer reads.
Limits
- Orbit enforces; it does not advise. The platform applies the posture you set, blocks what the posture blocks, and logs what it permits. It never decides that a send is “compliant,” and this page is not legal advice.
- No platform-mandated default beyond the refuse fallback. Both
knobs ship at their conservative values (
refuse,permit_on_missingis the historical fanout behavior) and loosen only by explicit owner write. On a lookup error the marketing posture fails torefuse— the conservative direction — rather than opening. - Policies never invert explicit signals. An opt-out, a suppression entry, revoked consent, or an erasure beats both knobs, always.
Related references
- Consent Management & Receipts — the per-contact ledger both policies resolve against.
- Your Tenant Compliance Posture: The Toggle Map — where these two knobs sit among the rest of the posture surface.
- Opt-Out & Suppression Lists — the layer that gates sends before the policy is ever consulted.
- Compliance Health Scores — the consent-coverage signal to watch after a posture change.
- Assembling a GDPR Posture End to End — the full opt-in-regime walkthrough.
- API Reference → Settings — full request/response schemas for both endpoints.