> For the complete documentation index, see [llms.txt](https://developer.abacum.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.abacum.ai/guides/troubleshooting.md).

# Troubleshooting

Find the cause of the most common failures, and what to do about each.

## Every call returns `403`

The token is missing, malformed or expired. The response body is empty.

* Send the header as `Authorization: Bearer YOUR_ACCESS_TOKEN`, with a space after `Bearer`.
* A token lasts 7 days. Request a new one. See [Authenticate](/essentials/authenticate.md).

## `GET /public-api/me` works, but other endpoints return `403`

The token is valid, but the user is not an Admin or a Super Admin. Most Public API endpoints need one of those roles. Check the `role` in the `/me` response, then see [Access and permissions](/essentials/concepts/access-and-permissions.md).

## Downloading the spec returns `401`

`GET /public-api/api-spec` is public. Send it without an `Authorization` header.

## A model, dataset or table returns `404`

The resource does not exist, or the user cannot see it. A restricted resource returns `403` or `404`, depending on the endpoint. IDs in the path must be UUIDs. Any other value returns `404`.

## I get `429`

You exceeded a rate limit. Wait the number of seconds in the `Retry-After` header. Model data, dataset data and load data allow 10 requests per minute. Every other endpoint allows 20. See [Rate limits](/essentials/concepts/rate-limits.md), and [Handle errors and retries](/guides/handle-errors-and-retries.md) for a client that waits by itself.

## The download link does not work

The link expired. A CSV link lasts 30 minutes and a Parquet link lasts 2 hours. Space table links last 2 hours in both formats. Call the endpoint again to get a new link. See [Download links](/essentials/concepts/download-links.md).

## A data request returns `400`

Read the `error` field in the body. The common causes are:

* `start_date` without `end_date`, or the other way around. Send both, or neither.
* A `timescale` finer than the grain of the model.
* `variable_ids` that are not in the model.
* `dimensions` that a returned variable does not have.
* A result too large to return. Narrow the period, or filter by variable.

See [Filter by period](/essentials/concepts/filter-by-period.md).

## A load returns `422`

A load for the same period range is still running. Wait for it to finish, then send the request again. See [Override and re-load](/guides/import-api-guides/override-and-re-load.md).

## A load returns `400` with errors by field

The body lists each invalid field by name. Correct those fields. See [File requirements](/guides/import-api-guides/file-requirements.md).

## A call returns `500`

Send the request again one time. If it fails again, contact Abacum support and include the `X-Request-ID` response header, the time of the call, the path and the status code. Do not include the client secret or the access token.

If the load cannot start, check that the dataset uses the Import API connection. See [Set up the Import API](/guides/import-api-guides/set-up-the-import-api.md).

## Where do I find the request ID?

Every response from a `/public-api/` endpoint carries an `X-Request-ID` header. Read it from the response headers in your client, or run `curl -i`. Quote it when you contact support. See [Errors](/essentials/concepts/errors.md).
