Skip to content
bynhDocs

Add a subprocessor

POST/workspaces/{workspace}/subprocessors

Adds a subprocessor as a draft or straight to your trust center. Going live with notify: true emails everyone who follows your subprocessor list.

Authentication

Send an API token as a bearer token. This endpoint needs a read and write token, made by an editor, admin or owner. Create one in My account → API tokens; see scopes and roles.

Authorization: Bearer 42|bynh_pat_•••••••Header

Path parameters

  • workspacestringRequired

    Your workspace slug, e.g. dokan.

Request body

application/json
  • namestringRequiredmax 120

    “Pick a company or type its name.”

  • categoryenumRequired

    Category. One of hosting, network, payments, messaging, email, support, analytics, other.

  • purposestringRequiredmax 200

    “Say what they’ll do with the data, like “Hold support tickets”.”

  • stateenumRequired

    live publishes it. A live subprocessor can’t go back to draft (state: draft is ignored once live). One of draft, live.

  • catalog_keyenum

    Link to a catalogue entry for logo and certifications. One of aws, google-cloud, azure, cloudflare, stripe, paypal, moyasar, tap, twilio, unifonic, postmark, zendesk, intercom, slack.

  • websitestring, nullablemax 255

    https URL only.

  • data_categoriesstring, nullablemax 8

    Distinct values from names, emails, phones, orders, payments, addresses, messages, usage.

  • countrystring, nullable

    2-letter country code. “Pick the country where the data is stored.”

  • starts_onstring, nullableYYYY-MM-DD

    Start date.

  • ends_onstring, nullableYYYY-MM-DD

    On or after starts_on.

  • notifyboolean

    When it goes live for the first time, email everyone following your subprocessor list.

Response

201 Created

The subprocessor.

  • idintegerSubprocessor id.
  • catalog_keystring|nullCatalogue entry, if picked from it.
  • namestringCompany.
  • websitestring|nullhttps URL.
  • categoryenumCategory. One of hosting, network, payments, messaging, email, support, analytics, other.
  • purposestringWhat they do with the data.
  • data_categoriesenumData they handle. One of names, emails, phones, orders, payments, addresses, messages, usage.
  • countrystring|nullISO 3166-1 alpha-2.
  • country_namestring|nullCountry name.
  • logostring|nullCatalogue logo path.
  • certificationsarray<string>From the catalogue.
  • starts_onstring|nullYYYY-MM-DD.
  • ends_onstring|nullYYYY-MM-DD.
  • stateenumlive: on your trust center. One of draft, live.
  • upcomingbooleanLive with a future start date.
  • announced_atstring|nullWhen it first went live.
  • notified_countintegerFollowers notified when it went live.
  • dpa{id, filename, download_path}|nullSigned DPA, kept behind NDA.

Rate limits

This endpoint counts toward your general limit of 120 requests a minute and its own limit of 90 a minute. Its own limit answers 429 without Retry-After; wait and try again.

Errors

401The token is missing, wrong, revoked or expired.
403The token is read-only (message: “This token is read-only. Create a read and write token to make changes.”). Or: The token’s owner is a viewer (“Viewers can read everything but can’t change it.”), or the workspace’s editing is paused (a billing message, e.g. “Your trial has ended, so editing is paused. …”).
404The token belongs to another workspace, or its owner is no longer a member.
422“Pick a company or type its name.”, “Say what they’ll do with the data…”, “Enter the website with https://, like https://zendesk.com.”, “The end date has to be after the start date.”, “Keep this under :max characters.”, “Pick the country where the data is stored.”, or an invalid category/state.
429More than 90 trust center edits a minute (“You’re saving very quickly. Wait a moment, then try again.”).

Every error is JSON with a message. See Errors.

Next →Update a subprocessor
curl -X POST "https://api.bynh.io/api/v1/workspaces/dokan/subprocessors" \
  -H "Authorization: Bearer $BYNH_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "catalog_key": "zendesk",
    "name": "Zendesk",
    "website": "https://www.zendesk.com",
    "category": "support",
    "purpose": "Hold support tickets",
    "data_categories": [
      "names",
      "emails",
      "messages"
    ],
    "country": "IE",
    "starts_on": "2026-11-01",
    "state": "live",
    "notify": true
  }'

Response201 Created

application/json
{
  "data": {
    "id": 9,
    "catalog_key": "zendesk",
    "name": "Zendesk",
    "website": "https://www.zendesk.com",
    "category": "support",
    "purpose": "Hold support tickets",
    "data_categories": [
      "names",
      "emails",
      "messages"
    ],
    "country": "IE",
    "country_name": "Ireland",
    "logo": "/logos/zendesk.svg",
    "certifications": [
      "SOC 2",
      "ISO 27001"
    ],
    "starts_on": "2026-11-01",
    "ends_on": null,
    "state": "live",
    "upcoming": true,
    "announced_at": "2026-10-01T08:30:00+00:00",
    "notified_count": 37,
    "dpa": null
  }
}

Examples use Dokan, a sample workspace. Responses are shortened where lists are long.