Documentation

Guides

Start in the sandbox. Everything below works with a jw_test_ key and no commercial agreement.

Authentication

Every request carries a bearer token. Keys are environment-scoped: a jw_test_ key will be rejected by api.blackwoodcustody.online and vice versa.

auth
curl https://api.blackwoodcustody.online/v1/accounts \
  -H "Authorization: Bearer $JW_API_KEY"

Payouts

Payouts are asynchronous. Create one, then either poll the payout or — better — subscribe to payout.settled and payout.returned. Always send an Idempotency-Key; retries within 24 hours return the original payout rather than creating a second payment.

StatusMeaning
pending_approvalAbove the dual-authorisation threshold; awaiting a second approver.
submittedHanded to the scheme. No longer cancellable.
settledFunds confirmed at the beneficiary bank.
returnedRejected downstream; funds credited back with a reason code.

Treasury sweeps

A sweep rule moves everything above target_floor from a source account into a destination on a cron schedule, converting at booked FX if the currencies differ. Sweeps run after the last scheme cut-off for the source currency, so an intraday balance never triggers one unexpectedly.

FX

Lock a quote, then reference the quote id on the transfer or payout within 60 seconds. If the quote expires you get fx_quote_expired and nothing moves. Spread is always broken out wirerately on the ledger entry.

Webhooks

We sign every delivery with HMAC-SHA256 over timestamp . "." . body and send it in X-Signature. Reject anything older than five minutes. We retry with exponential backoff for 24 hours.

Full API reference →