What requires acceptance
Until the account has accepted the current version, these endpoints return403 terms_not_accepted:
The check is tied to the account, so it applies to API keys and sessions
alike, and it runs before the body is validated. Everything else works without
acceptance: reads, wallets, API keys, your profile, and voiding a letter
(which refunds you).
Accepting
Sign in to the dashboard and accept under Settings, or from the prompt the dashboard shows on your first transaction. Acceptance is session-only: an API key cannot accept on your behalf, so for a key-only integration, sign in once and accept before its first run. Sandbox and production accounts are separate; accept in each environment you use.The platform records the version you accepted, a hash of the exact text you
were shown, the time, and the IP address and browser user agent you accepted
from, as the record of your consent.
Checking status
GET /me/terms accepts either credential:
required: true means the endpoints above will refuse. Once accepted,
accepted carries { version, acceptedAt } and required is false.
document holds the full text (title, key points, sections) if you want to
render it yourself.
When the terms change
A new version comes with a newversion and effectiveDate, and every
account must accept it before its next transaction; until then the gated
endpoints return 403 terms_not_accepted again. Treat that code as needing a
person, not a retry: alert someone to sign in and accept.
POST /me/terms takes the version and contentHash from GET /me/terms,
so a page still showing an older text can’t accept it. A stale pair returns
409 terms_version_mismatch; fetch the terms again and accept the current
version.