Connectors API
A Subscriby project runs on connectors: the platforms it gates access on, sends messages through and takes payments from.
A Subscriby project runs on connectors: the platforms it gates access on, sends messages through and takes payments from. The directory these endpoints serve is the same one the dashboard and the marketing site render, so a client reads one document and knows which connectors exist, which a creator may install today, what each can do, and exactly which fields connecting one asks for. The manifest is served whole because the creator apps render the connect form from it: no client has to know what a "bot token" is before the connector says so.
The catalogue is the same for every creator and never carries a credential. A project's installations are what the Connectors tab lists: every connector set up on the project, live and standby, with its state and health.
Endpoints
/v1/connectorsList the connector directoryGET/v1/connectors/{key}Get one connectorGET/v1/projects/{project}/connectorsList a project's installationsGET/v1/projects/{project}/connectors/{key}/installationGet a project's installation of a connectorDELETE/v1/projects/{project}/connectors/{key}/installationDisconnect an installationGET/v1/projects/{project}/connectors/{key}/uninstall-previewPreview an uninstallPOST/v1/projects/{project}/connectors/{key}Install a connectorDELETE/v1/projects/{project}/connectors/{key}Uninstall a connectorPOST/v1/projects/{project}/connectors/{key}/installation/verifyVerify an installationPOST/v1/projects/{project}/connectors/{key}/installation/doctorRun the connector doctorPOST/v1/projects/{project}/connectors/{key}/installation/restore-accessRestore access after a reinstallPATCH/v1/projects/{project}/connectors/{key}/installation/settingsChange an installation's settingsEvery connector Subscriby knows, lane by lane, installable connectors first, each with its badges and, for a registered one, its whole manifest and the connect form. ?status= narrows to one lane.
curl https://api.subscriby.net/v1/connectors \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"Cards come lane by lane, installable connectors first; within a lane the most installed connector comes first (installations, the number of projects running it today, uninstalled rows excluded) and the name breaks ties. The public and in-app directories offer the same order plus Newest (added_at) and Name, and filter on official, installable and category; a client sorts and filters on the same fields.
Lanes and badges
status | status_label | Meaning |
|---|---|---|
available | Available Now | A package is present and configuration offers it; installable is true. |
beta | Experimental | Available, and flagged so; a badge on the card, never a gate. installable is true. |
paused | Paused | Switched off during an incident. Nothing new is installed and sends queue until it is back. |
in_development | Under Development | A package exists but configuration does not offer it yet (built, on staging, dark). |
coming_soon | Coming Soon | A roadmap entry with no package behind it: the card, the category and an eta sentence only. |
badges are facts the platform stamps, never a package's own claim: official or community (who publishes it), new while the listing was added within the last sixty days, trending for the connector(s) creators installed most in the last thirty days. A coming_soon card carries none.
Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Query Parameters
Narrow the directory to one lane: available, beta, paused, in_development or coming_soon. Omit for every lane. An unknown lane is 422 VALIDATION_FAILED naming the accepted values.
Responses
200OKapplication/json
Array of ConnectorListingResource
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
422Validation failedVALIDATION_FAILEDapplication/json
When status names no lane; error.context.accepted lists the lanes.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
One card by key, registered or on the roadmap, in the shape the directory lists.
curl https://api.subscriby.net/v1/connectors/example \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"The manifest
Every key from install_mode onward describes what a registered connector can do; a roadmap card has them null or empty.
install_mode:paste_credential(the creator pastes a token the platform issued),oauth(the creator authorises an app),shared_platform(Subscriby runs one shared presence; nothing to connect).scopes:projectfor an installation a creator sets up on a project;platformfor a presence Subscriby itself runs on the connector.resource_kinds: the kinds of place the connector gates, with the creator-facinglabel, theportal_labelmembers see, aniconslug, thegrant_mode(bearer_link: a single-use link;membership: the connector admits the member itself;role: a role is granted;creator_task: the creator hands access over by hand), whether a grant can be held ahead of a pass window (supports_early_admission_hold), the kind of the same connector a place of this kind can be an in-place upgrade of (upgrades_from, ornull), and the shapes of plan a place of the kind can be sold under (plan_kinds:one_time,recurring,pass,pass_series, in that order). A resource'skindon the Resources endpoints is<key>:<kind>, and the same spelling is what a link request takes. Labels are translated into the token holder's language.capabilities: the port families the connector implements:messaging,broadcasts,access_control,early_admission_hold,support_relay,native_payments,portal_login,creator_registration,management_surface,recovery_probes,recovery_standby_installations,recovery_resource_standby,recovery_mirror,recovery_identity_relink.messagingandpacing: the limits every message and every bulk send is checked against.management_commandsandmissing_commands: which core commands the connector's in-chat surface renders and which it does not; the docs' capability matrix and the Connectors tab show the gaps from these.recovery: which Disaster Recovery facets the connector implements.portal_cta: the button the member portal shows to open the connector (label, translated, andicon), ornullwhen the connector has nowhere to open; the portal addresses it through the installation's start link.install_fieldsandsettings_fields: the declarative forms. Each field carriestype(text,secret,select,toggle,instructions,link), a translatedlabelandhelp,required, the validationrules,optionsfor a select, a defaultvalue, the numbered walkthroughsteps(with:appand:buttonplaceholders for the app's name and the submit button's label) andlinksnaming the text a renderer turns into a link. Render them in order and you have the connect form the dashboard shows.
Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The connector key from the route.
Responses
200OKapplication/json
200 with the card.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: when nothing is known by that key; error.context.connector echoes it.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
Every installation the project holds, live and standby, oldest first.
curl https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"role is live for the one that acts and standby for the spare the Disaster Recovery Program keeps; state is pending, connected, degraded (the health probe found something wrong, state_reason and state_detail say what, creator_actionable whether the creator can fix it), revoked (the platform withdrew it) or disconnected (the creator did); operational is the one-word answer to "can it act right now?". external_id, display_name, handle and avatar_url are the platform's own account for the installation. Credentials and settings are never serialised.
sales_paused and outage describe a connector outage: the platform refused this live installation outright (token revoked or regenerated, bot deleted). While sales_paused is true, outage carries the outage's id, the connector's reason code and started_at, and every plan that unlocks a place on this connector is refused at checkout with 422 VALIDATION_FAILED; both go back to false and null when the installation answers again, is replaced or is uninstalled. Connector outages describes what members see and how they are compensated; connector.outage_opened and connector.outage_closed announce both ends.
Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidResponses
200OKapplication/json
Array of ConnectorInstallationResource
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
The project's installation of that connector in the live role, in whatever state, in the shape the installations list describes.
curl https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Responses
200OKapplication/json
200 with the installation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector when the key names no connector at all, so a client can tell a typo from a connector that is not set up here. CONNECTOR_NOT_INSTALLED: when the connector exists but the project does not run it.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X DELETE https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"The connector withdraws the installation on its platform, the credentials are wiped and the installation turns disconnected; the row stays and can be connected again from the dashboard. Grants, resources, plans and identities are untouched, and members keep the access they hold. Answers 204; an installation already disconnected is left alone. Disconnecting is not uninstalling: uninstalling, with its impact preview over the plans it would empty, is the separate act below.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
204No content
No content
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
Uninstall deletes nothing and touches no money by itself, and it is always previewed first:
curl https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/uninstall-preview \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"resourcesare the connector's on the project (manual perks are never among them); they will be deactivated and markeddetached, their external ids kept.live_grantsare the pending, held and granted grants on those resources; each is revoked with reasonconnector_uninstalledand firesmember.resource_removed.emptied_plansare the plans that would keep no active grantable resource;recurring_subscriptionsandone_time_subscriptionsare the live purchases on them,affected_subscription_idsnames them.upcoming_windows,open_support_threadsandmember_identitiesare informational: pass windows are never cancelled for you (cancel them from the pass window endpoints, which handle refunds), support threads lose their reach, and member accounts are never removed.optionsare the two opt-ins with their defaults, exactly the names theDELETEtakes.
Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Responses
200OKapplication/json
200 with the preview.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X POST https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"Installing and connecting are two acts. Installing says "this project runs this connector" and opens a pending installation with no credentials (201 with the installation; 200 with the existing one when it was already installed, nothing changed). Connecting, which hands the connector the creator's credentials, stays on the dashboard, where the connector's declared install_fields are rendered and the platform is asked to describe the installation before anything is bound; a REST client cannot prove a credential is its own to bind. An uninstalled connector installed again comes back as pending with its settings kept.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
200OKapplication/json
201 with the installation; 200 when it was already installed.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
On this endpoint: CONNECTOR_TIER_REQUIRED: for a second distinct connector on the project when the **project owner's** plan lacks the multi_connector capability (Growth). The owner's plan is read, never the token holder's, because Teams lets a member run someone else's project.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector when the key names no connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
422Validation failedCONNECTOR_UNAVAILABLEapplication/json
When the key names no connector creators may install today: only a card whose installable is true qualifies; error.context.connector echoes the key.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X DELETE https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"unpublish_emptied_plans": true, "cancel_recurring_subscriptions": false}'In order: the connector puts every member outside while its credentials still work, the rows are retired in one transaction (grants revoked, resources detached, the installation kept with uninstalled_at), the connector withdraws the installation, and the two opt-ins run. unpublish_emptied_plans (default true) takes the emptied plans off sale, firing plan.deactivated per plan; cancel_recurring_subscriptions (default true) cancels their live recurring subscriptions at the end of the paid period, firing subscription.cancelled per subscription and emailing each member that their subscription will not renew. One-time and lifetime purchases are never cancelled; a refund stays the creator's call. Identities are never removed. connector.uninstalled fires with the counts. Installing the connector again brings the same installation back as pending with its settings kept.
The two opt-ins travel in the JSON body or as query parameters; on by default, they only need sending to switch one off.
Requires ability
The token must hold this ability, or the call is refused with 403.
Delivered to every endpoint subscribed to them once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Query Parameters
Take the plans the uninstall leaves with nothing to grant off sale, firing plan.deactivated per plan. Defaults to true; send false to leave them on sale.
Cancel the live recurring subscriptions on those plans at the end of their paid period, firing subscription.cancelled per subscription and emailing each member. Defaults to true; one-time and lifetime purchases are never cancelled.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
200OKapplication/json
200 with the report.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
422Validation failedVALIDATION_FAILEDapplication/json
The payload broke a rule, and error.fields maps each offending key to its messages. A refusal from the domain, such as a plan that cannot go on sale or a member who cannot be removed, uses the same code with error.message saying why and no fields.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X POST https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation/verify \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"A fresh probe rather than the hourly one: the connector is asked whether the installation still answers and the verdict is recorded, so state becomes connected, degraded (with state_reason, state_detail and creator_actionable) or revoked, and health_checked_at is stamped. Answers 200 with the installation. A pending installation has nothing to verify and is returned as it is. connector.status_changed fires only when the state moved.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
200OKapplication/json
200 with the installation as recorded.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X POST https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation/doctor \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"The Run Doctor button of the dashboard. The installation is verified exactly as the verify endpoint does it, then the connector is asked about every resource the installation gates, and the answer is one report: a finding for the installation, then one per resource, each with a severity (ok, warning, critical), the connector's own state word, a sentence in the creator's language, whether the creator can fix it (creator_actionable) and where (fix_url). A resource the connector has no place for is a warning, never silence. healthy is true when every finding is ok.
The report is kept on the installation (doctor_ran_at and doctor_healthy on the installation object) and connector.doctor_completed fires only when the findings differ from the previous run's.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
200OKapplication/json
200 with the report.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X POST https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation/restore-access \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"The Restore Access item of the dashboard's Connectors tab, offered while an uninstall has left the project detached places on the connector. Once the connector is installed and connected again, every detached place is asked about through the connector; the ones it still controls are made active and healthy again, and every live purchase of a plan that grants them is handed fresh access: only the grants the purchase lacks are issued, which are exactly the ones the uninstall took away, and member.resource_added fires per grant. A place the connector no longer controls stays detached for the doctor to explain. Plans the uninstall took off sale stay off sale until you publish them again.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
MCP tool
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
200OKapplication/json
200 with the report.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project has no installation of the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
422Validation failedCONNECTOR_NOT_CONNECTEDapplication/json
While the installation is pending or disconnected.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X PATCH https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/connectors/example/installation/settings \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"settings": {"greeting": "Welcome aboard"}, "capabilities": {"broadcasts": false}}'settings is an object keyed by the field names the connector declares in its settings_fields (read them from the card). Every declared rule runs; a key the connector never declared is 422 VALIDATION_FAILED naming it; fields left out keep their value.
capabilities is an object keyed by capability to true or false: the project's switches for what the connector may do on this installation. A project keeps a connector for access alone by switching off messaging, broadcasts, support_relay, native_payments or any recovery_* facet; every core surface asks the switch before it invokes the connector, so a switched-off broadcast is refused before it is queued and a switched-off health check is skipped. A capability the connector does not declare, or one that cannot be switched off (access_control, early_admission_hold, management_surface, portal_login, creator_registration), is 422 VALIDATION_FAILED naming it; switches left out keep their value. At least one of settings and capabilities is required.
Answers 200 with the installation, which never carries the settings themselves because a settings field may be a secret, but does carry capabilities: every capability the connector declares, each with enabled and toggleable. connector.settings_updated fires naming the fields and the switches (capabilities.<key>) that changed, only when something did.
Requires ability
The token must hold this ability, or the call is refused with 403.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
Runs the same action from an agent, behind the same ability.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
The project, resolved by the route binder.
uuidThe connector key from the route.
Header Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidRequest body
JSONWhat the request carriesOptionalapplication/json
The settings and capability switches to change on an installation. At least one of the two is required; keys left out keep their value.
Responses
200OKapplication/json
200 with the installation.
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: with reason: unknown_connector, or 404 CONNECTOR_NOT_INSTALLED when the project does not run the connector.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
422Validation failedVALIDATION_FAILEDapplication/json
The payload broke a rule, and error.fields maps each offending key to its messages. A refusal from the domain, such as a plan that cannot go on sale or a member who cannot be removed, uses the same code with error.message saying why and no fields.
On this endpoint: VALIDATION_FAILED: when both settings and capabilities are missing, a settings key the connector never declared is sent, a declared rule fails, or a capability is undeclared or cannot be switched off; error.fields names the key.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
Related
How is this guide?
Broadcasts API
A broadcast sends one message, through the project's connector, to a segment of the project's members.
Coupons API
A coupon is one code many subscribers can redeem for money off at checkout: the multi-redemption counterpart to an access code, which is one code for one person and grants access outright without a payment.