Skip to main content

Partner API

The Partner API gives partner users a company-scoped way to work with the Journeybee data shared with them. The partner surface is separate from the admin API and follows the same room, partnership, and sharing settings as the partner portal.

Base URL

Authentication

Partner connections use either OAuth or a partner API key. Send the credential in the Authorization header:
OAuth (authorization-code + PKCE) is how interactive MCP clients — Claude, ChatGPT, Cursor, and similar — connect to your partnership data. Discovery and client registration happen automatically via the MCP server, so there’s nothing to configure by hand; see Partner MCP for the connect flow. For custom REST integrations, use a partner API key instead. Partner API keys are issued in the partner portal and are shown only once. Store them securely and send them as bearer credentials.

Getting started

Call GET /v1/partner/me with your credential to find out who you are and which partnerships you can act on:
The response includes your user identity, your read/write permissions, and the partnerships available to you — each with a uuid, name, partner_type, and status. That uuid is the {partnershipId} you send on every other request (see Company and partnership scope below).

Examples

List deals for a partnership:
Create a lead:

API keys

Partner API keys are created and revoked on the portal’s API & MCP page. When you create one you choose read and/or write access — the same scopes an OAuth connection carries — and the full key is shown exactly once, so store it securely. A key is scoped to your partner user and the company whose portal you created it on (not to a single partnership), and starts with the jb_partner_ prefix. Each partner user may have up to 10 active keys per company — revoke ones you no longer need before creating more.

Scopes and permissions

Connections can have read and write access. Most partner operations are read-only; write endpoints require the connection to have write access. Grant only the permissions an integration needs.

Company and partnership scope

Credentials are scoped to a partner user and company. A partner can have connections for multiple companies, and each company must be authorized separately. The partnership is selected for each API request:
The API validates that the authenticated partner is an active member of the requested partnership at the credential’s company. A credential never grants access to partnerships at another company.

IDs are UUIDs

Every id in a partner API request or response is a UUID — partnership, lead, deal, tag, user, and contact ids are all uuid strings. IDs you receive back from a request round-trip directly into filters and update calls; the API never exposes numeric ids as resource identifiers. A few numeric fields do appear as display-only metadata (logo/asset ids, custom-field option ids inside options) — these are never accepted as identifiers in a request.

Responses & errors

List endpoints return a paginated envelope:
Errors follow a single envelope:
code is one of unauthorized, forbidden, module_disabled, not_found, validation_error, conflict, rate_limit_exceeded, or internal_error. module_disabled means the company hasn’t enabled the Partner API for its portal. Requests are rate-limited to 500 requests per minute per partner user — each partner user has their own budget, separate from other users at the same company. Exceeding it returns a 429 Too Many Requests response with a Retry-After header.

Field requirements

Custom fields on leads and deals can be marked required, or controlled by a custom field rule (auto-populating, hiding, or locking another field). Before creating or updating a lead or deal, call the matching requirements endpoint to learn the constraints your submission must satisfy:
The response lists the custom fields available to this partnership — with each field’s required flag — and the active rules that apply to them:
required applies only while a field is visible — a required field hidden by one of the listed rules must not be supplied (submitting it returns hidden_by_rule); it becomes required once its rule condition makes it visible. In the example above, “Renewal Terms” is required, but only while the “Show renewal terms for Enterprise” rule keeps it visible.
Deal field requirements follow the deal’s owning partnership; when creating a deal from another partnership’s lead (a distributor roll-up), the lead’s own partnership type governs instead. Only fields and rules you’re actually allowed to read/write on this surface are included — a rule whose source or target field isn’t visible to a partner is left out entirely, since it can never be satisfied. Both endpoints require the same room access (leads/deals) as the corresponding list/create endpoints. If a create or update call violates one of these constraints, it returns 400 validation_error with a details array — one entry per rejected field, each with the field’s id (uuid), a machine-readable reason (e.g. missing_required, hidden_by_rule, locked_by_rule), and a human-readable message. See Custom field validation for the full reason code reference.

Visibility

Partner API responses follow the same visibility rules as the partner portal. Room settings, partnership settings, sharing settings, campaign sharing, and ownership rules can affect which records are visible or writable. The leads and deals endpoints specifically require the company to expose the matching room (leads or deals) to that partnership in the partner portal — the same category, tier, stage, contact-tag, and visibility rules that gate the room there. If a partnership has no accessible room of that type, its leads or deals endpoints return 403 forbidden with "The Leads area is not available in your partner portal. Ask the vendor to enable it." or "The Deals area is not available in your partner portal. Ask the vendor to enable it.". Ask the vendor to enable the relevant area in the partner portal. Deal creation can additionally be disabled independently of read/write access, via the deals room’s settings — in that case POST /v1/partner/{partnershipId}/deals returns 403 forbidden with "Deal creation is disabled in your partner portal. Ask the vendor to enable deal creation.", while reading and updating existing deals is unaffected.

Reference

Every partner endpoint — full request and response schemas — is documented in the Partner API Reference section of these docs, generated from the same spec this guide describes.