Skip to main content
POST
/
api
/
partner
/
v2
/
cross-ramp
/
quotes
cURL
curl --request POST \
  --url https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes \
  --header 'Content-Type: application/json' \
  --header 'partner-api-key: <api-key>' \
  --data '
{
  "sourceCurrency": "MXN",
  "targetCurrency": "USD",
  "sourceAmount": 123,
  "targetAmount": 123,
  "premiumSpread": 123
}
'
import requests

url = "https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes"

payload = {
"sourceCurrency": "MXN",
"targetCurrency": "USD",
"sourceAmount": 123,
"targetAmount": 123,
"premiumSpread": 123
}
headers = {
"partner-api-key": "<api-key>",
"Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.text)
const options = {
method: 'POST',
headers: {'partner-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sourceCurrency: 'MXN',
targetCurrency: 'USD',
sourceAmount: 123,
targetAmount: 123,
premiumSpread: 123
})
};

fetch('https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceCurrency' => 'MXN',
'targetCurrency' => 'USD',
'sourceAmount' => 123,
'targetAmount' => 123,
'premiumSpread' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"partner-api-key: <api-key>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"strings"
"net/http"
"io"
)

func main() {

url := "https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes"

payload := strings.NewReader("{\n \"sourceCurrency\": \"MXN\",\n \"targetCurrency\": \"USD\",\n \"sourceAmount\": 123,\n \"targetAmount\": 123,\n \"premiumSpread\": 123\n}")

req, _ := http.NewRequest("POST", url, payload)

req.Header.Add("partner-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.post("https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes")
.header("partner-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sourceCurrency\": \"MXN\",\n \"targetCurrency\": \"USD\",\n \"sourceAmount\": 123,\n \"targetAmount\": 123,\n \"premiumSpread\": 123\n}")
.asString();
require 'uri'
require 'net/http'

url = URI("https://staging-api.capa.fi/api/partner/v2/cross-ramp/quotes")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["partner-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceCurrency\": \"MXN\",\n \"targetCurrency\": \"USD\",\n \"sourceAmount\": 123,\n \"targetAmount\": 123,\n \"premiumSpread\": 123\n}"

response = http.request(request)
puts response.read_body
{
  "success": true,
  "data": {
    "fees": {
      "fixedFee": 25,
      "feeCurrency": "MXN"
    },
    "sourceAmount": 5000,
    "sourceCurrency": "DOP, MXN, USD",
    "targetAmount": 40,
    "targetCurrency": "DOP, MXN, USD",
    "rate": 57.01,
    "spread": 0.005,
    "flow": "REGULAR | OTC",
    "quoteId": "123e4567-e89b-12d3-a456-426614174000",
    "expiresAt": "2025-01-01T00:00:00.000Z",
    "premiumSpread": 0.01
  }
}
Creates a locked cross-ramp quote with a guaranteed exchange rate. Pass the returned quoteId when creating a cross-ramp transaction.

Field Relationships

  • Provide either sourceAmount or targetAmount, not both.

Important Notes

  • Quotes expire — check the expiresAt field and create the transaction before it lapses.
  • Pass the returned quoteId to Create Cross-Ramp.
  • To quote a USD payout to China (CN) or Hong Kong (HK), pass targetCountry: "CN" (or "HK") and optionally targetRail (LOCAL default, or SWIFT). See the Cross-Ramp guide.

Error Codes

Common Errors

HTTP StatusCodeMessage
401UNAUTHORIZED”API Key is missing”
401UNAUTHORIZED”Invalid API Key format”
401UNAUTHORIZED”Invalid API Key”
403INVALID_PARTNER_FLOW”The partner has an invalid flow.”

Endpoint-Specific Errors

HTTP StatusCodeMessage
400INVALID_USER_INPUT_ERROR”Invalid User Input”
400BAD_REQUEST”Requested fiat currency is invalid or inactive”
500INTERNAL_SERVER_ERROR”Failed to create quote”

Authorizations

partner-api-key
string
header
required

API key for the affiliated partner performing the request.

Body

application/json
sourceCurrency
enum<string>
required

The source fiat currency symbol

Available options:
MXN,
DOP,
USD,
EUR
Example:

"MXN"

targetCurrency
enum<string>
required

The target fiat currency symbol

Available options:
MXN,
DOP,
USD,
EUR
Example:

"USD"

sourceAmount
number

The amount of source fiat currency to convert

targetAmount
number

The desired amount of target fiat currency to receive

premiumSpread
number

Spread percentage to be applied to the exchange rate

targetCountry
enum<string>

Target country. Required to quote a USD payout to China (CN) or Hong Kong (HK), since USD otherwise defaults to the US.

Available options:
MX,
DO,
US,
AT,
BE,
BG,
HR,
CY,
CZ,
DK,
EE,
FI,
FR,
DE,
GR,
HU,
IE,
IT,
LV,
LT,
LU,
MT,
NL,
PL,
PT,
RO,
SK,
SI,
ES,
SE,
IS,
LI,
NO,
CH,
GB,
MC,
SM,
AD,
VA,
CN,
HK
targetRail
enum<string>

Target payment rail for CN/HK destinations. Defaults to LOCAL; use SWIFT for an international wire.

Available options:
LOCAL,
SWIFT

Response

success
boolean
Example:

true

data
object