Your partner reference (
liquidramp-client-id) is shown in the portal when you generate keys. Test hosts issue *_test_* keys; production issues *_live_*. See Sandbox vs production.
public_key→Authorization: Bearer …on read endpoints (no HMAC)secret_key→Authorization: Bearer …on your backend for reads and writes (HMAC required)encryption_key→ HMAC signing only (never a request header)- Partner reference →
liquidramp-client-id
pk_* requests do not require HMAC. Every sk_* request — including reads — requires liquidramp-timestamp and liquidramp-signature. Sign with enc_*, not with the secret key.
Public key (pk_*)
Use the public key for read routes such as GET /v1/institutions, GET /v1/networks, and GET /v1/exchange-rate. You can call the same reads with sk_* from your backend instead (with HMAC).
Required headers
Secret key (sk_*)
Use the secret key only on your backend. It can perform read requests and all write routes (quotes, orders, fulfilments). Never embed sk_* in a mobile app, browser, or other client-side code.
Required headers
Sign with your
enc_* encryption key.
Canonical string
Node.js signing example
Common mistakes
- Signing with
sk_*instead ofenc_* - Omitting
/v1or the query string frompath - Re-serializing JSON (key order changes the body)
- Using seconds instead of milliseconds for the timestamp
- Sending
sk_*orenc_*from a browser or mobile app
Key security
- Store keys in a secrets manager — never commit them to source control.
- Keep
sk_*andenc_*on the backend only. Treatpk_*as sensitive as well. - Rotate keys in the portal if credentials may have leaked. Rotate
enc_*andsk_*together.
IP whitelist
If your partner profile has an IP whitelist, requests from other IPs receive403 with code E_IP_BLOCKED. Manage the whitelist in the portal.
Error responses
Authentication failures typically return:{ "status": "failed", "message": "...", "data": null } with HTTP 401 or 403.