Skip to content

Ingress Webhooks

Ingress webhooks are the simplest inbound integration: create a webhook in the RocketLead console, get a unique URL + token, and POST JSON to it from any external system (Zapier, Make, n8n, custom backends, form vendors). Each POST creates a lead entry in the bound Lead Pool.

Use ingress webhooks when:

  • You don’t want to manage a Bearer token (e.g., a no-code platform that doesn’t support custom auth headers).
  • The sending system already has its own retry/idempotency story.
  • You only need to push leads in — you don’t need to read or update existing data.

For richer integrations (read leads, create bookings, update lead state), use the Connect API.

MethodPathAuth
POST/public/ingress_webhooks/:idx-rocketlead-ingress-token header

The :id is the UUID of the ingress webhook configured in the console.

Send the token as a custom header:

POST /public/ingress_webhooks/<uuid>
x-rocketlead-ingress-token: <64-hex-token>
Content-Type: application/json

The token is a 64-character hex string. Anything missing or wrong returns 401 Invalid webhook token.

In the RocketLead console:

  1. Go to Settings → Ingress Webhooks (or the dedicated section in the table).
  2. Click Create, pick the destination Lead Pool.
  3. Copy the URL and the token — the token is shown once.

Tokens can be rotated (which invalidates the old one) but can’t be retrieved after creation.

{
data: Record<string, string | string[] | null>;
customFieldData?: Record<string, unknown>;
}
FieldNotes
dataFree-form. Becomes the lead entry’s data column. Schema is auto-inferred — first POST locks the inferred types per key.
customFieldDataOptional. Validated against the org’s custom fields. Unknown custom-field IDs return 400.
Terminal window
curl -X POST https://api.rocketlead.io/public/ingress_webhooks/<uuid> \
-H "Content-Type: application/json" \
-H "x-rocketlead-ingress-token: <token>" \
-d '{
"data": {
"firstName": "Maria",
"lastName": "Schmidt",
"email": "maria@example.com",
"phone": "+49 30 1234567",
"interest": "Anfängerkurs"
},
"customFieldData": {
"<custom-field-uuid>": "instagram_ad"
}
}'

The created TableEntry (full shape — see Connect API → Data Model → TableEntry):

{
"id": "<uuid>",
"tableId": "<uuid>",
"organizationId": "<uuid>",
"data": {"firstName": "Maria", "...": "..."},
"leadStateId": "<uuid>",
"createdAt": "2026-05-10T12:00:00Z"
}
  • A tableEntries row is inserted into the bound Lead Pool.
  • The default lead state for that pool is applied automatically (must exist; otherwise the request is rejected with 400).
  • table.entry.added automation event fires on commit.

See Automations → Triggers for the event catalog.

The bound table’s schema is inferred from the first POST per key:

// First POST locks types
data: { email: "x@x", age: 25, optedIn: true }
// → tableSchema: { email: "string", age: "number", optedIn: "boolean" }
// Subsequent POSTs must match
data: { email: 123 }
// → 400: type mismatch — email expected string, got number
Source valueInferred type
stringstring
numbernumber
booleanboolean
array of stringsstring[]
null(skipped — doesn’t infer a type)

If a value can’t be coerced to the existing type, the request fails with 400 and a typeErrors block describing the conflict.

Every POST creates a new lead entry. There’s no built-in deduplication. If your sender retries on a transient failure, you’ll get duplicate leads.

Two practical options:

  1. Dedupe upstream — let the sender (Zapier, Make, etc.) ensure exactly-once delivery using their built-in retry semantics.
  2. Dedupe downstream — automate a “find duplicate by email/phone” step in your workflow that merges or skips dupes after the fact.
StatusCause
400 Validation failedBody shape is wrong, custom field ID unknown, or schema type mismatch.
400 No default lead stateThe bound pool has no default leadStateId — set one in the console.
401 Invalid webhook tokenMissing or wrong x-rocketlead-ingress-token.
404 Webhook not foundThe :id doesn’t match any webhook in your org.
500Internal — retry with backoff.
IngressConnect API
AuthCustom header + URL secretAuthorization: Bearer rocketlead_*
DirectionInbound only (push leads in)Bidirectional (read/write)
ScopesNone — token = full pool accessread / write / admin
SetupOne webhook per pool, in-consoleOne token per integration
Best forNo-code platforms, simple lead pushCRMs, custom backends, complex sync
SchemaAuto-inferred per poolValidated against shared schemas