Skip to main content

Authentication

All Partner API requests require a Bearer token in the Authorization header. Partner API keys are provisioned by the OpenCX team — they are separate from org-level API keys.
Base URL: https://api.open.cx

IP allow list

Partner API endpoints support IP-level access control. When an allow list is configured on your partner account, requests from IPs not in the list are rejected with 403 Forbidden — even with a valid API key. All traffic passes through Cloudflare, which forwards the real client IP in the X-Forwarded-For header. The backend extracts and validates this IP on every request.
IP allow lists are configured by the OpenCX team during onboarding. Contact us to add, update, or remove IPs. When no allow list is set, requests are accepted from any IP (token-only authentication).

Security layers


Create Org

Create a new organization for one of your customers.

Request body

Integrations

Pass credentials in the integrations object to auto-connect supported third-party integrations during org creation. Credentials are validated against the live third-party API — invalid credentials cause the request to fail with a 400. Each integration has its own shape under its own key. Some integrations accept either a single object (for one connection) or an array (for multiple connections — different locations, brands, or currencies). When passing an array, each entry should include a name that the AI uses in conversations to disambiguate between connections.

FareHarbor

Key: fareharbor Single connection (object form):
Multiple connections (array form):
Supported integration keys and their per-integration field shapes are documented above. This section will expand as more integrations become available via the provisioning API. For integrations not yet supported here, use the org-level dashboard or API after creation.

Response

201 Created

Error responses

Examples


List Orgs

List all organizations created by your partner account.

Query parameters

Response

200 OK

Examples


Get Org by external_id

Look up a single org by the external_id you supplied at creation. Use this when you need to reverse-resolve from your internal identifier to the OpenCX org — for example, before creating an API key or generating a login link — without paginating through /orgs.

Path parameters

Response

200 OK

Error responses

Lookups are scoped to your partner account. If a different partner has an org with the same external_id, you will not see it — you only ever resolve orgs you created.

Examples


Create Org API Key

Create an API key for a specific org. The returned key authenticates requests to the OpenCX Public API (crawling, training, contacts, etc).

Request body

Response

201 Created
The full API key is only returned once — store it securely. If lost, create a new one.

Examples

Error responses


Revoke Org API Key

Permanently delete an org API key. Once revoked, the key can no longer authenticate requests to the OpenCX Public API.

Path parameters

Revocation is org-scoped: any key under an org you own can be revoked, regardless of who created it (partner API or the org’s own dashboard).

Response

200 OK
Revocation propagates to all API servers within ~60 seconds. Each server caches API keys in-process with a 60-second TTL, so a revoked key may continue to authenticate on some servers until that TTL lapses.

Examples

Error responses


Generate a short-lived, single-use URL that logs a user directly into the dashboard with the correct org context. No email, no forms, no org picker — the user lands in the dashboard immediately. Use this instead of invitations when you want frictionless access — for example, embedding a “Manage support” button in your own platform that takes the user straight into their dashboard.

Request body

Response

201 Created
Login links are single-use — once a user visits the URL, it is consumed and cannot be reused. Generate a new link for each login session.

Security properties

Error responses

Examples


Idempotency

Use external_id to prevent duplicate orgs. If you call POST /partner/v1/orgs twice with the same external_id, the second call returns 409 Conflict. This makes it safe to retry org creation without risk of duplicates. Use GET /partner/v1/orgs/by-external-id/:externalId to resolve the existing org directly — no pagination required.
The external_id uniqueness constraint is scoped to your partner account. Different partners can use the same external_id values.