Skip to main content

Events Reference

Events Reference

Morph Payments notifies your application of 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.

Every request is signed. Before trusting a payload, verify the signature as described 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.
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_9f2c1a7b3d",
"platform_order_id": "ord_20260715_0001",
"merchant_id": "mch_123456",
"payee_order_id": "your-order-42",
"status": "success",
"amount": "12.500000",
"pay_token": "USDC",
"pay_network": "morph",
"tx_hash": "0xabc123...",
"source_type": "checkout",
"source_id": "chk_001",
"receiving_network": "morph",
"receiving_address": "0xReceiver...",
"receiving_token_address": "0xToken...",
"payer_address": "0xPayer...",
"paid_at": 1752566400000,
"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.