Skip to content

Developer API

Read and change your store's subscriptions from your own systems with the Subrise API. Base URL, API keys, IDs and errors.

The Subrise API lets your own code read and change the subscriptions on your store. Use it to sync subscribers into a CRM, build a custom account page, or run bulk changes from a script.

It is a JSON API over HTTPS. Every request is authenticated with an API key that belongs to one store.

Base URL

Send every request to:

text
https://backend-production.subrise.app/api

The paths on these pages start after /api. For example, GET /fields means GET https://backend-production.subrise.app/api/fields.

Get an API key

There is no API key screen in the Subrise admin. Subrise support issues keys on request.

  1. Email info@subrise.app from the email address on your Subrise account.
  2. Include your store's .myshopify.com domain.

Support sends you a key. Each key works for one store only.

Authenticate

Send the key in the x-api-key header on every request.

bash
curl https://backend-production.subrise.app/api/fields \
  -H "x-api-key: $SUBRISE_API_KEY"

A missing or unknown key gets a 401 with the plain-text body Unauthorized.

Warning

An API key acts as your store's admin. Anyone who holds it can read your subscribers' names, emails and addresses and change their subscriptions. Keep it on your server, never in theme code, a browser or a public repository. If a key leaks, email info@subrise.app and ask for it to be deleted.

Permissions

Keys are issued with Read and Write access for now, so every key can both read and change subscriptions. Each page in this section says which kind of access its endpoints use.

PermissionCovers
ReadGET requests and searches.
WriteRequests that change a subscription, such as pause, skip or cancel.

Pages in this section

  • Subscriptions: search subscriptions, get one, and list billing attempts.
  • Change a subscription: pause, resume, skip, reschedule, cancel, and edit products and addresses.
  • Products: the products Subrise has synced from your store.
  • Subscription plans: your plans and the products on them.
  • Customers: a customer's payment methods, and the email that asks them to update one.
  • Activity and fields: each subscription's activity log, and the allowed values for plan and status fields.

IDs

Subrise uses two kinds of ID.

  • Subscription and customer IDs are numeric strings in Subrise's own data, for example "12704383255". Use the numeric form in paths, such as /subscription-contracts/12704383255.
  • Shopify objects (products, variants, subscription lines, plans) use Shopify's global IDs, for example "gid://shopify/ProductVariant/44406306701591".

Each endpoint says which form it takes. Where it accepts both, it says so.

Dates

Dates are ISO 8601 strings in UTC, for example "2026-11-05T14:00:00Z".

Responses

Responses are JSON. Their shape depends on the endpoint, so each page shows a real example.

  • Data from Subrise's own records comes back as plain objects, often wrapped as { "success": true, "data": ... }.
  • Data read live from Shopify comes back in Shopify's GraphQL shape, { "data": { ... } }, with Shopify's field names.

Examples on these pages are abridged. Expect more fields than they show, and ignore fields you don't use.

Errors

StatusMeaning
400The request was invalid, or Shopify rejected the change. The body says why.
401The API key is missing or unknown. The body is the text Unauthorized.
403The request is not allowed for this store.
404The subscription, plan or other object was not found on this store.
409The subscription changed since you last read it. See Safe writes.
500Something failed on our side or at Shopify. Retry later, or contact support.
503Subrise couldn't reach its database. The body has "error": "database_unavailable" and a message. Retry after a short delay.

Most error bodies look like this:

json
{
  "success": false,
  "error": "Subscription not found"
}

Some endpoints use message instead of error, and some pass Shopify's userErrors through unchanged.

Safe writes

Two people can change the same subscription at once, for example your script and a customer in their portal. To make sure you only change what you last saw, send the state you expect with the write.

HeaderValue
X-Subrise-Expected-StatusACTIVE, PAUSED, CANCELLED, EXPIRED or FAILED
X-Subrise-Expected-Next-Billing-DateAn ISO date-time or a YYYY-MM-DD date

If the subscription no longer matches, Subrise changes nothing and answers 409:

json
{
  "success": false,
  "error": "This subscription changed after the draft was made: it is now PAUSED, not ACTIVE. Nothing was changed. Reload the subscription and try again.",
  "code": "CONTRACT_CHANGED",
  "current": { "status": "PAUSED", "nextBillingDate": "2026-11-05T14:00:00Z" }
}

The endpoints that accept these headers are marked on Change a subscription. The headers are optional.

Rate limits

Subrise does not set a per-key rate limit. Requests that read from or write to Shopify count against your store's Shopify Admin API limit, so spread bulk jobs out and retry a 500 with a delay.

Get notified of changes

The API is for requests you make. To have Subrise tell you when something happens, such as a new subscription or a failed payment, use webhooks or Shopify Flow.