Postscript · Authentication Profile

Postscript Authentication

Authentication

Postscript secures its APIs with apiKey across 2 declared security schemes, as derived from its OpenAPI definitions.

SMSMarketingMessagingE-CommerceShopifyRCSSubscribersWebhookCompliance
Methods: apiKey Schemes: 2 OAuth flows: API key in: header

Security Schemes

sec0 apiKey
· in: header (Authorization)
X-Postscript-Shop-Token apiKey
· in: header (X-Postscript-Shop-Token)

Source

Authentication Profile

Raw ↑
generated: '2026-08-13'
method: searched
source: https://developers.postscript.io/docs/api-authentication
docs: https://developers.postscript.io/docs/api-authentication
spec_source: openapi/_original/postscript-partner-api-openapi.yml
provider: Postscript
api: Postscript Partner API v2
summary:
  types:
  - apiKey
  api_key_in:
  - header
  oauth2_flows: []
  oauth: false
  note: >-
    Static private API keys only. Postscript operates no OAuth or OpenID Connect surface — every
    /.well-known/openid-configuration and /.well-known/oauth-authorization-server probe returned 404
    (postscript.io, developers.postscript.io, app.postscript.io) or 401 (api.postscript.io) on
    2026-08-13, and no authorization or token endpoint appears anywhere in the documentation. There
    is therefore no scope model and no scopes/ artifact for this provider.
schemes:
- name: sec0
  type: apiKey
  in: header
  parameter: Authorization
  format: 'Bearer <private_api_key>'
  description: >-
    The private API key of the calling identity, sent as a bearer token. Declared as an apiKey scheme
    with x-bearer-format bearer in Postscript's own published OpenAPI fragments rather than as an
    http/bearer scheme.
  sources:
  - openapi/postscript-compliance-api-openapi.yml
  - openapi/postscript-events-api-openapi.yml
  - openapi/postscript-identity-api-openapi.yml
  - openapi/postscript-keywords-api-openapi.yml
  - openapi/postscript-messages-api-openapi.yml
  - openapi/postscript-subscribers-api-openapi.yml
  - openapi/postscript-webhooks-api-openapi.yml
- name: X-Postscript-Shop-Token
  type: apiKey
  in: header
  parameter: X-Postscript-Shop-Token
  description: >-
    Delegation header. A partner acting on behalf of a Shopify shop sends its own partner key in
    Authorization and that shop's private key here. Shops calling for themselves omit it. It is
    declared as an operation-level header parameter on all twenty published operations rather than as
    a securityScheme, so a generic OpenAPI-driven client will not treat it as credential material.
  required_for: partners
  sources:
  - openapi/_original/postscript-partner-api-openapi.yml
identities:
- role: shop
  key_type: private API key
  key_prefix: sk_
  obtained_from: https://app.postscript.io/account/api
  note: >-
    Shops generate a Security Key Pair in the Postscript dashboard. The PUBLIC key (pk_ prefix) is
    not valid for API authorization — only the private key is.
- role: partner
  key_type: private partner API key
  key_prefix: sk_partner_
  obtained_from: https://dash.partnerstack.com/application?company=postscript&group=partnerpending
  note: >-
    Partner keys are issued by the Postscript team through the partner application, not self-serve.
    Trigger management needs the partner key alone; anything acting on a shop's data also needs that
    shop's key in X-Postscript-Shop-Token.
legacy:
  scheme: http basic
  supported: true
  format: 'Authorization: Basic base64(<private_api_key>:)'
  note: Username is the private API key, password is empty. Still supported alongside bearer.
verification_endpoint:
  operation: verify-identity
  path: GET /api/v2/me
  description: Returns the identity a token resolves to, letting a caller confirm which shop or partner it is acting as.
key_management:
  rotation: Shops can regenerate their Security Key Pair from the dashboard.
  revocation_note: >-
    Rotating a shop's keys used to invalidate v1 object identifiers, which is why v2 introduced
    prefixed ids decoupled from the key pair.
  expiry: none published
  scopes: none
security_guidance:
  from_provider: >-
    Postscript explicitly warns against calling the API from a browser/front-end because the private
    key cannot be hidden there, and recommends proxying through your own backend or an intermediary
    such as Zapier.
  transport: HTTPS only; api.postscript.io answered TLS 1.3 on probe, with no HSTS header set.
access_gating:
  note: >-
    Since April 2022, custom API access for an individual shop requires an enterprise plan (shops
    with access before that date are grandfathered). Shops on any plan may still generate keys for
    use with approved Integration Partners, and Integration Partners keep full API access regardless
    of the shop's plan.
  source: https://developers.postscript.io/docs/who-has-access-to-the-partner-api