Skip to main content

Kryptos Connect

Kryptos Connect enables users to securely share their crypto portfolio data with third-party applications through a single, easy-to-integrate widget.

Overview

Kryptos Connect provides a seamless way for users to:

  • Authorize access to their crypto portfolio with explicit consent
  • Share data securely using industry-standard OAuth 2.0
  • Manage integrations by connecting wallets and exchanges
  • Control permissions with granular scope-based access
  • Long-lived access with 15-year access tokens (no refresh tokens needed)
  • Native mobile support for iOS and Android applications

Base URL

https://connect-api.kryptos.io

How it works

See how users connect their accounts through the Kryptos Connect widget:

Open Connect widgetBrowse integrationsConnect accountConnection successful

Getting Started

Prerequisites

  1. Register your application on the Developer Portal to receive:

    • client_id - Your application identifier
    • client_secret - Your secret key (keep secure, never expose in frontend)
  2. Configure your client with:

    • Allowed redirect URIs
    • Allowed origins for CORS
    • Required scopes

Integration Steps

1. CREATE LINK TOKEN (Backend)
Your server calls /link-token with client credentials

2. INITIALIZE WIDGET (Frontend)
Pass link_token to the SDK widget

3. USER AUTHENTICATES
Guest login (no account), or email login with a one-time code.
An email user with existing workspaces also picks which one to share.

4. USER GRANTS CONSENT
User approves requested permissions

5. RECEIVE PUBLIC TOKEN
Widget returns public_token via onConnectSuccess callback

6. EXCHANGE TOKEN (Backend)
Your server exchanges public_token for access_token

7. ACCESS DATA
Use access_token to call Data APIs

Authentication Methods

MethodHeaderUsed For
Client CredentialsX-Client-Id + X-Client-SecretCreating link tokens, exchanging and revoking tokens — backend only
Link Tokenx-link-tokenWidget operations, and adding integrations from the browser
Bearer TokenAuthorization: Bearer {access_token}Data API calls from your backend

Client credentials may also be sent in the JSON body as client_id and client_secret, which the SDK examples use. Either way they belong on your server, never in frontend code.

See Backend Integration for the request and response detail of every session endpoint.


Available Scopes

Default Client Scopes

When you create a new OAuth client, the following scopes are assigned by default:

openid profile offline_access email portfolios:read transactions:read
integrations:read tax:read accounting:read reports:read workspace:read users:read

Core Scopes

ScopeDescription
openidRequired for OpenID Connect
profileUser profile information
emailUser email address
offline_accessEnable long-lived tokens

API Scopes

ResourceRead ScopeWrite ScopeDescription
Portfoliosportfolios:readportfolios:writePortfolio holdings
Transactionstransactions:readtransactions:writeTransaction history
Balancesbalances:readbalances:writeAccount balances
Integrationsintegrations:readintegrations:writeConnected wallets and exchanges
DeFidefi:readdefi:writeDeFi protocol positions
NFTnft:readnft:writeNFT collections
Taxtax:readtax:writeTax calculations
Accountingaccounting:readaccounting:writeAccounting ledger
Reportsreports:readreports:writeGenerated reports
Workspaceworkspace:readworkspace:writeWorkspace settings

Token Types & Lifetimes

Token TypePrefixLifetimeDescription
Link Tokenlink_30 minutesInitialize Connect widget
Public Tokenpublic_30 minutesExchange for access token (one-time)
Access Tokencat_15 yearsAPI authentication (long-lived)
Grant Tokencgrant_15 yearsAuthorization record (for revocation)

Security Best Practices

  1. Never expose secrets in frontend code - Keep client_secret on your backend only
  2. Store tokens securely - Use encrypted storage for access tokens and grant IDs
  3. Use HTTPS - Always use secure connections in production
  4. Validate state parameters - Prevent CSRF attacks
  5. Monitor for suspicious activity - Log and monitor authentication events
  6. Allow users to revoke access - Provide UI to disconnect integrations using /token/revoke
  7. Store grant IDs - Keep grant IDs for revocation purposes

Guest and Linked users

Connect produces two kinds of user, and the difference affects what you can do with the session:

GuestLinked
Created byGuest login (no email)Email login with a one-time code
Kryptos accountNone — the workspace is the identityYes
user_idEquals workspace_idA real user id
Can sign in to Kryptos directlyNoYes
Subject to developer transaction limitsYesNo

Both are offered by default; control which with authMethods in the SDK.

A Guest is a workspace, not a person, which has two consequences worth designing around:

  • GET /v1/users/me returns 404 — there is no profile to fetch. Detect a Guest from is_anonymous at login, or by comparing user_id with workspace_id.
  • The data belongs to the workspace your grant points at. Revoke the grant and nobody can reach it; a Guest cannot sign in elsewhere to recover it.

Only Guests accept PATCH /developer/grants/{grantId}/transaction-limit; a Linked user returns 400 NOT_ANON_USER.


Choose your integration path


Support

SDK Packages

Contact & Resources

GitHub Repositories