curl -X POST "https://api.services.payward.com/v1/accounts/W4BE9868GY65TB6523/quotes" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Content-Type: application/json" \
-d '{
"from": {
"symbol": "BTC",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"type": "fiat"
},
"fee": {
"bps": 50
}
}'import requests
url = "https://api.services.payward.com/v1/accounts/{account_id}/quotes"
payload = {
"from": {
"symbol": "BTC",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"type": "fiat"
},
"fee": { "bps": 50 }
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: {symbol: 'BTC', type: 'crypto', amount: '0.5'},
to: {symbol: 'USD', type: 'fiat'},
fee: {bps: 50}
})
};
fetch('https://api.services.payward.com/v1/accounts/{account_id}/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://api.services.payward.com/v1/accounts/{account_id}/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([
'from' => [
'symbol' => 'BTC',
'type' => 'crypto',
'amount' => '0.5'
],
'to' => [
'symbol' => 'USD',
'type' => 'fiat'
],
'fee' => [
'bps' => 50
]
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.services.payward.com/v1/accounts/{account_id}/quotes"
payload := strings.NewReader("{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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://api.services.payward.com/v1/accounts/{account_id}/quotes")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.services.payward.com/v1/accounts/{account_id}/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "Q-BTC2USD-1",
"status": "offered",
"expires_at": "2026-04-23T16:00:30Z",
"from": {
"symbol": "BTC",
"name": "Bitcoin",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat",
"amount": "31495.50"
},
"fees": {
"trade": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat",
"amount": "150.00"
}
},
"rate": {
"base": {
"symbol": "BTC",
"name": "Bitcoin",
"type": "crypto"
},
"quote": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat"
},
"price": "63291.00"
}
}
}Create quote
Creates an account-funded swap quote that locks a price for ~2 minutes.
Account-funded swap quotes must be executed before expires_at via POST /v1/accounts/{account_id}/quotes/{quote_id}/execute, otherwise they transition to expired and are no longer usable.
Exactly one of from.amount or to.amount must be set; the server calculates the other side. Setting both or neither is rejected with 400 Bad Request.
curl -X POST "https://api.services.payward.com/v1/accounts/W4BE9868GY65TB6523/quotes" \
-H "API-Key: $PWS_API_KEY" \
-H "API-Nonce: $PWS_API_NONCE" \
-H "API-Sign: $PWS_API_SIGN" \
-H "Content-Type: application/json" \
-d '{
"from": {
"symbol": "BTC",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"type": "fiat"
},
"fee": {
"bps": 50
}
}'import requests
url = "https://api.services.payward.com/v1/accounts/{account_id}/quotes"
payload = {
"from": {
"symbol": "BTC",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"type": "fiat"
},
"fee": { "bps": 50 }
}
headers = {
"API-Key": "<api-key>",
"API-Sign": "<api-key>",
"API-Nonce": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'API-Key': '<api-key>',
'API-Sign': '<api-key>',
'API-Nonce': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
from: {symbol: 'BTC', type: 'crypto', amount: '0.5'},
to: {symbol: 'USD', type: 'fiat'},
fee: {bps: 50}
})
};
fetch('https://api.services.payward.com/v1/accounts/{account_id}/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://api.services.payward.com/v1/accounts/{account_id}/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([
'from' => [
'symbol' => 'BTC',
'type' => 'crypto',
'amount' => '0.5'
],
'to' => [
'symbol' => 'USD',
'type' => 'fiat'
],
'fee' => [
'bps' => 50
]
]),
CURLOPT_HTTPHEADER => [
"API-Key: <api-key>",
"API-Nonce: <api-key>",
"API-Sign: <api-key>",
"Content-Type: application/json"
],
]);
$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://api.services.payward.com/v1/accounts/{account_id}/quotes"
payload := strings.NewReader("{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("API-Key", "<api-key>")
req.Header.Add("API-Sign", "<api-key>")
req.Header.Add("API-Nonce", "<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://api.services.payward.com/v1/accounts/{account_id}/quotes")
.header("API-Key", "<api-key>")
.header("API-Sign", "<api-key>")
.header("API-Nonce", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.services.payward.com/v1/accounts/{account_id}/quotes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["API-Key"] = '<api-key>'
request["API-Sign"] = '<api-key>'
request["API-Nonce"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"from\": {\n \"symbol\": \"BTC\",\n \"type\": \"crypto\",\n \"amount\": \"0.5\"\n },\n \"to\": {\n \"symbol\": \"USD\",\n \"type\": \"fiat\"\n },\n \"fee\": {\n \"bps\": 50\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "Q-BTC2USD-1",
"status": "offered",
"expires_at": "2026-04-23T16:00:30Z",
"from": {
"symbol": "BTC",
"name": "Bitcoin",
"type": "crypto",
"amount": "0.5"
},
"to": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat",
"amount": "31495.50"
},
"fees": {
"trade": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat",
"amount": "150.00"
}
},
"rate": {
"base": {
"symbol": "BTC",
"name": "Bitcoin",
"type": "crypto"
},
"quote": {
"symbol": "USD",
"name": "US Dollar",
"type": "fiat"
},
"price": "63291.00"
}
}
}Authorizations
Your public API key. Identifies the partner making the request.
HMAC signature over the request, computed with your private key.
Monotonically increasing nonce included in the request signature.
Path Parameters
ID of the account the request applies to. This refers to one of the accounts held by the user the request is acting on behalf of (typically the user's main account, but any of the user's accounts is accepted). Routes the request to that specific account container. Canonical identifier for an account in the Payward public API.
14 - 42Body
Request to create a new quote.
Exactly one of from.amount or to.amount must be provided to
indicate which side of the trade is fixed. The server calculates
the other side. Requests that set both amounts or omit both are
rejected with a 400 Bad Request.
Source asset and amount for the trade.
Show child attributes
Show child attributes
Destination asset and amount for the trade.
Show child attributes
Show child attributes
Partner-configured fee applied on top of the underlying execution price. Set bps, absolute, or both. Request-only — never returned in response payloads.
Show child attributes
Show child attributes
Response
Successful response
A swap quote.
Show child attributes
Show child attributes