API keys
API keys are the primary credential for external consumers, trading bots, and any automated system making calls to Predexy. Keys give you access to the/api/v1/external/* route group, including the arbitrage opportunities endpoint.
Getting an API key
Create a key in the Developer Console under Settings → API Keys, or via the API after logging in:- Prefix: All keys start with
pdx_so they’re easy to identify in code and logs. - One-time reveal: The full key appears only in the creation response.
- Revocation: Delete a key via
DELETE /api/v1/console/keys/{id}. Revoked keys are deactivated immediately and cannot be reactivated.
Using an API key in requests
Pass your key in theX-API-Key header on every request:
401 with INVALID_API_KEY:
Session tokens (JWT)
Session tokens are issued when you log in with email and password. They’re used by the Developer Console and for direct API calls against product routes like market discovery.Logging in
Using a session token in requests
Pass the access token as aBearer token in the Authorization header:
pdx_access cookie automatically when you’re logged in — browser-based requests pick this up without any extra configuration.
Refreshing your access token
When your access token expires, exchange your refresh token for a new pair:Wallet authentication (SIWE)
The main Predexy application supports Sign-In With Ethereum (SIWE) for users who prefer wallet-based authentication. The flow has three steps:- Get a nonce —
GET /api/v1/siwe/noncereturns a one-time nonce tied to your session. - Sign the message — Your wallet signs an EIP-4361 message containing the nonce.
- Verify —
POST /api/v1/siwe/verifysubmits the signed message. On success, Predexy issues a session cookie.
SIWE is for the main application, not for Developer Console access or API key issuance. If you’re building a bot or integration, use email/password login and API keys instead.
Rate limits
Every response from Predexy includes rate-limit headers so your code can back off gracefully before hitting the limit:
Rate limits vary by tier:
When you exceed the limit, the API returns
429 with RATE_LIMITED:
