curl --request GET \
--url https://payment-gw.production-mainnet.atum.xyz/v1/defaultsimport requests
url = "https://payment-gw.production-mainnet.atum.xyz/v1/defaults"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://payment-gw.production-mainnet.atum.xyz/v1/defaults', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payment-gw.production-mainnet.atum.xyz/v1/defaults",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payment-gw.production-mainnet.atum.xyz/v1/defaults"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payment-gw.production-mainnet.atum.xyz/v1/defaults")
.asString();require 'uri'
require 'net/http'
url = URI("https://payment-gw.production-mainnet.atum.xyz/v1/defaults")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"chain_id": "eip155:84532",
"quote_selector": "0xd0f080E23F95571D26eEb1FAD24a5F3d66835195",
"escrow_contract": "0xa61a0C025943Aa79B73D8D07E3aDbEe1873738b4",
"fulfillment_proxy": "0x09A5a0d6955E5394A661Cd9E7007076fa63B4158",
"fulfillment_verifier": {
"account": "0x27050EE47befC43F4dF7807a7AA8073039e5fa89",
"endpoint": "https://veri-fill.example.com"
},
"permit2_contract": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"deposit_witness_version": 4,
"tokens": [
{
"symbol": "USDC",
"address": "0x036cbd53842c5426634e7929541ec2318f3dcf7e",
"decimals": 6
}
],
"svm_signature_cluster_id": "devnet",
"svm_signature_domain_version": 2
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}Get chain defaults
Fetch the Payment Gateway’s live chain defaults: contract addresses per CAIP-2 chain, and which chains you can actually pay on, instead of hardcoding them.
curl --request GET \
--url https://payment-gw.production-mainnet.atum.xyz/v1/defaultsimport requests
url = "https://payment-gw.production-mainnet.atum.xyz/v1/defaults"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://payment-gw.production-mainnet.atum.xyz/v1/defaults', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payment-gw.production-mainnet.atum.xyz/v1/defaults",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://payment-gw.production-mainnet.atum.xyz/v1/defaults"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://payment-gw.production-mainnet.atum.xyz/v1/defaults")
.asString();require 'uri'
require 'net/http'
url = URI("https://payment-gw.production-mainnet.atum.xyz/v1/defaults")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"chain_id": "eip155:84532",
"quote_selector": "0xd0f080E23F95571D26eEb1FAD24a5F3d66835195",
"escrow_contract": "0xa61a0C025943Aa79B73D8D07E3aDbEe1873738b4",
"fulfillment_proxy": "0x09A5a0d6955E5394A661Cd9E7007076fa63B4158",
"fulfillment_verifier": {
"account": "0x27050EE47befC43F4dF7807a7AA8073039e5fa89",
"endpoint": "https://veri-fill.example.com"
},
"permit2_contract": "0x000000000022D473030F116dDEE9F6B43aC78BA3",
"deposit_witness_version": 4,
"tokens": [
{
"symbol": "USDC",
"address": "0x036cbd53842c5426634e7929541ec2318f3dcf7e",
"decimals": 6
}
],
"svm_signature_cluster_id": "devnet",
"svm_signature_domain_version": 2
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}{
"code": "INVALID_SOURCE_ASSET",
"message": "The source asset identifier is not a valid CAIP-19 asset.",
"request_id": "req_123456789",
"payment_id": "0xc7108e200d11580e7e75185991084b42a535af588ba8267cd0d1e7df089e5c9c",
"docs_url": "<string>",
"domain": "PAYMENT_GATEWAY",
"retry_classification": "RECONCILE_THEN_DECIDE",
"request_id_reusable": false
}chain_id you get every chain the gateway serves, which also makes this the simplest check that the gateway is reachable. A chain that isn’t fully configured is left out of that listing, and an empty address is a chain you cannot pay on. See Contract addresses.Query Parameters
CAIP-2 chain identifier. Omit it, or send it empty, to receive every chain the gateway serves, keyed by chain id.
Response
Chain defaults. A single object when chain_id was supplied, otherwise an object keyed by CAIP-2 chain id.
- Option 1
- Option 2
Either one chain's defaults or every chain keyed by CAIP-2 chain id, depending on whether chain_id was supplied. A top-level chain_id identifies the first.
CAIP-2 identifier of the chain these defaults describe, normalised to lower case.
"eip155:84532"
The account named as the reserver in the deposit authorization. Sign against this exact value; a deposit reserved by anyone else is rejected.
"0xd0f080E23F95571D26eEb1FAD24a5F3d66835195"
The escrow the deposit is made into, and the spender of the token approval. Empty when the chain is not fully configured.
"0xa61a0C025943Aa79B73D8D07E3aDbEe1873738b4"
The contract that pays the receiver. Read this from the DESTINATION chain's defaults, not the source chain's. Empty when the chain is not fully configured.
"0x09A5a0d6955E5394A661Cd9E7007076fa63B4158"
The service that attests settlement, and the account it signs with.
Show child attributes
Show child attributes
The Permit2 this chain's escrow verifies against, sent only when it is not the canonical deployment. When absent, use the canonical Permit2 address for the chain. EVM and Tron only.
1"0x000000000022D473030F116dDEE9F6B43aC78BA3"
Which deposit witness this chain's escrow expects. 4 and above select the four-member witness, 3 the two-member one; absent means four. EVM and Tron only - on Solana this is carried by svm_signature_domain_version.
x >= 34
Tokens this chain's escrow accepts for deposit. Absent when the gateway has no listing for the chain, which does not mean no token is accepted.
Show child attributes
Show child attributes
Solana only. The cluster the escrow's signing domain is bound to, needed to build the deposit hash. Absent for EVM and Tron.
"devnet"
Solana only. Version of the escrow's signing domain. Absent for EVM and Tron.
x >= 12