Create bridged address
curl --request POST \
--url https://integration-api.meshconnect.com/api/v1/bridging/address \
--header 'Content-Type: application/json' \
--header 'X-Client-Id: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--data '
{
"userId": "<string>",
"transactionId": "<string>",
"origin": {
"network": "<string>",
"asset": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
}
'import requests
url = "https://integration-api.meshconnect.com/api/v1/bridging/address"
payload = {
"userId": "<string>",
"transactionId": "<string>",
"origin": {
"network": "<string>",
"asset": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
}
headers = {
"X-Client-Secret": "<api-key>",
"X-Client-Id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Client-Secret': '<api-key>',
'X-Client-Id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: '<string>',
transactionId: '<string>',
origin: {network: '<string>', asset: '<string>'},
destination: {network: '<string>', asset: '<string>', address: '<string>'}
})
};
fetch('https://integration-api.meshconnect.com/api/v1/bridging/address', 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://integration-api.meshconnect.com/api/v1/bridging/address",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'transactionId' => '<string>',
'origin' => [
'network' => '<string>',
'asset' => '<string>'
],
'destination' => [
'network' => '<string>',
'asset' => '<string>',
'address' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Client-Id: <api-key>",
"X-Client-Secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://integration-api.meshconnect.com/api/v1/bridging/address"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-Secret", "<api-key>")
req.Header.Add("X-Client-Id", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://integration-api.meshconnect.com/api/v1/bridging/address")
.header("X-Client-Secret", "<api-key>")
.header("X-Client-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://integration-api.meshconnect.com/api/v1/bridging/address")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Client-Secret"] = '<api-key>'
request["X-Client-Id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"message": "<string>",
"displayMessage": "<string>",
"errorHash": "<string>",
"teamCode": "<string>",
"errorType": "<string>",
"errorData": null,
"content": {
"selectedRoute": {
"origin": {
"network": "<string>",
"asset": "<string>"
},
"bridgingAddress": {
"address": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
},
"constraints": {
"minimumAmount": "<string>",
"maximumAmount": "<string>",
"expirationTime": 123,
"singleUseAddress": true
},
"tracking": {
"userId": "<string>",
"transactionId": "<string>",
"transferId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"warnings": [
"<string>"
]
}
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}Authorizations
Contact Mesh to get client Secret
Contact Mesh to get client Id
Body
Request body for POST /api/v1/bridging/address.
Used for both pay-in (deposit) and platform-led pay-in (withdrawal-style) bridging: the address returned is always on Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.Origin; funds must be sent there before Mesh can deliver to Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.Destination.
This endpoint is idempotent per Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.TransactionId scoped to Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.UserId and B2B client/environment: retries with the same origin, destination (network, asset, and Org.Front.Core.Contracts.Models.Bridging.Headless.BridgingDestinationWithAddressSpec.Address), and route return the same deposit address. Reusing the same Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.TransactionId with any different origin or destination (network, asset, or address) returns an error and does not create a second transfer preview.
Your platform's unique identifier for the end user initiating this transfer. Combined with Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.TransactionId to enforce idempotency.
1 - 384Your platform's unique identifier for this transfer attempt. Use a stable, collision-free ID (e.g. an order ID or UUID). Re-submitting the same value will return the previously created address rather than generating a new one.
1 - 128The pay-in leg: network and asset whose single-use deposit address is returned.
In deposit flows this is usually the end-user’s wallet chain and token; in withdrawal-style flows
it is the omnibus source chosen from POST /api/v1/bridging/routes/withdrawal.
Must match a configured route from deposit or withdrawal route discovery.
Show child attributes
Show child attributes
The payout leg: network, asset, and address where bridged funds are delivered (e.g. user’s receive address in a deposit flow, or their withdrawal address in a platform-led flow). Must match a route from deposit or withdrawal route discovery together with Org.Front.Core.Contracts.Models.Bridging.Headless.CreateBridgedAddressRequest.Origin.
Show child attributes
Show child attributes
Response
Bridging deposit address created or retrieved (idempotent hit).
ok, serverFailure, permissionDenied, badRequest, notFound, conflict, tooManyRequest, locked, unavailableForLegalReasons A message generated by the API
User-friendly display message that can be presented to the end user
An error grouping hash from string components and caller information. Used by bugsnag on FE for correct error grouping
Opaque team code for error routing. Resolved from exception origin or caller file path via CODEOWNERS. Format: 2-character code (e.g., "7K", "M2"). Use for alerting/routing, not display.
Strictly-typed error type that is explaining the reason of an unsuccessful status of the operation. All possible error types are available in the documentation.
Response body for POST /api/v1/bridging/address.
Contains the deposit address on the origin chain, constraints, tracking IDs, and warnings so you can either guide an end user to broadcast the pay-in or have your platform/custody system broadcast the pay-in to the origin-chain deposit address in a withdrawal-style flow, then track delivery to the destination address to completion.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://integration-api.meshconnect.com/api/v1/bridging/address \
--header 'Content-Type: application/json' \
--header 'X-Client-Id: <api-key>' \
--header 'X-Client-Secret: <api-key>' \
--data '
{
"userId": "<string>",
"transactionId": "<string>",
"origin": {
"network": "<string>",
"asset": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
}
'import requests
url = "https://integration-api.meshconnect.com/api/v1/bridging/address"
payload = {
"userId": "<string>",
"transactionId": "<string>",
"origin": {
"network": "<string>",
"asset": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
}
headers = {
"X-Client-Secret": "<api-key>",
"X-Client-Id": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Client-Secret': '<api-key>',
'X-Client-Id': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
userId: '<string>',
transactionId: '<string>',
origin: {network: '<string>', asset: '<string>'},
destination: {network: '<string>', asset: '<string>', address: '<string>'}
})
};
fetch('https://integration-api.meshconnect.com/api/v1/bridging/address', 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://integration-api.meshconnect.com/api/v1/bridging/address",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '<string>',
'transactionId' => '<string>',
'origin' => [
'network' => '<string>',
'asset' => '<string>'
],
'destination' => [
'network' => '<string>',
'asset' => '<string>',
'address' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Client-Id: <api-key>",
"X-Client-Secret: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://integration-api.meshconnect.com/api/v1/bridging/address"
payload := strings.NewReader("{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Client-Secret", "<api-key>")
req.Header.Add("X-Client-Id", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://integration-api.meshconnect.com/api/v1/bridging/address")
.header("X-Client-Secret", "<api-key>")
.header("X-Client-Id", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://integration-api.meshconnect.com/api/v1/bridging/address")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Client-Secret"] = '<api-key>'
request["X-Client-Id"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"<string>\",\n \"transactionId\": \"<string>\",\n \"origin\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\"\n },\n \"destination\": {\n \"network\": \"<string>\",\n \"asset\": \"<string>\",\n \"address\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"message": "<string>",
"displayMessage": "<string>",
"errorHash": "<string>",
"teamCode": "<string>",
"errorType": "<string>",
"errorData": null,
"content": {
"selectedRoute": {
"origin": {
"network": "<string>",
"asset": "<string>"
},
"bridgingAddress": {
"address": "<string>"
},
"destination": {
"network": "<string>",
"asset": "<string>",
"address": "<string>"
}
},
"constraints": {
"minimumAmount": "<string>",
"maximumAmount": "<string>",
"expirationTime": 123,
"singleUseAddress": true
},
"tracking": {
"userId": "<string>",
"transactionId": "<string>",
"transferId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"warnings": [
"<string>"
]
}
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}{
"status": "ok",
"message": "",
"errorHash": "1cbbee0c",
"teamCode": "P4",
"errorType": ""
}