Custodian
Custom Transactions

Custom Transactions

Submit a custom EVM contract call from a custodial wallet (calldata + optional native value). Xellar signs and broadcasts via MPC. Tron and other non-EVM networks are not supported on this route. All endpoints require authentication.

MethodPath
POST/api/v1/transactions
GET/api/v1/transactions/:id

Transaction object

Returned by Create and Get.

FieldTypeDescription
idstringCustom transaction UUID
statusstringpending, queued, success, or failed
walletIdstringCustodial wallet UUID that sends the transaction
networkstringNetwork code (e.g. ethereum, polygon-pos) — must be an active EVM network
tostringContract or recipient address (checksummed 0x…)
datastringHex calldata (with or without 0x prefix)
valuestringNative token sent with the call, in wei (integer string). Default "0"
referencestring | nullYour optional reference
transactionHashstring | nullOn-chain tx hash when status is success
failedReasonstring | nullHuman-readable reason when status is failed

Status lifecycle

StatusMeaning
pendingSigning / broadcast in progress for this wallet
queuedAnother custom tx is in flight for the same wallet; starts when the active one finishes
successBroadcast confirmed (transactionHash set)
failedSigning or broadcast failed

Create Custom Transaction

POST /api/v1/transactions

Request body

FieldTypeRequiredDescription
walletIdstringYesWallet UUID (must belong to your app’s account)
networkstringYesEVM network code (not token code)
tostringYesValid EVM address
datastringYesHex-encoded calldata
valuestringNoWei to send (non-negative integer). Omitted = 0
referencestringNoStored on the record; empty strings ignored
gasTipCapstring | numberNoEIP-1559 tip cap in wei (optional override)
gasFeeCapstring | numberNoEIP-1559 fee cap in wei (optional override)
{
  "walletId": "5326036c-50c3-4d63-8150-69cb253542e3",
  "network": "ethereum",
  "to": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
  "data": "0xa9059cbb000000000000000000000000742d35Cc6634C0532925a3b844Bc454e4438f44e000000000000000000000000000000000000000000000000000000000016e360",
  "value": "0",
  "reference": "claim-reward-001"
}

Response 201

{
  "data": {
    "id": "tx-uuid",
    "status": "pending",
    "walletId": "5326036c-50c3-4d63-8150-69cb253542e3",
    "network": "ethereum",
    "to": "0xdAC17F958D2ee523a2206206994597C13D831ec7",
    "data": "0xa9059cbb…",
    "value": "0",
    "reference": "claim-reward-001",
    "transactionHash": null,
    "failedReason": null
  }
}
CodeMeaning
400Invalid wallet, network, address, calldata, value, or gas caps
404Wallet or network not found
503MPC signing unavailable

Get Custom Transaction

GET /api/v1/transactions/:id

:id is the UUID from Create.

Response 200

Same object shape as Transaction object.

CodeMeaning
404Transaction not found (or not owned by your app)