API basics
This page covers the shared fundamentals that apply across all Latitude API products.
Base URL
All API requests are made to:
Authentication
Latitude uses HMAC-SHA256 signature-based authentication. All API requests must include a properly formatted Authorization header containing the signature and metadata.
Required Headers
Authorization Header Components
Example: Properly Signed Request
Request:
Expected Headers:
Canonical Request Payload
A plaintext representation of the request, consisting of the following parts (all parts should be included, even if blank):
- Request method
- Request path
- Query params
- Formatted headers, sorted by name
- A sorted list of signed headers, delimited by semicolons
- The SHA256 hash of the request payload
Example:
Signature Calculation
The final signature is generated by:
- Producing a SHA256 hash of the canonical request payload
- Adding the resulting hash to the final payload, and producing a HMAC-SHA256 signature using the secret key
- Encoding the final signature using Base64
Final Payload:
Final Signature:
Base64 Encoded Signature:
Idempotency
The Transfers and Conversion Accounts endpoints support idempotency. This allows you to safely retry requests without accidentally performing the same operation twice. To use it, include an Idempotency-Key header with a UUID value. We recommend a V4 UUID to avoid collisions.
When you supply a valid Idempotency-Key, we save the resulting status code and body and return it for subsequent requests with the same key. When we return a saved result, we include an Idempotency-Replayed: true header in the response.
If the same key is sent with a different request body, the API will return a 409 Conflict error.
Note: Cached responses expire after 24 hours. We recommend generating a new UUID for each unique operation and storing it alongside your internal records so retries use the same key.
Webhooks
Subscribe to webhook events to get real-time notifications about transfer status changes, conversion updates, and KYC results. This is the recommended way to track the lifecycle of your payments.
To create a subscription, send a POST request to /v1/webhook_subscriptions with the URL where you’d like to receive events and the event types you’re interested in.
Request:
Available Event Types
Note: Webhook subscriptions are created at the organization level, not per-individual or per-transfer. Once a subscription is active, you will receive events for all individuals, transfers, and conversions across your account.
Prefunded Flows
Currently all Latitude flows are prefunded. You send funds to Latitude and those funds settle before you can execute transfers. You can prefund using:
- USD via wire transfer to your Latitude-managed bank account
- USDC via blockchain deposit on the Base network
You can find the instructions for funding your account in the dashboard. We will support more flexible and real-time funding flows in the future.
Sandbox Environment
Latitude provides a sandbox environment for testing your integration without moving real money. Contact us to get sandbox API credentials.
The sandbox supports magic strings for simulating different outcomes (e.g. KYC approval/rejection, transfer success/failure). See the individual integration guides for sandbox-specific details.

