Inbound
Send via API

Websites, chatbots and other systems can send requests with POST /api/inbound. Copy-paste examples are on Sources & How It Works (/inbound-sources).

Sources & How It Works page with the Website Forms and API cards

Request

  • Header Authorization: Bearer YOUR_INBOUND_API_KEY. The key is the INBOUND_API_KEY environment variable of the ProtoCRM server, so it is not issued in the app: whoever runs your ProtoCRM installation sets it and gives it to you. A missing or wrong key returns 401.
  • Header Content-Type: application/json.
  • Organization: the x-organization-id header or organizationId in the body (the header wins). Without either, the call fails with 422.
FieldNotes
channelTypevoice, email, form or chat (aliases such as call, web, chatbot, mail; unknown values become form)
providerFree text, e.g. website; defaults to generic
externalIdYour own unique ID; used to ignore duplicates
structuredtrue to send fields, otherwise send rawText
contactname, email, phone, company, taxId (structured)
contentsubject, message, transcript (structured)
rawTextRequired when not structured; AI extracts the fields

Example (structured)

{
  "organizationId": "YOUR_ORG_ID",
  "channelType": "form",
  "provider": "website",
  "externalId": "contact-form-12345",
  "structured": true,
  "contact": { "name": "Maria Papadopoulou", "email": "maria@example.com" },
  "content": { "subject": "Quote request", "message": "We need a quote." }
}

A successful response includes { "success": true, "duplicate": false, "signalId": "...", "status": "queued" }. Sending the same externalId again returns "duplicate": true.

Tips

  • Call it from your server, never from the browser page: the key must stay secret.
  • The item then follows the normal steps in inbound/how-it-works.