APIs

APIs

Your Keel backend exposes three types of APIs:

  • GraphQL
  • JSON, and
  • JSON-RPC

When running Keel locally using keel run you can make requests to your API at http://localhost:8000/api/${apiType} and for deployed environments you'll find the domain on the Overview page in the Keel console.

Code generation

We recommend using the Keel CLI to generate client code for your API. The CLI will generate a fully-typed TypeScript client for your API with autocompletion and type hints. It is the preferred way to interact with your Keel backend and recommended over directly calling the API endpoints.

To learn more about the generated client, visit its documentation page.

GraphQL API

Endpoint: /api/graphql

GraphQL (opens in a new tab) is an open-source data query language that allows clients to specify the data they need from the API. It also allows querying data across relational data models, meaning that you can do in one API call what might otherwise require several.

When running locally with keel run you can also access a GraphiQL (opens in a new tab) playground at /api/graphiql.

Read the GraphQL API docs

JSON API (OpenAPI)

Endpoint: /api/json/<actionName>

OpenAPI (opens in a new tab) is an open-source specification for describing JSON APIs. It describes which endpoints are available and the data-type's of the requests and responses. There are many open source libraries for generating clients from an OpenAPI spec and you can download the OpenAPI (v3.1) definitions for your JSON API from the API Explorer in the Keel console or from the /api/json/openapi.json endpoint of your Keel app.

Read the JSON API docs

JSON-RPC API

Endpoint: /api/rpc

JSON-RPC (opens in a new tab) is a lightweight Remote Procedure Call (opens in a new tab) (RPC) protocol. The JSON-RPC endpoint is /api/rpc and is compliant with the JSON-RPC 2.0 spec.

Which API should I use?

We support these different types of endpoints to give you flexibility in how to connect to your Keel app. If you are building a web frontend and have used GraphQL before or want to be able to load lots of relational data in one request, then GraphQL may be a good choice.

If you want a simpler option with a more standard request/response pattern then the JSON API might be more for you.

Authentication

All APIs use the same JWT (opens in a new tab) (JSON Web Token)-based authentication. First you need to get an access token by authenticating. You can then pass this access token in the Authorization header on all subsequent requests.

Authorization: Bearer <access token>

See the individual API docs for examples.