Skip to main content
The LayerZero Scan API lets you programmatically look up crosschain messages and transactions. You can search by message ID, transaction hash, GUID, wallet address, or OApp address. Results include message state, source and destination transaction details, DVN verification status, and pathway configuration. Use it to track bridging activity, check message progress, or feed LayerZero data into your own dashboards.

Available Methods

The API exposes endpoints under a versioned path (e.g., /v1/), including:
  • /messages/latest
    Get the most recent messages.
  • /messages/pathway/{pathwayId}
    Retrieve messages associated with a specific pathway.
  • /messages/tx/{tx}
    Lookup messages using a transaction hash.
  • /messages/status/{status}
    List messages filtered by their current status.
  • /messages/month/{date}
    Get messages or statistics for a given month.
  • /messages/oapp/{eid}/{address}
    Fetch messages by endpoint ID and OApp address.
  • /messages/guid/{guid}
    Lookup messages by their unique GUID.
  • /messages/wallet/{srcAddress}
    Retrieve messages initiated by a specific wallet address.
  • /openapi
    Access the full OpenAPI specification for further integration details.
For interactive testing, refer to the Swagger UI for your network:

Response status reference

Each message returned by the API has status fields at multiple levels: a top-level message status, and sub-statuses for the source, verification, and destination stages. These tell you exactly where a message is in its lifecycle. For a high-level overview of what each message status means and how to debug it, see Message Statuses Overview.

Message status

The status.name field on each message object:
StatusDescription
INFLIGHTMessage is in transit between chains
CONFIRMINGWaiting for block confirmations to confirm finality
DELIVEREDDelivered and executed on the destination chain
FAILEDDelivered but execution failed on the destination chain
BLOCKEDCannot progress due to configuration issues
PAYLOAD_STOREDPayload stored on destination, awaiting manual execution
APPLICATION_BURNEDBurned by the receiving application
APPLICATION_SKIPPEDSkipped by the receiving application
UNRESOLVABLE_COMMANDCommand cannot be resolved (lzRead only)
MALFORMED_COMMANDCommand is malformed (lzRead only)

Source status

The source.status field tracks the source transaction through finality:
StatusDescription
WAITINGWaiting for the source transaction to appear on-chain
VALIDATING_TXTransaction found; waiting for block confirmations to reach the configured finality window
SUCCEEDEDTransaction confirmed on-chain after the configured finality window
WAITING_FOR_HASH_DELIVEREDWaiting for transaction hash delivery (internal processing)
UNRESOLVABLE_COMMANDCommand cannot be resolved (lzRead only)
MALFORMED_COMMANDCommand is malformed (lzRead only)

Verification status

The verification.dvn.status field tracks DVN quorum progress:
StatusDescription
WAITINGWaiting for DVN verifications
QUORUM_REACHEDRequired DVN quorum reached, pending commit
SUCCEEDEDVerifications committed on the destination chain
The verification.sealer.status field tracks the commit (sealing) of DVN verifications on the destination chain:
StatusDescription
WAITINGWaiting for verifications to be committed
VALIDATING_TXCommit transaction submitted
SUCCEEDEDVerifications committed on the destination chain
FAILEDCommit transaction failed
Individual DVN statuses are under verification.dvn.dvns[address].status:
StatusDescription
WAITINGDVN has not yet submitted verification
VALIDATING_TXDVN verification transaction submitted
SUCCEEDEDDVN verification confirmed
WAITING_FOR_ULN_CONFIGWaiting for ULN configuration
FAILEDDVN verification failed

Destination status

The destination.status field tracks lzReceive execution on the destination chain:
StatusDescription
WAITINGWaiting for execution
VALIDATING_TXExecution transaction submitted, confirming
SUCCEEDEDExecuted on the destination chain
FAILEDExecution failed on the destination chain
SIMULATION_REVERTEDlzReceive or lzCompose simulation reverted
PAYLOAD_STOREDPayload stored, requires manual execution
RESOLVED_PAYLOAD_SIZE_NOT_PAIDResolved payload size fee not paid (lzRead only)
The destination.nativeDrop.status field tracks native token drops:
StatusDescription
WAITINGNative drop not yet executed
VALIDATING_TXNative drop transaction submitted
SUCCEEDEDNative drop executed
FAILEDNative drop failed
N/ANo native drop for this message
The destination.lzCompose.status field tracks composed message execution:
StatusDescription
WAITINGlzCompose not yet called
VALIDATING_TXlzCompose transaction submitted
SUCCEEDEDlzCompose executed successfully
FAILEDlzCompose execution failed
SIMULATION_REVERTEDlzCompose simulation reverted
N/ANo compose for this message
WAITING_FOR_COMPOSE_SENT_EVENTWaiting for the compose sent event

Checking transaction finality

To check whether a source transaction has reached finality, query the message by transaction hash and look at source.status:
curl -X 'GET' \
  'https://scan.layerzero-api.com/v1/messages/tx/{txHash}' \
  -H 'accept: application/json'
The source.status field progresses as:
WAITING → VALIDATING_TX → SUCCEEDED
  • VALIDATING_TX: The transaction has been found on-chain but the configured block confirmations have not been reached yet. DVNs are still waiting.
  • SUCCEEDED: The required confirmations have passed. The transaction is finalized and the message is progressing through verification and execution.
For OFTs, once source.status is VALIDATING_TX or later, the token debit (burn or lock) has occurred and the PacketSent event has been emitted. See Confirming status for more detail.