Webhook Events

We use webhooks to provide you with real-time, asynchronous updates on the lifecycle of your crypto payments (deposits) and payouts. When a significant event or status change occurs, Orbital will send an automated HTTP POST request to the notifyUrl you configured in your API call. This allows your application to react instantly to payment statuses without the need for constant polling.

Pay-In Status Events

You’ll receive these statuses as your customer completes a deposit, from initiation to final credit. These statuses apply to both Rapid Deposit and Invoice deposit types.

Transaction StatusDescription
initiatedThe deposit invoice has been created and is awaiting the payer's cryptocurrency transfer. This is the first status that appears on the transaction.
pendingThe funds have been sent but there is at least one blockchain confirmation that is not in a final state (complete/failed).
paidThe deposit has received sufficient blockchain confirmations and the invoiced amount was paid accurately. For merchants not using an FX contract, this indicates the funds have been received in the original cryptocurrency.
confirmedThe deposit has been fully confirmed on the blockchain. For fiat-target deposits, conversion is typically in progress or completed. This can also appear if a deposit is made after an invoice has expired for merchants not using an FX contract.
creditedThe deposited funds have been successfully converted (if applicable) and credited to your merchant balance. For merchants using an FX contract, this confirms the funds are available in their fiat account.
underpaidThe payer sent an amount less than the required invoice amount. This applies regardless of whether an FX contract is used. Funds are typically held pending resolution.
overpaidThe payer sent an amount greater than the required invoice amount. This applies regardless of whether an FX contract is used. Funds are typically held pending resolution.
awaiting_underpaid_refundThe deposit was underpaid, and a refund for the partial amount is being processed.
refundedThe deposit (either full or partial) has been successfully refunded to the payer.
expiredThe deposit invoice has expired without sufficient funds being received.
failedThe deposit failed due to blockchain failures, KYT, or another unexpected reason. Funds will be returned to the user if they were sent.
info_requiredThe deposit is on hold pending additional information from the user, often related to Travel Rule requirements.

Pay-In Status Webhook Example

{
  "event": "crypto_payment_status_updated",
  "externalId": "12345-USDT-67240287-67",
  "id": "312abe61-d106-40ec-b4e2-e95607e9706d",
  "status": "pending",
  "type": "deposit",
  "updatedAt": "2025-08-29T11:56:11.908Z"
}

Payout Status Events

You’ll receive these statuses as your payout request is processed, from creation through completion, or if it fails.

Transaction StatusDescription
initiatedWhen an end-user initiates a withdrawal, this is the first status that appears on the transaction.
pendingThe funds have been sent but there is at least one blockchain confirmation that is not in a final state (complete/failed).
debitedThis status is only relevant for merchants who have chosen to include an FX contract. Their fiat account has been debited for the pay out funds on the Orbital platform.
confirmedThe pay out funds have at least one blockchain confirmation in a complete state.
failedThe pay out has failed due to low balance or KYT. In a latter case, funds will be returned to the merchant.

Payout Status Webhook Example

{
  "event": "crypto_payment_status_updated",
  "externalId": "26Whu4566R40X7VG2L32RT",
  "id": "2222d525-f5a4-4119-ab6f-4e6c398b3896",
  "status": "initiated",
  "type": "payout",
  "updatedAt": "2025-08-29T11:59:54.014Z"
}

KYT (Know Your Transaction) Events

Orbital performs a KYT (Know Your Transaction) check on both pay-ins and pay-outs for all integration types. You will receive a webhook containing two key fields: kytStatus and kytAlertLevel.

KYT Status

This field indicates the review status of the transaction.

KYT StatusDescription
no_reviewThe transaction has passed initial automated checks and does not require manual review.
in_reviewThe transaction is currently under manual review by the compliance team.
dismissedA potential issue was reviewed and dismissed. The transaction can proceed.
flaggedThe transaction has been flagged for a potential issue and requires further investigation.
heldThe transaction is temporarily on hold pending the outcome of a review.
refundedThe transaction has been refunded due to a KYT compliance issue.

KYT Alert Level

This field indicates the associated risk level of the transaction.

KYT Alert LevelDescription
unknownThere is not enough data to categorize the transaction risk.
lowThe transaction risk is low.
mediumThe transaction risk is medium.
highThe transaction risk is high.
severeThe transaction risk is severe.

KYT Webhook Examples

  • KYT Update for a Deposit
{
  "event": "crypto_payment_kyt_status_updated",
  "externalId": "M133455-USDT-67240287-556",
  "id": "312ggabe61-d106-40ec-b4e2-e95607e9706d",
  "kytAlertLevel": "unknown",
  "kytStatus": "no_review",
  "type": "deposit",
  "updatedAt": "2025-08-29T11:57:39.399Z"
}
  • KYT Update for a Payout
{
  "event": "crypto_payment_kyt_status_updated",
  "externalId": "26WRghhuu40X7VG2L32RT",
  "id": "2222d5fff25-f5a4-4119-ab6f-4e6c398b3896",
  "kytAlertLevel": "unknown",
  "kytStatus": "no_review",
  "type": "payout",
  "updatedAt": "2025-08-29T12:00:55.318Z"
}

Travel Rule Update & Auto Refund Events

You’ll receive these updates when you need to update Travel Rule info or when a deposit refund is being processed.

Transaction StatusDescription
info_requiredThe payment is on hold. Use the API to provide the missing Travel Rule info within the allowed window. If not supplied in time, the payment is automatically refunded.
refundedThe payment was automatically refunded to the original sender. Check the refund transaction in the API GET /crypto/payment/:id. No retry is possible; the user must create a new deposit.

Travel Rule Missing Info Webhook Example

{
  "id": "33be948f-7f87-450d-8e03-14f5948027f4",
  "externalId": "merchant-externalid-infoff-06-05-2025-002",
  "status": "info_required",
  "type": "deposit",
  "updatedAt": "2025-06-05T07:39:38.037Z",
  "event": "crypto_payment_status_updated"
}

Auto-Refund Webhook Example

{
  "id": "37ddcef4-7e83-43ed-a581-46f579a71437",
  "externalId": "incoming-channel-missing-tr-details-2025-06-16T19:21:40",
  "status": "refunded",
  "type": "deposit",
  "updatedAt": "2025-06-16T19:25:40.222Z",
  "event": "crypto_payment_status_updated"
}