Skip to main content
Version: Mainnet

FAQ

1. How do I get started with the Relayer API?

2. What are the chain ID mappings?

Chain ID mappings can be found here: Supported Networks

3. What are common issues why proof verification would fail and how do I resolve this?

  • Most of the common errors are due to incorrect structure and formatting required for the proof type that a user is trying to submit. Check that your code is properly submitting the correct requested field based on one of the supported proof types and versions.
  • All proof submissions require the following fields: proofData , proofType, and vkRegistered . Within proofData the fields proof and vk are also required.
  • For requirements for each proof type, refer here: Supported Proofs.
  • If vkRegistered is set to true in the request, make sure the verification key is registered; otherwise there will be an error for using an unregistered verification key hash. In order to check that the verification key is registered, use the /register-vk endpoint on Relayer. If the verification key is registered, it will return with the verification key hash that can then be used in the submit proof request.

4. How do I check if my attestation is published?

The chain ID needs to be defined when calling the submit-proof endpoint. After the attestation is published, the job status will be updated to “Aggregated”. The job status and the aggregation details can be found from the /job-status endpoint.

curl -X GET "https://relayer-api-testnet.horizenlabs.io/api/v1/job-status/{apiKey}/6fb39e27-ab7c-11f0-a9f5-2ed83da2b73c" \
-H "Content-Type: application/json"
{
"jobId": "6fb39e27-ab7c-11f0-a9f5-2ed83da2b73c",
"status": "Aggregated",
"statusId": 6,
"proofType": "groth16",
"chainId": 845320009,
"createdAt": "2025-10-17T17:12:19.000Z",
"updatedAt": "2025-10-17T17:13:04.000Z",
"txHash": "0xf5c81f4896c980224ae8c7f6852f9b27c5869da896141782065f5c71388b06dd",
"blockHash": "0xb8fe72aef6b4ac0cff5702ced59eb8e2d147c57c1267d3d7b89eb1bcd944e120",
"aggregationId": 18555,
"statement": "0x6ba0adac9febf7a8cdbef31b5e1799af9557784b41a7f46af94ab9dbecf37081",
"aggregationDetails": {
"receipt": "0x24f5a00876d55fc142846e17b41540fc9aa4c223d53fdd8f5b77f79627d2adc2",
"receiptBlockHash": "0x90435b1c565e832010c684670ae8d17c520820b469abb4a6d0ced566e18c63ce",
"root": "0x24f5a00876d55fc142846e17b41540fc9aa4c223d53fdd8f5b77f79627d2adc2",
"leaf": "0x6ba0adac9febf7a8cdbef31b5e1799af9557784b41a7f46af94ab9dbecf37081",
"leafIndex": 7,
"numberOfLeaves": 8,
"merkleProof": [
"0xc59014864835a71d88385ffe9f6321626818c19df1fa1c2b52a6ab5a62ca4467",
"0x8612679ddadc54ee066d1eaed079dcfc5a02c383f5e0782a6b85d765d13554a5",
"0x8f41f883c53b1e1b7cb1ba58450374f538a534ecfbdc2092e8c5158d1d9ec279"
]
}
}

On the attestation contract, use the verifyProofAggregation method. It will return true if the attestation was successful: Screenshot of the verifyProofAggregation method on the explorer, showing all the fields (domainId, aggregationId, leaf, merklePath, leafCount, index)

5. How long does it take for an aggregation to finalize?

Aggregation timing depends on the chain you’re targeting. Each chain collects a batch of proofs, and an aggregation happens either when the batch fills up or when a set amount of time passes, whichever comes first. While the exact timing can vary based on how many proofs are submitted, aggregations for each chain will occur at most at the intervals listed below:

NetworkChainTime
MainnetBase2 mins

6. How do I register my verification key?

First, ensure the type of proof that you are submitting adheres to the proper format required (i.e. Check that you are not submitting ultrahonk proofs when your circuit code is for ultraplonk). The Relayer API has a /register-vk endpoint and should be used to register your verification key.

7. How do I get an API key?

8. How do I check transactions on zKVerify?