On-Ramp Transactions
Buy tokens with a bank transfer and receive them in your organisation wallet, from lookups and bank details to confirming the transfer and tracking delivery
An on-ramp transaction (type: ONRAMP) converts fiat into tokens. You create the transaction, get Skyline's bank details, send a bank transfer, and confirm that you sent it. Skyline matches your funds and delivers the tokens to your organisation wallet.
Read Transactions first for statuses, preconditions and errors.
Prerequisites
- On-ramp enabled for your organisation. It is off by default. Contact Skyline to enable it. Check it with
GET /users/me:selectedOrganisation.featuresincludesONRAMPS. Without it, create returns 403Onramps are not allowed in this method. - A destination wallet. Tokens go to one of your organisation's own wallets, which must have passed screening and ownership verification. See Wallets.
- An API user with the
authorizedrole, 2FA off, in anACTIVEorganisation.
Step 1: Look Up the Ids
| Call | What you take from it |
|---|---|
GET /transactions/min-onramp-amount | minAmount, in USD. The amount you transfer, converted to USD, must reach it. |
GET /transactions/onramp-currencies | The currencies you can transfer. Keep the currency _id. |
GET /receivers/self | Your organisation's own receiver. Keep its _id. |
GET /networks/client-visible | The network to receive on. Keep its _id and chainId. |
GET /tokens?tradableInFiat=true&limit=300 | The token's isoCode. Pick a token with an ERC20Address entry for the network's chainId. |
GET /users/me | selectedOrganisation.wallets: your organisation wallet on that network. Keep its _id and address. |
GET /transactions/min-onramp-amount returns:
{ "minAmount": 1000, "currency": "USD" }Step 2: Validate on Your Side
The server does not check all of these. Check them before you create:
amountis a positive decimal string, in the currency you chose.amountconverted to USD is at leastminAmount. Below it, create returns 400Minimum amount is $….expectedTransferDateis today or later. The server accepts past dates.- The destination wallet is on the network you chose.
Step 3: Create the Transaction
POST /transactions
{
"type": "ONRAMP",
"network": "6650a1f2c3d4e5f6a7b8c9d0",
"amountCurrency": "6650d4a5b6c7d8e9f0a1b2c3",
"payments": [
{
"type": "ONRAMP",
"receiver": { "id": "6650e5b6c7d8e9f0a1b2c3d4" },
"wallet": "6650f6c7d8e9f0a1b2c3d4e5",
"walletAddress": "0x4b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c",
"tokenIsoCode": "USDC",
"amount": "25000",
"reason": "onramp",
"expectedTransferDate": "2026-10-02"
}
]
}Transaction fields:
| Field | Required | Description |
|---|---|---|
type | Yes | ONRAMP. |
network | Yes | The network _id you receive on. |
amountCurrency | Yes | The _id of the currency you transfer, from GET /transactions/onramp-currencies. |
payments | Yes | One payment. |
An on-ramp has no top-level token or walletAddress. The token and the destination are set on the payment.
Payment fields:
| Field | Required | Description |
|---|---|---|
type | Yes | ONRAMP. |
receiver.id | Yes | Your organisation's own receiver, from GET /receivers/self. |
wallet | Yes | Your organisation wallet _id. It must belong to your organisation. |
walletAddress | Yes | That wallet's address. |
tokenIsoCode | Yes | The token you receive. |
amount | Yes | The fiat amount you will transfer, as a decimal string. |
expectedTransferDate | Yes | The date you will send the transfer, YYYY-MM-DD. |
reason | No | A short label, for example onramp. |
The response is the transaction in DRAFT. payments[].estimatedRate is an indicative rate at creation, not a locked quote. On-ramp has no validate or allowance step.
Step 4: Submit
POST /transactions/:id/submit with no body.
The transaction moves to WAITING_ACCEPTANCE. There is no quote window: an on-ramp does not expire.
Step 5: Get the Bank Details
GET /transactions/:id/bank-details returns an array of accounts you can pay into. Field names are in snake_case.
[
{
"bank_display": "EUR account",
"bank_name": "Skyline Digital Ltd",
"account_number_iban": "GB00XXXX00000000000000",
"swift": "XXXXGB2L",
"sort_code": "000000",
"address": "1 Example Street, London",
"reference": "6651a7d8e9f0a1b2c3d4e5f6"
}
]| Field | Meaning |
|---|---|
bank_display | A label for the account. |
bank_name | The account holder name. |
account_number_iban | The account number or IBAN. |
swift | The BIC/SWIFT code. |
sort_code | UK sort code, when relevant. |
address | The bank address, when available. |
reference | The payment reference to use. See below. |
The reference:
- If your organisation has a dedicated account,
referenceis empty. Transfers into that account are already yours; no reference is needed. - Otherwise
referenceis the transaction_id. You must put it in the transfer's reference field. Without it, Skyline cannot match your funds to the transaction.
Step 6: Send the Bank Transfer
From your bank, transfer:
- the exact
amount, - in the currency you chose,
- to one of the accounts above,
- with the
reference, when it is not empty.
Step 7: Confirm You Sent the Funds
POST /transactions/:id/accept with no body. This means "I have sent the funds".
Accept requires WAITING_ACCEPTANCE. It returns 403 if the destination wallet has not passed screening and ownership verification.
On success the transaction moves to PROCESSING. For an on-ramp, PROCESSING means you declared the transfer sent. It does not mean Skyline has received the funds.
Step 8: Track Delivery
Skyline matches your transfer and delivers the tokens to your wallet. Poll GET /transactions/:id every 30 to 60 seconds. Bank transfers can take hours or days, so expect a long PROCESSING phase.
| Status | Meaning |
|---|---|
PROCESSING | You confirmed the transfer. Skyline is waiting for or processing the funds. |
RELEASED | The tokens are on their way to your wallet. |
COMPLETED | Settled. Final. |
FAILED | Read statusInfo. Contact Skyline if your funds were sent. |
REJECTED_BY_SKYLINE | Rejected by Skyline's review. Final. |
Endpoint Reference
| Endpoint | Method | Purpose |
|---|---|---|
| /transactions/min-onramp-amount | GET | Minimum amount in USD |
| /transactions/onramp-currencies | GET | Currencies you can transfer |
| /receivers/self | GET | Your organisation's own receiver |
| /transactions | POST | Create the transaction |
| /transactions/:id | PUT | Replace the transaction body |
| /transactions/:id/submit | POST | Move to WAITING_ACCEPTANCE |
| /transactions/:id/bank-details | GET | Where to send the transfer |
| /transactions/:id/accept | POST | Confirm you sent the funds |
| /transactions/:id | GET | Read status |