For the complete documentation index, see llms.txt. This page is also available as Markdown.

REST API

The API files are located in the /api folder in the Node.js version and /src/api in the Next.js version.

The structure of these files is simple; there is a list of endpoints that connect directly to the relevant controller method.

// node.js
api.post('/api/account', use(accountController.create));

// next.js
export const POST = withApiRoute(accountController.create);

Each controller call is wrapped in a HOC (higher-order component). This is a middleware function that catches any errors in the controller methods and then passes these to a global error handler – this prevents you from having to use try...catch in your application.

Protected Routes

You can protect any API route and make it accessible to only a specific user level or API key scope using the auth.verify middleware method. You simply pass the user permission as the first argument, and an optional API scope as the second.

// protect using a user permission
api.get('/api/user', auth.verify('user'), use(userController.get));

// protect using a user permission and api scope
api.get('/api/user', auth.verify('user', 'account.read'), use(userController.get));

// next.js
export const GET = withApiRoute('owner', 'user.read', userController.get);

Learn more about API scopes and find out more about how authentication works in the next section.

Accessing The API

You can access the API using one of two methods:

  1. Using a Bearer token issued during the authentication flow

  2. Using an API key

Using Bearer Tokens

Bearer tokens are JWTs that are used to authenticate the user. You can use a Bearer token with the API by passing it in the Authorization header.

Using API Keys

API keys can be created by either an owner or developer permission and can be used to access any endpoint that has an API scope (see Protected Routes above).

The following example demonstrates how to make an API request in Javascript with the Axios package and Basic authentication.

Input Validation

Input validation is handled with JOI, which has been wrapped in a HOF to support locales.

Rate Limiting

API requests are globally rate-limited as defined by the throttle settings in config. The following end points have their own lower rate limits for security purposes:

  • POST /api/account

  • POST /api/user

  • POST /api/user/auth

  • POST /api/user/password/reset/request

  • POST /api/user/password/reset

API Logs

Every API request is logged in the log table by default. You can toggle this on or off using the ENABLE_API_LOGS environment variable.

Swagger File

There is a swagger file included in api/spec.yaml with documentation and examples for each endpoint using the OpenAPI 3.0 spec. You can import this into Postman for easy testing.

Last updated