Skip to main content

Events Reference

Events Reference​

Morph Payments notifies your application of payin order lifecycle changes by sending an HTTP POST request to the webhook URL you configured. Each request delivers a single order status event as a JSON body.

Payout and refund write APIs do not emit these events. Poll List Payouts / Get Payout or List Refunds for terminal success / failed.

Every request is signed. Before trusting a payload, verify the signature as described in Signature Verification — without verification, an attacker could forge webhook requests to your endpoint. As an additional safeguard, also restrict your endpoint to Morph Payments' egress IP addresses, listed in Signature Verification.

Delivery​

PropertyValue
MethodPOST
Content-Typeapplication/json
TargetThe webhook URL registered for your merchant account
SuccessYour endpoint returns any 2xx status code
FailureAny non-2xx response, timeout, or connection error

Respond with a 2xx status code as soon as you have accepted the event. Perform any slow processing asynchronously — a slow response is treated as a failed delivery and will be retried.

Event types​

The event type is carried in the status field of the payload.

statusMeaning
successThe order was paid successfully. paid_at is set.
failedThe order failed.
expiredThe order expired before it was paid.

Payload​

The webhook body is a JSON object with the following fields.

FieldTypeDescription
event_idstringUnique identifier for this event. Use it for idempotency (see below).
platform_order_idstringMorph Payments order identifier.
merchant_idstringYour merchant identifier.
payee_order_idstringYour own order reference supplied when the order was created.
statusstringOrder status: success, failed, or expired.
amountstringOrder amount as a decimal string. Never parse as a float.
pay_tokenstringToken used for payment.
pay_networkstringNetwork the payment was made on.
tx_hashstringOn-chain transaction hash.
source_typestringOrigin of the order.
source_idstringIdentifier within the source.
receiving_networkstringNetwork funds were received on.
receiving_addressstringAddress funds were received at.
receiving_token_addressstringToken contract address for the received funds.
payer_addressstringAddress that paid the order.
paid_atintegerPayment time in Unix milliseconds. 0 when status is not success.
reference_idstringYour own business reference, if you supplied one when creating the invoice. Empty string when not provided.
event_timeintegerTime the event occurred, in Unix milliseconds.
created_atintegerOrder creation time, in Unix milliseconds.
updated_atintegerLast update time, in Unix milliseconds.
note

Amounts are decimal strings and timestamps are integer Unix milliseconds. Always handle amount as a string to avoid precision loss.

Example​

{
"event_id": "evt_...",
"platform_order_id": "ord_...",
"merchant_id": "mch_...",
"payee_order_id": "your-order-...",
"status": "success",
"amount": "12.500000",
"pay_token": "USDC",
"pay_network": "morph",
"tx_hash": "0x...",
"source_type": "checkout",
"source_id": "chk_...",
"receiving_network": "morph",
"receiving_address": "0xReceiver...",
"receiving_token_address": "0xToken...",
"payer_address": "0xPayer...",
"paid_at": 1752566400000,
"reference_id": "your-ref-...",
"event_time": 1752566400500,
"created_at": 1752566100000,
"updated_at": 1752566400500
}

Idempotency​

The same event may be delivered more than once — for example when your endpoint was slow to respond and a retry was triggered before your 2xx was received.

Treat event_id as the idempotency key. Record the event_id values you have already processed and ignore duplicates.

Retries​

If a delivery does not receive a 2xx response, Morph Payments retries the event using an exponential backoff schedule. There are up to 5 retry attempts:

RetryWait after previous attempt
11 minute
25 minutes
315 minutes
460 minutes
5240 minutes

After all retries are exhausted without a 2xx response, the event is marked as undeliverable and no further attempts are made.