Official API Documentation

Complete reference for Flowgrid Payments and Oráculo.

-- endpoints 6 blockchains supported
Flowgrid Payments
--
Oráculo Price
--
Total Endpoints
--

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

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

curl "https://api.excrypto.finance/payments/v1/payment-status/{order_id}" \ -H "x-api-key: exc_YOUR_MASTER_KEY"

3 Configure Webhook

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

curl "https://api.excrypto.finance/v1/price/BTCUSDT" \ -H "x-oraculo-key: exo_YOUR_KEY"

2 Convert Currency

curl "https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1" \ -H "x-oraculo-key: exo_YOUR_KEY"

3 All Prices

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

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" }'
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);
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'])
$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'];
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"])
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

curl "https://api.excrypto.finance/payments/v1/payment-status/ORDER_ID" \ -H "x-api-key: exc_YOUR_KEY"
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);
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'])
$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'];
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"])
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

curl "https://api.excrypto.finance/payments/v1/merchant/payments?status=COMPLETED&limit=20" \ -H "x-api-key: exc_YOUR_KEY"
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();
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()
$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);
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)
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

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"}'
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' }) });
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'} )
$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);
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()
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

curl "https://api.excrypto.finance/v1/price/BTCUSDT" \ -H "x-oraculo-key: exo_YOUR_KEY"
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);
import requests res = requests.get( 'https://api.excrypto.finance/v1/price/BTCUSDT', headers={'x-oraculo-key': 'exo_YOUR_KEY'} ) print(res.json())
$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);
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)
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

curl "https://api.excrypto.finance/v1/convert?from=BTC&to=BRL&amount=1" \ -H "x-oraculo-key: exo_YOUR_KEY"
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);
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())
$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);
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)
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
400Invalid parameters, incomplete body, or unsupported network/token.
401Missing or invalid credential (x-api-key / x-oraculo-key).
402Insufficient Oráculo credits.
403Access forbidden or expired key.
404Resource not found (order, purchase, key).
409Resource conflict (e.g., wallet already linked).
429Rate limit exceeded. Retry after the window resets.
502Temporary external dependency failure.

Endpoint Explorer

Filter, search, and generate cURL commands for all client-facing endpoints.

Method Path Group Auth Description
Loading...
--

API Playground

Select an endpoint and test it live.

---