Talk to your AI agent to run Simetrik. →
SimetrikDocs

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-source

Headers

HeaderRequiredValue
Content-TypeYesapplication/json
X-Correlation-IdNoYour 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

NotationReads
file_urlThe top-level file_url key.
data.file.urlNested objects, one level per dot.
files[0].urlThe 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.

StatusBodyWhat it means
400Missing webhook_id in pathThe path had no webhook id.
400Invalid JSON payloadThe body wasn't valid JSON, or wasn't a JSON object.
400Missing required field: <field>The url_field your webhook is mapped to wasn't found in the payload.
400Track id messageThe track id was over 128 characters or contained control characters.
404Webhook not foundNo webhook matches that id. Check for a truncated or rotated value.
500Internal server errorUnexpected 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.

On this page