Content API


All requests to Contento need to be authenticated with two pieces of information: an API token and the site ID you want to interact with.

API Keys

API keys can be generated by you in the Contento admin panel. Go to your account settings, and then select “API Keys” to manage them.

Once you have your key save it somewhere sensible, like in your project’s .env file as you’ll need to authenticate every request you make to the API with that token.

To authenticate a request use a standard Authorization header with a bearer token:

Authorization: Bearer {token}

Site ID

You’ll also need to get the ID of the site you wish to call the API against. Go to the sites list and look for the value in the ID column, then pass that in a custom X-CONTENTO-SITE header:

X-CONTENTO-SITE: {site_id}

Making a basic request

This is how a basic request to our /content/{id} endpoint might look like using cURL:

curl "" \
     -H 'Authorization: Bearer {token}' \
     -H 'X-CONTENTO-SITE: {site_id}'

And here is a more realistic example using the getStaticProps() method in a Next.js project:

// ...

export async function getStaticProps() {
    const res = await fetch(process.env.CONTENTO_API_URL+'content/Zx6Wy2ejOY', {
        method: 'GET',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer '+process.env.CONTENTO_API_KEY,
            'X-CONTENTO-SITE': process.env.CONTENTO_SITE_ID

    const page = await res.json()
    return {
        props: {

// ...


If you omit or send either an expired or wrong API token in the Authorization header you will generate the following error response:

401 Unauthorized


If you omit or send the wrong X-CONTENTO-SITE header or don’t have access to the site ID you are requesting you will generate one of the following error responses:

403 Forbidden

  "message": "You must supply the Site ID in the appropriate header."
  "message": "You are not permitted to access this Site."

400 Bad Request

  "message": "Invalid Site ID."