Skip to main content
The ingest API is the write path: it receives batches of traces from the SDK, prices each span, and stores them. Most users never call it directly, the foglamp SDK does, but it’s a plain HTTP and JSON API you can call from any language.

Base URL

The interactive playground below defaults to the self-hosted URL.

Authentication

Authenticate every request with a Foglamp API key (fl_...). Two equivalent forms are accepted:
Keys are stored as hashes, so only the prefix is ever shown again after creation. A revoked key is rejected immediately.

Responses

A 202 means the batch was accepted into a write buffer that is stored shortly after. Treat 202 as success.

Two kinds of 429

A 429 can mean two different things, and they need different handling:
  • Per-key rate limit: too many requests per second for one key. The response includes a Retry-After header. Back off and retry after it.
  • Plan quota exceeded: the organization’s monthly span quota is used up. This is a billing condition, not rate limiting. It carries no Retry-After, and retrying will not work until the plan is upgraded or the quota resets.
The foglamp SDK does not retry failed batches. A failed send goes to onError and the batch is dropped, so telemetry never blocks or retries inside your app. If you call the ingest API directly, add your own retry with backoff for transport errors and rate-limit 429s, and treat a quota 429 as final.

Payload shape

The body is a versioned batch: version: "v1" plus a traces array (1-1000 traces, each with 1-2000 spans). See the data model for what each field means, or the Ingest endpoints in the sidebar for the full schema and a live playground.