# Create a CRM field Source: https://docs.breakcold.com/api-reference/crm/create-a-crm-field /api/openapi.json post /crm/objects/{objectTypeId}/fields Create a field definition for a CRM object type.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a CRM field option Source: https://docs.breakcold.com/api-reference/crm/create-a-crm-field-option /api/openapi.json post /crm/fields/{fieldDefinitionId}/options Create an option for a select or multiselect CRM field.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a CRM object Source: https://docs.breakcold.com/api-reference/crm/create-a-crm-object /api/openapi.json post /crm/objects Create a custom CRM object type with default fields and view.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a CRM record view Source: https://docs.breakcold.com/api-reference/crm/create-a-crm-record-view /api/openapi.json post /crm/objects/{objectTypeId}/views Create a saved record view for one CRM object type.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete a CRM field Source: https://docs.breakcold.com/api-reference/crm/delete-a-crm-field /api/openapi.json delete /crm/fields/{fieldDefinitionId} Permanently delete a custom CRM field definition, its field options and stored values or relations, and remove it from saved view configurations.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete a CRM field option Source: https://docs.breakcold.com/api-reference/crm/delete-a-crm-field-option /api/openapi.json delete /crm/fields/{fieldDefinitionId}/options/{fieldOptionId} Delete an option from a select or multiselect CRM field.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete a CRM object Source: https://docs.breakcold.com/api-reference/crm/delete-a-crm-object /api/openapi.json delete /crm/objects/{objectTypeId} Permanently delete a custom CRM object type together with its custom field definitions, field options, and saved views.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete a CRM record view Source: https://docs.breakcold.com/api-reference/crm/delete-a-crm-record-view /api/openapi.json delete /crm/views/{viewId} Delete a saved record view.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Get a CRM field Source: https://docs.breakcold.com/api-reference/crm/get-a-crm-field /api/openapi.json get /crm/fields/{fieldDefinitionId} Fetch one CRM field definition.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Get a CRM object Source: https://docs.breakcold.com/api-reference/crm/get-a-crm-object /api/openapi.json get /crm/objects/{objectTypeId} Fetch one CRM object type.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Get a CRM record view Source: https://docs.breakcold.com/api-reference/crm/get-a-crm-record-view /api/openapi.json get /crm/views/{viewId} Fetch one saved record view.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List CRM field options Source: https://docs.breakcold.com/api-reference/crm/list-crm-field-options /api/openapi.json get /crm/fields/{fieldDefinitionId}/options List options for a select or multiselect CRM field.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List CRM fields Source: https://docs.breakcold.com/api-reference/crm/list-crm-fields /api/openapi.json get /crm/objects/{objectTypeId}/fields List field definitions for one CRM object type.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List CRM objects Source: https://docs.breakcold.com/api-reference/crm/list-crm-objects /api/openapi.json get /crm/objects List CRM object types in a workspace.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List CRM record views Source: https://docs.breakcold.com/api-reference/crm/list-crm-record-views /api/openapi.json get /crm/objects/{objectTypeId}/views List saved record views for one CRM object type.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Reorder CRM field options Source: https://docs.breakcold.com/api-reference/crm/reorder-crm-field-options /api/openapi.json post /crm/fields/{fieldDefinitionId}/options/reorder Replace the option order for a select or multiselect CRM field.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Reorder CRM fields Source: https://docs.breakcold.com/api-reference/crm/reorder-crm-fields /api/openapi.json post /crm/objects/{objectTypeId}/fields/reorder Replace the field order for one CRM object type.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Reorder CRM objects Source: https://docs.breakcold.com/api-reference/crm/reorder-crm-objects /api/openapi.json post /crm/objects/reorder Replace the display order for CRM object types.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Reorder CRM record views Source: https://docs.breakcold.com/api-reference/crm/reorder-crm-record-views /api/openapi.json post /crm/objects/{objectTypeId}/views/reorder Replace the saved view order for one CRM object type.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update a CRM field Source: https://docs.breakcold.com/api-reference/crm/update-a-crm-field /api/openapi.json patch /crm/fields/{fieldDefinitionId} Update a CRM field definition.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update a CRM field option Source: https://docs.breakcold.com/api-reference/crm/update-a-crm-field-option /api/openapi.json patch /crm/fields/{fieldDefinitionId}/options/{fieldOptionId} Update an option for a select or multiselect CRM field.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update a CRM object Source: https://docs.breakcold.com/api-reference/crm/update-a-crm-object /api/openapi.json patch /crm/objects/{objectTypeId} Update custom CRM object metadata and active state.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update a CRM record view Source: https://docs.breakcold.com/api-reference/crm/update-a-crm-record-view /api/openapi.json patch /crm/views/{viewId} Update record view metadata and replace the full saved config.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Clear a conversation draft Source: https://docs.breakcold.com/api-reference/inbox/clear-a-conversation-draft /api/openapi.json delete /conversations/{conversationId}/draft Clear only the authenticated effective user's private draft for an inbox conversation.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Compose and send a new inbox message Source: https://docs.breakcold.com/api-reference/inbox/compose-and-send-a-new-inbox-message /api/openapi.json post /inbox/conversations Send a new email, LinkedIn, Telegram, or WhatsApp message immediately and create or upsert the resulting inbox conversation.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create an inbox attachment upload URL Source: https://docs.breakcold.com/api-reference/inbox/create-an-inbox-attachment-upload-url /api/openapi.json post /inbox/attachments/upload-url Create a Convex file-storage upload URL for inbox send attachments. Upload to this URL, then pass the returned storageId in a send request.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create an inbox view Source: https://docs.breakcold.com/api-reference/inbox/create-an-inbox-view /api/openapi.json post /inbox/views Create an inbox saved view for the effective actor user.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete an inbox view Source: https://docs.breakcold.com/api-reference/inbox/delete-an-inbox-view /api/openapi.json delete /inbox/views/{viewId} Delete a custom inbox view visible to the effective actor user.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Get a conversation draft Source: https://docs.breakcold.com/api-reference/inbox/get-a-conversation-draft /api/openapi.json get /conversations/{conversationId}/draft Get the authenticated effective user's private draft for an inbox conversation, or null when no draft exists.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Get a message Source: https://docs.breakcold.com/api-reference/inbox/get-a-message /api/openapi.json get /messages/{messageId} Fetch one inbox message.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Get an inbox view Source: https://docs.breakcold.com/api-reference/inbox/get-an-inbox-view /api/openapi.json get /inbox/views/{viewId} Fetch one inbox saved view visible to the effective actor user.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Get inbox view sidebar Source: https://docs.breakcold.com/api-reference/inbox/get-inbox-view-sidebar /api/openapi.json get /inbox/views/sidebar Fetch inbox view sidebar layout for the effective actor user.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List conversation messages Source: https://docs.breakcold.com/api-reference/inbox/list-conversation-messages /api/openapi.json get /conversations/{conversationId}/messages List messages for a conversation.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List inbox views Source: https://docs.breakcold.com/api-reference/inbox/list-inbox-views /api/openapi.json get /inbox/views List inbox views visible to the effective actor user.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List record conversations Source: https://docs.breakcold.com/api-reference/inbox/list-record-conversations /api/openapi.json get /records/{recordId}/conversations List inbox conversations linked to a record.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List send accounts Source: https://docs.breakcold.com/api-reference/inbox/list-send-accounts /api/openapi.json get /inbox/send-accounts List inbox accounts the authenticated public API actor can send from in a workspace, optionally filtered by channel.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List workspace conversations Source: https://docs.breakcold.com/api-reference/inbox/list-workspace-conversations /api/openapi.json get /inbox/conversations List or search inbox conversations in a workspace. Optionally apply a saved inbox view and filter by record-link state.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Reorder inbox view sidebar Source: https://docs.breakcold.com/api-reference/inbox/reorder-inbox-view-sidebar /api/openapi.json post /inbox/views/sidebar/reorder Replace inbox view sidebar order for the effective actor user.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Send a message in an existing conversation Source: https://docs.breakcold.com/api-reference/inbox/send-a-message-in-an-existing-conversation /api/openapi.json post /conversations/{conversationId}/messages Send an immediate social message, email reply, or email forward using the existing inbox send behavior. Email forwards return the newly created forwarded conversation.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Set a conversation draft Source: https://docs.breakcold.com/api-reference/inbox/set-a-conversation-draft /api/openapi.json patch /conversations/{conversationId}/draft Create or update the authenticated effective user's private draft. Blank content clears the draft. HTML is accepted for email conversations only.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update an inbox view Source: https://docs.breakcold.com/api-reference/inbox/update-an-inbox-view /api/openapi.json patch /inbox/views/{viewId} Update inbox view metadata and replace the full saved config.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Get a meeting Source: https://docs.breakcold.com/api-reference/meetings/get-a-meeting /api/openapi.json get /meetings/{meetingId} Fetch one meeting with recording and transcript metadata.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List meeting transcript segments Source: https://docs.breakcold.com/api-reference/meetings/list-meeting-transcript-segments /api/openapi.json get /meetings/{meetingId}/transcript List full meeting transcript text in ordered paginated segments.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List meetings Source: https://docs.breakcold.com/api-reference/meetings/list-meetings /api/openapi.json get /meetings List workspace meetings with recording and transcript metadata.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Create a record note Source: https://docs.breakcold.com/api-reference/notes/create-a-record-note /api/openapi.json post /records/{recordId}/notes Create a note linked to a record. If the workspace has a matching active webhook, the note-created event is delivered to its external URL.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Get a note Source: https://docs.breakcold.com/api-reference/notes/get-a-note /api/openapi.json get /notes/{noteId} Fetch a note by ID.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List record notes Source: https://docs.breakcold.com/api-reference/notes/list-record-notes /api/openapi.json get /records/{recordId}/notes List notes linked to a record.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Update a note Source: https://docs.breakcold.com/api-reference/notes/update-a-note /api/openapi.json patch /notes/{noteId} Update note content. If the workspace has a matching active webhook, the note-updated event is delivered to its external URL.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Archive a record Source: https://docs.breakcold.com/api-reference/records/archive-a-record /api/openapi.json post /records/{recordId}/archive Archive a CRM record without permanently deleting it.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a custom activity Source: https://docs.breakcold.com/api-reference/records/create-a-custom-activity /api/openapi.json post /records/{recordId}/custom-activities Create a custom activity linked to a CRM record and notify any other workspace users supplied as participants, including by email when their notification preferences enable it.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a record Source: https://docs.breakcold.com/api-reference/records/create-a-record /api/openapi.json post /records Create a CRM record atomically with non-empty initial field values. Required fields are enforced, workspace-configured automatic enrichment may start, and matching active webhooks receive the record-created event at their external URLs. REST callers should send an Idempotency-Key header so retries return the original result.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Get a record Source: https://docs.breakcold.com/api-reference/records/get-a-record /api/openapi.json get /records/{recordId} Fetch a CRM record with field values.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List records Source: https://docs.breakcold.com/api-reference/records/list-records /api/openapi.json get /records List or search records in one workspace and object type. Search modes: - `searchScope=display` (default) searches only the record display name. This preserves the original API behavior and is best when you want a precise name lookup. - `searchScope=all` searches the display name plus indexed text-like field values on the record: text, textarea, email, phone, URL/social fields, location, select, and multiselect labels. It does not search notes, tasks, conversations, relation target names, numbers, dates, booleans, members, or files.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Restore a record Source: https://docs.breakcold.com/api-reference/records/restore-a-record /api/openapi.json post /records/{recordId}/restore Restore an archived CRM record.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Update a record Source: https://docs.breakcold.com/api-reference/records/update-a-record /api/openapi.json patch /records/{recordId} Update CRM record field values. Multiselect fields append by default; pass multiselectMode: "replace" to set them to exactly the provided options (omitted options are removed, [] clears the field). Identity-field changes may start workspace-configured automatic enrichment, and matching active webhooks receive field-update events at their external URLs. Permanent delete is not available in v1.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Complete a task Source: https://docs.breakcold.com/api-reference/tasks/complete-a-task /api/openapi.json post /tasks/{taskId}/complete Mark a task as done.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create a record task Source: https://docs.breakcold.com/api-reference/tasks/create-a-record-task /api/openapi.json post /records/{recordId}/tasks Create a task linked to a record.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete a task Source: https://docs.breakcold.com/api-reference/tasks/delete-a-task /api/openapi.json delete /tasks/{taskId} Soft-delete a task. Deleted tasks are excluded from task lists and cannot be restored through the public API.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# List record tasks Source: https://docs.breakcold.com/api-reference/tasks/list-record-tasks /api/openapi.json get /records/{recordId}/tasks List tasks linked to a record.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# Update a task Source: https://docs.breakcold.com/api-reference/tasks/update-a-task /api/openapi.json patch /tasks/{taskId} Update task details.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Create an integration hook Source: https://docs.breakcold.com/api-reference/webhooks/create-an-integration-hook /api/openapi.json post /integration-hooks Create and activate a Zapier or Make webhook subscription that delivers matching future Breakcold events to the supplied external HTTPS URL.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# Delete an integration hook Source: https://docs.breakcold.com/api-reference/webhooks/delete-an-integration-hook /api/openapi.json delete /integration-hooks/{hookId} Permanently delete a Zapier or Make instant-trigger webhook subscription and its stored delivery logs. The operation is idempotent.
Token cost Rate limit
0.4 tokens 120 requests/min per route/org
# List integration samples Source: https://docs.breakcold.com/api-reference/webhooks/list-integration-samples /api/openapi.json get /integration-samples Return generated sample payloads for automation-platform trigger setup.
Token cost Rate limit
0.2 tokens 120 requests/min per route/org
# List authorized workspaces Source: https://docs.breakcold.com/api-reference/workspaces/list-authorized-workspaces /api/openapi.json get /workspaces List workspaces the authenticated public API actor can access in the current organization.
Token cost Rate limit
0 tokens 120 requests/min per route/org
# Authentication Source: https://docs.breakcold.com/api/authentication Get an API key and use it as your REST API token. Every REST API request needs a token. In Breakcold, the token you use for the REST API is called an API key. Use an API key when another app, automation tool, AI tool, or script needs to read or update data in Breakcold. ## Get your token 1. Open Breakcold. 2. Go to **Settings**. 3. Open **API keys**. 4. Click **Create key**. 5. Give the key a clear name, for example "Zapier records sync" or "Reporting dashboard". 6. Choose the **Scopes**. Scopes decide what the key is allowed to do. Start with only the permissions the tool needs, such as **Read records**. 7. Choose the **Workspace limit**. Leave it empty if the key can use every workspace you can access, or select only the workspace the tool should use. 8. Choose an **Expiration**. For a short test, choose 30 days. For a trusted automation, choose the duration that matches how your team manages credentials. 9. Click **Create personal key**. 10. Copy the API key immediately. Breakcold shows the full API key only once. After you close the panel, you can still see the key prefix and activity history, but not the full key again. If you lose it, create a new key and revoke the old one. If you do not see **Create key**, ask a teammate with the right role to create one for you or update your access. ## Use your token When a tool asks for a bearer token, authorization token, or API token, paste your Breakcold API key. ## API URL Use this API URL for every request. ```txt theme={null} https://rest.breakcold.com/api/v1 ``` The API Reference pages use the same URL in the request playground. When you write an API request yourself, send the key in the `Authorization` header: ```txt theme={null} Authorization: Bearer YOUR_API_KEY ``` Example: ```sh theme={null} curl "https://rest.breakcold.com/api/v1/records?workspaceId=YOUR_WORKSPACE_ID" \ -H "Authorization: Bearer YOUR_API_KEY" ``` Replace `YOUR_API_KEY` with the key you copied from Breakcold. Keep the word `Bearer`, then add one space, then paste the key. ## Keep your token safe An API key can access the data allowed by its scopes and workspace limit. Treat it like a password. * Store it in a password manager or in your automation tool's secure secret field. * Do not paste it in public documents, screenshots, chat messages, or support tickets. * Give it only the scopes it needs. * Revoke it if a tool no longer needs access. * Revoke it and create a new one if you think it was shared by mistake. ## Common errors `401 Unauthorized` usually means the token is missing, expired, revoked, or copied incorrectly. Check that the request includes `Authorization: Bearer YOUR_API_KEY`. `403 Forbidden` usually means the key does not have the right scope or workspace access. Create a new key with the permission the tool needs, then revoke the old one. # API changelog Source: https://docs.breakcold.com/api/changelog Breaking changes, new capabilities, and migration guidance for the Breakcold REST API and MCP. Follow this page for production-affecting changes to the Breakcold REST API and MCP. Product updates remain available from **What's New** inside Breakcold, and related product posts link back here when developer action is relevant. Use the RSS button at the top of this page to subscribe, or add `https://docs.breakcold.com/api/changelog/rss.xml` to your RSS reader. ## Added internal SSO store endpoint Added an authenticated internal REST endpoint for central SSO session coordination. ### Changes * Added POST /internal/sso/store for authenticated internal SSO reads and writes. * Requests require signed authentication and replay protection. * Invalid requests return structured authentication or availability errors. ## Integration Catalogue Endpoint External developers can retrieve published integration catalogue data through new authenticated HTTP routes. ### Changes * Added GET /public/integrations/crm for the published integration list. * Added GET /public/integrations/crm/\{slug} for integration details. * Responses expose public catalogue fields, including logos and screenshots, without internal identifiers. ## Secure Granola Webhooks Granola webhook deliveries now require signature verification and use event identifiers for idempotent processing. ### Changes * Granola webhook requests are authenticated using Standard Webhooks signatures. * Granola event identifiers are used to derive stable request identities. * Webhook enablement is evaluated using the provider-specific recording feature flag. ## Aircall Webhook Endpoint Added Production now accepts Aircall webhook events through a dedicated calling webhook route. ### Changes * Added POST support for Aircall webhook requests under /calling/webhooks/. * Processes call lifecycle events for calling integrations. ### Migration 1. Configure Aircall to send call webhooks to the new production endpoint. ## More Reliable MCP Record Listing MCP record listings now split hydration into batches of up to 50 records. ### Changes * The records.list MCP operation limits each hydration batch to 50 record IDs. * Requests can still ask for up to 100 listed records; only hydration is batched internally. ## Remove Attachment Download Endpoint The record email attachment download route has been removed from production. ### Changes * GET /record-email-attachment-download is no longer available. * Requests to the removed route will no longer download record email attachments. ### Migration 1. Stop calling the removed route and remove dependent attachment-download workflows. ## Initialize Object Filtering Creating a custom object now schedules its filter index initialization. ### Changes * The CRM object-creation operation now initializes filtering for the newly created object. * Index initialization runs asynchronously after the object is created. ## Regional MCP OAuth Compatibility Legacy regional MCP endpoints now proxy MCP traffic and discovery requests through the universal gateway. ### Changes * Regional MCP requests are forwarded to the universal MCP gateway. * Regional OAuth discovery endpoints advertise the universal gateway. * Existing MCP request methods, query parameters, authorization, sessions, and bodies are preserved. ## Identity Resolution API Safeguards REST APIs now prevent ambiguous record creation and reject direct changes to source-managed tasks. ### Changes * Record creation now blocks identity matches requiring review instead of silently creating a potentially duplicate record. * Repeated requests with the same idempotency key can return the existing operation without emitting a duplicate creation event. * Updates to source-managed tasks reject changes to title, description, due date, or status. * Manual deletion of source-managed tasks is rejected. * Identity-resolution conflicts are returned as structured HTTP 409 conflict errors. ### Migration 1. Handle HTTP 409 conflicts for identity matches and route them to review. 2. Do not update or delete source-managed tasks directly; resolve them through the task workspace. ## OAuth scopes are now required OAuth-authenticated REST and MCP requests now require recognized Breakcold API scopes. ### Changes * Authorization requests reject empty or unsupported scopes with invalid\_scope. * Access tokens retain only scopes approved in the grant. * Gateway-authenticated requests reject missing or unknown-only scopes with insufficient\_scope. * Verified OAuth JWTs must contain at least one recognized public API scope. ### Migration 1. Update OAuth authorization requests to include one or more supported Breakcold API scopes. 2. Ensure clients handle invalid\_scope and insufficient\_scope responses. ## Support Task Due Timestamps MCP task creation and updates now preserve supplied due timestamps. ### Changes * Task creation accepts and stores exact due timestamps. * Task updates preserve exact due timestamps. * Clearing a due timestamp removes the associated time metadata. ## Strengthen Webhook Secrets New outbound webhook and integration signing secrets now contain 256 bits of cryptographically secure randomness. ### Changes * New signing secrets use the whsec\_ prefix followed by 64 hexadecimal characters. * Outbound webhook signature verification remains HMAC-SHA256 compatible. * New bearer secret identifiers are 64-character hexadecimal values. ## Record-Scoped Inbox Access Public API conversation access now requires record links for record-scoped permissions. ### Changes * Users with record-scoped read permission can access only conversations linked to a CRM record. * Users with record-scoped reply permission can reply only to conversations linked to a CRM record. * Users with all-message permissions retain access without a record link. ## Add Task Deletion A new task deletion action is available across REST, MCP, Zapier, and Make. ### Changes * Added DELETE /tasks/\{taskId} requiring the tasks:write scope. * Added the tasks\_delete MCP tool. * Added task deletion actions to Zapier and Make. * Deletion is idempotent and returns deletedId. ## Public API Rate Limit Scaling Public API rate limiting now distributes capacity across multiple shards to better handle concentrated request traffic. ### Changes * Public API rate-limit capacity is distributed across 20 shards. * Concurrent API traffic is less likely to contend on a single rate-limit record. ## Email Unsubscribe Endpoint Added Production email unsubscribe handling is now available through a public HTTP endpoint. ### Changes * Added GET /email/unsubscribe for displaying unsubscribe confirmation. * Added POST /email/unsubscribe for human-confirmed and RFC 8058 one-click unsubscribe requests. * POST requests return idempotent success responses for repeated unsubscribe actions. ## MCP Sending Requires Confirmation MCP outbound message tools now return a draft preview unless delivery is explicitly requested. ### Changes * inbox\_conversations\_compose accepts sendMode="draft" or "send". * inbox\_messages\_send accepts sendMode="draft" or "send". * Omitting sendMode returns a non-sending preview. * sendMode="send" preserves immediate delivery behavior. * Invalid sendMode values return an error. ### Migration 1. Add sendMode="send" to calls intended to deliver messages immediately. 2. Handle draft responses with sent=false and confirmationRequired=true. ## Make Synchronization Handles Relationships Make app synchronization now reads and maintains connection and webhook relationships when comparing or updating components. ### Changes * Webhook connection relationships are retrieved when list responses omit them. * Instant-trigger module webhook relationships are retrieved before synchronization. * Component updates preserve configured connections, CRUD settings, and webhook associations. * Deployment drift errors include the specific actions required to reconcile differences. ## MCP Pagination Behavior Updated MCP list tools now return partial pages when filtering exhausts a raw batch, allowing callers to continue with the returned cursor. ### Changes * List operations perform one paginated query per invocation. * Filtered results may contain fewer items than the requested limit. * Returned cursors continue from the next raw page or remaining batch position. * Callers should keep requesting pages until pagination indicates no more results. ### Migration 1. Continue following returned cursors until hasMore is false or the cursor is null. 2. Do not assume every page contains the requested number of items. ## Conversation Draft API New REST, Zapier, and Make operations let authenticated users manage conversation drafts. ### Changes * Added endpoints to create or update a conversation draft. * Added an endpoint to retrieve the authenticated user's draft. * Added an endpoint to clear the authenticated user's draft. * HTML draft content is accepted for email conversations only. ## Make integration available Make users can access Breakcold REST operations and event triggers through a generated integration. ### Changes * Added 57 Make REST modules covering supported Breakcold operations. * Added 14 instant webhook triggers for supported event types. * Added a universal module for relative Breakcold API paths. * Webhook subscriptions now enforce event and object-type filters before delivery. ## Zapier Integration Behavior Updates The generated Zapier integration now exposes dynamic choices and normalizes request and response data for production workflows. ### Changes * Adds dynamic Zapier choices for workspaces, records, CRM fields, conversations, messages, meetings, notes, and tasks. * Parses JSON-formatted array and object inputs before sending requests. * Maps the Zapier idempotencyKey field to the API clientMessageId field. * Normalizes search and action responses for Zapier compatibility. * Updates authentication setup help with a direct developer documentation link. ## Add Attachment Download Endpoint A new authenticated REST endpoint serves prepared record email attachments for production clients. ### Changes * Added GET /record-email-attachment-download. * Requires bearer authentication. * Returns the prepared attachment stream with its content metadata. ## CRM Deletion Cleanup Added Deleting a CRM object now schedules cleanup of conversation links associated with that object type. ### Changes * CRM object deletion schedules removal of associated conversation-record links. * Cleanup runs asynchronously after the deletion request. ## Paginated Inbox Results MCP-backed inbox conversation listing now supports selective indexes and stable cursors for filtered views. ### Changes * Filtered conversation views use matching lifecycle, channel, mailbox, status, and account indexes when available. * Pagination cursors retain filter scope and resume correctly after post-filtering. * Large restricted conversation views check permissions only for candidate conversations instead of scanning unrelated memberships. ## Record creation now requires complete initial fields Record creation now rejects empty field payloads and enforces fields configured as required for the target object. ### Action required * REST `POST /records` requires a non-empty `fields` object. * Include every required field unless it has a configured default. * REST retries may use the optional `Idempotency-Key` header. * MCP `records_create` requires a stable `idempotencyKey` tool argument. ### Migration 1. List fields with `GET /crm/objects/{objectTypeId}/fields`. 2. Include values for required fields without defaults. 3. Reuse the same idempotency value when retrying the same logical request. See [Create a record](/api-reference/records/create-a-record) and [List CRM fields](/api-reference/crm/list-crm-fields). # Attributes Source: https://docs.breakcold.com/api/core-concepts/attributes Understand fields and values on Breakcold records. Attributes are the fields configured on an object. In the API, record attributes are sent and returned in the `fields` object. Each attribute has a field definition in Breakcold: a slug, a display name, a field type, and settings such as whether it accepts one value or multiple values. The slug is the JSON key you use inside `fields`. ```json theme={null} { "workspaceId": "workspace_id", "objectTypeSlug": "person", "fields": { "name": "Ada Lovelace", "email": "ada@example.com", "linkedin": "https://www.linkedin.com/in/ada-lovelace", "company": "company_record_id" } } ``` * Attributes are returned inside `record.fields`. * Field slugs are the JSON keys inside `fields`. * Empty or unset values are omitted from `fields`. * Attributes configured to accept multiple values return arrays. Type pages include multiple-value examples when the API accepts array input for that attribute type. Unknown field slugs are rejected. Use the exact slug configured for the object type you are creating or updating. # Checkbox Source: https://docs.breakcold.com/api/core-concepts/attributes/checkbox Use checkbox attributes in the Breakcold API. ## Attribute type `checkbox` ## Use it for Boolean flags such as active/inactive, opted in, qualified, or customer. ## Request value Send a boolean. ```json theme={null} { "fields": { "is_customer": true } } ``` ## Returned shape Returns a boolean. ## Example response ```json theme={null} { "fields": { "is_customer": true } } ``` # Currency Source: https://docs.breakcold.com/api/core-concepts/attributes/currency Use currency attributes in the Breakcold API. ## Attribute type `currency` ## Use it for Money amounts such as deal value, budget, ARR, or contract size. ## Request value Send `{ "amount": number, "currencyCode": "USD" }` using an ISO currency code. ```json theme={null} { "fields": { "amount": { "amount": 12000, "currencyCode": "USD" } } } ``` ## Returned shape Returns `{ "amount", "currencyCode" }`. ## Example response ```json theme={null} { "fields": { "amount": { "amount": 12000, "currencyCode": "USD" } } } ``` # Date Source: https://docs.breakcold.com/api/core-concepts/attributes/date Use date attributes in the Breakcold API. ## Attribute type `date` ## Use it for Date-only values such as renewal date, birthday, or contract date. ## Request value Send a Unix timestamp in milliseconds. ```json theme={null} { "fields": { "renewal_date": 1767225600000 } } ``` ## Returned shape Returns a Unix timestamp in milliseconds. ## Example response ```json theme={null} { "fields": { "renewal_date": 1767225600000 } } ``` # Date & Time Source: https://docs.breakcold.com/api/core-concepts/attributes/datetime Use datetime attributes in the Breakcold API. ## Attribute type `datetime` ## Use it for Timestamped values such as last interaction, next follow-up, or meeting time. ## Request value Send a Unix timestamp in milliseconds. ```json theme={null} { "fields": { "next_follow_up_at": 1767270600000 } } ``` ## Returned shape Returns a Unix timestamp in milliseconds. ## Example response ```json theme={null} { "fields": { "next_follow_up_at": 1767270600000 } } ``` # Email Source: https://docs.breakcold.com/api/core-concepts/attributes/email Use email attributes in the Breakcold API. ## Attribute type `email` ## Use it for Email addresses for people or companies. ## Request value Send a string, or an object like `{ "value": "ada@example.com", "label": "Work", "isPrimary": true }`. For multi-value email attributes, send an array. ```json theme={null} { "fields": { "email": "ada@example.com" } } ``` ## Returned shape Returns `{ "value", "label", "countryCode", "isPrimary" }`. Multi-value email attributes return an array of those objects. ## Example response ```json theme={null} { "fields": { "email": { "value": "ada@example.com", "label": "Work", "isPrimary": true } } } ``` ## Multiple values For a multi-value email attribute, send an array of strings or email objects. ```json theme={null} { "fields": { "email": [ "ada@example.com", { "value": "team@example.com", "label": "Team", "isPrimary": false } ] } } ``` Returns an array of `{ "value", "label", "countryCode", "isPrimary" }` objects. ```json theme={null} { "fields": { "email": [ { "value": "ada@example.com", "label": "Work", "isPrimary": true }, { "value": "team@example.com", "label": "Team", "isPrimary": false } ] } } ``` # Facebook Source: https://docs.breakcold.com/api/core-concepts/attributes/facebook Use facebook attributes in the Breakcold API. ## Attribute type `facebook` ## Use it for Facebook profile, page, or company URLs. ## Request value Send a string. ```json theme={null} { "fields": { "facebook": "https://www.facebook.com/ada" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "facebook": "https://www.facebook.com/ada" } } ``` # LinkedIn Source: https://docs.breakcold.com/api/core-concepts/attributes/linkedin Use linkedin attributes in the Breakcold API. ## Attribute type `linkedin` ## Use it for LinkedIn profile or company URLs. ## Request value Send a string. ```json theme={null} { "fields": { "linkedin": "https://www.linkedin.com/in/ada-lovelace" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "linkedin": "https://www.linkedin.com/in/ada-lovelace" } } ``` # Location Source: https://docs.breakcold.com/api/core-concepts/attributes/location Use location attributes in the Breakcold API. ## Attribute type `location` ## Use it for Addresses and geographic information. ## Request value Send an object with address fields such as `{ "address", "city", "state", "country", "postalCode" }`. ```json theme={null} { "fields": { "location": { "address": "10 Downing Street", "city": "London", "country": "United Kingdom", "postalCode": "SW1A 2AA" } } } ``` ## Returned shape Returns address fields and may also include `{ "latitude", "longitude" }`. ## Example response ```json theme={null} { "fields": { "location": { "address": "10 Downing Street", "city": "London", "country": "United Kingdom", "postalCode": "SW1A 2AA", "latitude": 51.5034, "longitude": -0.1276 } } } ``` # Member Source: https://docs.breakcold.com/api/core-concepts/attributes/member Use member attributes in the Breakcold API. ## Attribute type `member` ## Use it for Assigning records to workspace members. ## Request value Send a user ID string. For multi-member attributes, send an array of user ID strings. ```json theme={null} { "fields": { "owner": "user_id" } } ``` ## Returned shape Returns `{ "userId", "name", "email" }`. Multi-member attributes return an array of those objects. ## Example response ```json theme={null} { "fields": { "owner": { "userId": "user_id", "name": "Ada Lovelace", "email": "ada@example.com" } } } ``` ## Multiple values For a multi-member attribute, send an array of user ID strings. ```json theme={null} { "fields": { "owners": [ "user_ada", "user_grace" ] } } ``` Returns an array of `{ "userId", "name", "email" }` objects. ```json theme={null} { "fields": { "owners": [ { "userId": "user_ada", "name": "Ada Lovelace", "email": "ada@example.com" }, { "userId": "user_grace", "name": "Grace Hopper", "email": "grace@example.com" } ] } } ``` # Multi-Select Source: https://docs.breakcold.com/api/core-concepts/attributes/multiselect Use multiselect attributes in the Breakcold API. ## Attribute type `multiselect` ## Use it for Multiple options from a configured list, such as tags, segments, or interests. ## Request value Send an array of option ID strings. ```json theme={null} { "fields": { "tags": [ "field_option_vip", "field_option_partner" ] } } ``` ## Returned shape Returns an array of `{ "optionId", "value", "label", "color" }` objects. ## Example response ```json theme={null} { "fields": { "tags": [ { "optionId": "field_option_vip", "value": "vip", "label": "VIP", "color": "#F59E0B" }, { "optionId": "field_option_partner", "value": "partner", "label": "Partner", "color": "#10B981" } ] } } ``` ## Update behavior When updating a multiselect field with `records_update`, the default behavior is **append** — provided options are added to any existing ones. To replace the entire set instead, pass `"multiselectMode": "replace"`. ```json theme={null} { "fields": { "tags": [ "field_option_vip" ] }, "multiselectMode": "replace" } ``` This replaces all existing tags with just `VIP`. Passing an empty array with `"multiselectMode": "replace"` clears the field. ## Multiple values Multi-select attributes always accept an array of option ID strings. ```json theme={null} { "fields": { "tags": [ "field_option_vip", "field_option_partner" ] } } ``` Returns an array of `{ "optionId", "value", "label", "color" }` objects. ```json theme={null} { "fields": { "tags": [ { "optionId": "field_option_vip", "value": "vip", "label": "VIP", "color": "#F59E0B" }, { "optionId": "field_option_partner", "value": "partner", "label": "Partner", "color": "#10B981" } ] } } ``` # Number Source: https://docs.breakcold.com/api/core-concepts/attributes/number Use number attributes in the Breakcold API. ## Attribute type `number` ## Use it for Numeric values such as headcount, score, quantity, or probability. ## Request value Send a number. ```json theme={null} { "fields": { "company_headcount": 42 } } ``` ## Returned shape Returns a number. ## Example response ```json theme={null} { "fields": { "company_headcount": 42 } } ``` # Phone Source: https://docs.breakcold.com/api/core-concepts/attributes/phone Use phone attributes in the Breakcold API. ## Attribute type `phone` ## Use it for Phone numbers for people or companies. ## Request value Send a string, or an object like `{ "value": "+15550100", "label": "Mobile", "countryCode": "US", "isPrimary": true }`. For multi-value phone attributes, send an array. ```json theme={null} { "fields": { "phone": "+15550100" } } ``` ## Returned shape Returns `{ "value", "label", "countryCode", "isPrimary" }`. Multi-value phone attributes return an array of those objects. ## Example response ```json theme={null} { "fields": { "phone": { "value": "+15550100", "label": "Mobile", "countryCode": "US", "isPrimary": true } } } ``` ## Multiple values For a multi-value phone attribute, send an array of strings or phone objects. ```json theme={null} { "fields": { "phone": [ "+15550100", { "value": "+15550101", "label": "Office", "countryCode": "US", "isPrimary": false } ] } } ``` Returns an array of `{ "value", "label", "countryCode", "isPrimary" }` objects. ```json theme={null} { "fields": { "phone": [ { "value": "+15550100", "label": "Mobile", "countryCode": "US", "isPrimary": true }, { "value": "+15550101", "label": "Office", "countryCode": "US", "isPrimary": false } ] } } ``` # Relation Source: https://docs.breakcold.com/api/core-concepts/attributes/relation Use relation attributes in the Breakcold API. ## Attribute type `relation` ## Use it for Links from one Breakcold record to another, such as person to company or deal to company. ## Request value Send a record ID string. For multi-relation attributes, send an array of record ID strings. ```json theme={null} { "fields": { "company": "record_company_id" } } ``` ## Returned shape Returns a record ID string. Multi-relation attributes return an array of record ID strings. ## Example response ```json theme={null} { "fields": { "company": "record_company_id" } } ``` ## Multiple values For a multi-relation attribute, send an array of record ID strings. ```json theme={null} { "fields": { "companies": [ "record_company_id", "record_partner_id" ] } } ``` Returns an array of record ID strings. ```json theme={null} { "fields": { "companies": [ "record_company_id", "record_partner_id" ] } } ``` # Select Source: https://docs.breakcold.com/api/core-concepts/attributes/select Use select attributes in the Breakcold API. ## Attribute type `select` ## Use it for A single option from a configured list, such as status, stage, source, or priority. ## Request value Send an option ID string, or `{ "optionId": "field_option_id" }`. ```json theme={null} { "fields": { "stage": "field_option_new" } } ``` ## Returned shape Returns `{ "optionId", "value", "label", "color" }` for the selected option. ## Example response ```json theme={null} { "fields": { "stage": { "optionId": "field_option_new", "value": "new", "label": "New", "color": "#3B82F6" } } } ``` # Telegram Source: https://docs.breakcold.com/api/core-concepts/attributes/telegram Use telegram attributes in the Breakcold API. ## Attribute type `telegram` ## Use it for Telegram handles, usernames, or profile links. ## Request value Send a string. ```json theme={null} { "fields": { "telegram": "@ada" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "telegram": "@ada" } } ``` # Text Source: https://docs.breakcold.com/api/core-concepts/attributes/text Use text attributes in the Breakcold API. ## Attribute type `text` ## Use it for Short text values such as names, domains, labels, or custom identifiers. ## Request value Send a string. ```json theme={null} { "fields": { "name": "Ada Lovelace" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "name": "Ada Lovelace" } } ``` # Text Area Source: https://docs.breakcold.com/api/core-concepts/attributes/textarea Use textarea attributes in the Breakcold API. ## Attribute type `textarea` ## Use it for Longer free-form text such as bios, descriptions, notes, or summaries. ## Request value Send a string. ```json theme={null} { "fields": { "bio": "Pioneer of computing and analytical engines." } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "bio": "Pioneer of computing and analytical engines." } } ``` # Twitter Source: https://docs.breakcold.com/api/core-concepts/attributes/twitter Use twitter attributes in the Breakcold API. ## Attribute type `twitter` ## Use it for Twitter/X handles or profile URLs. ## Request value Send a string. ```json theme={null} { "fields": { "twitter": "https://x.com/ada" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "twitter": "https://x.com/ada" } } ``` # URL Source: https://docs.breakcold.com/api/core-concepts/attributes/url Use url attributes in the Breakcold API. ## Attribute type `url` ## Use it for Websites and external links. ## Request value Send a string. ```json theme={null} { "fields": { "website": "https://example.com" } } ``` ## Returned shape Returns a string. If the stored URL has a label, it may return `{ "value", "label" }`. ## Example response ```json theme={null} { "fields": { "website": "https://example.com" } } ``` ## Notes * If a URL has a label, the returned value can be `{ "value": "https://example.com", "label": "Website" }`. # WhatsApp Source: https://docs.breakcold.com/api/core-concepts/attributes/whatsapp Use whatsapp attributes in the Breakcold API. ## Attribute type `whatsapp` ## Use it for WhatsApp numbers or contact links. ## Request value Send a string. ```json theme={null} { "fields": { "whatsapp": "+15550100" } } ``` ## Returned shape Returns a string. ## Example response ```json theme={null} { "fields": { "whatsapp": "+15550100" } } ``` # Objects & Records Source: https://docs.breakcold.com/api/core-concepts/objects-records Understand how Breakcold objects and records work in the API. An object is a type of CRM record. New workspaces start with system objects such as `person`, `company`, and `deal`, and teams can add custom objects for their own workflows. In the API, objects are identified by either: * `objectTypeId`: the internal object ID. * `objectTypeSlug`: the object slug, such as `person`, `company`, or `deal`. A record is one item inside an object. A person, a company, and a deal are all records, but each belongs to a different object type. Record responses include the object they belong to, their display name, archive state, timestamps, and their attribute values under `fields`. ```json theme={null} { "id": "record_id", "workspaceId": "workspace_id", "objectTypeId": "object_type_id", "objectTypeSlug": "person", "displayName": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": { "value": "ada@example.com", "isPrimary": true } }, "isArchived": false, "createdAt": 1760000000000, "updatedAt": 1760000000000 } ``` Use `objectTypeSlug` when you want readable requests, and `objectTypeId` when you already store Breakcold IDs in your system. For example, list people with `/records?workspaceId=YOUR_WORKSPACE_ID&objectTypeSlug=person`. Records are archived instead of permanently deleted in API v1. Archived records are hidden from default record lists unless you request them with `archived=true`. # Users, Workspaces, and Organizations Source: https://docs.breakcold.com/api/core-concepts/users-workspaces-organizations Understand Breakcold's account and permission model. Breakcold is organized around a workspace CRM model. Most API calls either receive a `workspaceId` directly or derive the workspace from an existing resource ID, such as a `recordId`, `taskId`, `noteId`, `conversationId`, or `messageId`. An organization is the top-level account boundary. Billing, API keys, and organization-level access all belong to an organization. A workspace belongs to one organization and contains CRM data: records, objects, attributes, tasks, notes, inbox conversations, and messages. When you list or create records, pass the target `workspaceId`. When you work from an existing resource, such as `/records/{recordId}/tasks`, the API resolves the workspace from that resource. A user is a teammate in Breakcold. Users can belong to organizations and workspaces with roles such as owner, admin, manager, member, or viewer. Personal API keys act with the permissions of the user who created them, plus any scope and workspace limits configured on the key. API v1 does not create organizations, workspaces, or users. It uses them to decide which data your key can access and where new records, tasks, and notes should be created. # MCP Source: https://docs.breakcold.com/api/mcp Use Breakcold as an MCP server. The MCP endpoint is `/mcp/v1` on your Breakcold API base URL. It uses Streamable HTTP and exposes tools generated from the same public API contract as OpenAPI. For application-specific setup, open the [Applications hub](/api/mcp-applications). For authentication details, open [MCP authentication](/api/mcp-authentication). ## MCP URL Use this MCP URL for every workspace. ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` Configure the `/mcp/v1` URL as a protected resource for MCP clients. Enable client metadata document support, and keep dynamic client registration enabled when you need compatibility with older MCP clients. Use OAuth when the MCP client supports sign-in. OAuth calls run as the signed-in Breakcold user and still enforce organization, workspace, and record-level permissions. Use a bearer token only for MCP clients that cannot complete OAuth or for service-style agents that should not act as a signed-in user. Bearer tokens use the scopes and workspace limits configured in Breakcold. For user sign-in applications managed by Breakcold, MCP clients should send `X-Breakcold-Organization-Id` unless the user belongs to exactly one active Breakcold organization. Tool calls still enforce workspace permissions from the workspace or record ids passed to the tool. # Applications Source: https://docs.breakcold.com/api/mcp-applications Choose the application you want to connect to Breakcold MCP. Use this hub to choose the application where you want to use Breakcold MCP. Each application page includes the website, application picture, MCP endpoint, and setup notes. Claude logo ChatGPT logo Codex logo TypingMind logo LM Studio logo OpenClaw logo Hermes logo LibreChat logo Microsoft 365 Copilot logo ## MCP endpoint Use the same Breakcold MCP endpoint for every application. ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` # ChatGPT Source: https://docs.breakcold.com/api/mcp-applications/chatgpt Connect ChatGPT to Breakcold MCP. ChatGPT logo Website: [chatgpt.com](https://chatgpt.com) Use Breakcold as a custom MCP app or connector in ChatGPT so ChatGPT can call the Breakcold tools you approve. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Open ChatGPT settings and go to **Apps** or **Apps & Connectors**. 2. Create or enable a custom app or connector for Breakcold. 3. Paste the Breakcold MCP endpoint for your region when ChatGPT asks for the remote MCP endpoint. 4. Complete the authorization flow. 5. Call Breakcold from the app picker, tools menu, or an `@` mention when your workspace exposes it. Workspace admins may need to enable custom apps or developer mode before members can connect Breakcold. # Claude Source: https://docs.breakcold.com/api/mcp-applications/claude Connect Claude to Breakcold MCP. Claude logo Website: [claude.ai](https://claude.ai) Use Breakcold as a remote MCP server in Claude so Claude can read or update the Breakcold data allowed by the signed-in user's permissions. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Open Claude settings and go to **Customize > Connectors**. 2. Choose **+**, then **Add custom connector**, and name it Breakcold. 3. Paste the Breakcold MCP endpoint for your region. 4. Connect or sign in when Claude asks for authorization. 5. If Claude Desktop opens Safari and returns a generic MCP authorization failure, remove the connector and reconnect once in Chrome or another Chromium-based browser. 6. In a chat, choose **+ > Connectors** and enable Breakcold for the conversation. Use Breakcold OAuth when Claude asks for authorization. You only need bearer-token access if a client cannot complete OAuth. # Codex Source: https://docs.breakcold.com/api/mcp-applications/codex Connect Codex to Breakcold MCP. Codex logo Website: [developers.openai.com/codex](https://developers.openai.com/codex) Use Breakcold as an MCP server in Codex when you want Codex to inspect or operate on Breakcold CRM data during agent workflows. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup Add the Breakcold MCP server with the Codex CLI: ```bash theme={null} codex mcp add breakcold --url https://mcp.breakcold.com/mcp/v1 ``` Authorize Codex with Breakcold if your server is using OAuth: ```bash theme={null} codex mcp login breakcold ``` Verify the server is configured: ```bash theme={null} codex mcp list ``` For bearer-token access, configure the server in `~/.codex/config.toml` and point Codex to an environment variable that stores the Breakcold bearer key: ```toml theme={null} [mcp_servers.breakcold] url = "https://mcp.breakcold.com/mcp/v1" bearer_token_env_var = "BREAKCOLD_MCP_TOKEN" ``` # Hermes Source: https://docs.breakcold.com/api/mcp-applications/hermes Connect Hermes to Breakcold MCP. Hermes logo Website: [hermes-agent.nousresearch.com](https://hermes-agent.nousresearch.com/docs) Use Breakcold as a remote MCP server in Hermes so Hermes agents can use approved Breakcold tools. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup Add Breakcold as an MCP server in your Hermes config: ```yaml theme={null} mcp_servers: breakcold: url: "https://mcp.breakcold.com/mcp/v1" auth: oauth tools: resources: false prompts: false ``` Restart Hermes or reload MCP: ```txt theme={null} /reload-mcp ``` Hermes opens an OAuth authorization flow on first connect and stores MCP tokens for future sessions. If you need bearer-token access instead, replace `auth: oauth` with an authorization header: ```yaml theme={null} headers: Authorization: "Bearer " ``` For sensitive CRM access, start with narrow permissions and only expose the Breakcold tools the Hermes agent needs. # LibreChat Source: https://docs.breakcold.com/api/mcp-applications/librechat Connect LibreChat to Breakcold MCP. LibreChat logo Website: [librechat.ai](https://www.librechat.ai) Use Breakcold as a Streamable HTTP MCP server in LibreChat workspaces that have MCP enabled. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Open the MCP settings panel from LibreChat. 2. Choose **+** to add a server. 3. Name the server Breakcold and choose **Streamable HTTP**. 4. Paste the Breakcold MCP endpoint for your region. 5. Use API key authentication with bearer format if LibreChat asks for credentials. # LM Studio Source: https://docs.breakcold.com/api/mcp-applications/lm-studio Connect LM Studio to Breakcold MCP. LM Studio logo Website: [lmstudio.ai](https://lmstudio.ai) Use Breakcold as a remote MCP server in LM Studio so local-model workflows can use approved Breakcold tools. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Open LM Studio and switch to the **Program** tab. 2. Choose **Install > Edit mcp.json**. 3. Add Breakcold as a remote MCP server using the MCP endpoint for your region. 4. If LM Studio asks for headers, set `Authorization` to `Bearer `. # Microsoft 365 Copilot Source: https://docs.breakcold.com/api/mcp-applications/microsoft-365-copilot Connect Microsoft 365 Copilot to Breakcold MCP. Microsoft 365 Copilot logo Website: [microsoft.com/microsoft-365/copilot](https://www.microsoft.com/microsoft-365/copilot) Use Breakcold through Microsoft 365 Copilot custom connectors when your Microsoft workspace supports MCP connectors. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Ask a Microsoft 365 admin to open the admin center and go to **Copilot > Connectors**. 2. Create a custom connector and choose **Connect to MCP server**. 3. Use the Breakcold MCP endpoint for your region as the connector base URL. 4. Complete the OAuth setup so users can connect with their own Breakcold access. 5. Validate the available Breakcold tools before publishing the connector broadly. # OpenClaw Source: https://docs.breakcold.com/api/mcp-applications/openclaw Connect OpenClaw to Breakcold MCP. OpenClaw logo Website: [openclaw.ai](https://openclaw.ai) Use Breakcold as a Streamable HTTP MCP server in OpenClaw so OpenClaw agents can use approved Breakcold tools. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup Add Breakcold to OpenClaw's MCP server registry: ```bash theme={null} openclaw mcp set breakcold '{"url":"https://mcp.breakcold.com/mcp/v1","transport":"streamable-http","headers":{"Authorization":"Bearer "}}' ``` Verify the server is saved: ```bash theme={null} openclaw mcp show breakcold --json ``` OpenClaw's MCP registry stores server definitions for runtimes that consume MCP servers. Use a Breakcold bearer key and keep the key scoped to the minimum tools your agent needs. # TypingMind Source: https://docs.breakcold.com/api/mcp-applications/typingmind Connect TypingMind to Breakcold MCP. TypingMind logo Website: [typingmind.com](https://www.typingmind.com) Use Breakcold as a remote MCP server in TypingMind to make Breakcold tools available inside TypingMind chats. ## MCP endpoint ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` ## Setup 1. Open TypingMind and go to the **MCP Store** or MCP settings. 2. Choose to add a remote MCP server. 3. Paste the Breakcold MCP endpoint for your region. 4. When TypingMind asks for a connector, use TypingMind Cloud or your private connector. 5. Authenticate with Breakcold, or provide a Breakcold bearer key if TypingMind asks for an API key. # Authentication Source: https://docs.breakcold.com/api/mcp-authentication Authenticate MCP clients with OAuth sign-in or a scoped bearer token. Breakcold MCP supports two authentication methods: OAuth sign-in and bearer-token access. Use the method that matches how your MCP client runs. ## Choose an authentication method Use OAuth when the MCP client supports sign-in and should act as the signed-in Breakcold user. This is the recommended option for user-facing clients such as Claude, ChatGPT, Codex, and Microsoft 365 Copilot. Use a bearer token when the MCP client cannot complete OAuth, or when a service-style agent should use its own scoped access instead of acting as a signed-in user. Both methods use the same MCP endpoint and the same Breakcold permission checks. Tool calls still enforce organization, workspace, scope, and record-level permissions. ## OAuth sign-in Use this MCP URL: ```txt theme={null} https://mcp.breakcold.com/mcp/v1 ``` Configure the `/mcp/v1` URL as a protected resource in your MCP client. Breakcold exposes OAuth metadata at the matching protected-resource URL: ```txt theme={null} /.well-known/oauth-protected-resource/mcp/v1 ``` When the client starts sign-in, Breakcold sends the user through WorkOS AuthKit. After sign-in, MCP tool calls run as that Breakcold user. For Claude Desktop OAuth issues where the browser opens but Claude returns a generic MCP authorization failure, remove the connector and reconnect with the exact MCP URL. If Safari is the default browser, retry with Chrome or another Chromium-based browser, or clear site data for `claude.ai` and the Breakcold AuthKit domain before reconnecting. OAuth is best when: * Each user should connect with their own Breakcold account. * The MCP client can open a browser-based authorization flow. * You want Breakcold user roles and membership changes to apply automatically. ## Bearer token Use bearer-token access for clients that ask for an API key, authorization token, bearer key, custom bearer token, or static header. 1. Open Breakcold. 2. Go to **Settings**. 3. Open **API keys** or the MCP application access settings. 4. Create a key with only the scopes the MCP client needs. 5. Limit the key to the workspaces the client should access. 6. Copy the key immediately and store it in the MCP client's secret manager or an environment variable. Send the key in the `Authorization` header: ```txt theme={null} Authorization: Bearer YOUR_API_KEY ``` Replace `YOUR_API_KEY` with the key copied from Breakcold. Keep the word `Bearer`, then add one space, then paste the key. Bearer-token access is best when: * The MCP client cannot complete OAuth. * An automation should keep running without a user sign-in session. * A service-style agent needs a fixed set of scopes and workspace limits. ## Organization selection For OAuth sign-in, Breakcold can select the organization automatically when the user belongs to exactly one active organization. If the user belongs to more than one active organization, MCP clients should send: ```txt theme={null} X-Breakcold-Organization-Id: YOUR_ORGANIZATION_ID ``` Bearer tokens are already tied to the organization and workspace limits chosen when the key was created. ## Examples Generic header-based MCP client: ```txt theme={null} Authorization: Bearer YOUR_API_KEY X-Breakcold-Organization-Id: YOUR_ORGANIZATION_ID ``` Codex with an environment variable: ```toml theme={null} [mcp_servers.breakcold] url = "https://mcp.breakcold.com/mcp/v1" bearer_token_env_var = "BREAKCOLD_MCP_TOKEN" ``` Direct Streamable HTTP request: ```sh theme={null} curl "https://mcp.breakcold.com/mcp/v1" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ --data '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' ``` ## Common errors `401 Unauthorized` usually means the token is missing, expired, revoked, copied incorrectly, or sent without the `Bearer ` prefix. `403 Forbidden` usually means the token or signed-in user does not have the required scope, workspace access, organization membership, or MCP access is not enabled for the organization. Both 401 and 403 responses include an `X-Request-Id` header. Share this value with Breakcold support if you need help troubleshooting a persistent authorization error. If OAuth fails before the sign-in page opens, confirm the MCP client supports OAuth protected-resource metadata and is using the exact `/mcp/v1` endpoint. If OAuth succeeds in the browser but Claude still reports an MCP authorization failure, disconnect and reconnect the connector, then retry the flow in Chrome to rule out Safari cookie, content-blocker, or callback state issues. # Rate limits Source: https://docs.breakcold.com/api/mcp-rate-limits Understand MCP rate limits and how AI tools should handle them. MCP tool calls use the same protected Breakcold API behind the scenes. This means MCP clients are rate limited just like REST API integrations. An AI assistant can make several tool calls from one user message. For example, one prompt might search records, open a record, read notes, and then update a task. Each tool call counts separately. ## Token costs MCP route-backed tool calls use the same token pricing as REST API routes. Most read tools cost 0.2 tokens per successful call. Write tools cost 0.4 tokens per successful call. The workspace list tool and utility tools `tools_search` and `capabilities_list` are free. ## How limits work Breakcold checks several limits at the same time. A tool call is blocked when any one of those limits is full. | Limit | Current budget | | --------------------------------- | ------------------------------------------------------------------- | | Organization | 600 requests per minute | | Workspace | 300 requests per minute | | MCP application or agent identity | 180 requests per minute | | Route | 120 requests per minute for the same route in the same organization | The limit that matters is the first one you reach. A busy AI tool can hit the MCP application or agent limit even when the rest of the organization is still below its limit. ## What happens when MCP is rate limited When an MCP request is rate limited, Breakcold returns HTTP `429`. MCP clients receive a JSON-RPC error with code `-32029` and message `Public API rate limit exceeded`. When possible, Breakcold also sends a `Retry-After` header in seconds. The response includes an `X-Request-Id` header you can share with Breakcold support to look up the request. ```json theme={null} { "jsonrpc": "2.0", "id": "request_id", "error": { "code": -32029, "message": "Public API rate limit exceeded" } } ``` Some AI tools show this as a normal error message. Others hide the technical details and only tell you to try again later. ## What users should do If your AI tool says it was rate limited, wait a moment and try again. To reduce repeated rate limits: * Ask for smaller tasks. * Avoid asking the assistant to scan everything repeatedly. * Let long-running workflows finish before starting another large one. * Use the same region URL as your workspace. ## What MCP client builders should do If you build or configure an MCP client, respect the `Retry-After` header when it is present. Good client behavior: * Wait before retrying a rate-limited tool call. * Do not retry many tool calls at the same time. * Cache recent reads when it is safe to do so. * Break large jobs into smaller batches. * Show a clear message such as "Breakcold is asking us to slow down. Try again in a moment." # Tools Source: https://docs.breakcold.com/api/mcp-tools Available Breakcold MCP tools. Breakcold MCP exposes tools generated from the same public API contract as the REST API. Each tool call uses the same permissions, token cost, and rate limits as the matching API route. ## Discovery | Tool | What it does | Required scope | Token cost | Rate limit | | ------------------- | -------------------------------------------------------------------------------------------------- | -------------- | ---------- | ------------------------- | | `tools_search` | Search available Breakcold MCP tools by name, description, capability, or required scope. | Authenticated | 0 tokens | MCP session authenticated | | `capabilities_list` | List Breakcold MCP capabilities, granted scopes, and the tools available in each capability group. | Authenticated | 0 tokens | MCP session authenticated | ## Workspaces | Tool | What it does | Required scope | Token cost | Rate limit | | ----------------- | ------------------------------------------------------------- | -------------- | ---------- | ----------------------------- | | `workspaces_list` | List workspaces the authenticated Breakcold actor can access. | Authenticated | 0 tokens | 120 requests/min per tool/org | ## CRM | Tool | What it does | Required scope | Token cost | Rate limit | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- | ---------- | ----------------------------- | | `crm_objects_list` | List CRM object types in a workspace. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_objects_create` | Create a custom CRM object type. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_objects_reorder` | Reorder CRM object types. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_objects_get` | Fetch one CRM object type. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_objects_update` | Update CRM object metadata. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_objects_delete` | Permanently delete a custom CRM object type together with its custom field definitions, field options, and saved views. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_fields_list` | List CRM field definitions. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_fields_create` | Create a CRM field definition. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_fields_reorder` | Reorder CRM fields. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_fields_get` | Fetch one CRM field definition. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_fields_update` | Update a CRM field definition. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_fields_delete` | Permanently delete a custom CRM field definition, its field options and stored values or relations, and remove it from saved view configurations. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_field_options_list` | List CRM field options. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_field_options_create` | Create a CRM field option. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_field_options_reorder` | Reorder CRM field options. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_field_options_update` | Update a CRM field option. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_field_options_delete` | Delete a CRM field option. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_record_views_list` | List CRM record views. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_record_views_create` | Create a CRM record view. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_record_views_reorder` | Reorder CRM record views. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_record_views_get` | Fetch one CRM record view. | `crm:metadata:read` | 0.2 tokens | 120 requests/min per tool/org | | `crm_record_views_update` | Update a CRM record view and replace its saved config. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | | `crm_record_views_delete` | Delete a CRM record view. | `crm:metadata:write` | 0.4 tokens | 120 requests/min per tool/org | ## Records | Tool | What it does | Required scope | Token cost | Rate limit | | -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | ---------- | ----------------------------- | | `records_list` | List or search CRM records. | `records:read` | 0.2 tokens | 120 requests/min per tool/org | | `records_create` | Create one complete CRM record atomically. Supply every required field and a stable idempotency key. When creating a deal from a person, include that person's record id in the deal contact relation field; do not create a partial deal and patch it later. | `records:write` | 0.4 tokens | 120 requests/min per tool/org | | `records_get` | Fetch a CRM record by ID. | `records:read` | 0.2 tokens | 120 requests/min per tool/org | | `records_update` | Update CRM record field values. Multiselect fields append by default; pass multiselectMode: "replace" to overwrite them (omitted options removed, \[] clears). Identity-field changes may start configured automatic enrichment, and matching active webhooks receive field-update events at their external URLs. | `records:write` | 0.4 tokens | 120 requests/min per tool/org | | `records_archive` | Archive a CRM record. | `records:write` | 0.4 tokens | 120 requests/min per tool/org | | `records_restore` | Restore an archived CRM record. | `records:write` | 0.4 tokens | 120 requests/min per tool/org | | `custom_activities_create` | Create a custom activity linked to a CRM record and notify supplied participant users in-app and, when enabled by their preferences, by email. | `records:write` | 0.4 tokens | 120 requests/min per tool/org | ## Tasks | Tool | What it does | Required scope | Token cost | Rate limit | | ---------------- | ------------------------------------------------------------------- | -------------- | ---------- | ----------------------------- | | `tasks_list` | List tasks linked to a record. | `tasks:read` | 0.2 tokens | 120 requests/min per tool/org | | `tasks_create` | Create a task linked to a record. | `tasks:write` | 0.4 tokens | 120 requests/min per tool/org | | `tasks_update` | Update task details. | `tasks:write` | 0.4 tokens | 120 requests/min per tool/org | | `tasks_complete` | Mark a task as done. | `tasks:write` | 0.4 tokens | 120 requests/min per tool/org | | `tasks_delete` | Soft-delete a task so it no longer appears in Breakcold task lists. | `tasks:write` | 0.4 tokens | 120 requests/min per tool/org | ## Notes | Tool | What it does | Required scope | Token cost | Rate limit | | -------------- | ----------------------------------------------------------------------------------------------------------------- | -------------- | ---------- | ----------------------------- | | `notes_list` | List notes linked to a record. | `notes:read` | 0.2 tokens | 120 requests/min per tool/org | | `notes_create` | Create a note linked to a record. Matching active webhooks receive the note-created event at their external URLs. | `notes:write` | 0.4 tokens | 120 requests/min per tool/org | | `notes_get` | Fetch a note by ID. | `notes:read` | 0.2 tokens | 120 requests/min per tool/org | | `notes_update` | Update note content. Matching active webhooks receive the note-updated event at their external URLs. | `notes:write` | 0.4 tokens | 120 requests/min per tool/org | ## Inbox | Tool | What it does | Required scope | Token cost | Rate limit | | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------- | ---------- | ----------------------------- | | `inbox_views_list` | List visible inbox views. | `inbox:views:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_views_create` | Create an inbox view. | `inbox:views:write` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_views_sidebar_get` | Fetch inbox view sidebar layout. | `inbox:views:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_views_sidebar_reorder` | Reorder inbox view sidebar items. | `inbox:views:write` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_views_get` | Fetch one inbox view. | `inbox:views:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_views_update` | Update an inbox view and replace its saved config. | `inbox:views:write` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_views_delete` | Delete an inbox view. | `inbox:views:write` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_conversations_search` | List or search inbox conversations in a workspace, optionally filtered by inbox view or record-link state. | `inbox:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_conversations_compose` | Prepare a new email, LinkedIn, Telegram, or WhatsApp message as a non-sending draft preview by default. Set sendMode to "send" only after the user explicitly confirms immediate delivery. | `inbox:send` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_send_accounts_list` | List inbox accounts you can send from, including the workspaceIntegrationAccountId to use with inbox\_conversations\_compose. | `inbox:send` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_attachments_upload_url_create` | Generate a temporary Convex file-storage upload URL for inbox send attachments without uploading or modifying a file. | `inbox:send` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_conversations_list` | List conversations linked to a record. | `inbox:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_messages_list` | List messages for a conversation. | `inbox:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_conversation_draft_get` | Get your private draft for an inbox conversation, or null when none exists. | `inbox:read` | 0.2 tokens | 120 requests/min per tool/org | | `inbox_conversation_draft_set` | Create or update your private inbox conversation draft. Blank content clears it; HTML is supported for email only. | `inbox:send` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_conversation_draft_clear` | Clear your private draft for an inbox conversation. | `inbox:send` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_messages_send` | Prepare a social message, email reply, or email forward as a non-sending draft preview by default. Set sendMode to "send" only after the user explicitly confirms immediate delivery. | `inbox:send` | 0.4 tokens | 120 requests/min per tool/org | | `inbox_messages_get` | Fetch one inbox message. | `inbox:read` | 0.2 tokens | 120 requests/min per tool/org | ## Meetings | Tool | What it does | Required scope | Token cost | Rate limit | | -------------------------- | ---------------------------------------------------------------- | --------------- | ---------- | ----------------------------- | | `meetings_list` | List workspace meetings with recording and transcript metadata. | `meetings:read` | 0.2 tokens | 120 requests/min per tool/org | | `meetings_get` | Fetch one meeting with recording and transcript metadata. | `meetings:read` | 0.2 tokens | 120 requests/min per tool/org | | `meetings_transcript_list` | List full meeting transcript text in ordered paginated segments. | `meetings:read` | 0.2 tokens | 120 requests/min per tool/org | ## Webhooks | Tool | What it does | Required scope | Token cost | Rate limit | | -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | ---------- | ----------------------------- | | `integration_hooks_create` | Create and activate a Zapier or Make webhook subscription that delivers matching future Breakcold events to the supplied external HTTPS URL. | `webhooks:write` | 0.4 tokens | 120 requests/min per tool/org | | `integration_hooks_delete` | Permanently delete a Zapier or Make instant-trigger hook and its stored delivery logs. | `webhooks:write` | 0.4 tokens | 120 requests/min per tool/org | | `integration_samples_list` | List generated sample payloads for instant triggers. | `webhooks:write` | 0.2 tokens | 120 requests/min per tool/org | # Overview Source: https://docs.breakcold.com/api/overview Breakcold API overview. The Breakcold Public API is available under `/api/v1` on your Breakcold API base URL. Many public API requests consume Breakcold tokens. Most successful read requests cost 0.2 tokens, and successful write requests cost 0.4 tokens. Check each endpoint's token cost before running high-volume scripts or automations. Use the API for records, tasks, notes, and basic inbox workflows. Permanent record deletion is intentionally not part of v1; archive and restore are available instead. ## Webhooks Breakcold can send outbound webhooks when records, notes, tasks, relations, calls, or files change in your workspace. See [Webhooks](/api/webhooks) for delivery headers, signature verification, event types, and payload examples. ## API URL Use this API URL for every workspace. ```txt theme={null} https://rest.breakcold.com/api/v1 ``` The API contract is generated from `packages/backend/convex/public_api/contract.ts`. # Rate limits Source: https://docs.breakcold.com/api/rate-limits Understand REST API rate limits and what to do when you hit one. Rate limits protect Breakcold and your workspace from too many requests at once. They also help keep automations predictable when several tools are connected to the same account. Most users never need to think about rate limits. You only need this guide if an integration, script, or automation starts receiving `429 Too Many Requests`. ## Token costs REST API routes use fixed token pricing. Most read routes cost 0.2 tokens per successful request. Write routes cost 0.4 tokens per successful request. `GET /workspaces` is free. MCP route-backed tool calls use the same token pricing as the matching REST API route. MCP utility tools are free. ## How limits work Breakcold checks several limits at the same time. A request is blocked when any one of those limits is full. | Limit | Current budget | | ---------------------------- | ------------------------------------------------------------------- | | Organization | 600 requests per minute | | Workspace | 300 requests per minute | | User, app, or agent identity | 180 requests per minute | | API key | 180 requests per minute when an API key is used | | Route | 120 requests per minute for the same route in the same organization | The limit that matters is the first one you reach. For example, a script can be under the organization limit but still hit the API key limit if it sends too many requests with the same key. ## What happens when you hit a limit The REST API returns `429 Too Many Requests`. When possible, the response includes a `Retry-After` header in seconds and a `retryAfterMs` value in the JSON body. ```json theme={null} { "error": { "code": "rate_limited", "message": "Public API rate limit exceeded", "requestId": "request_id", "retryAfterMs": 12000 } } ``` ## What your integration should do When you receive `429`, wait before trying again. If the response includes `Retry-After`, wait at least that long. Good retry behavior: * Wait before retrying. * Retry a small number of times. * Add a longer delay after each failed retry. * Avoid sending many retries in parallel. Avoid immediate retry loops. They usually make the limit last longer. ## How to avoid rate limits * Reuse data you already fetched instead of polling the same endpoint repeatedly. * Use pagination instead of asking for very large lists at once. * Queue write actions so they run steadily instead of all at the same second. * Use the narrowest workspace access needed for each key. * Split unrelated automations across separate keys only when they are truly separate workflows. If your integration regularly needs more volume, contact Breakcold support with the route, request volume, workspace, and `requestId` values from the rate-limited responses. # Webhooks Source: https://docs.breakcold.com/api/webhooks Understand outbound Breakcold webhooks, delivery headers, signatures, and event payloads. Breakcold outbound webhooks send events from your workspace to an HTTPS endpoint you control. Use them when another system needs to react to CRM changes such as records, notes, tasks, relations, calls, or files. ## Event categories * [Record Webhooks](/api/webhooks/records): Payloads for record created, updated, and deleted events. * [Note Webhooks](/api/webhooks/notes): Payloads for note created, updated, and deleted events. * [Task Webhooks](/api/webhooks/tasks): Payloads for task created and completed events. * [Relation Webhooks](/api/webhooks/relations): Payloads for relation added and removed events. * [Call Webhooks](/api/webhooks/calls): Payloads for call linked and unlinked events. * [File Webhooks](/api/webhooks/files): Payloads for file uploaded and deleted events. ## Create an endpoint 1. Open Breakcold. 2. Go to **Settings**. 3. Open **Webhook**. 4. Open **Send**. 5. Click **New outbound webhook**. 6. Enter your HTTPS endpoint URL. 7. Select the events you want to receive. 8. Optionally filter deliveries to specific object types. 9. Copy the signing secret. Breakcold only delivers to active endpoints that subscribe to the event. If you add an object type filter, record-based events are only sent when the record belongs to one of those object types. ## Delivery Breakcold sends each webhook as an HTTP `POST` request with a JSON body. Your endpoint should return any `2xx` status when it accepts the delivery. If delivery fails, Breakcold retries up to 3 attempts total. Retries currently run after about 5 seconds and then 30 seconds. Requests time out after 10 seconds. Endpoints are disabled after 50 consecutive delivery failures. Delivery logs are kept for 30 days. ## Headers Each delivery includes these headers. | Header | Description | | ----------------------- | -------------------------------------------------------- | | `Content-Type` | Always `application/json`. | | `X-Webhook-Signature` | HMAC-SHA256 signature in the format `sha256=HEX_DIGEST`. | | `X-Webhook-Event` | The event name, such as `record.created`. | | `X-Webhook-Delivery-Id` | The delivery event id. Use it for idempotency. | | `X-Webhook-Timestamp` | Unix timestamp in seconds used for signing. | | `User-Agent` | `Breakcold-Webhooks/1.0`. | ## Verify signatures Use the endpoint signing secret to verify that a request came from Breakcold. The signed string is `${timestamp}.${rawBody}`, where `timestamp` is the `X-Webhook-Timestamp` header and `rawBody` is the exact request body string. ```js theme={null} import { createHmac, timingSafeEqual } from "node:crypto"; export function verifyBreakcoldWebhook({ rawBody, timestamp, signatureHeader, signingSecret, }) { const expected = "sha256=" + createHmac("sha256", signingSecret) .update(timestamp + "." + rawBody) .digest("hex"); return timingSafeEqual( Buffer.from(signatureHeader), Buffer.from(expected) ); } ``` ## Payload envelope Every event uses the same envelope. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.created", "data": { "id": "record_id", "objectType": "person", "objectTypeName": "Person", "name": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": "ada@example.com", "company": "Analytical Engines Ltd" }, "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:00:00.000Z" } } ``` | Field | Description | | ------------- | ------------------------------------------------------------------- | | `event` | Event type. | | `eventId` | Unique delivery event id. | | `timestamp` | ISO timestamp generated when Breakcold builds the delivery payload. | | `workspaceId` | Workspace where the event happened. | | `data` | Event-specific payload. | ## Test event The endpoint test button sends a `webhook.test` event with a valid signature. Use it to confirm that your endpoint is reachable and that signature verification works. ```json theme={null} { "event": "webhook.test", "eventId": "evt_test_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "data": { "message": "This is a test webhook delivery from Breakcold." } } ``` ## Events | Event | Category | When it fires | | ------------------ | ------------- | ------------------------------------------------------ | | `record.created` | CRM | Fired when a new record is created. | | `record.updated` | CRM | Fired when a record field is updated. | | `record.deleted` | CRM | Fired when a record is deleted. | | `note.created` | Notes | Fired when a note is added to a record. | | `note.updated` | Notes | Fired when a note is edited. | | `note.deleted` | Notes | Fired when a note is deleted. | | `task.created` | Tasks | Fired when a task is linked to a record. | | `task.completed` | Tasks | Fired when a task is marked as completed. | | `relation.added` | CRM | Fired when a relation is added between records. | | `relation.removed` | CRM | Fired when a relation is removed between records. | | `call.linked` | Communication | Fired when a call recording is linked to a record. | | `call.unlinked` | Communication | Fired when a call recording is unlinked from a record. | | `file.uploaded` | Files | Fired when a file is uploaded to a record. | | `file.deleted` | Files | Fired when a file is deleted from a record. | ## Payload examples ### `record.created` Fired when a new record is created. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.created", "data": { "id": "record_id", "objectType": "person", "objectTypeName": "Person", "name": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": "ada@example.com", "company": "Analytical Engines Ltd" }, "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:00:00.000Z" } } ``` ### `record.updated` Fired when a record field is updated. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.updated", "data": { "id": "record_id", "objectType": "person", "objectTypeName": "Person", "name": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": "ada@newdomain.example" }, "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:10:00.000Z" } } ``` ### `record.deleted` Fired when a record is deleted. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.deleted", "data": { "id": "record_id", "deleted": true } } ``` ### `note.created` Fired when a note is added to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.created", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up", "contentPlain": "Discussed pricing and next steps.", "author": "Jane Smith", "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:00:00.000Z" } } ``` ### `note.updated` Fired when a note is edited. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.updated", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up", "contentPlain": "Send the pricing deck before Friday.", "author": "Jane Smith", "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:15:00.000Z" } } ``` ### `note.deleted` Fired when a note is deleted. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.deleted", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up" } } ``` ### `task.created` Fired when a task is linked to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "task.created", "data": { "recordId": "record_id", "taskId": "task_id", "title": "Send proposal", "status": "todo", "dueAt": "2026-03-20T09:00:00.000Z" } } ``` ### `task.completed` Fired when a task is marked as completed. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "task.completed", "data": { "recordId": "record_id", "taskId": "task_id", "title": "Send proposal", "status": "done", "dueAt": "2026-03-20T09:00:00.000Z" } } ``` ### `relation.added` Fired when a relation is added between records. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "relation.added", "data": { "sourceRecordId": "record_id", "targetRecordId": "related_record_id", "fieldDefinitionId": "field_definition_id", "fieldSlug": "company" } } ``` ### `relation.removed` Fired when a relation is removed between records. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "relation.removed", "data": { "sourceRecordId": "record_id", "targetRecordId": "related_record_id", "fieldDefinitionId": "field_definition_id", "fieldSlug": "company" } } ``` ### `call.linked` Fired when a call recording is linked to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "call.linked", "data": { "recordId": "record_id", "callId": "call_recording_id", "recordName": "Ada Lovelace", "meetingTitle": "Discovery call" } } ``` ### `call.unlinked` Fired when a call recording is unlinked from a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "call.unlinked", "data": { "recordId": "record_id", "callId": "call_recording_id", "recordName": "Ada Lovelace", "meetingTitle": "Discovery call" } } ``` ### `file.uploaded` Fired when a file is uploaded to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "file.uploaded", "data": { "recordId": "record_id", "fileName": "contract.pdf" } } ``` ### `file.deleted` Fired when a file is deleted from a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "file.deleted", "data": { "recordId": "record_id", "fileName": "contract.pdf" } } ``` # Call Webhooks Source: https://docs.breakcold.com/api/webhooks/calls Payloads for call linked and unlinked events. Call webhooks fire when a call recording is linked to or unlinked from a record. All call webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | --------------- | ------------- | ------------------------------------------------------ | | `call.linked` | Communication | Fired when a call recording is linked to a record. | | `call.unlinked` | Communication | Fired when a call recording is unlinked from a record. | ## Payload examples ### `call.linked` Fired when a call recording is linked to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "call.linked", "data": { "recordId": "record_id", "callId": "call_recording_id", "recordName": "Ada Lovelace", "meetingTitle": "Discovery call" } } ``` ### `call.unlinked` Fired when a call recording is unlinked from a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "call.unlinked", "data": { "recordId": "record_id", "callId": "call_recording_id", "recordName": "Ada Lovelace", "meetingTitle": "Discovery call" } } ``` # File Webhooks Source: https://docs.breakcold.com/api/webhooks/files Payloads for file uploaded and deleted events. File webhooks fire when a file is uploaded to or deleted from a record. All file webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | --------------- | -------- | ------------------------------------------- | | `file.uploaded` | Files | Fired when a file is uploaded to a record. | | `file.deleted` | Files | Fired when a file is deleted from a record. | ## Payload examples ### `file.uploaded` Fired when a file is uploaded to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "file.uploaded", "data": { "recordId": "record_id", "fileName": "contract.pdf" } } ``` ### `file.deleted` Fired when a file is deleted from a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "file.deleted", "data": { "recordId": "record_id", "fileName": "contract.pdf" } } ``` # Note Webhooks Source: https://docs.breakcold.com/api/webhooks/notes Payloads for note created, updated, and deleted events. Note webhooks fire when a note attached to a record is created, edited, or deleted. All note webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | -------------- | -------- | --------------------------------------- | | `note.created` | Notes | Fired when a note is added to a record. | | `note.updated` | Notes | Fired when a note is edited. | | `note.deleted` | Notes | Fired when a note is deleted. | ## Payload examples ### `note.created` Fired when a note is added to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.created", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up", "contentPlain": "Discussed pricing and next steps.", "author": "Jane Smith", "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:00:00.000Z" } } ``` ### `note.updated` Fired when a note is edited. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.updated", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up", "contentPlain": "Send the pricing deck before Friday.", "author": "Jane Smith", "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:15:00.000Z" } } ``` ### `note.deleted` Fired when a note is deleted. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "note.deleted", "data": { "recordId": "record_id", "noteId": "note_id", "title": "Follow up" } } ``` # Record Webhooks Source: https://docs.breakcold.com/api/webhooks/records Payloads for record created, updated, and deleted events. Record webhooks fire when a CRM record is created, updated, or deleted. Create and update payloads include the current record snapshot and fields keyed by field slug. All record webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | ---------------- | -------- | ------------------------------------- | | `record.created` | CRM | Fired when a new record is created. | | `record.updated` | CRM | Fired when a record field is updated. | | `record.deleted` | CRM | Fired when a record is deleted. | ## Payload examples ### `record.created` Fired when a new record is created. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.created", "data": { "id": "record_id", "objectType": "person", "objectTypeName": "Person", "name": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": "ada@example.com", "company": "Analytical Engines Ltd" }, "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:00:00.000Z" } } ``` ### `record.updated` Fired when a record field is updated. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.updated", "data": { "id": "record_id", "objectType": "person", "objectTypeName": "Person", "name": "Ada Lovelace", "fields": { "name": "Ada Lovelace", "email": "ada@newdomain.example" }, "createdAt": "2026-03-19T12:00:00.000Z", "updatedAt": "2026-03-19T12:10:00.000Z" } } ``` ### `record.deleted` Fired when a record is deleted. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "record.deleted", "data": { "id": "record_id", "deleted": true } } ``` # Relation Webhooks Source: https://docs.breakcold.com/api/webhooks/relations Payloads for relation added and removed events. Relation webhooks fire when a relationship between two records is added or removed. All relation webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | ------------------ | -------- | ------------------------------------------------- | | `relation.added` | CRM | Fired when a relation is added between records. | | `relation.removed` | CRM | Fired when a relation is removed between records. | ## Payload examples ### `relation.added` Fired when a relation is added between records. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "relation.added", "data": { "sourceRecordId": "record_id", "targetRecordId": "related_record_id", "fieldDefinitionId": "field_definition_id", "fieldSlug": "company" } } ``` ### `relation.removed` Fired when a relation is removed between records. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "relation.removed", "data": { "sourceRecordId": "record_id", "targetRecordId": "related_record_id", "fieldDefinitionId": "field_definition_id", "fieldSlug": "company" } } ``` # Task Webhooks Source: https://docs.breakcold.com/api/webhooks/tasks Payloads for task created and completed events. Task webhooks fire when a task is linked to a record or marked as completed. All task webhooks use the same webhook envelope documented in [Webhooks](/api/webhooks). The `data` object changes by event type. ## Events | Event | Category | When it fires | | ---------------- | -------- | ----------------------------------------- | | `task.created` | Tasks | Fired when a task is linked to a record. | | `task.completed` | Tasks | Fired when a task is marked as completed. | ## Payload examples ### `task.created` Fired when a task is linked to a record. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "task.created", "data": { "recordId": "record_id", "taskId": "task_id", "title": "Send proposal", "status": "todo", "dueAt": "2026-03-20T09:00:00.000Z" } } ``` ### `task.completed` Fired when a task is marked as completed. ```json theme={null} { "eventId": "evt_abc123", "timestamp": "2026-03-19T12:00:00.000Z", "workspaceId": "workspace_id", "event": "task.completed", "data": { "recordId": "record_id", "taskId": "task_id", "title": "Send proposal", "status": "done", "dueAt": "2026-03-20T09:00:00.000Z" } } ```