curl --request PATCH \
--url https://api.chainrails.io/api/v1/intents/{id}/status \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "COMPLETED"
}
'import requests
url = "https://api.chainrails.io/api/v1/intents/{id}/status"
payload = { "status": "COMPLETED" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'COMPLETED'})
};
fetch('https://api.chainrails.io/api/v1/intents/{id}/status', 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://api.chainrails.io/api/v1/intents/{id}/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'COMPLETED'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.chainrails.io/api/v1/intents/{id}/status"
payload := strings.NewReader("{\n \"status\": \"COMPLETED\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.chainrails.io/api/v1/intents/{id}/status")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"COMPLETED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chainrails.io/api/v1/intents/{id}/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"COMPLETED\"\n}"
response = http.request(request)
puts response.read_body{
"id": 6,
"client_id": "e1ee3675-cb26-4a76-8206-a84f86e85862",
"sender": "0xdA3ECb2E5362295E2b802669dD47127A61d9Ce54",
"initialAmount": "1000000",
"fees_in_usd": "10500",
"app_fee_in_usd": "1000",
"total_amount_in_usd": "1010500",
"total_amount_in_asset_token": "1000500",
"fees_in_asset_token": "500",
"app_fee_in_asset_token": "0",
"asset_token_symbol": "USDC",
"asset_token_decimals": 6,
"slippage": "0.5",
"tokenIn": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"tokenOut": "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
"intent_address": "0x4E60e01263E750eD9D087157e19D2480Fd86A900",
"deposit_token_account": "DX8aM33XqJqZqZqZqJqZqZqZqJqZqZqZqJqZqZqZqJqZ",
"destination_intent_address": "0x5F70e12374E750fE0E087158f29E3591Ge97B011",
"source_chain": "BASE_TESTNET",
"destination_chain": "ARBITRUM_TESTNET",
"recipient": "0xb79541Be080a59fdcE6C0b43219ba56c725eC65e",
"refund_address": "0xb79541Be080a59fdcE6C0b43219ba56c725eC65e",
"relayer": "",
"coordinator": "0x989f47053F188778575113DcF39dB8960Fc450e2",
"bridger": "0xa1c943058a631D5506eb7d96036eAbF6968e2338",
"bridgeExtraData": "0x00000000000000000000000000000000000000000000000000000000000001f4",
"intent_nonce": 4267684716645197,
"intent_status": "COMPLETED",
"tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"needs_relay": false,
"relayer_claimed": true,
"paymaster_used": false,
"mode": "test",
"expires_at": "2025-12-13T03:31:23.000Z",
"metadata": {
"orderId": "12345"
},
"created_at": "2025-12-13T02:31:23.390Z",
"updated_at": "2025-12-13T02:40:05.550Z"
}{
"statusCode": 400,
"message": "Invalid status value"
}{
"statusCode": 401,
"message": "Unauthorized"
}{
"statusCode": 404,
"message": "Intent not found"
}Update intent status
Updates the status of an existing intent
curl --request PATCH \
--url https://api.chainrails.io/api/v1/intents/{id}/status \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "COMPLETED"
}
'import requests
url = "https://api.chainrails.io/api/v1/intents/{id}/status"
payload = { "status": "COMPLETED" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'COMPLETED'})
};
fetch('https://api.chainrails.io/api/v1/intents/{id}/status', 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://api.chainrails.io/api/v1/intents/{id}/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'COMPLETED'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.chainrails.io/api/v1/intents/{id}/status"
payload := strings.NewReader("{\n \"status\": \"COMPLETED\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.chainrails.io/api/v1/intents/{id}/status")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"COMPLETED\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.chainrails.io/api/v1/intents/{id}/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"COMPLETED\"\n}"
response = http.request(request)
puts response.read_body{
"id": 6,
"client_id": "e1ee3675-cb26-4a76-8206-a84f86e85862",
"sender": "0xdA3ECb2E5362295E2b802669dD47127A61d9Ce54",
"initialAmount": "1000000",
"fees_in_usd": "10500",
"app_fee_in_usd": "1000",
"total_amount_in_usd": "1010500",
"total_amount_in_asset_token": "1000500",
"fees_in_asset_token": "500",
"app_fee_in_asset_token": "0",
"asset_token_symbol": "USDC",
"asset_token_decimals": 6,
"slippage": "0.5",
"tokenIn": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"tokenOut": "0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d",
"intent_address": "0x4E60e01263E750eD9D087157e19D2480Fd86A900",
"deposit_token_account": "DX8aM33XqJqZqZqZqJqZqZqZqJqZqZqZqJqZqZqZqJqZ",
"destination_intent_address": "0x5F70e12374E750fE0E087158f29E3591Ge97B011",
"source_chain": "BASE_TESTNET",
"destination_chain": "ARBITRUM_TESTNET",
"recipient": "0xb79541Be080a59fdcE6C0b43219ba56c725eC65e",
"refund_address": "0xb79541Be080a59fdcE6C0b43219ba56c725eC65e",
"relayer": "",
"coordinator": "0x989f47053F188778575113DcF39dB8960Fc450e2",
"bridger": "0xa1c943058a631D5506eb7d96036eAbF6968e2338",
"bridgeExtraData": "0x00000000000000000000000000000000000000000000000000000000000001f4",
"intent_nonce": 4267684716645197,
"intent_status": "COMPLETED",
"tx_hash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef",
"needs_relay": false,
"relayer_claimed": true,
"paymaster_used": false,
"mode": "test",
"expires_at": "2025-12-13T03:31:23.000Z",
"metadata": {
"orderId": "12345"
},
"created_at": "2025-12-13T02:31:23.390Z",
"updated_at": "2025-12-13T02:40:05.550Z"
}{
"statusCode": 400,
"message": "Invalid status value"
}{
"statusCode": 401,
"message": "Unauthorized"
}{
"statusCode": 404,
"message": "Intent not found"
}Authorizations
Enter your Chainrails API key as a Bearer token
Path Parameters
Intent unique identifier
6
Body
New status to set for the intent
PENDING, FUNDED, INITIATED, COMPLETED, EXPIRED "COMPLETED"
Response
Intent status updated successfully
6
"e1ee3675-cb26-4a76-8206-a84f86e85862"
"0xdA3ECb2E5362295E2b802669dD47127A61d9Ce54"
"1000000"
"10500"
"1000"
"1010500"
"1000500"
"500"
"0"
"USDC"
6
"0.5"
"0x036CbD53842c5426634e7929541eC2318f3dCF7e"
"0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d"
Solana: intent PDA — show to users for QR/Send; transfer tokenIn here (wallet derives deposit ATA). EVM/Starknet: contract address.
"0x4E60e01263E750eD9D087157e19D2480Fd86A900"
Solana only: ATA(mint, intent PDA). Indexer and recovery only — do not use for QR/Send; fund via intent_address instead.
"DX8aM33XqJqZqZqZqJqZqZqZqJqZqZqZqJqZqZqZqJqZ"
"0x5F70e12374E750fE0E087158f29E3591Ge97B011"
"BASE_TESTNET"
"ARBITRUM_TESTNET"
"0xb79541Be080a59fdcE6C0b43219ba56c725eC65e"
"0xb79541Be080a59fdcE6C0b43219ba56c725eC65e"
""
"0x989f47053F188778575113DcF39dB8960Fc450e2"
"0xa1c943058a631D5506eb7d96036eAbF6968e2338"
"0x00000000000000000000000000000000000000000000000000000000000001f4"
4267684716645197
PENDING, FUNDED, INITIATED, COMPLETED, EXPIRED "COMPLETED"
"0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
false
true
false
test, live "test"
"2025-12-13T03:31:23.000Z"
{ "orderId": "12345" }
"2025-12-13T02:31:23.390Z"
"2025-12-13T02:40:05.550Z"
Was this page helpful?

