Draft API Preview for the MorphosisBlock Payment API. This is the proposed lifecycle for the first sandbox deposit contract. It does not describe a currently available service.

Payment states

A payment has one current status. Treat webhook events as notifications to refresh your local view, not as permission to skip your own order, amount, and currency checks. The payment resource is the read model. Event names do not create a second, competing lifecycle.

Proposed transitions

This transition diagram is normative only for reviewing the draft. The final implementation must be tested before the lifecycle can become a public guarantee.

Safe fulfilment rule

Only paid permits fulfilment. Even then, compare all of the following against your locally persisted order:
  • payment_id
  • external_reference
  • Requested currency, decimal amount, and minimum-unit amount
  • Payment-instruction asset, network, destination, and exact amount
  • The event_id already processed by your webhook consumer
Make fulfilment idempotent. A repeated retrieval, webhook delivery, or worker run must not produce a second ledger entry, entitlement, shipment, or receipt.

Handling submission_unknown

An unknown outcome is not success and is not a reason to create another payment. Retain the original external_reference and Idempotency-Key, mark the local order for recovery, and wait for an authoritative response or state update. Because this preview does not represent a deployed implementation, it does not promise a recovery duration. Merchant timeout and customer messaging policies must remain conservative until the operational contract is approved.