Postscript Subscribers API
Read, filter, page and update a shop's SMS subscribers. Filters use suffixed operators (__eq, __gt, __contains, __in) across created_at, updated_at, email, phone_number, shopify_customer_id and ps_id.
Read, filter, page and update a shop's SMS subscribers. Filters use suffixed operators (__eq, __gt, __contains, __in) across created_at, updated_at, email, phone_number, shopify_customer_id and ps_id.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/postscript-subscribers-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Postscript Subscribers API
description: The Postscript Partner API (v2) lets partners and Shopify shops manage SMS subscribers, send custom events into Flows, send transactional and conversational messages, read opt-in keywords, configure webhook subscriptions, and run TCPA compliance operations (unsubscribe, redact). Harvested verbatim from the per-operation OpenAPI definitions published on https://developers.postscript.io/reference.
version: '2.0'
contact:
name: Postscript Developer Support
email: developersupport@postscript.io
url: https://developers.postscript.io
termsOfService: https://postscript.io/api-terms-of-service
servers:
- url: https://api.postscript.io
security:
- sec0: []
tags:
- name: Subscribers
description: Read and update SMS subscribers for a shop.
paths:
/api/v2/subscribers:
get:
summary: Get Subscribers
description: Get a list of subscribers for a shop.
operationId: get-subscribers
parameters:
- name: created_at__eq
in: query
description: Created at is equal to
schema:
type: string
format: date-time
- name: created_at__gt
in: query
description: Created at is greater than
schema:
type: string
format: date-time
- name: created_at__gte
in: query
description: Created at is greater than or equal to
schema:
type: string
format: date-time
- name: created_at__lt
in: query
description: Created at is less than
schema:
type: string
format: date-time
- name: created_at__lte
in: query
description: Created at is less than or equal to
schema:
type: string
format: date-time
- name: email__contains
in: query
description: Email contains
schema:
type: string
- name: email__eq
in: query
description: Email is equal to
schema:
type: string
- name: email__in
in: query
description: Email is in
schema:
type: array
items:
type: string
- name: page
in: query
description: Page number of results to start from
schema:
type: integer
format: int32
- name: phone_number__contains
in: query
description: Phone number contains
schema:
type: string
- name: phone_number__eq
in: query
description: Phone number is equal to
schema:
type: string
- name: phone_number__in
in: query
description: Phone number is in
schema:
type: array
items:
type: string
- name: shopify_customer_id__contains
in: query
description: Shopify customer id contains
schema:
type: string
- name: shopify_customer_id__eq
in: query
description: Shopify customer id is equal to
schema:
type: string
- name: shopify_customer_id__in
in: query
description: Shopify customer id is in
schema:
type: array
items:
type: string
- name: sort
in: query
description: 'Sorting Order. In `{field}__asc` or `{field}__desc` format. Valid fields: `created_at`, `updated_at`, `phone_number`, `shopify_customer_id`'
schema:
type: string
- name: updated_at__eq
in: query
description: Updated at is equal to
schema:
type: string
format: date-time
- name: updated_at__gt
in: query
description: Updated at is greater than
schema:
type: string
format: date
- name: updated_at__gte
in: query
description: Updated at is greater than or equal to
schema:
type: string
format: date-time
- name: updated_at__lt
in: query
description: Updated at is less than
schema:
type: string
format: date-time
- name: updated_at__lte
in: query
description: Updated at is less than or equal to
schema:
type: string
format: date-time
- name: X-Postscript-Shop-Token
in: header
description: Shop API Token. **Required for partners**. This header should be used *only* by partners. Shops should include their API token in the *Authorization* header.
schema:
type: string
- name: ps_id__eq
in: query
description: Filters subscribers by their ps_id tracking ID. This ID is stored in the ps_id cookie for subscribers on the front end and is used to uniquely identify a subscriber across sessions.
schema:
type: integer
format: int32
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"page_info\": {\n \"page\": 1,\n \"total_pages\": 1\n },\n \"subscribers\": [\n {\n \"created_at\": \"2019-08-24T14:15:22Z\",\n \"data\": {},\n \"email\": \"string\",\n \"id\": \"string\",\n \"ps_id\": 42,\n \"phone_number\": \"string\",\n \"properties\": {\n \"has_purchased\": True,\n \"days_since_purchase\": 5,\n \"categories\": [\"Beauty\", \"Home Goods\"],\n \"birthday\": \"1991-01-01\"\n },\n \"shopify_customer_id\": 0,\n \"subscriptions\": {\n \t\"promotional\": {\n \t\"can_send\": true\n \t},\n \t\"transactional\": {\n \t\"can_send\": true\n \t}\n \t},\n \"tags\": [\"VIP\"],\n \"updated_at\": \"2019-08-24T14:15:22Z\"\n }\n ]\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
tags:
- Subscribers
/api/v2/subscribers/{id}:
get:
summary: Get Subscriber
description: Get an individual subscriber for a shop.
operationId: get-subscriber
parameters:
- name: X-Postscript-Shop-Token
in: header
description: Shop API Token. **Required for partners**. This header should be used *only* by partners. Shops should include their API token in the *Authorization* header.
schema:
type: string
- name: id
in: path
description: The ID for the subscriber you'd like to get.
schema:
type: string
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"created_at\": \"2019-08-24T14:15:22Z\",\n \"data\": {},\n \"email\": \"string\",\n \"id\": \"string\",\n \"ps_id\": 42,\n \"phone_number\": \"string\",\n \t\"properties\": {\n \"has_purchased\": True,\n \"days_since_purchase\": 5,\n \"categories\": [\"Beauty\", \"Home Goods\"],\n \"birthday\": \"1991-01-01\"\n },\n \"shopify_customer_id\": 0,\n \"subscriptions\": {\n \"promotional\": {\n \"can_send\": true\n },\n \"transactional\": {\n \"can_send\": true\n }\n },\n \"tags\": [\"VIP\"],\n \"updated_at\": \"2019-08-24T14:15:22Z\"\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Subscribers
patch:
summary: Update Subscriber
description: Updates data for a given subscriber.
operationId: update-subscriber-by-id
parameters:
- name: id
in: path
description: ID of the subscriber you'd like to update.
schema:
type: string
required: true
- name: X-Postscript-Shop-Token
in: header
description: Shop API Token. **Required for partners**. This header should be used *only* by partners. Shops should include their API token in the *Authorization* header.
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
email:
type: string
description: Email address for the subscriber. **Note:** when updating an email address, we will only update it if none previously existed on the subscriber or we haven't linked a Shopify customer to them yet. We also can only link a Shopify customer if they already exist, not retrospectively.
tags:
type: array
description: Tags you would like to add to the subscriber. **Note:** tags are additive, so whatever you include here will be added to the existing tags on a subscriber.
items:
type: string
properties:
type: string
description: 'Custom properties as key/value pairs. Values can be: strings, integers, string arrays, or ISO 8601 date(time). Subscribers can have up to 50 custom properties. If properties is unset or `null`, it will be ignored.'
default: '{"key": "value"}'
format: json
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"created_at\": \"2019-08-24T14:15:22Z\",\n \"data\": {},\n \"email\": \"string\",\n \"id\": \"string\",\n \"phone_number\": \"string\",\n \t\"properties\": {\n \"has_purchased\": True,\n \"days_since_purchase\": 5,\n \"categories\": [\"Beauty\", \"Home Goods\"],\n \"birthday\": \"1991-01-01\"\n },\n \"shopify_customer_id\": 0,\n \"subscriptions\": {\n \"promotional\": {\n \"can_send\": true\n },\n \"transactional\": {\n \"can_send\": true\n }\n },\n \"tags\": [\"VIP\"],\n \"updated_at\": \"2019-08-24T14:15:22Z\"\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
tags:
- Subscribers
components:
securitySchemes:
sec0:
type: apiKey
in: header
name: Authorization
x-bearer-format: bearer