Developer-friendly & type-safe Typescript SDK specifically catered to leverage Authlete API.
Important
This is a beta SDK.
If you're new to Authlete or want to see sample implementations, these resources will help you get started:
If you have any questions or need assistance, our team is here to help:
Authlete API: Welcome to the Authlete API documentation. Authlete is an API-first service where every aspect of the platform is configurable via API. This documentation will help you authenticate and integrate with Authlete to build powerful OAuth 2.0 and OpenID Connect servers. π
At a high level, the Authlete API is grouped into two categories:
- Management APIs: Enable you to manage services and clients. π§
- Runtime APIs: Allow you to build your own Authorization Servers or Verifiable Credential (VC) issuers. π
Authlete is a global service with clusters available in multiple regions across the world:
- πΊπΈ US:
https://us.authlete.com - π―π΅ Japan:
https://jp.authlete.com - πͺπΊ Europe:
https://eu.authlete.com - π§π· Brazil:
https://br.authlete.com
Our customers can host their data in the region that best meets their requirements.
All API endpoints are secured using Bearer token authentication. You must include an access token in every request:
Authorization: Bearer YOUR_ACCESS_TOKEN
Authlete supports two types of access tokens:
Service Access Token - Scoped to a single service (authorization server instance)
- Log in to Authlete Console
- Navigate to your service β Settings β Access Tokens
- Click Create Token and select permissions (e.g.,
service.read,client.write) - Copy the generated token
Organization Token - Scoped to your entire organization
- Log in to Authlete Console
- Navigate to Organization Settings β Access Tokens
- Click Create Token and select org-level permissions
- Copy the generated token
β οΈ Important Note: Tokens inherit the permissions of the account that creates them. Service tokens can only access their specific service, while organization tokens can access all services within your org.
- Never commit tokens to version control - Store in environment variables or secure secret managers
- Rotate regularly - Generate new tokens periodically and revoke old ones
- Scope appropriately - Request only the permissions your application needs
- Revoke unused tokens - Delete tokens you're no longer using from the console
Verify your token works with a simple API call:
curl -X GET https://us.authlete.com/api/service/get/list \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"If you're new to Authlete or want to see sample implementations, these resources will help you get started:
If you have any questions or need assistance, our team is here to help:
The SDK can be installed with either npm, pnpm, bun or yarn package managers.
npm add @authlete/typescript-sdkpnpm add @authlete/typescript-sdkbun add @authlete/typescript-sdkyarn add @authlete/typescript-sdkNote
This package is published with CommonJS and ES Modules (ESM) support.
For supported JavaScript runtimes, please consult RUNTIMES.md.
You need to pass a valid access token to be able to use any resource or operation. Refer to Creating an Access Token to learn how to create one.
Authlete supports two types of access tokens:
- Service Access Token - Scoped to a single service (authorization server instance). Create from Service Settings β Access Tokens in the Authlete Console.
- Organization Token - Scoped to your entire organization, allowing access to all services. Create from Organization Settings β Access Tokens.
Make sure that you create a token with the correct scope. If you face permission (403) errors when already sending a token, it can be one of the following problems:
- The token you are using has expired. Check the expiry date in the Authlete Console.
- The token does not have access to the correct scope, either not the right service or it does not have account level access.
- The resource or operation you are trying to use is not available for that service tier. For example, some features are Enterprise-only and you may be using a token for a service on a different plan.
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
}
run();This SDK supports the following security scheme globally:
| Name | Type | Scheme | Environment Variable |
|---|---|---|---|
bearer |
http | HTTP Bearer | AUTHLETE_BEARER |
To authenticate with the API the bearer parameter must be set when initializing the SDK client instance. For example:
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
}
run();Available methods
- processRequest - Process Authorization Request
- fail - Fail Authorization Request
- issue - Issue Authorization Response
- getTicketInfo - Get Ticket Information
- updateTicket - Update Ticket Information
- processAuthentication - Process Backchannel Authentication Request
- issue - Issue Backchannel Authentication Response
- fail - Fail Backchannel Authentication Request
- complete - Complete Backchannel Authentication
- get - Get Client
- list - List Clients
- create - Create Client
- update - Update Client
- delete - Delete Client β‘
- updateLockFlag - Update Client Lock
- refreshSecret - Rotate Client Secret
- updateSecret - Update Client Secret
- listAuthorizations - Get Authorized Applications
- updateAuthorizations - Update Client Tokens
- deleteAuthorizations - Delete Client Tokens
- getGrantedScopes - Get Granted Scopes
- deleteGrantedScopes - Delete Granted Scopes
- getRequestableScopes - Get Requestable Scopes
- updateRequestableScopes - Update Requestable Scopes
- deleteRequestableScopes - Delete Requestable Scopes
- authorization - Process Device Authorization Request
- verification - Process Device Verification Request
- complete - Complete Device Authorization
- configuration - Process Entity Configuration Request
- registration - Process Federation Registration Request
- processRequest - Process Grant Management Request
- create - Create Security Key
- delete - Delete Security Key
- get - Get Security Key
- list - List Security Keys
- process - Process Introspection Request
- standardProcess - Process OAuth 2.0 Introspection Request
- joseVerifyApi - Verify JOSE
- serviceJwksGetApi - Get JWK Set
- create - Process Pushed Authorization Request
- process - Process Revocation Request
- get - Get Service
- list - List Services
- create - Create Service
- update - Update Service
- delete - Delete Service β‘
- getConfiguration - Get Service Configuration
- reissueIdToken - Reissue ID Token
- list - List Issued Tokens
- create - Create Access Token
- update - Update Access Token
- delete - Delete Access Token
- revoke - Revoke Access Token
- getMetadata - Get Verifiable Credential Issuer Metadata
- getJwtIssuer - Get JWT Issuer Information
- getJwks - Get JSON Web Key Set
- createOffer - Create Credential Offer
- getOfferInfo - Get Credential Offer Information
- parse - Parse Single Credential
- issue - Issue Single Credential
- batchParse - Parse Batch Credentials
- batchIssue - Issue Batch Credentials
- deferredParse - Parse Deferred Credential
- deferredIssue - Issue Deferred Credential
All the methods listed above are available as standalone functions. These functions are ideal for use in applications running in the browser, serverless runtimes or other environments where application bundle size is a primary concern. When using a bundler to build your application, all unused functionality will be either excluded from the final bundle or tree-shaken away.
To read more about standalone functions, check FUNCTIONS.md.
Available standalone functions
authorizationFail- Fail Authorization RequestauthorizationIssue- Issue Authorization ResponseauthorizationManagementGetTicketInfo- Get Ticket InformationauthorizationManagementUpdateTicket- Update Ticket InformationauthorizationProcessRequest- Process Authorization RequestcibaComplete- Complete Backchannel AuthenticationcibaFail- Fail Backchannel Authentication RequestcibaIssue- Issue Backchannel Authentication ResponsecibaProcessAuthentication- Process Backchannel Authentication RequestclientCreate- Create ClientclientDelete- Delete Client β‘clientGet- Get ClientclientList- List ClientsclientManagementDeleteAuthorizations- Delete Client TokensclientManagementDeleteGrantedScopes- Delete Granted ScopesclientManagementDeleteRequestableScopes- Delete Requestable ScopesclientManagementGetGrantedScopes- Get Granted ScopesclientManagementGetRequestableScopes- Get Requestable ScopesclientManagementListAuthorizations- Get Authorized ApplicationsclientManagementRefreshSecret- Rotate Client SecretclientManagementUpdateAuthorizations- Update Client TokensclientManagementUpdateLockFlag- Update Client LockclientManagementUpdateRequestableScopes- Update Requestable ScopesclientManagementUpdateSecret- Update Client SecretclientUpdate- Update ClientdeviceFlowAuthorization- Process Device Authorization RequestdeviceFlowComplete- Complete Device AuthorizationdeviceFlowVerification- Process Device Verification RequestdynamicClientRegistrationDelete- Delete ClientdynamicClientRegistrationGet- Get ClientdynamicClientRegistrationRegister- Register ClientdynamicClientRegistrationUpdate- Update ClientfederationConfiguration- Process Entity Configuration RequestfederationRegistration- Process Federation Registration RequestgrantManagementProcessRequest- Process Grant Management RequesthardwareSecurityKeysCreate- Create Security KeyhardwareSecurityKeysDelete- Delete Security KeyhardwareSecurityKeysGet- Get Security KeyhardwareSecurityKeysList- List Security KeysintrospectionProcess- Process Introspection RequestintrospectionStandardProcess- Process OAuth 2.0 Introspection RequestjoseObjectJoseVerifyApi- Verify JOSEjwkSetEndpointServiceJwksGetApi- Get JWK SetnativeSsoLogout- Native SSO Logout ProcessingnativeSsoProcess- Native SSO ProcessingpushedAuthorizationCreate- Process Pushed Authorization RequestrevocationProcess- Process Revocation RequestserviceCreate- Create ServiceserviceDelete- Delete Service β‘serviceGet- Get ServiceserviceGetConfiguration- Get Service ConfigurationserviceList- List ServicesserviceUpdate- Update ServicetokenFail- Fail Token RequesttokenIssue- Issue Token ResponsetokenManagementCreate- Create Access TokentokenManagementDelete- Delete Access TokentokenManagementList- List Issued TokenstokenManagementReissueIdToken- Reissue ID TokentokenManagementRevoke- Revoke Access TokentokenManagementUpdate- Update Access TokentokenProcess- Process Token RequestuserinfoIssue- Issue UserInfo ResponseuserinfoProcess- Process UserInfo RequestverifiableCredentialsBatchIssue- Issue Batch CredentialsverifiableCredentialsBatchParse- Parse Batch CredentialsverifiableCredentialsCreateOffer- Create Credential OfferverifiableCredentialsDeferredIssue- Issue Deferred CredentialverifiableCredentialsDeferredParse- Parse Deferred CredentialverifiableCredentialsGetJwks- Get JSON Web Key SetverifiableCredentialsGetJwtIssuer- Get JWT Issuer InformationverifiableCredentialsGetMetadata- Get Verifiable Credential Issuer MetadataverifiableCredentialsGetOfferInfo- Get Credential Offer InformationverifiableCredentialsIssue- Issue Single CredentialverifiableCredentialsParse- Parse Single Credential
Some of the endpoints in this SDK support retries. If you use the SDK without any configuration, it will fall back to the default retry strategy provided by the API. However, the default retry strategy can be overridden on a per-operation basis, or across the entire SDK.
To change the default retry strategy for a single API call, simply provide a retryConfig object to the call:
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
}, {
retries: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
});
console.log(result);
}
run();If you'd like to override the default retry strategy for all operations that support retries, you can provide a retryConfig at SDK initialization:
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
retryConfig: {
strategy: "backoff",
backoff: {
initialInterval: 1,
maxInterval: 50,
exponent: 1.1,
maxElapsedTime: 100,
},
retryConnectionErrors: false,
},
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
}
run();AuthleteError is the base class for all HTTP error responses. It has the following properties:
| Property | Type | Description |
|---|---|---|
error.message |
string |
Error message |
error.statusCode |
number |
HTTP response status code eg 404 |
error.headers |
Headers |
HTTP response headers |
error.body |
string |
HTTP body. Can be empty string if no body is returned. |
error.rawResponse |
Response |
Raw HTTP response |
error.data$ |
Optional. Some errors may contain structured data. See Error Classes. |
import { Authlete } from "@authlete/typescript-sdk";
import * as errors from "@authlete/typescript-sdk/models/errors";
const authlete = new Authlete({
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
try {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
} catch (error) {
// The base class for HTTP error responses
if (error instanceof errors.AuthleteError) {
console.log(error.message);
console.log(error.statusCode);
console.log(error.body);
console.log(error.headers);
// Depending on the method different errors may be thrown
if (error instanceof errors.ResultError) {
console.log(error.data$.resultCode); // string
console.log(error.data$.resultMessage); // string
}
}
}
}
run();Primary errors:
AuthleteError: The base class for HTTP error responses.ResultError: .
Less common errors (6)
Network errors:
ConnectionError: HTTP client was unable to make a request to a server.RequestTimeoutError: HTTP request timed out due to an AbortSignal signal.RequestAbortedError: HTTP request was aborted by the client.InvalidRequestError: Any input used to create a request is invalid.UnexpectedClientError: Unrecognised or unexpected error.
Inherit from AuthleteError:
ResponseValidationError: Type mismatch between the data returned from the server and the structure expected by the SDK. Seeerror.rawValuefor the raw value anderror.pretty()for a nicely formatted multi-line string.
You can override the default server globally by passing a server index to the serverIdx: number optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
| # | Server | Description |
|---|---|---|
| 0 | https://us.authlete.com |
πΊπΈ US Cluster |
| 1 | https://jp.authlete.com |
π―π΅ Japan Cluster |
| 2 | https://eu.authlete.com |
πͺπΊ Europe Cluster |
| 3 | https://br.authlete.com |
π§π· Brazil Cluster |
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
serverIdx: 0,
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
}
run();The default server can also be overridden globally by passing a URL to the serverURL: string optional parameter when initializing the SDK client instance. For example:
import { Authlete } from "@authlete/typescript-sdk";
const authlete = new Authlete({
serverURL: "https://br.authlete.com",
bearer: process.env["AUTHLETE_BEARER"] ?? "",
});
async function run() {
const result = await authlete.service.get({
serviceId: "<id>",
});
console.log(result);
}
run();The TypeScript SDK makes API calls using an HTTPClient that wraps the native
Fetch API. This
client is a thin wrapper around fetch and provides the ability to attach hooks
around the request lifecycle that can be used to modify the request or handle
errors and response.
The HTTPClient constructor takes an optional fetcher argument that can be
used to integrate a third-party HTTP client or when writing tests to mock out
the HTTP client and feed in fixtures.
The following example shows how to use the "beforeRequest" hook to to add a
custom header and a timeout to requests and how to use the "requestError" hook
to log errors:
import { Authlete } from "@authlete/typescript-sdk";
import { HTTPClient } from "@authlete/typescript-sdk/lib/http";
const httpClient = new HTTPClient({
// fetcher takes a function that has the same signature as native `fetch`.
fetcher: (request) => {
return fetch(request);
}
});
httpClient.addHook("beforeRequest", (request) => {
const nextRequest = new Request(request, {
signal: request.signal || AbortSignal.timeout(5000)
});
nextRequest.headers.set("x-custom-header", "custom value");
return nextRequest;
});
httpClient.addHook("requestError", (error, request) => {
console.group("Request Error");
console.log("Reason:", `${error}`);
console.log("Endpoint:", `${request.method} ${request.url}`);
console.groupEnd();
});
const sdk = new Authlete({ httpClient: httpClient });You can setup your SDK to emit debug logs for SDK requests and responses.
You can pass a logger that matches console's interface as an SDK option.
Warning
Beware that debug logging will reveal secrets, like API tokens in headers, in log messages printed to a console or files. It's recommended to use this feature only during local development and not in production.
import { Authlete } from "@authlete/typescript-sdk";
const sdk = new Authlete({ debugLogger: console });You can also enable a default debug logger by setting an environment variable AUTHLETE_DEBUG to true.
This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally looking for the latest version.
While we value open-source contributions to this SDK, this library is generated programmatically. Any manual changes added to internal files will be overwritten on the next generation. We look forward to hearing your feedback. Feel free to open a PR or an issue with a proof of concept and we'll do our best to include it in a future release.