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

# Volta REST API Reference: Public v1 Endpoints Guide

> The Volta public REST API (v1) lets you schedule posts, manage channels, and upload media programmatically using your organization's API key.

The Volta public REST API gives you full programmatic control over your social media publishing workflow. Every feature available in the Volta dashboard — scheduling posts, connecting channels, uploading media, and reading analytics — is accessible through versioned, stable endpoints under the `/public/v1` prefix. All requests are authenticated with your organization's API key, and responses are returned as JSON.

## Base URL

All API endpoints are relative to your Volta instance:

```
https://your-instance.com/public/v1
```

For organizations on the Volta hosted service, the base URL is:

```
https://api.postsider.com/public/v1
```

## Authentication

Every request must include your API key in the `Authorization` header. No `Bearer` prefix is needed — pass the raw key value:

```bash theme={null}
curl -H 'Authorization: your-api-key' \
  https://your-instance.com/public/v1/integrations
```

You can generate and manage API keys from **Settings → API Keys** in the Volta dashboard. Each key is scoped to your organization and never expires.

<Warning>
  Treat your API key like a password. Anyone with your key has full access to your organization's posts, channels, and media. Rotate keys immediately if they are ever exposed.
</Warning>

## Rate Limiting

The API enforces a limit of **60 requests per minute** per organization. Every response includes the following headers so you can track your usage:

| Header                  | Description                                         |
| ----------------------- | --------------------------------------------------- |
| `X-RateLimit-Limit`     | Maximum number of requests allowed per window       |
| `X-RateLimit-Remaining` | Number of requests remaining in the current window  |
| `X-RateLimit-Reset`     | Unix timestamp (UTC) when the current window resets |

When you exceed the limit, the API returns `429 Too Many Requests`. Back off until the time indicated by `X-RateLimit-Reset` before retrying.

## Request & Response Format

All request bodies must be sent as JSON with the `Content-Type: application/json` header. All responses are returned as JSON. File uploads to the `/upload` endpoint use `multipart/form-data` instead.

## Error Codes

The API uses standard HTTP status codes to communicate errors. The response body contains additional context where available.

| Code  | Meaning                                                                     |
| ----- | --------------------------------------------------------------------------- |
| `400` | Invalid request body — check the required fields for the endpoint           |
| `401` | Invalid or missing API key                                                  |
| `402` | Subscription limit reached — you have hit your plan's channel or post quota |
| `404` | Resource not found — the post or channel ID does not exist                  |
| `429` | Rate limit exceeded — slow down and retry after `X-RateLimit-Reset`         |

## Endpoints

The following endpoints are available in the public API:

<CardGroup cols={2}>
  <Card title="Posts" icon="calendar" href="/api/posts">
    Schedule, list, and delete posts across connected channels.
  </Card>

  <Card title="Channels" icon="plug" href="/api/channels">
    List connected channels, browse connectors, and authorize new platforms.
  </Card>

  <Card title="Media" icon="image" href="/api/media">
    Upload images and videos to the Volta media library.
  </Card>
</CardGroup>

### Full Endpoint Reference

| Method   | Path                                  | Description                               |
| -------- | ------------------------------------- | ----------------------------------------- |
| `POST`   | `/public/v1/posts`                    | Schedule or draft a post                  |
| `GET`    | `/public/v1/posts`                    | List posts with optional filters          |
| `DELETE` | `/public/v1/posts/:id`                | Delete a post by ID                       |
| `POST`   | `/public/v1/upload`                   | Upload a media file                       |
| `GET`    | `/public/v1/integrations`             | List connected channels                   |
| `GET`    | `/public/v1/connectors`               | List available connector types            |
| `POST`   | `/public/v1/connectors/:id/authorize` | Start OAuth authorization for a connector |
| `GET`    | `/public/v1/connectors/:id/analytics` | Get analytics for a connected channel     |

<Tip>
  If you are using Node.js or TypeScript, the `@postsider/node` SDK wraps all of these endpoints with a fully-typed client. See the [SDK Overview](/sdk/overview) to get started.
</Tip>
