2 min read
When it fires
decision.completed is emitted when a lending decision is reached. It fires once per occurrence; a redelivery of the same occurrence carries the same event id.
If your endpoint does not return a 2xx within the timeout, delivery is retried on an exponential backoff schedule — see Webhook delivery and retries. Design your handler to be idempotent so a redelivered event is safe to process twice.
Example delivery
{
"id": "evt_DECI7X",
"type": "decision.completed",
"created": "2026-07-04T10:00:00Z",
"livemode": true,
"api_version": "2026-07-01",
"data": {
"object": {
"id": "dec_5H2N8",
"enquiry_id": "enq_9F3K2P",
"outcome": "approved",
"amount": 25000,
"currency": "GBP",
"term_months": 12
}
}
}
Handling it
A common handler will advance the customer to the offer or decline screen. Verify the signature first, acknowledge with 200 within 10 seconds, then do the work asynchronously. The underlying resource is the same shape the post enquiries endpoint returns, so you can re-fetch current state if you need it.
Frequently asked questions
Can decision.completed arrive more than once?
Yes. At-least-once delivery means a redelivery is possible after a slow acknowledgement or a retry. Deduplicate on the event id — see idempotency.
Is data.object the live decision?
It is a snapshot taken when the event fired. If the decision may have changed since, re-fetch it from the API for the authoritative current state.
Funding for UK limited companies
Credicorp lends to your company, not to you personally — short-term working capital with no personal guarantee. See what your business could access.