Skip to main content
All endpoints require ECDSA signature-based authentication using required headers:
  • X-API-SUBSCRIPTION-KEY: Your unique API key identifier
  • X-API-SIGNATURE: ECDSA-SHA256 signature (base64-encoded)
  • X-API-TIMESTAMP: Unix timestamp (in milliseconds)
  • X-API-NONCE: Unique UUID to prevent replay attacks
Contact INDX support to obtain sandbox API credentials (API Subscription Key). Keep your private key secure and never commit it to version control.

Generate Your Key Pair

After making contact with INDX Support, generate an ECDSA key pair using the secp256k1 elliptic curve and send the public key to INDX. You may use OpenSSL or other libraries to generate the pair. See OpenSSL example scripts below.

How Signature Authentication Works

The signature is generated using ECDSA (Elliptic Curve Digital Signature Algorithm) with your private key:
  1. Create a message string: TIMESTAMP + NONCE + METHOD + ENDPOINT
  2. Base64 encode the message
  3. Sign the encoded message with your private key using ECDSA-SHA256
  4. Base64 encode the signature
Important: URL vs Endpoint
  • URL: The full address including the domain (e.g., https://api.indx.com/customer/accounts)
  • Endpoint: Only the path portion (e.g., /customer/accounts)
  • Path parameters: When an endpoint includes a path parameter (e.g., an account or transaction ID), replace it with the literal string id when building the endpoint for signing, e.g. ENDPOINT = "/customer/accounts/transactions/id"
When creating the signature, use only the endpoint (path), not the full URL. The signature is computed using the path that starts with /.
This signature ensures:
  • Requests cannot be tampered with in transit
  • Requests are authenticated to your account with public-key cryptography
  • Replay attacks are prevented through timestamp and nonce validation

Generating Authentication Headers

Here’s how to generate the required authentication headers:

Making an API Request

Use the generated signature to make your API request:

Complete Working Example

POST Requests with Body Data

When making POST requests with a JSON body, the signature process is identical - you do NOT include the request body in the signature:
Critical for POST/PUT/PATCH requests:
  • The request body is NOT included in the signature calculation
  • The signature only uses: TIMESTAMP + NONCE + METHOD + ENDPOINT
  • The body is sent separately in the request payload
  • Always use METHOD.upper() to ensure the method is uppercase (e.g., “POST”, not “post”)

Private Key Format

Your private key should be in PEM format (PKCS#8):

Response Example

A successful response will return your customer accounts:

Required Dependencies