REST over HTTPS, JSON in and out, idempotency keys on every write. Sandbox keys are issued the moment you sign up and behave like production without moving money.
curl https://api.gowire.ai/v1/payments \
-H "Authorization: Bearer sk_test_9f2c" \
-H "Idempotency-Key: 8a41-inv-20268" \
-d source[currency]=EUR \
-d source[amount]=50000 \
-d target[currency]=USD \
-d beneficiary=ben_8f2c19 \
-d reference=INV-20268
import { Gowire } from "@gowire/node";
const gw = new Gowire(process.env.GOWIRE_KEY);
const payment = await gw.payments.create({
source: { currency: "EUR", amount: 50000 },
target: { currency: "USD" },
beneficiary: "ben_8f2c19",
reference: "INV-20268"
}, { idempotencyKey: "8a41-inv-20268" });
console.log(payment.status); // "routing"
import gowire
gw = gowire.Client(api_key=os.environ["GOWIRE_KEY"])
payment = gw.payments.create(
source={"currency": "EUR", "amount": 50000},
target={"currency": "USD"},
beneficiary="ben_8f2c19",
reference="INV-20268",
idempotency_key="8a41-inv-20268",
)
print(payment.status) # "routing"
| Verb | Path | Does |
|---|---|---|
| GET | /v1/quotes | Rate, fee and arrival window for a corridor and amount |
| POST | /v1/payments | Create and route a payment |
| GET | /v1/payments/:id | Current status and full timeline |
| POST | /v1/batches | Submit up to 5,000 payments with pre-flight validation |
| GET | /v1/balances | Balance per currency, available and reserved |
| POST | /v1/beneficiaries | Store a payee with validated account details |
| GET | /v1/reconciliation | Matched settlements and open exceptions for a period |
Rail selected; the payment is on its way out.
Beneficiary bank confirmed the credit.
Screening needs a decision from you.
Rejected, with the reason and a retry option.
Pre-flight finished; valid and invalid rows listed.
A settlement the agent could not match alone.
Signed with HMAC-SHA256, retried with backoff for 24 hours, and replayable from the dashboard.
Node, Python, Go and Ruby, generated from the same spec and versioned together.
Browse on GitHub