---
title: "Create new intent"
method: POST
path: "/intents"
tags: ["Intents"]
---

# Create new intent

`POST /intents`

Creates a new payment intent with cross-chain transfer parameters

## Request body

- CreateIntentDto
  - `sender` string — Sender wallet address on the source chain
  - `paymentLinkId` string — Payment link ID associated with the intent
  - `amount` string, required — Amount to transfer in smallest unit (e.g., wei for ETH).
  - `amountSymbol` string, required — Token symbol for amount denomination (e.g., USDC, USDT, ETH)
  - `tokenIn` string, required — Token address on the source chain
  - `source_chain` 'ARBITRUM_MAINNET' | 'ARBITRUM_TESTNET' | 'AVALANCHE_MAINNET' | 'AVALANCHE_TESTNET' | 'BASE_MAINNET' | 'BASE_TESTNET' | 'STARKNET_MAINNET' | 'STARKNET_TESTNET' | 'BSC_MAINNET' | 'ETHEREUM_MAINNET' | 'ETHEREUM_TESTNET' | 'OPTIMISM_MAINNET' | 'OPTIMISM_TESTNET' | 'MONAD_MAINNET' | 'MONAD_TESTNET' | 'POLYGON_MAINNET' | 'HYPEREVM_MAINNET' | 'LISK_MAINNET' | 'SOLANA_MAINNET' | 'SOLANA_TESTNET' | 'TRON_MAINNET', required — Source blockchain network for the deposit
  - `destination_chain` 'ARBITRUM_MAINNET' | 'ARBITRUM_TESTNET' | 'AVALANCHE_MAINNET' | 'AVALANCHE_TESTNET' | 'BASE_MAINNET' | 'BASE_TESTNET' | 'STARKNET_MAINNET' | 'STARKNET_TESTNET' | 'BSC_MAINNET' | 'ETHEREUM_MAINNET' | 'ETHEREUM_TESTNET' | 'OPTIMISM_MAINNET' | 'OPTIMISM_TESTNET' | 'MONAD_MAINNET' | 'MONAD_TESTNET' | 'POLYGON_MAINNET' | 'HYPEREVM_MAINNET' | 'LISK_MAINNET' | 'SOLANA_MAINNET' | 'SOLANA_TESTNET' | 'TRON_MAINNET', required — Source blockchain network for the deposit
  - `recipient` string, required — Recipient wallet address on the destination chain
  - `refund_address` string — Refund address on the source chain if intent fails
  - `metadata` object — Additional metadata for the intent

## Response `201`

Intent successfully created

- object
  - `id` number
  - `client_id` string
  - `sender` string
  - `initialAmount` string
  - `fees_in_usd` string
  - `app_fee_in_usd` string
  - `total_amount_in_usd` string
  - `total_amount_in_asset_token` string
  - `fees_in_asset_token` string
  - `app_fee_in_asset_token` string
  - `asset_token_symbol` string
  - `asset_token_decimals` number
  - `slippage` string
  - `tokenIn` string
  - `tokenOut` string
  - `intent_address` string — Solana: intent PDA — show to users for QR/Send; transfer tokenIn here (wallet derives deposit ATA). EVM/Starknet: contract address.
  - `source_chain` string
  - `destination_chain` string
  - `recipient` string
  - `refund_address` string
  - `relayer` string
  - `coordinator` string
  - `bridger` string
  - `bridgeExtraData` string
  - `intent_nonce` number
  - `intent_status` 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'FAILED'
  - `tx_hash` string, nullable
  - `needs_relay` boolean
  - `expires_at` string, date-time
  - `metadata` object
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Other responses

- `400` — Bad Request - Invalid parameters
- `401` — Unauthorized - Invalid or missing API key

---

[API](https://skmtc.net/horuslabsio/apis/chainrails-api.md) · [All operations](https://skmtc.net/horuslabsio/apis/chainrails-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/horuslabsio/chainrails-api/revisions/76a4e00b118d/schema)
