secp256k1 signatures over a canonical request string. Every request carries four headers (X-Access-Key, X-Access-Timestamp, X-Access-Request-Id, X-Access-Signature); a missing or mis-formed header is rejected before any signature check.
There are no static API tokens. Your private key stays on your infrastructure. BlooBank holds only the matching public key, used to verify your signatures.
Why signed requests instead of static tokens? A leaked API token gives an attacker full access until you rotate it. A leaked signature is worthless — it is bound to one request, at one moment in time, with one body. The private key never crosses the wire.
At a glance
1
Generate a keypair locally
Create an ECDSA
secp256k1 private key on your infrastructure and derive the public half. The private key never leaves your environment.2
Register the public key with BlooBank
Send the public key (hex-encoded, 130 characters starting with
04) to your integration support contact. BlooBank returns an Access Key — your credential identifier.3
Sign every request
For each API call, build a canonical request string, hash it with SHA-256, sign it with your private key, and attach the four
X-Access-* headers.4
BlooBank verifies
The platform recomputes the canonical string, looks up your public key by
X-Access-Key, and verifies the signature. Valid → request flows through. Invalid → 401 SIGNATURE_INVALID.What you need
The four required headers
Failing any of these is rejected before further processing:
See Error catalog for the full list.
Curve choice
The default signing curve issecp256k1 — the same curve used by Bitcoin and Ethereum, broadly supported by every mainstream crypto library. Your onboarding agreement specifies which curve is registered for your credential; if BlooBank assigned a different curve, every other rule below stays identical, only the curve changes.
Next
Generate your keys
Create your ECDSA keypair with OpenSSL.
Sign a request
Build the canonical string, hash, sign, attach the headers.
Code examples
Working signer clients in six languages.