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

# Doohick REST API Reference: Endpoints and Data Formats

> Explore the Doohick REST API: learn the base URL, versioning strategy, request and response formats, status codes, and where to start.

The Doohick REST API gives you programmatic access to every resource on the Doohick platform. Use it to manage users, configure integrations, automate workflows, and build custom experiences on top of Doohick — all over standard HTTPS using JSON.

## Base URL

Every API request targets the following base URL:

```text theme={null}
https://api.doohick.com/v1
```

All requests must use HTTPS. Plain HTTP requests are rejected. Relative paths in this reference are appended directly to the base URL — for example, `/users` resolves to `https://api.doohick.com/v1/users`.

## Versioning

The current API version is `v1`, embedded in the URL path. Doohick uses URL-based versioning so your requests always target a predictable, stable surface.

When Doohick introduces breaking changes — such as removed fields, renamed endpoints, or altered response shapes — a new version path (e.g. `/v2`) is released. The previous version continues to work during a documented deprecation window, giving you time to migrate.

<Note>
  Non-breaking additions, such as new optional fields or new endpoints, may be introduced to the current version at any time without a version bump.
</Note>

## Request format

Send all request bodies as JSON and include the `Content-Type` header on every request that carries a body:

```text theme={null}
Content-Type: application/json
```

Query parameters follow standard URL encoding. Boolean values use `true` / `false` and date-time values use ISO 8601 format (e.g. `2024-01-15T10:00:00Z`).

## Response format

All responses — including errors — are JSON. Successful responses wrap the primary payload in a `data` key alongside a `meta` object that carries tracing information:

```json theme={null}
{
  "data": {
    "id": "res_abc123",
    "name": "My Resource"
  },
  "meta": {
    "request_id": "req_abc123",
    "timestamp": "2024-01-15T10:00:00Z"
  }
}
```

Use `meta.request_id` when reporting issues to Doohick support — it uniquely identifies the server-side trace for that call.

## Error format

When a request fails, the response body contains a top-level `error` object instead of `data`:

```json theme={null}
{
  "error": {
    "code": "resource_not_found",
    "message": "The requested resource was not found.",
    "request_id": "req_abc123"
  }
}
```

`error.code` is a stable machine-readable string you can branch on in your code. `error.message` is a human-readable explanation intended for logging and debugging.

## HTTP status codes

Doohick uses standard HTTP status codes to communicate the outcome of every request.

| Code | Meaning               |
| ---- | --------------------- |
| 200  | Success               |
| 201  | Created               |
| 204  | No content (delete)   |
| 400  | Bad request           |
| 401  | Unauthorized          |
| 403  | Forbidden             |
| 404  | Not found             |
| 429  | Rate limit exceeded   |
| 500  | Internal server error |

Treat any `5xx` response as a transient server-side error and retry with exponential backoff.

## SDKs and client libraries

Any HTTP client capable of sending JSON requests can integrate with the Doohick API directly. The examples throughout this reference use `curl`, but the same patterns apply to any language or library — set the `Authorization` header, send JSON bodies, and parse JSON responses.

To make your first authenticated request right now, head to [Authentication](/api/authentication).

<CardGroup cols={2}>
  <Card title="Authentication" icon="key" href="/api/authentication">
    Learn how to generate API keys and authorize your requests.
  </Card>

  <Card title="Rate Limits" icon="gauge" href="/api/rate-limits">
    Understand usage quotas, response headers, and how to handle 429 errors.
  </Card>
</CardGroup>
