Official API Documentation
Complete reference for Flowgrid Payments and Oráculo.
-- endpoints
6 blockchains supported
Authentication
Flowgrid Payments
Base URL: https://api.excrypto.finance
Merchant key: x-api-key: exc_...
App key: x-api-key: exa_...
Prefix: /payments/v1/*
Prefix: /payments/v1/*
Oráculo
Base URL: https://api.excrypto.finance
API key: x-oraculo-key: exo_... or ?key=exo_...
Quickstart Flowgrid Payments
Accept crypto payments in 3 steps. Supports Solana, BSC, Polygon, Arbitrum, Ethereum, and Base.
1 Create Payment
Copy curl -X POST "https://api.excrypto.finance/payments/v1/create-payment" \
-H "Content-Type: application/json" \
-H "x-api-key: exc_YOUR_MASTER_KEY" \
-d '{
"amount": 25.50,
"idempotency_key": "order-1001",
"network": "solana",
"token": "USDC"
}'
2 Check Status
Copy curl "https://api.excrypto.finance/payments/v1/payment-status/{order_id}" \
-H "x-api-key: exc_YOUR_MASTER_KEY"
3 Configure Webhook
Copy curl -X PUT "https://api.excrypto.finance/payments/v1/merchant/webhook" \
-H "Content-Type: application/json" \
-H "x-api-key: exc_YOUR_MASTER_KEY" \
-d '{"webhook_url": "https://your-site.com/webhook"}'
Quickstart Oráculo
Real-time crypto pricing from Binance, Bybit and KuCoin. ~150 pairs updated every 2 seconds.
1 Get Pair Price
Copy curl "https://api.excrypto.finance/v1/price/BTCUSDT" \
-H "x-oraculo-key: exo_YOUR_KEY"
2 Convert Currency
Copy curl "https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1" \
-H "x-oraculo-key: exo_YOUR_KEY"
3 All Prices
Copy curl "https://api.excrypto.finance/v1/prices" \
-H "x-oraculo-key: exo_YOUR_KEY"
Code Examples
Integration examples in multiple languages. Use the OpenAPI spec at /openapi.yaml to generate SDKs.
POST /payments/v1/create-payment
Copy curl -X POST "https://api.excrypto.finance/payments/v1/create-payment" \
-H "Content-Type: application/json" \
-H "x-api-key: exc_YOUR_KEY" \
-d '{
"amount": 25.50,
"idempotency_key": "order-1001",
"network": "solana",
"token": "USDC"
}'
Copy const res = await fetch('https://api.excrypto.finance/payments/v1/create-payment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'exc_YOUR_KEY'
},
body: JSON.stringify({
amount: 25.50,
idempotency_key: 'order-1001',
network: 'solana',
token: 'USDC'
})
});
const data = await res.json();
console.log(data.payment_url);
Copy import requests
res = requests.post(
'https://api.excrypto.finance/payments/v1/create-payment',
headers={'x-api-key': 'exc_YOUR_KEY'},
json={
'amount': 25.50,
'idempotency_key': 'order-1001',
'network': 'solana',
'token': 'USDC'
}
)
data = res.json()
print(data['payment_url'])
Copy $ch = curl_init('https://api.excrypto.finance/payments/v1/create-payment');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'x-api-key: exc_YOUR_KEY'
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 25.50,
'idempotency_key' => 'order-1001',
'network' => 'solana',
'token' => 'USDC'
])
]);
$data = json_decode(curl_exec($ch), true);
echo $data['payment_url'];
Copy body := []byte(`{"amount":25.50,"idempotency_key":"order-1001","network":"solana","token":"USDC"}`)
req, _ := http.NewRequest("POST", "https://api.excrypto.finance/payments/v1/create-payment", bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("x-api-key", "exc_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)
fmt.Println(data["payment_url"])
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "exc_YOUR_KEY");
var content = new StringContent(
JsonSerializer.Serialize(new {
amount = 25.50,
idempotency_key = "order-1001",
network = "solana",
token = "USDC"
}),
Encoding.UTF8, "application/json");
var res = await client.PostAsync(
"https://api.excrypto.finance/payments/v1/create-payment", content);
var data = await res.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(data.GetProperty("payment_url"));
GET /payments/v1/payment-status/:order_id
Copy curl "https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID" \
-H "x-api-key: exc_YOUR_KEY"
Copy const res = await fetch(
'https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID',
{ headers: { 'x-api-key': 'exc_YOUR_KEY' } }
);
const data = await res.json();
console.log(data.status);
Copy import requests
res = requests.get(
'https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID',
headers={'x-api-key': 'exc_YOUR_KEY'}
)
print(res.json()['status'])
Copy $ch = curl_init('https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: exc_YOUR_KEY']
]);
$data = json_decode(curl_exec($ch), true);
echo $data['status'];
Copy req, _ := http.NewRequest("GET", "https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID", nil)
req.Header.Set("x-api-key", "exc_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)
fmt.Println(data["status"])
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "exc_YOUR_KEY");
var res = await client.GetFromJsonAsync<JsonElement>(
"https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID");
Console.WriteLine(res.GetProperty("status"));
GET /payments/v1/merchant/payments
Copy curl "https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20" \
-H "x-api-key: exc_YOUR_KEY"
Copy const res = await fetch(
'https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20',
{ headers: { 'x-api-key': 'exc_YOUR_KEY' } }
);
const payments = await res.json();
Copy import requests
res = requests.get(
'https://api.excrypto.finance/payments/v1/merchant/payments',
headers={'x-api-key': 'exc_YOUR_KEY'},
params={'status': 'COMPLETED', 'limit': 20}
)
payments = res.json()
Copy $ch = curl_init('https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-api-key: exc_YOUR_KEY']
]);
$payments = json_decode(curl_exec($ch), true);
Copy req, _ := http.NewRequest("GET", "https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20", nil)
req.Header.Set("x-api-key", "exc_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var payments map[string]interface{}
json.NewDecoder(resp.Body).Decode(&payments)
fmt.Println(payments)
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "exc_YOUR_KEY");
var res = await client.GetFromJsonAsync<JsonElement>(
"https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20");
Console.WriteLine(res);
PUT /payments/v1/merchant/webhook
Copy curl -X PUT "https://api.excrypto.finance/payments/v1/merchant/webhook" \
-H "Content-Type: application/json" \
-H "x-api-key: exc_YOUR_KEY" \
-d '{"webhook_url": "https://your-site.com/webhook"}'
Copy await fetch('https://api.excrypto.finance/payments/v1/merchant/webhook', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'exc_YOUR_KEY'
},
body: JSON.stringify({ webhook_url: 'https://your-site.com/webhook' })
});
Copy import requests
requests.put(
'https://api.excrypto.finance/payments/v1/merchant/webhook',
headers={'x-api-key': 'exc_YOUR_KEY'},
json={'webhook_url': 'https://your-site.com/webhook'}
)
Copy $ch = curl_init('https://api.excrypto.finance/payments/v1/merchant/webhook');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'x-api-key: exc_YOUR_KEY'],
CURLOPT_POSTFIELDS => '{"webhook_url": "https://your-site.com/webhook"}'
]);
curl_exec($ch);
Copy body := []byte(`{"webhook_url":"https://your-site.com/webhook"}`)
req, _ := http.NewRequest("PUT", "https://api.excrypto.finance/payments/v1/merchant/webhook", bytes.NewBuffer(body))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("x-api-key", "exc_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "exc_YOUR_KEY");
var content = new StringContent("{\"webhook_url\":\"https://your-site.com/webhook\"}", Encoding.UTF8, "application/json");
var res = await client.PutAsync("https://api.excrypto.finance/payments/v1/merchant/webhook", content);
GET /v1/price/:pair Oráculo
Copy curl "https://api.excrypto.finance/v1/price/BTCUSDT" \
-H "x-oraculo-key: exo_YOUR_KEY"
Copy const res = await fetch('https://api.excrypto.finance/v1/price/BTCUSDT', {
headers: { 'x-oraculo-key': 'exo_YOUR_KEY' }
});
const price = await res.json();
console.log(price);
Copy import requests
res = requests.get(
'https://api.excrypto.finance/v1/price/BTCUSDT',
headers={'x-oraculo-key': 'exo_YOUR_KEY'}
)
print(res.json())
Copy $ch = curl_init('https://api.excrypto.finance/v1/price/BTCUSDT');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-oraculo-key: exo_YOUR_KEY']
]);
$price = json_decode(curl_exec($ch), true);
Copy req, _ := http.NewRequest("GET", "https://api.excrypto.finance/v1/price/BTCUSDT", nil)
req.Header.Set("x-oraculo-key", "exo_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var price map[string]interface{}
json.NewDecoder(resp.Body).Decode(&price)
fmt.Println(price)
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-oraculo-key", "exo_YOUR_KEY");
var res = await client.GetFromJsonAsync<JsonElement>(
"https://api.excrypto.finance/v1/price/BTCUSDT");
Console.WriteLine(res);
GET /v1/convert Oráculo
Copy curl "https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1" \
-H "x-oraculo-key: exo_YOUR_KEY"
Copy const res = await fetch(
'https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1',
{ headers: { 'x-oraculo-key': 'exo_YOUR_KEY' } }
);
const conversion = await res.json();
console.log(conversion);
Copy import requests
res = requests.get(
'https://api.excrypto.finance/v1/convert',
headers={'x-oraculo-key': 'exo_YOUR_KEY'},
params={'from': 'BTC', 'to': 'BRL', 'amount': 1}
)
print(res.json())
Copy $ch = curl_init('https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['x-oraculo-key: exo_YOUR_KEY']
]);
$data = json_decode(curl_exec($ch), true);
Copy req, _ := http.NewRequest("GET", "https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1", nil)
req.Header.Set("x-oraculo-key", "exo_YOUR_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var data map[string]interface{}
json.NewDecoder(resp.Body).Decode(&data)
fmt.Println(data)
Copy var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-oraculo-key", "exo_YOUR_KEY");
var res = await client.GetFromJsonAsync<JsonElement>(
"https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1");
Console.WriteLine(res);
OpenAPI Spec (Swagger)
Use a especificação OpenAPI para gerar SDKs em qualquer linguagem, importar no Postman ou Insomnia, ou integrar com ferramentas de automação.
Download openapi.yaml
Rate Limits
Rate limiting is applied per-IP and per-key to ensure fair usage. Headers X-Credits-Remaining and X-Rate-Limit-RPM are included in Oráculo responses.
Global API
120 req/min
Per IP address across all endpoints
Oráculo API
300 req/min
Per API key, configurable per-key (max 300)
Create Payment
60 req/min
Per API key for payment creation
Error Codes
All errors follow a consistent format: { "ok": false, "error": "DESCRIPTION" }
Status
When it occurs
400 Invalid parameters, incomplete body, or unsupported network/token.
401 Missing or invalid credential (x-api-key / x-oraculo-key).
402 Insufficient Oráculo credits.
403 Access forbidden or expired key.
404 Resource not found (order, purchase, key).
409 Resource conflict (e.g., wallet already linked).
429 Rate limit exceeded. Retry after the window resets.
502 Temporary external dependency failure.
Endpoint Explorer
Filter, search, and generate cURL commands for all client-facing endpoints.
All groups
All methods
GET
POST
PUT
PATCH
DELETE
Method
Path
Group
Auth
Description
Loading...
--
Código gerado
Select an endpoint above to generate code.
API Playground
Select an endpoint and test it live.
Endpoint
...
Path Parameters
Auth
Body (JSON)
Send
Copiar código ▾
cURL
Node.js
Python
PHP
Go
C#