# Create Transaction

## Create Transaction API

When a user starts swapping or when a step of swap succeeds, to get the transaction for the next step, this method should be called.

In multi-step routes, you should loop over the `routeResponse.route` array and call this method (`createTransaction`) per each step.&#x20;

{% tabs %}
{% tab title="Typescript (SDK)" %}

```typescript
const transaction = await rango.createTransaction({
    requestId: "1978d8fa-335d-4915-a039-77f1a17315f5", // bestRoute.requestId
    step: 1,
    userSettings: {
        slippage: 3,
        infiniteApprove: false
    },
    validations: {
        balance: true,
        fee: true,
        approve: true
     },
})
```

{% endtab %}

{% tab title="Node.js (Axios)" %}

```typescript
const response = await axios.post(
  'https://api.rango.exchange/tx/create',
  {
    'requestId': '1978d8fa-335d-4915-a039-77f1a17315f5',
    'step': 1,
    'userSettings': {
      'slippage': 3,
      'infiniteApprove': false
    },
    'validations': {
      'balance': true,
      'fee': true,
      'approve': true
    }
  },
  {
    params: {
      'apiKey': 'c6381a79-2817-4602-83bf-6a641a409e32'
    },
    headers: {
      'content-type': 'application/json'
    }
  }
);
```

{% endtab %}

{% tab title="Bash (cURL)" %}

```bash
curl --request POST \
     --url 'https://api.rango.exchange/tx/create?apiKey=c6381a79-2817-4602-83bf-6a641a409e32' \
     --header 'content-type: application/json' \
     --data '
{
  "requestId": "1978d8fa-335d-4915-a039-77f1a17315f5",
  "userSettings": {
    "slippage": 3,
    "infiniteApprove": false
  },
  "validations": {
    "balance": true,
    "fee": true,
    "approve": true
  },
  "step": 1
}
'
```

{% endtab %}
{% endtabs %}

{% embed url="<https://rango-api.readme.io/reference/createtransaction>" %}
Create Transaction Swagger
{% endembed %}

### Create Transaction Request&#x20;

{% tabs %}
{% tab title="API Definition" %}

* **`requestId`** <mark style="color:red;">\*</mark> String
  * Description: The unique ID which is generated in the best route endpoint.
* **`step`** <mark style="color:red;">\*</mark>  Number
  * Description: The current step number in a multi-step route, starting from 1.
  * Example: `1`
* **`userSettings`** <mark style="color:red;">\*</mark>&#x20;
  * Description: User settings for the swap, including slippage and infinite approval.
* **`validations`** <mark style="color:red;">\*</mark>
  * Description: The validation checks we are interested to check by Rango before starting the swap.
    {% endtab %}

{% tab title="SDK Models (Typescript)" %}

```typescript
export type CreateTransactionRequest = {
  requestId: string
  step: number
  userSettings: UserSettings
  validations: CreateTransactionValidation
}

export type UserSettings = {
  slippage: string
  infiniteApprove?: boolean
}

export type CreateTransactionValidation = {
  balance: boolean
  fee: boolean
  approve: boolean
}
```

{% endtab %}
{% endtabs %}

### Create Transaction Response

{% tabs %}
{% tab title="API Definition" %}

* **`ok`**
  * Description: If true, Rango has created a non-null transaction, and the error message is null.
* **`transaction`**
  * Description: Transaction's raw data. It is one of the transaction possible interfaces: `EvmTransaction`, `CosmosTransaction,` `TransferTransaction` (for UTXO), `SolanaTransaction`, `StarknetTransaction`, `TronTransaction` or `null`.&#x20;
* **`error`**
  * Description: Error message about the incident if ok == false.
* **`errorCode`**
  * Description: Error code shows the type of error.
* **`traceId`**
  * Description: Trace Id helps Rango support team to trace an issue.
    {% endtab %}

{% tab title="SDK Models (Typescript)" %}

```typescript
export type CreateTransactionResponse = {
  error: string | null
  ok: boolean
  transaction: Transaction | null
}

export type Transaction =
  | EvmTransaction
  | CosmosTransaction
  | SolanaTransaction
  | TronTransaction
  | StarknetTransaction
  | TonTransaction
  | Transfer
  
export interface BaseTransaction {
  type: TransactionType
  blockChain: string
}

export interface EvmTransaction extends BaseTransaction {
  type: TransactionType.EVM
  isApprovalTx: boolean
  from: string | null
  to: string
  data: string | null
  value: string | null
  nonce: string | null
  gasLimit: string | null
  gasPrice: string | null
  maxPriorityFeePerGas: string | null
  maxFeePerGas: string | null
}

export interface SolanaTransaction extends BaseTransaction {
  type: TransactionType.SOLANA
  txType: 'LEGACY' | 'VERSIONED'
  from: string
  identifier: string
  recentBlockhash: string | null
  signatures: SolanaSignature[]
  serializedMessage: number[] | null
  instructions: SolanaInstruction[]
}

export interface CosmosTransaction extends BaseTransaction {
  type: TransactionType.COSMOS
  fromWalletAddress: string
  data: CosmosMessage
  rawTransfer: CosmosRawTransferData | null
}

export interface TronTransaction extends BaseTransaction {
  type: TransactionType.TRON
  isApprovalTx: boolean
  raw_data: TrxRawData | null
  raw_data_hex: string | null
  txID: string
  visible: boolean
  __payload__: object
}

export interface StarknetTransaction extends BaseTransaction {
  type: TransactionType.STARKNET
  isApprovalTx: boolean
  calls: StarknetCallData[]
}

export interface TonTransaction extends BaseTransaction {
  type: TransactionType.TON
  validUntil: number
  network?: TonChainID
  from?: string
  messages: TonMessage[]
}

export interface Transfer extends BaseTransaction {
  type: TransactionType.TRANSFER
  method: string
  asset: AssetWithTicker
  amount: string
  decimals: number
  fromWalletAddress: string
  recipientAddress: string
  memo: string | null
}

```

{% endtab %}

{% tab title="Sample Response" %}
{% content-ref url="/pages/aUairuEGG5JTWVqIVUZE" %}
[Sample Transactions](/api-integration/main-api-multi-step/sample-transactions.md)
{% endcontent-ref %}
{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.rango.exchange/api-integration/main-api-multi-step/api-reference/create-transaction.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
