This example uses only the public Ingest Engine API. You will create:
- an HTTP source table named
webhook_events;
- an Iceberg sink table named
webhook_events_iceberg; and
- a SQL pipeline that connects them.
Prerequisites
You need:
- the base URL for your Ingest Engine API;
- an Ingest Engine API bearer token;
- an Iceberg REST catalog; and
- an S3 or S3-compatible warehouse accessible to the Ingest Engine.
Set the API values used by the requests:
Replace every value enclosed in <...> before sending the requests. Keep API, catalog, source, and storage credentials out of source control.
1. Create the HTTP source table
Create a source that accepts JSON objects at /webhooks:
The response is the created connection table. Save its id if you need to retrieve it later with GET /api/v1/connection_tables/{id}.
The source bearer token authenticates event producers. It is separate from the Ingest Engine API token used to create and inspect resources.
2. Create the Iceberg sink table
Create an append-only Iceberg table in the webhooks namespace. This configuration uses a REST catalog and partitions records by the hour of event_time.
If the catalog allows anonymous access, omit catalog.auth. If the warehouse uses the default cloud credential chain, remove the static access keys and any custom endpoint settings that are unnecessary for your environment.
The response contains the sink connection table and its id.
3. Validate the pipeline query
Table names in the SQL query are the name values from the two table requests.
A valid query returns an empty errors array and a non-null graph. Resolve any reported errors before creating the pipeline.
4. Create the pipeline
The response includes the pipeline id, its execution graph, and actionText. Save the id for the monitoring requests.
The checkpoint interval is expressed in microseconds; 10000000 is 10 seconds. Iceberg commits occur at checkpoints, so data can become visible after the source request has been accepted.
5. Send an event
Set HTTP_SOURCE_URL to the public base URL assigned to this HTTP source in your Ingest Engine environment. This URL is separate from INGESTION_ENGINE_API_URL and should not be an internal service address.
A successful response means the source accepted the event. It does not by itself confirm that the event has been committed to Iceberg.
6. Monitor the pipeline
Retrieve the pipeline using the id returned when it was created:
Use actionText and actionInProgress to follow the requested pipeline action. Inspect the pipeline’s jobs to see their runtime state and any failure message:
Each job in the response has a state field. If a job fails, failureMessage contains the reported cause.
Continue
Continue with Filesystem to Iceberg for an API-driven pipeline that reads files from object storage. Last modified on October 1, 2026