> ## Documentation Index
> Fetch the complete documentation index at: https://docs.nebyoulous.space/llms.txt
> Use this file to discover all available pages before exploring further.

# API overview

> The Nebyoulous REST API: base URL, conventions, errors, and how the reference is built.

The REST API is the same one the web app, the CLI, and the MCP server use.
Every endpoint in this reference comes from the API's OpenAPI contract, so the
reference changes whenever the API does.

```text theme={null}
https://api.nebyoulous.space
```

> **[Authentication](/api-reference/authentication)**
>
> Get a bearer token with OAuth.

> **[Workflows](/api-reference/workflows)**
>
> Upload frames, stack them, download the master.

> **[OpenAPI spec](https://api.nebyoulous.space/documentation/json)**
>
> The live spec as JSON, for code generators. It includes operator endpoints.

## Conventions

* **JSON in and out.** Send `Content-Type: application/json` on requests with
  a body.
* **IDs are UUIDs.** Timestamps are ISO 8601 strings in UTC.
* **Your data only.** Endpoints act on the signed-in user's data. Another
  user's integration set, post, or rig looks the same as one that doesn't
  exist: `404`.
* **Long work is asynchronous.** Stacks, analyses, frame QA, and exports
  return `202` with a job. Poll the job until its `status` is `READY`,
  `FAILED`, or `CANCELLED`.
* **Files go straight to storage.** Uploads and downloads use presigned URLs
  that expire after an hour. The API never streams frame data itself.

## Errors

Errors return a JSON body with a stable `code` and a readable `message`:

```json theme={null}
{ "code": "NOT_FOUND", "message": "Integration set not found" }
```

| Status | Common `code` | Meaning |
| - | - | - |
| `400` | `VALIDATION_ERROR`, `BAD_REQUEST` | The body, query, or path didn't match the schema, or the request doesn't fit the current state. `message` says why. |
| `401` | `UNAUTHORIZED` | The bearer token is missing, invalid, or expired. |
| `403` | `PENDING_APPROVAL` | Your account is waiting for approval. |
| `403` | `FORBIDDEN` | The action needs an interactive web session, or you lack the role. |
| `404` | `NOT_FOUND` | It doesn't exist, or it isn't yours. |
| `409` | `CONFLICT`, `SLUG_TAKEN`, `USERNAME_TAKEN` | Something with that name already exists. |
| `429` | `RATE_LIMITED` | Too many requests to a rate-limited endpoint. `message` says when to retry. |

## What's not in this reference

Operator endpoints (`/admin/*`) and the sign-in plumbing the CLI and the web
app use internally (`/auth/cli/*`, the OAuth consent endpoints) are left out.
The [OAuth endpoints](/api-reference/authentication) you need to get a token
are described with authentication.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.