Get subscription status
const url = 'https://api-v1.tailwind.ai/v1/accounts/example/subscriptions';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://api-v1.tailwind.ai/v1/accounts/example/subscriptions \ --header 'Authorization: Bearer <token>'Whether a Pinterest account currently has active, paying access, and what is backing it — normalized across Tailwind’s legacy and modular billing systems so callers never need to know which one the org is on.
entitled is the answer to “can this account use paid features right now”. Legacy orgs are billed org-wide and always report a single entry describing the org’s plan; modular orgs report one entry per entitlement the account currently holds, which may be several (e.g. Publishing and SEO), or none. A modular entitlement can come from a subscription or from a Tailwind-issued grant — source says which.
Only current entitlements are reported: ended subscriptions and expired grants are omitted rather than returned with entitled: false.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Numeric Tailwind account ID returned by GET /v1/accounts
Responses
Section titled “Responses”Subscription status
object
A Pinterest account’s current paying access, normalized across billing systems.
object
Whether the account currently has active, paying access. This is the field to check before relying on a paid capability.
Which billing system the owning organization is on. An org is on exactly one.
The entitlements backing entitled. A legacy org always reports exactly one entry describing its org-wide plan. A modular org reports one entry per current entitlement — possibly several, possibly none.
One entitlement backing an account’s access.
object
What backs this entitlement: the org’s plan (legacy), a Maxio subscription, or a Tailwind-issued grant.
Billing-system state. Legacy reports the org’s Chargify subscription state (e.g. “active”, “past_due”); modular subscriptions report the Maxio state; grants report “granted”.
Whether a cancellation is scheduled but access continues through the paid period
Unix timestamp the current paid period ends, when known. Null for ordinary legacy plans, whose renewal date is not stored locally.
Modular only: the product domain this entitlement covers. Null on the legacy rail, which is not domain-scoped.
Modular subscriptions only. Null for legacy plans and for grants.
object
Unique request ID for debugging
Example
{ "data": { "billingSystem": "legacy", "subscriptions": [ { "source": "plan", "productType": "bundle", "billingCycle": "monthly" } ] }}Invalid request
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "BAD_REQUEST", "message": "Invalid request body" }, "meta": { "requestId": "abc123" }}Authentication required or invalid bearer credentials
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "UNAUTHORIZED", "message": "Invalid API key" }, "meta": { "requestId": "abc123" }}Resource not found
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "NOT_FOUND", "message": "Account not found" }, "meta": { "requestId": "abc123" }}Rate limit exceeded
object
object
Error code
Error message
Machine-readable denial reason. Present on PAYMENT_REQUIRED errors: insufficient_credits, trial_exhausted, no_access, account_not_connected, legacy_post_limit_exceeded.
Present on PAYMENT_REQUIRED errors: where the denial can be resolved. Reason-specific, because buying credits does not clear a trial, access or connection denial. Requests sent with X-Request-Source: mcp receive an informational plans page instead, so agent surfaces never present a purchase link.
object
Unique request ID for debugging
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Daily rate limit of 5000 requests exceeded. Resets at midnight UTC." }, "meta": { "requestId": "abc123" }}