> ## Documentation Index
> Fetch the complete documentation index at: https://developers.fireblocks.com/llms.txt
> Use this file to discover all available pages before exploring further.

# On/Off-Ramps

> Provide originator and beneficiary information for on-ramp and off-ramp orders through the Fireblocks Trading API, using `participantsIdentification`, first-party and third-party relationships, and whitelisted destinations.

On-ramps convert fiat to crypto; off-ramps convert crypto to fiat. When you place these orders through a connected account with a provider, such as Alfred Pay, Yellow Card, or Scrypt, the provider may require information about the originator and beneficiary. You provide it in the `participantsIdentification` object of the order.

This doesn't go through a Travel Rule provider or your Travel Rule policy. The provider applies its own requirements, which depend on the provider, the payment rail, and who the funds belong to. See [Travel Rule Overview](/docs/travel-rule-overview) for how this differs from provider-based Travel Rule.

## Before you start

* **Trading API access.** On/off-ramp orders use the [Trading API](/docs/trading-api-overview), which is in Beta. Placing orders is API-only. For access, contact your Customer Success Manager.
* **A connected account with the provider**, set up in the Console. See [Connected accounts and balances](https://support.fireblocks.io/hc/en-us/articles/27221452097692-Connected-accounts-and-balances) on the Help Center.

## First party or third party

What you need to provide depends on whether each party is you:

| Relationship | Meaning | Data required |
| - | - | - |
| `FirstParty` | You're acting for yourself. The provider already holds your KYC. | Minimal: the relationship type and entity type. |
| `ThirdParty` | You're acting for someone else. | The provider may require full PII, such as name, address, and date of birth. |

Set the relationship separately for the originator and the beneficiary. For example, you can fund an on-ramp yourself (`FirstParty` originator) and pay out to a customer (`ThirdParty` beneficiary).

## The participantsIdentification object

| Field | Description |
| - | - |
| `originator`, `beneficiary` | One object per party. |
| `participantRelationshipType` | `FirstParty` or `ThirdParty`. |
| `entityType` | `INDIVIDUAL` or `BUSINESS`. |
| `fullName` | `firstName` and `lastName`, for individuals. |
| `businessName` | The business's legal name, for businesses. |
| `registrationNumber` | The business's registration number, for businesses. |
| `dateOfBirth` | ISO date, for example `1985-03-15`. |
| `postalAddress` | `streetName`, `buildingNumber`, `postalCode`, `city`, `subdivision`, `district`, and `country` (ISO alpha-2). |
| `externalReferenceId` | Your own reference for the party. |

Which fields are required varies by provider and rail.

### Example: acting for yourself

```json theme={"system"}
{
  "participantsIdentification": {
    "originator": { "entityType": "INDIVIDUAL", "participantRelationshipType": "FirstParty" },
    "beneficiary": { "entityType": "INDIVIDUAL", "participantRelationshipType": "FirstParty" }
  }
}
```

### Example: paying out to a third party

```json theme={"system"}
{
  "participantsIdentification": {
    "originator": { "entityType": "BUSINESS", "participantRelationshipType": "FirstParty" },
    "beneficiary": {
      "entityType": "INDIVIDUAL",
      "participantRelationshipType": "ThirdParty",
      "fullName": { "firstName": "Alexander", "lastName": "Johnson" },
      "dateOfBirth": "1985-03-15",
      "postalAddress": {
        "streetName": "Fifth Avenue",
        "buildingNumber": "350",
        "postalCode": "10118",
        "city": "New York",
        "subdivision": "NY",
        "district": "Manhattan",
        "country": "US"
      },
      "externalReferenceId": "person_ref_7f3e2d1c4b8a5e9f"
    }
  }
}
```

## Add participants to an order

Pass `participantsIdentification` when you create the order:

```ts theme={"system"}
const { data: order } = await fireblocks.tradingBeta.createOrder({
  createOrderRequest: {
    via: { type: "PROVIDER_ACCOUNT", providerId: "YELLOWCARD", accountId },
    executionRequestDetails: {
      type: "MARKET",
      side: "BUY",
      baseAmount: "250",
      baseAssetId: "XOF",
      baseAssetRail: "LBT",
      quoteAssetId: "USDT_ERC20",
      quoteAssetRail: "BLOCKCHAIN",
    },
    settlement: {
      type: "DVP",
      sourceAccount: { type: "VAULT_ACCOUNT", accountId: vaultAccountId },
      destinationAccount: { type: "UNMANAGED_WALLET", accountId: whitelistedBankAccountId },
    },
    participantsIdentification: {
      originator: { entityType: "INDIVIDUAL", participantRelationshipType: "FirstParty" },
      beneficiary: { entityType: "INDIVIDUAL", participantRelationshipType: "FirstParty" },
    },
  },
  idempotencyKey: `order-${Date.now()}`,
});
```

When the order's source is a vault account, Fireblocks creates a transfer from the vault to the provider. It's approved and signed under your workspace's policies, like any other transfer, before the order executes.

Track the order with `fireblocks.tradingBeta.getOrder({ orderId })`. `PENDING_USER_ACTION` means the order needs action from you, such as an approval; `COMPLETED`, `FAILED`, and `CANCELED` are terminal.

For quotes, settlement types, and the full order flow, see [On/Off-Ramp, and cross-chain Swap via CeFi](/docs/on-ramp-off-ramp-and-bridgeswap-via-account-based-providers-cefi).

## Whitelisted destinations

Register external bank accounts and crypto addresses as whitelisted destinations, and use them as the order's `destinationAccount` with type `UNMANAGED_WALLET`. They're verified once and can be reused for future orders, so you don't re-enter destination details each time.

## Provider-specific requirements

Some providers publish their requirements in their provider manifest, which you can read with [Get providers](/api-reference/trading-beta/get-providers). Providers can also ask for more information after you create an order, through the order's requirements (RFI) flow. For example, Circle Payments Network (CPN) supports this. See [Off-ramp with Circle Payment Network (CPN)](/docs/circle-payments-network-cpn-api-guide).

## On the Help Center

For an overview of on/off-ramps and connected accounts, see [On/Off-Ramps Travel Rule Overview](https://support.fireblocks.io/hc/en-us/articles/30614392673564-On-Off-Ramps-Travel-Rule-Overview).
