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

# Introduction

> Public API for the Opereit product

The Opereit API lets you create and track claims, upload carrier contracts, audit incoming carrier invoices against them, and retrieve the resulting line items and findings. It's designed so you can build end-to-end workflows without using the dashboard.

## Base URL

All endpoints are served under:

```
https://api.obsydianai.com
```

## Authentication

Every request to the Invoice Auditing API must be authenticated with an Opereit API key using **HTTP Basic Auth**.

An API key is a pair of values:

* A **key ID**: a public identifier for the key.
* A **key secret**: the password component, prefixed with `opr_live_`. The secret is shown **only once**, at creation time, and cannot be retrieved later. Store it in a secrets manager.

Send credentials in the `Authorization` header as base64-encoded `key_id:key_secret`:

```http theme={null}
Authorization: Basic <base64(key_id:key_secret)>
```

Most HTTP clients build this header for you when you supply user/password, for example with curl:

```bash theme={null}
curl https://api.opereit.com/v1/contracts \
  -u "key_id:opr_live_your_secret_here"
```

API keys are scoped to a single organization. To provision a key, contact your Opereit account manager.

### Unauthenticated requests

Requests without a valid `Authorization` header receive `401 Unauthorized` along with a `WWW-Authenticate: Basic realm="Obsydian API"` response header:

```json theme={null}
{
  "error": "Authentication required"
}
```

## Conventions

* All request and response bodies are JSON, except for file uploads which use `multipart/form-data`.
* Field names are `snake_case`.
* Timestamps are ISO 8601 (`2026-04-29T10:15:00Z`); date-only fields use `YYYY-MM-DD`.
* Monetary amounts, weights, and rates are returned as decimal **strings** to preserve precision.
* List endpoints are cursor-paginated with `?limit=50&cursor=<opaque_string>` query parameters. Response format: `{ data, pagination: { cursor, has_more } }`.

## Errors

Errors return a JSON body with a single `error` field describing what went wrong:

```json theme={null}
{
  "error": "Invalid contract_id"
}
```

| Status | Meaning                                     |
| ------ | ------------------------------------------- |
| `400`  | Request was malformed or failed validation. |
| `401`  | Authentication missing or invalid.          |
| `404`  | The requested resource does not exist.      |
| `500`  | Unexpected server error.                    |
