Monitoring and debugging
Observe your integration in production: the analytics overview endpoint, webhook delivery outcomes, and how to debug missed webhooks.
Analytics overview
GET /api/v1/overview returns a summary of your account's activity for a time window (default: the last 7 days):
curl 'https://vantage.tryterra.co/api/v1/overview?since=2026-07-01T00:00:00Z' \
-u 'YOUR_DEV_ID:YOUR_API_KEY'{
"orders": {
"total": 37,
"by_status": {
"order.completed": 29,
"order.processing": 8
}
},
"results": {
"total": 25,
"missing": 4
},
"webhooks": {
"failed_total": 2,
"daily": [
{ "date": "2026-07-18", "failed": 1 },
{ "date": "2026-07-19", "failed": 1 }
]
}
}orders.by_statusis keyed by the currentorder.*fulfilment status.results.missingcounts delivered/completed orders still waiting on results - drill into them withGET /api/v1/orders?missing=true(Managing orders).webhooks.failed_total> 0 means deliveries to your endpoint are failing - investigate below.
Webhook delivery outcomes
GET /api/v1/webhook-deliveries lists the terminal outcome of every webhook delivery attempt against your endpoint, newest first (keyset-paginated):
outcome
Meaning
delivered
Your endpoint returned 2xx
rejected
Your endpoint returned a non-retryable 4xx - the event was not retried
invalid
No webhook URL was registered when the event fired
dead_lettered
All retries exhausted - the event is parked and can be replayed by Terra
replayed
A previously failed event was re-delivered
Filter with outcome=<value>, or outcome=failed as a shorthand for rejected|invalid|dead_lettered.
attempts and final_status_code describe the delivery round that produced the outcome: for delivered and rejected they carry the HTTP attempt count and the final response code of that round. Dead-lettered records are written from the parked event after all retry rounds are exhausted and carry attempts: 0 and final_status_code: 0 - they are not a count of the total calls made (see Webhooks for the retry schedule).
Debugging a missed webhook
Check the delivery outcome -
GET /api/v1/webhook-deliveriesfiltered around the time window.rejectedmeans your endpoint returned an error;invalidmeans the event was undeliverable (usually no URL registered);dead_letteredmeans your endpoint was unreachable through all retries.Cross-check current state via REST -
GET /api/v1/orders/{orderID}shows the authoritativestatus_historyregardless of what was delivered.Verify your registered URL -
GET /api/v1/clients/webhook-urlfor the environment in question (sandbox and production hold separate URLs).Check your signature verification - a verifier that rejects valid signatures shows up as
rejectedwith afinal_status_codeof 401. Common causes: verifying against a re-serialized body instead of the raw bytes, or treating the timestamp as milliseconds (it is Unix seconds). See Webhooks.Contact support with the
event_id(or theX-Terra-Trace-Idheader value from a delivery) - it uniquely identifies the delivery for Terra's team, and dead-lettered events can be replayed.
Last updated
Was this helpful?