Send a notification
POST /api/v2/webhooks/{webhook_id}/feed-source — tell Simetrik a file is ready and where to fetch it.
Your systems call this endpoint every time a file is ready. It queues the download and replies with the response you configured when you registered the webhook.
POST /api/v2/webhooks/{webhook_id}/feed-sourceHeaders
| Header | Required | Value |
|---|---|---|
Content-Type | Yes | application/json |
X-Correlation-Id | No | Your track id for this file. The header name is configurable per source — see Key concepts. |
No authentication headers. The webhook_id in the path identifies the caller.
Body
Any JSON object, as long as the field your file_mapping points at is in it. Simetrik reads two values and ignores everything else, so you can send the payload your platform already emits without reshaping it.
{
"event": "file.ready",
"data": {
"file": {
"url": "https://files.example.com/settlements/2026-09-14.csv",
"name": "settlements-2026-09-14.csv"
}
}
}With url_field: "data.file.url" and filename_field: "data.file.name", that resolves cleanly.
How fields are resolved
| Notation | Reads |
|---|---|
file_url | The top-level file_url key. |
data.file.url | Nested objects, one level per dot. |
files[0].url | The first element of the files array, then its url. |
If the file name can't be resolved, Simetrik generates one. The URL is not optional: without it the notification is rejected.
Example
curl -X POST "$SIMETRIK_INGESTION_URL/api/v2/webhooks/61171_wh_9d200105/feed-source" \
-H "Content-Type: application/json" \
-H "X-Correlation-Id: settlement-2026-09-14-run-3" \
-d '{
"data": {
"file": {
"url": "https://files.example.com/settlements/2026-09-14.csv",
"name": "settlements-2026-09-14.csv"
}
}
}'Response
Whatever you configured in response_config — by default:
{"status": "accepted"}This reply means the notification was accepted and the file was queued. It says nothing about the download, which hasn't started yet. To learn whether the file actually made it, use status notifications — there is no polling endpoint.
Errors
These come from Simetrik and override your configured response.
| Status | Body | What it means |
|---|---|---|
400 | Missing webhook_id in path | The path had no webhook id. |
400 | Invalid JSON payload | The body wasn't valid JSON, or wasn't a JSON object. |
400 | Missing required field: <field> | The url_field your webhook is mapped to wasn't found in the payload. |
400 | Track id message | The track id was over 128 characters or contained control characters. |
404 | Webhook not found | No webhook matches that id. Check for a truncated or rotated value. |
500 | Internal server error | Unexpected error. Safe to retry. |
Retrying
There's no deduplication: two notifications with the same URL queue two files, and both are delivered to the source. Retry on 500 and on network failures, but not on 400 or 404 — those won't get better on their own.
Sending your own track id is what makes retries manageable. It comes back on every status notification, so you can tell a retry from a genuinely new file.