- Hosted ingest — you push data to Splendor over HTTP (files or structured records), into storage Splendor manages. This is the simplest path and the one a webhook uses.
- BYOC (bring your own cloud) — your data stays in your own S3 bucket and Splendor reads it via a cross-account role, auto-ingesting new objects as they land.
Hosted ingest over HTTP
Create a source, mint an ingest token, then push data to it. Creating sources and tokens requires an admin role; pushing data uses the ingest token.1
Create a hosted source
A hosted source declares the dataset your data feeds. Splendor detects each file’s type automatically, so one source can hold records and images together (see Sources & images).The response includes the numeric
source_id you use to mint a token. The source_key (github-events here) is what you put in ingest URLs.2
Mint an ingest token
An ingest token authorizes pushing data to one source. It carries the source and tenant itself, so requests to the ingest endpoints need only this token — no tenant header. The plaintext token is returned once; store it securely.Re-POST to rotate the token;
DELETE the same path to revoke it.3
Push data
Send data to the source with the ingest token as a bearer credential. Two shapes:
- Structured records / events —
POST /v1/ingest/sources/{source_key}/logstakes a batch and returns202 Accepted. Send either a top-level JSON array of event objects withContent-Type: application/json, or newline-delimited JSON (one object per line) withContent-Type: application/x-ndjson. Gzip is allowed. - Files — for larger objects, use the resumable multipart upload (
POST /v1/ingest/sources/{source_key}/uploads→ sign parts → complete). See Ingest a dataset.
The ingest endpoints (
/v1/ingest/sources/...) authenticate with the ingest token only — no X-Splendor-Tenant-Id header. The token already names the source and tenant. The response reports how many events were received and a fragment_id for the batch.4
Confirm and search
A
202 means accepted, not yet searchable. Track progress with ingest runs, then search once indexed.Connect a webhook
Most SaaS tools can POST an event to a URL when something happens. Thelogs endpoint expects a batch (a JSON array or NDJSON) and an ingest-token Authorization header, while a webhook delivers one event at a time as a single JSON object — and usually can’t attach that header. A tiny relay bridges the gap: it wraps each incoming event in a one-element array and forwards it with the token. The relay holds the token, so it never lives in the provider’s config.
1
Create a source and mint a token
Follow the two steps above to create a source (say
source_key = "stripe-events") and mint its ingest token.2
Deploy a small relay
Stand up a function (a Cloudflare Worker, Lambda behind a URL, or any HTTP endpoint) that receives the provider’s webhook, wraps the body, and forwards it to the Optionally verify the provider’s own signature (Stripe’s
logs endpoint with the ingest token. About a dozen lines:Stripe-Signature, GitHub’s X-Hub-Signature-256) in the relay before forwarding.3
Point the provider's webhook at the relay
In the provider’s dashboard, set the webhook payload URL to your relay’s URL. Trigger a test event, then check
GET /v1/ingest/runs for the dataset and run a search. Events flow in continuously from then on.BYOC — read from your own S3 bucket
With bring-your-own-cloud, your data never leaves your account: it stays in your S3 bucket and Splendor reads it in place. New objects are ingested automatically as they land — no uploads. How it works:- Cross-account access. You grant Splendor a scoped, read-only IAM role on your bucket/prefix, gated by a unique
external_id(so only Splendor can assume it, and only for your account). - Auto-ingest. An EventBridge rule on your bucket forwards each
Object Createdevent to Splendor’s ingest queue; the matching source is resolved by bucket and key prefix, and the object is ingested.
BYOC requires provisioning the cross-account role and EventBridge wiring in your account (Splendor supplies a Terraform module and the role/external-id values). It is operator-assisted today — contact us to enable BYOC for a bucket. Once the role and event wiring exist, registering the source above is all that’s left.
Related
Ingest a dataset
Upload a file through a hosted source with a resumable multipart upload.
Stream logs
Send a continuous stream of records to a source.
Onboard a source with an agent
Have a coding agent wire up a webhook source for you.
Connectors
Manage connector instances for third-party systems.