Skip to main content
POST
Ingest an event with an ingest key straight into a named dataset

Authorizations

Authorization
string
header
required

An ik_live_… ingest key. Stored hashed; the plaintext is returned once at creation.

Headers

Idempotency-Key
string

Optional; a repeat key short-circuits with 200 before quota is charged.

X-Hookie-Signature
string

Required only when the key has require_signature. Format 't=,v1=', v1 = HMAC-SHA-256 over '.'.

Path Parameters

ingest_key
string
required

The plaintext ingest key (looked up by its full SHA-256 hash, #177; revoked and expired keys never match).

dataset
string
required

Dataset name. Its presence switches routing to identity: the whole payload is stored as one record in this dataset and the project's mapping rules are NOT consulted. The name is used as given (no validation, no lookup). The key's dataset_default is not used here: it is the fallback only when the path names no dataset.

Body

Form encodings are flattened (repeats become arrays, file parts become {filename, type, size} with the bytes discarded); every other body is parsed as JSON first, and textual non-JSON bodies are stored as {body, content_type} (see ingestEvent); an empty body becomes {}. On this route a payload that is not a JSON object (array or scalar) is wrapped as {"value": } before it is stored. Over 1,000,000 bytes yields 413.

Any JSON value; objects are stored field-for-field, arrays and scalars are wrapped as {value: }.

Response

Duplicate - this endpoint (or, on /v1/ingest, this ingest key) already stored a submission with the same dedup key, so the retry is answered with the first submission's id and nothing is stored or counted (ING-9, #193). The dedup key is, in order: an Idempotency-Key header; else a provider delivery id kept the same across that provider's retries - webhook-id (Standard Webhooks), svix-id, X-GitHub-Delivery, X-Shopify-Webhook-Id, X-Gitlab-Event-UUID, I-Twilio-Idempotency-Token, Linear-Delivery, Twitch-Eventsub-Message-Id, X-Atlassian-Webhook-Identifier; else the body field the endpoint's dedupe_path names, when that field holds a non-empty string or a number (HK-006); else Stripe's event id (a body with object 'event' and an evt_ id) or Slack's event_id (type 'event_callback'). The key space is the ENDPOINT's, not the workspace's: two endpoints may receive the same key. deduplicated_by names which source matched. A request that loses the unique-index race has already been counted against the monthly quota.

submission_id
string
required
idempotent
enum<boolean>
required
Available options:
true
deduplicated_by
enum<string>

Which dedup source matched.

Available options:
idempotency-key,
standard-webhooks,
svix,
github,
shopify,
gitlab,
twilio,
linear,
twitch,
atlassian,
stripe,
slack