openapi: 3.2.0
info:
title: Reference Subscriptions API
version: 1.0.0
servers:
- url: https://api.beehiiv.com/v2
description: Default
tags:
- name: Subscriptions
paths:
/publications/{publicationId}/subscriptions:
post:
operationId: create
summary: 'Create subscription OAuth Scope: subscriptions:write'
description: Create new subscriptions for a publication.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: Subscription created
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/type__SubscriptionRequest'
get:
operationId: index
summary: 'List subscriptions OAuth Scope: subscriptions:read'
description: 'Retrieve all subscriptions belonging to a specific publication.
**New**: This endpoint now supports cursor-based pagination for better performance and consistency. Use the `cursor` parameter instead of `page` for new integrations.
**Deprecation Notice**: Offset-based pagination (using `page` parameter) is deprecated and limited to 100 pages maximum. Please migrate to cursor-based pagination. See our [Pagination Guide](/welcome/pagination) for details. '
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: expand[]
in: query
description: Optional list of expandable objects.
`subscription_premium_tiers ` - Returns an array of tiers the subscription is associated with.
`referrals` - Returns an array of subscriptions with limited data - `id`, `email`, and `status`. These are the subscriptions that were referred by this subscription.
`stats` - Returns statistics about the subscription(s).
`custom_fields` - Returns an array of custom field values that have been set on the subscription.
`newsletter_lists` - Returns an array of newsletter list prefixed IDs the subscription is actively subscribed to.
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsListRequestExpandItem'
- name: status
in: query
description: Optionally filter the results by a status
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsListRequestStatus'
- name: tier
in: query
description: Optionally filter the results by a their tier
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsListRequestTier'
- name: premium_tiers[]
in: query
description: Optionally filter the results by one or multiple premium tiers
required: false
schema:
type: string
- name: premium_tier_ids[]
in: query
description: Optionally filter the results by one or multiple premium tier ids
required: false
schema:
type: string
- name: limit
in: query
description: A limit on the number of objects to be returned. The limit can range between 1 and 100, and the default is 10.
required: false
schema:
type: integer
- name: cursor
in: query
description: '**Cursor-based pagination (recommended)**: Use this opaque cursor token to fetch the next page of results. When provided, pagination will use cursor-based method which is more efficient and consistent than offset-based pagination. See the [Pagination Guide](/welcome/pagination) for more details.'
required: false
schema:
type: string
- name: page
in: query
description: '**Offset-based pagination (deprecated)**: Page number for offset-based pagination. This method is deprecated and limited to 100 pages maximum. Please migrate to cursor-based pagination using the `cursor` parameter. If not specified, results 1-10 from page 1 will be returned. See the [Pagination Guide](/welcome/pagination) for migration guidance.'
required: false
schema:
type: integer
- name: email
in: query
description: Optional email address to find a subscription.
This param must be an exact match and is case insensitive.
required: false
schema:
type: string
- name: order_by
in: query
description: The field that the results are sorted by. Defaults to created
`created` - The time in which the subscription was first created.
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsListRequestOrderBy'
- name: direction
in: query
description: The direction that the results are sorted in. Defaults to asc
`asc` - Ascending, sorts from smallest to largest.
`desc` - Descending, sorts from largest to smallest.
required: false
schema:
$ref: '#/components/schemas/type__RequestDirection'
- name: creation_date
in: query
description: Optional date entry (in the format YYYY/MM/DD) that filters returned subscriptions by their creation date.
required: false
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsListResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
/publications/{publicationId}/subscriptions/by_email/{email}:
get:
operationId: get-by-email
summary: 'Get subscription by email OAuth Scope: subscriptions:read'
description: Please note that this endpoint requires the email to be URL encoded. Please reference your language's documentation for the correct method of encoding. Retrieve a single subscription belonging to a specific email address in a specific publication.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: email
in: path
description: The ID of the subscriber object
required: true
schema:
type: string
- name: expand[]
in: query
description: Optional list of expandable objects.
`subscription_premium_tiers ` - Returns an array of tiers the subscription is associated with.
`referrals` - Returns an array of subscriptions with limited data - `id`, `email`, and `status`. These are the subscriptions that were referred by this subscription.
`stats` - Returns statistics about the subscription(s).
`custom_fields` - Returns an array of custom field values that have been set on the subscription.
`tags` - Returns an array of tags that have been set on the subscription.
`newsletter_lists` - Returns an array of newsletter list prefixed IDs the subscription is actively subscribed to.
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsGetRequestExpandItem'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
put:
operationId: update-by-email
summary: 'Update subscription by email OAuth Scope: subscriptions:write'
description: Update a single subscription by email.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: email
in: path
description: The email of the subscription object
required: true
schema:
type: string
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: The new email address for the subscription
tier:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemTier'
description: Optional parameter to set the tier for this subscription.
premium_tier_ids:
type: array
items:
type: string
description: An array of premium tier IDs to assign to this subscription. When provided, the subscription will be assigned to these specific premium tiers. Can be combined with `premium_tiers` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
premium_tiers:
type: array
items:
type: string
description: An array of premium tier names to assign to this subscription. When provided, the subscription will be assigned to premium tiers matching these names. Can be combined with `premium_tier_ids` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
stripe_customer_id:
$ref: '#/components/schemas/type_ids_OptionalStripeCustomerId'
description: The Stripe Customer ID of the subscription (not required)
unsubscribe:
type: boolean
description: A boolean value specifying whether to unsubscribe this subscription from the publication (not required)
custom_fields:
type: array
items:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemCustomFieldsItem'
description: An array of custom field objects to update
complimentary_gift_id:
$ref: '#/components/schemas/type_ids_ComplimentaryAccessId'
description: The prefixed ID of a complimentary access object to apply to this subscription. The complimentary access must belong to the same publication.
/publications/{publicationId}/subscriptions/{subscriptionId}:
get:
operationId: get-by-id
summary: 'Get subscription by ID OAuth Scope: subscriptions:read'
description: In previous versions of the API, another endpoint existed to retrieve a subscription by the subscriber ID. This endpoint is now deprecated and will be removed in a future version of the API. Please use this endpoint instead. The subscription ID can be found by exporting a list of subscriptions either via the `Settings > Publications > Export Data` or by exporting a CSV in a segment. Retrieve a single subscription belonging to a specific publication.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: subscriptionId
in: path
description: The prefixed ID of the subscription object
required: true
schema:
$ref: '#/components/schemas/type_ids_SubscriptionId'
- name: expand[]
in: query
description: Optional list of expandable objects.
`subscription_premium_tiers` - Returns an array of tiers the subscription is associated with.
`referrals` - Returns an array of subscriptions with limited data - `id`, `email`, and `status`. These are the subscriptions that were referred by this subscription.
`stats` - Returns statistics about the subscription(s).
`custom_fields` - Returns an array of custom field values that have been set on the subscription.
`tags` - Returns an array of tags that have been set on the subscription.
`newsletter_lists` - Returns an array of newsletter list prefixed IDs the subscription is actively subscribed to.
required: false
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionsGetRequestExpandItem'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
put:
operationId: put
summary: 'Update subscription by ID OAuth Scope: subscriptions:write'
description: Update a single subscription.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: subscriptionId
in: path
description: The prefixed ID of the subscription object
required: true
schema:
$ref: '#/components/schemas/type_ids_SubscriptionId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
requestBody:
content:
application/json:
schema:
type: object
properties:
tier:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemTier'
description: Optional parameter to set the tier for this subscription.
premium_tier_ids:
type: array
items:
type: string
description: An array of premium tier IDs to assign to this subscription. When provided, the subscription will be assigned to these specific premium tiers. Can be combined with `premium_tiers` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
premium_tiers:
type: array
items:
type: string
description: An array of premium tier names to assign to this subscription. When provided, the subscription will be assigned to premium tiers matching these names. Can be combined with `premium_tier_ids` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
email:
type: string
description: The new email address for the subscription
stripe_customer_id:
$ref: '#/components/schemas/type_ids_OptionalStripeCustomerId'
description: The Stripe Customer ID of the subscription (not required)
unsubscribe:
type: boolean
description: A boolean value specifying whether to unsubscribe this subscription from the publication (not required)
custom_fields:
type: array
items:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemCustomFieldsItem'
description: An array of custom field objects to update
complimentary_gift_id:
$ref: '#/components/schemas/type_ids_ComplimentaryAccessId'
description: The prefixed ID of a complimentary access object to apply to this subscription. The complimentary access must belong to the same publication.
patch:
operationId: patch
summary: 'Update subscription by ID OAuth Scope: subscriptions:write'
description: Update a single subscription.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: subscriptionId
in: path
description: The prefixed ID of the subscription object
required: true
schema:
$ref: '#/components/schemas/type_ids_SubscriptionId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: The new email address for the subscription
tier:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPatchRequestSubscriptionsItemTier'
description: Optional parameter to set the tier for this subscription.
premium_tier_ids:
type: array
items:
type: string
description: An array of premium tier IDs to assign to this subscription. When provided, the subscription will be assigned to these specific premium tiers. Can be combined with `premium_tiers` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
premium_tiers:
type: array
items:
type: string
description: An array of premium tier names to assign to this subscription. When provided, the subscription will be assigned to premium tiers matching these names. Can be combined with `premium_tier_ids` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
stripe_customer_id:
$ref: '#/components/schemas/type_ids_OptionalStripeCustomerId'
description: The Stripe Customer ID of the subscription (not required)
unsubscribe:
type: boolean
description: A boolean value specifying whether to unsubscribe this subscription from the publication (not required)
custom_fields:
type: array
items:
$ref: '#/components/schemas/type_bulkSubscriptionUpdates_SubscriptionsPatchRequestSubscriptionsItemCustomFieldsItem'
description: An array of custom field objects to update
complimentary_gift_id:
$ref: '#/components/schemas/type_ids_ComplimentaryAccessId'
description: The prefixed ID of a complimentary access object to apply to this subscription. The complimentary access must belong to the same publication.
delete:
operationId: delete
summary: 'Delete subscription OAuth Scope: subscriptions:write'
description: This cannot be undone. All data associated with the subscription will also be deleted. We recommend unsubscribing when possible instead of deleting. If a premium subscription is deleted they will no longer be billed. Deletes a subscription.
tags:
- Subscriptions
parameters:
- name: publicationId
in: path
description: The prefixed ID of the publication object
required: true
schema:
$ref: '#/components/schemas/type_ids_PublicationId'
- name: subscriptionId
in: path
description: The prefixed ID of the subscription object
required: true
schema:
$ref: '#/components/schemas/type_ids_SubscriptionId'
- name: Authorization
in: header
description: Bearer authentication
required: true
schema:
type: string
responses:
'204':
description: No Content
content:
application/json:
schema:
$ref: '#/components/schemas/type_subscriptions_SubscriptionDeleteResponse'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'401':
description: Unauthorized. The API key or OAuth access token is missing, invalid, or expired.
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'404':
description: Resource Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'429':
description: Rate Limit Exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/type__Error'
components:
schemas:
type__SubscriptionsCreateRequestTier:
type: string
enum:
- free
- premium
description: The tier for this subscription.
title: SubscriptionsCreateRequestTier
type__CustomFieldType:
type: string
enum:
- string
- integer
- boolean
- date
- datetime
- list
- double
description: The type of value being stored in the custom field.
title: CustomFieldType
type_subscriptions_SubscriptionDeleteResponse:
type: object
properties:
message:
type: string
title: SubscriptionDeleteResponse
type__SubscriptionCustomFieldList:
type: array
items:
$ref: '#/components/schemas/type__CustomField'
description: 'Optional list of custom fields for a subscription. Retrievable by including `expand: [custom_field]` in the request body.'
title: SubscriptionCustomFieldList
type__Error:
type: object
properties:
status:
type: integer
statusText:
type: string
errors:
type: array
items:
$ref: '#/components/schemas/type__ErrorDetail'
required:
- status
- statusText
- errors
description: The top level error response.
title: Error
type__SubscriptionTierList:
type: array
items:
$ref: '#/components/schemas/type__SubscriptionTierInfo'
description: 'Optional list of tiers for a subscription. Retrievable by including `expand: [subscription_premium_tiers]` in the request body.'
title: SubscriptionTierList
type__SubscriptionTierInfoStatus:
type: string
enum:
- active
- archived
description: Returns whether or not the tier has any active prices.
title: SubscriptionTierInfoStatus
type_subscriptions_SubscriptionsListRequestOrderBy:
type: string
enum:
- created
default: created
title: SubscriptionsListRequestOrderBy
type_subscriptions_SubscriptionsListResponse:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/type__Subscription'
limit:
type: integer
description: The limit placed on the results. If no limit was specified in the request, this defaults to 10.
page:
type: integer
default: 1
description: '**Offset pagination only**: The page number the results are from. Only present when using deprecated offset-based pagination.'
total_pages:
type: integer
description: '**Offset pagination only**: The total number of pages. Only present when using deprecated offset-based pagination.'
has_more:
type: boolean
description: '**Cursor pagination only**: Indicates whether there are more results available after the current page. Only present when using cursor-based pagination.'
next_cursor:
type: string
description: '**Cursor pagination only**: The cursor token to use for fetching the next page of results. This will be null if has_more is false. Only present when using cursor-based pagination.'
total_results:
type: integer
description: '**Mixed pagination**: The total number of results from all pages. For offset-based pagination, this is always included.'
required:
- data
title: SubscriptionsListResponse
type__SubscriptionTags:
type: array
items:
type: string
description: 'Optional list of tags for a subscription. Retrievable by including `expand: [tags]` in the request body.
Max limit of 100 unique tags per publication.'
title: SubscriptionTags
type_ids_OptionalStripeCustomerId:
type: string
description: The prefixed ID of the Stripe customer.
title: OptionalStripeCustomerId
type__SubscriptionTierInfo:
type: object
properties:
id:
$ref: '#/components/schemas/type_ids_TierId'
name:
type: string
status:
$ref: '#/components/schemas/type__SubscriptionTierInfoStatus'
description: Returns whether or not the tier has any active prices.
required:
- id
- name
- status
title: SubscriptionTierInfo
type__SubscriptionStats:
type: object
properties:
emails_received:
type: integer
description: The total number of emails that have been sent to this subscriber
open_rate:
type: number
format: double
description: The percentage of emails that the subscriber has opened
click_through_rate:
type: number
format: double
description: The percentage of emails that the subscriber has clicked a link in
description: 'Optional list of stats for a subscription. Retrievable by including `expand: [stats]` in the request body.'
title: SubscriptionStats
type__RequestDirection:
type: string
enum:
- asc
- desc
default: asc
description: The direction of the request. Defaults to `asc`.
title: RequestDirection
type_bulkSubscriptionUpdates_SubscriptionsPatchRequestSubscriptionsItemTier:
type: string
enum:
- free
- premium
description: The Tier of the Subscription (not required)
title: SubscriptionsPatchRequestSubscriptionsItemTier
type__SubscriptionExpandedStatus:
type: string
enum:
- validating
- invalid
- pending
- active
- inactive
- needs_attention
- paused
description: The status of the subscription.
`validating` - The email address is being validated.
`invalid` - The email address is invalid.
`pending` - The email address is valid, but the subscription is pending double opt-in.
`active` - The email was valid and the subscription is active.
`inactive` - The subscription was made inactive, possibly due to an unsubscribe.
`needs_attention` - The subscription requires approval or denial.
`paused` - The subscriber has paused their subscription.
title: SubscriptionExpandedStatus
type__CustomField:
type: object
properties:
name:
type: string
description: The name of the existing custom field
kind:
$ref: '#/components/schemas/type__CustomFieldType'
description: The type of value being stored in the custom field.
value:
$ref: '#/components/schemas/type__CustomFieldDataType'
description: The value stored for the subscription
title: CustomField
type__CustomFieldDataType:
oneOf:
- type: string
- type: number
format: double
- type: boolean
- type: array
items:
type: string
title: CustomFieldDataType
type_ids_ComplimentaryAccessId:
type: string
description: The prefixed ID of the complimentary access object.
title: ComplimentaryAccessId
type__ErrorDetail:
type: object
properties:
message:
type: string
code:
type: string
required:
- message
- code
title: ErrorDetail
type__CustomFieldValue:
type: object
properties:
name:
type: string
description: The name of the existing custom field
value:
$ref: '#/components/schemas/type__CustomFieldDataType'
description: The value stored for the subscription
description: The object required for setting custom field values on a subscription
title: CustomFieldValue
type_bulkSubscriptionUpdates_SubscriptionsPatchRequestSubscriptionsItemCustomFieldsItem:
type: object
properties:
name:
type: string
description: The display value of the custom field
value:
$ref: '#/components/schemas/type__CustomFieldDataType'
description: The value of the custom field
delete:
type: boolean
description: A boolean value to specify whether to delete this custom field entry from the subscription
title: SubscriptionsPatchRequestSubscriptionsItemCustomFieldsItem
type__SubscriptionExpandedUtmChannel:
type: string
enum:
- ''
- website
- import
- embed
- api
- referral
- recommendation
- magic_link
- boost
- boost_send
- boost_direct_link
- integration
- product
- group_invite
description: The acquisition channel
title: SubscriptionExpandedUtmChannel
type_subscriptions_SubscriptionResponse:
type: object
properties:
data:
$ref: '#/components/schemas/type__Subscription'
required:
- data
description: The response containing subscription data
title: SubscriptionResponse
type__SubscriptionRequest:
type: object
properties:
email:
type: string
description: The email address of the subscription.
reactivate_existing:
type: boolean
default: false
description: Whether or not to reactivate the subscription if they have already unsubscribed. This option should be used only if the subscriber is knowingly resubscribing.
send_welcome_email:
type: boolean
default: false
utm_source:
type: string
description: The source of the subscription.
utm_medium:
type: string
description: The medium of the subscription
utm_campaign:
type: string
description: The acquisition campaign of the subscription
utm_term:
type: string
description: The acquisition term; typically the keyword or search term
utm_content:
type: string
description: The acquisition content; typically used for A/B testing or ad variations
referring_site:
type: string
description: The website that the subscriber was referred from
referral_code:
type: string
description: This should be a subscribers referral_code. This gives referral credit for the new subscription.
custom_fields:
type: array
items:
$ref: '#/components/schemas/type__CustomFieldValue'
description: The custom fields must already exist for the publication. Any new custom fields here will be discarded.
double_opt_override:
$ref: '#/components/schemas/type__DoubleOptOverride'
description: 'Override the publication''s default double opt-in settings for this subscription. Possible values are:
- "on" — The subscriber will receive a double opt-in confirmation email and will need to confirm their subscription prior to being marked as active.
- "off" — The subscriber will be marked as active immediately and will not receive a double opt-in confirmation email.
- "not_set" — The publication''s default double opt-in settings will be applied to this subscription.'
tier:
$ref: '#/components/schemas/type__SubscriptionsCreateRequestTier'
description: The tier for this subscription.
premium_tiers:
type: array
items:
type: string
description: An array of premium tier names to assign to this subscription. When provided, the subscription will be assigned to premium tiers matching these names. Can be combined with `premium_tier_ids` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
premium_tier_ids:
type: array
items:
type: string
description: An array of premium tier IDs to assign to this subscription. When provided, the subscription will be assigned to these specific premium tiers. Can be combined with `premium_tiers` to include tiers from both (duplicates are removed). Takes precedence over the `tier` parameter.
stripe_customer_id:
$ref: '#/components/schemas/type_ids_OptionalStripeCustomerId'
description: The Stripe customer ID for this subscription.
automation_ids:
type: array
items:
type: string
description: Enroll the subscriber into automations after their subscription has been created. Requires the automations to have an active *Add by API* trigger.
newsletter_list_ids:
type: array
items:
type: string
description: An array of newsletter list prefixed IDs to subscribe the new subscription to. The newsletter lists must belong to the same publication.
skip_newsletter_list_auto_subscribe:
type: boolean
description: When true, the subscriber will not be auto-subscribed to newsletter lists configured with auto-subscribe. Defaults to false.
complimentary_gift_id:
$ref: '#/components/schemas/type_ids_ComplimentaryAccessId'
description: The prefixed ID of a complimentary access object to apply to this subscription. The complimentary access must belong to the same publication.
required:
- email
title: SubscriptionRequest
type_subscriptions_SubscriptionsGetRequestExpandItem:
type: string
enum:
- stats
- custom_fields
- referrals
- tags
- newsletter_lists
title: SubscriptionsGetRequestExpandItem
type_subscriptions_SubscriptionsListRequestExpandItem:
type: string
enum:
- stats
- custom_fields
- referrals
- newsletter_lists
title: SubscriptionsListRequestExpandItem
type__DoubleOptOverride:
type: string
description: Override publication double-opt settings for this subscription.
title: DoubleOptOverride
type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemCustomFieldsItem:
type: object
properties:
name:
type: string
description: The name of the existing custom field
value:
$ref: '#/components/schemas/type__CustomFieldDataType'
description: The value of the custom field
delete:
type: boolean
description: A boolean value to specify whether to delete this custom field entry from the subscription
title: SubscriptionsPutRequestSubscriptionsItemCustomFieldsItem
type_subscriptions_SubscriptionsListRequestTier:
type: string
enum:
- free
- premium
- all
default: all
title: SubscriptionsListRequestTier
type__SubscriptionExpandedSubscriptionTier:
type: string
enum:
- free
- premium
description: The current tier of the subscription.
title: SubscriptionExpandedSubscriptionTier
type_ids_PublicationId:
type: string
description: The prefixed ID of the publication.
title: PublicationId
type_ids_SubscriptionId:
type: string
description: The prefixed ID of the subscription.
title: SubscriptionId
type_bulkSubscriptionUpdates_SubscriptionsPutRequestSubscriptionsItemTier:
type: string
enum:
- free
- premium
description: The Tier of the Subscription (not required)
title: SubscriptionsPutRequestSubscriptionsItemTier
type_subscriptions_SubscriptionsListRequestStatus:
type: string
enum:
- validating
- invalid
- pending
- active
- inactive
- all
default: all
title: SubscriptionsListRequestStatus
type__Subscription:
type: object
properties:
id:
$ref: '#/components/schemas/type_ids_SubscriptionId'
description: The prefixed subscription id
email:
type: string
format: email
status:
$ref: '#/components/schemas/type__SubscriptionExpandedStatus'
description: The status of the subscription.
`validating` - The email address is being validated.
`invalid` - The email address is invalid.
`pending` - The email address is valid, but the subscription is pending double opt-in.
`active` - The email was valid and the subscription is active.
`inactive` - The subscription was made inactive, possibly due to an unsubscribe.
`needs_attention` - The subscription requires approval or denial.
created:
type: integer
description: The date the subscription was created. Measured in seconds since the Unix epoch
subscription_tier:
$ref: '#/components/schemas/type__SubscriptionExpandedSubscriptionTier'
description: The current tier of the subscription.
subscription_premium_tier_names:
type: array
items:
type: string
description: The current premium tiers of the subscription. Empty if the subscriber is not associated with any premium tiers.
utm_source:
type: string
description: The acquisition source; where the subscriber came from
utm_medium:
type: string
description: The acquisition medium; how the subscriber got to your publication
utm_channel:
$ref: '#/components/schemas/type__SubscriptionExpandedUtmChannel'
description: The acquisition channel
utm_campaign:
type: string
description: The acquisition campaign
utm_term:
type: string
description: The acquisition term; typically the keyword or search term
utm_content:
type: string
description: The acquisition content; typically used for A/B testing or ad variations
referring_site:
type: string
description: The website that the subscriber was referred from
referral_code:
type: string
description: The code associated to this subscriber to refer others. When a new subscription is created with this referral code, credit for the referral goes to this subscription.
subscription_premium_tiers:
$ref: '#/components/schemas/type__SubscriptionTierList'
custom_fields:
$ref: '#/components/schemas/type__SubscriptionCustomFieldList'
tags:
$ref: '#/components/schemas/type__SubscriptionTags'
stats:
$ref: '#/components/schemas/type__SubscriptionStats'
newsletter_list_ids:
type: array
items:
type: string
description: The prefixed IDs of the newsletter lists this subscription is actively subscribed to. Requires `expand[]=newsletter_lists`.
required:
- id
- email
- status
- created
- subscription_tier
- subscription_premium_tier_names
- utm_source
- utm_medium
- utm_channel
- utm_campaign
- utm_term
- utm_content
- referring_site
- referral_code
description: The subscription object
title: Subscription
type_ids_TierId:
type: string
description: The prefixed ID of the tier.
title: TierId
securitySchemes:
BearerAuthScheme:
type: http
scheme: bearer