CoinGate POSTs a contact callback to your server every time a Payment-Channel contact's status changes. Use it to mirror the contact's verification state in your own system, surface KYC progress to your end user, and react to a suspended / rejected contact (e.g. block the customer from opening a new channel until they re-submit documents).
API Callback DocumentationThe callback is delivered as a
POSTrequest with aapplication/jsonbody. For shared callback behavior — retry policy, IP allowlist, manual resend — see the API Callbacks reference.
When the callback fires
| Event | Meaning |
|---|---|
| contact.status.verified | KYC passed. Documents are approved and the channel stays active. Terminal "happy path" state. |
| contact.status.suspended | All incoming payments on this contact's channel are placed on hold pending compliance review. Funds are not credited until compliance reviews the contact. |
| contact.status.rejected | KYC failed or the contact triggered a compliance rule. The channel is set to disabled and any incoming payments are marked invalid. |
Request
| Property | Value |
|---|---|
| Method | POST |
| URL | The Payment Channel's callback_url |
| Content-Type | application/json |
| User-Agent | CoinGate Payment Channel Contact Callback |
| Body | JSON object — see Payload below |
Payload
{
"event": "contact.status.rejected",
"object": "contact",
"data": {
"id": 4821,
"external_contact_id": "user-9f2c14",
"compliance_status": "rejected",
"rejection_reason": "Documents could not be verified. Please re-upload a valid government-issued ID."
}
}