Signing Requests
ChainStream uses API keys to authenticate all API calls. The Base API URL will be one of the following depending on your workspace environment type:
- Mainnet:
https://api-dex.chainstream.io/
Each API request must include the following headers:
Authorization - This value should be set to Bearer <Access Token>. The access token is a Base64 encoded JSON Web Token (JWT).
Generating JWT Token
You can generate a JWT token using the following code. The scope parameter is optional and controls access permissions for specific API modules.
Available Scopes
The following scopes are currently supported:
webhook.read - Read access to Webhook API endpoints
webhook.write - Write access to Webhook API endpoints
kyt.read - Read access to KYT (Know Your Transaction) API endpoints
kyt.write - Write access to KYT API endpoints
If no scope is specified, the token will have access to all general API endpoints. Scopes are only required when accessing protected Webhook or KYT endpoints.
JavaScript
Example 1: Without scope (general API access)
import { AuthenticationClient } from 'auth0';
const auth0Client = new AuthenticationClient({
domain: `dex.asia.auth.chainstream.io`,
clientId: 'your client id',
clientSecret: 'your client secret'
});
const response = await auth0Client.oauth.clientCredentialsGrant({
audience: 'https://api.dex.chainstream.io'
});
return response.data.access_token;
Example 2: With Webhook access
import { AuthenticationClient } from 'auth0';
const auth0Client = new AuthenticationClient({
domain: `dex.asia.auth.chainstream.io`,
clientId: 'your client id',
clientSecret: 'your client secret'
});
const response = await auth0Client.oauth.clientCredentialsGrant({
audience: 'https://api.dex.chainstream.io',
scope: ['webhook.read', 'webhook.write']
});
return response.data.access_token;
Example 3: With KYT access
import { AuthenticationClient } from 'auth0';
const auth0Client = new AuthenticationClient({
domain: `dex.asia.auth.chainstream.io`,
clientId: 'your client id',
clientSecret: 'your client secret'
});
const response = await auth0Client.oauth.clientCredentialsGrant({
audience: 'https://api.dex.chainstream.io',
scope: ['kyt.read', 'kyt.write']
});
return response.data.access_token;
Example 4: With multiple scopes
import { AuthenticationClient } from 'auth0';
const auth0Client = new AuthenticationClient({
domain: `dex.asia.auth.chainstream.io`,
clientId: 'your client id',
clientSecret: 'your client secret'
});
const response = await auth0Client.oauth.clientCredentialsGrant({
audience: 'https://api.dex.chainstream.io',
scope: ['webhook.read', 'webhook.write', 'kyt.read', 'kyt.write']
});
return response.data.access_token;
Using SDKs
After generating the JWT token, you can use it to initialize the SDK:
JavaScript SDK
import { DexClient } from "@chainstream-io/sdk";
// jwtToken generated from previous step
const dex = new DexClient("your-jwt-token");
Make sure to replace the placeholder values with your actual API credentials.