APIs

Overview

Kinetic exposes APIs for routing, swap transaction building, user profiles and portfolios

Services

Authentication

Routing

Transactions

Orders

Base URL

  • Authentication: https://auth.kinetic.xyz

  • Services: https://api.kinetic.xyz

💡 Naming Convensions

REST: camelCase

gRPC: snake_case


Authentication

Kinetic uses a two-step model:

  1. API Key → JWT exchange (gRPC needs to call Auth.IssueToken)

  2. Bearer token in Kinetic-Auth header for subsequent requests

HTTP Header / gRPC Metadata

Kinetic-Auth: Bearer <access_token>

Issue Token

POST https://auth.kinetic.xyz/v1/token → exchange API key for a short-lived JWT.

Request Body

Field
Type
Req
Description

apiKey

string

Your issued API key

200 Response

Field
Type
Description

accessToken

string

JWT to use as Bearer token

tokenType

string

e.g., "bearer"

expiresIn

number

Lifetime in seconds

issuedAt

string

RFC3339

expiresAt

string

RFC3339

Samples

curl --location 'auth.kinetic.xyz/v1/token' \
    --header 'Content-Type: application/json' \
    --data '{
        "apiKey": "[apiKey]"
    }'

Sample 200 Response (REST)

{
  "accessToken": "<JWT>",
  "tokenType": "bearer",
  "expiresIn": 3600,
  "issuedAt": "2025-10-02T00:00:00Z",
  "expiresAt": "2025-10-02T01:00:00Z"
}

Routing

Get optimal quotes.

Get Quote

POST routings/v3/quote -> Quote

Request Body

Field
Type
Req
Description

inputToken

string

Input mint (e.g., So1111…)

outputToken

string

Output mint

amount

number

Amount in base units (lamports, etc.)

slippageBps

number

Max slippage (e.g., 100 = 1%)

includedAmms

string[]

e.g., ["RAYDIUM","PHOENIX"]

200 Response

Quote

Field
Type
Description

inputMint

string

JWT to use as Bearer token

inAmount

string

e.g., "bearer"

outputMint

number

Lifetime in seconds

outAmount

string

Space-separated scopes

otherAmountThreshold

string

RFC3339

swapMode

enum

SWAP_MODE_EXACT_IN SWAP_MODE_EXACT_OUT

slippageBps

float

e.g., 100

routePlan

The route plan for this quote

apiVersion

string

e.g., "v1"

RoutePlan

Field
Type
Description

swap_info

The detail of this route

percent

float

The percentage of this route. E.g., 100

SwapInfo

Field
Type
Description

amm_key

string

label

string

input_mint

string

output_mint

string

in_amount

string

out_amount

string

Samples

curl --location 'https://api-dev.kinetic.xyz/routing/v3/quote' \
    --header 'Content-Type: application/json' \
    --data '{
        "inputToken": "So11111111111111111111111111111111111111112",
        "outputToken": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "amount": "10000",
        "slippageBps": 1000
    }'

Sample 200 Response (REST)

{
  "input_mint": "So11111111111111111111111111111111111111112",
  "in_amount": "1000000",
  "output_mint": "<mint>",
  "out_amount": "173240000",
  "other_amount_threshold": "171500000",
  "swap_mode": "SWAP_MODE_EXACT_IN",
  "slippage_bps": 100,
  "route_plan": [
    { "swap_info": { "amm": "RAYDIUM" }, "percent": 100 }
  ],
  "api_version": "v1"
}

Transactions

Build a base64 swap transaction (with optional dynamic fees).

Build Swap Transaction

POST transaction/v1/swap

Request Body

Field
Type
Req
Description

userPublicKey

string

User wallet pubkey

quoteResponse

object

priorityFeeLamports

number

Desired base priority fee

dynamicPrioritFfee

boolean

Let server adjust priority

dynamicSlippage

object

{ "min_bps": 50, "max_bps": 300 }

jitoTipLamports

number

Base tip to builders

dynamicJitoTip

boolean

Let server adjust Jito tip

platformFee

boolean

Apply platform fee if true

200 Response

Field
Type
Description

swapTransaction

string

Base64 encoded transaction

priorityFeeLamports

integer

jitoTipLamports

number

dynamicSlippageReport

DynamicSlippageReport

Field
Type
Description

slippage_bps

float

other_amount

string

Samples

curl --location 'https://api-dev.kinetic.xyz/transaction/v1/swap' \
--header 'Content-Type: application/json' \
--data '{
    "userPublicKey": "[userPublicKey]",
    "priorityFeeLamports": 1000,
    "dynamicPriorityFee": true,
    "dynamicJito_Tip": true,
    "dynamicSlippage": {
        "minBps": 1,
        "maxBps": 1000
    },
    "quoteResponse": {
        "inputMint": "So11111111111111111111111111111111111111112",
        "inAmount": "10000",
        "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
        "outAmount": "1955",
        "otherAmountThreshold": "1760",
        "swapMode": "SWAP_MODE_EXACT_IN",
        "slippageBps": 1000,
        "routePlan": [
            {
                "swapInfo": {
                    "ammKey": "CYbD9RaToYMtWKA7QZyoLahnHdWq553Vm62Lh6qWtuxq",
                    "label": "Raydium CLMM",
                    "inputMint": "So11111111111111111111111111111111111111112",
                    "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
                    "inAmount": "10000",
                    "outAmount": "1955"
                },
                "percent": 100
            }
        ],
        "apiVersion": "1.0"
    }
}'

200 Response (REST)

{
  "swap_transaction": "<base64>",
  "priority_fee_lamports": 52000,
  "jito_tip_lamports": 12000,
  "dynamic_slippage_report": {
    "slippage_bps": 180,
    "other_amount": "200"
  }
}

Orders

Submit a signed or unsigned transaction and stream status back.

gRPC SendTransaction(stream SendTransactionRequest) → (stream SendTransactionResponse)

Send Transaction

POST /v1/sendTransaction — responds with a stream (SSE).

Request Body

Field
Type
Description

serializedUnsignedTx

string

Base64 encoded transaction

serializedSignedTx

string

Base64 encoded signed transaction

confirmConfig

object

e.g., { "skipPreflight": false }

metadata

isJitoEnabled

boolean

Metadata

Field
Type
Description

wallet_address

string

User's wallet address

user_id

string

Kinetic user ID

reward_type

string

e.g. REWARD_TYPE_TOKEN_SWAP

from_token_address

string

from_token_amount

string

to_token_address

string

200 Response

In a streamline of

  1. Simulation status (if skipPreflight is true)

  2. Transaction hash

  3. Transaction statuses

  4. WalletTransactionInfo when the transaction is confirmed

Samples

curl --location 'https://api-dev.kinetic.xyz/v1/sendTransaction' \
    --header 'Content-Type: application/json' \
    --data '{
        "serializedUnsignedTx": "[serializedUnsignedTx]",
        "serializedSignedTx": "[serializedSignedTx]",
        "confirmConfig": {
            "skipPreflight": false
        },
        "metadata": {
            "userId": "[userId]",
            "walletAddress": "[walletAddress]",
            "rewardType": "REWARD_TYPE_TOKEN_SWAP",
            "fromTokenAddress": "So11111111111111111111111111111111111111112",
            "fromTokenAmount": "100000",
            "toTokenAddress": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
        },
        "isJitoEnabled": false
    }'

200 Response (REST)

[{
 "status": "simulationSuccess"
}
,{
 "txHash": "5nYEJn79FurGNJ3LaeWKZ7iPpdjZ4LubfEAhSfhSmTjSQxxhKu3aBmWgbK49sX595XsALLRSQJRGC4ytVTfupTGe"
}
,{
 "status": "processed"
}
,{
 "status": "confirmed"
}
,{
 "walletTransactionInfo": {
  "volumeUsd": "99.9946088322",
  "walletAddress": "[walletAddress]",
  "txHash": "[txHash]",
  "timestamp": 1760253181,
  "fromToken": {
   "mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
   "quantity": "100",
   "priceUsd": "0.999946088322"
  },
  "toToken": {
   "mint": "So11111111111111111111111111111111111111112",
   "quantity": "0.548159167",
   "priceUsd": "182.406794581"
  },
  "platformFeeSol": "0"
 }
}
]

Changelog

  • 2025-10-07: Stripe-style reference authored for GitBook; REST mappings are examples and should be updated to match your gateway paths.

Last updated