---
title: "API Overview"
description: "Introduction to the Octopost REST API"
---

# API Overview

The Octopost API lets you programmatically create and publish posts across multiple social media platforms, manage connected accounts, and configure publishing presets. Everything you can do in the Octopost dashboard is available through the API.

## Base URL

All API requests are made to:

```
https://api.octopost.ink/v1
```

## Content Type

All requests and responses use JSON. Set the `Content-Type` header on every request:

```
Content-Type: application/json
```

## Authentication

Authenticate by including your API key as a Bearer token in the `Authorization` header. Generate API keys from the [Octopost Dashboard](https://octopost.ink/dashboard/settings).

```bash
Authorization: Bearer oct_your_api_key_here
```

See the [Authentication guide](/docs/api/authentication) for full details.

## Quick Example

Create and publish a post to Twitter and Bluesky:

```bash
curl -X POST https://api.octopost.ink/v1/posts \
  -H "Authorization: Bearer oct_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Hello from the Octopost API!",
    "platforms": ["twitter", "bluesky"]
  }'
```

```json
{
  "id": "post_abc123",
  "content": "Hello from the Octopost API!",
  "platforms": ["twitter", "bluesky"],
  "status": "draft",
  "created_at": "2026-04-03T12:00:00Z",
  "updated_at": "2026-04-03T12:00:00Z"
}
```

Then publish it:

```bash
curl -X POST https://api.octopost.ink/v1/posts/post_abc123/publish \
  -H "Authorization: Bearer oct_your_api_key_here"
```

## Versioning

The API is versioned via the URL path (`/v1`). When breaking changes are introduced, a new version will be released (e.g., `/v2`). Previous versions will continue to work for at least 12 months after a new version is released.

Non-breaking changes -- such as adding new fields to responses, new optional parameters, or new endpoints -- may be added to the current version without a version bump.

## Rate Limits

The API enforces rate limits to ensure fair usage. Default limits are:

| Tier | Requests per minute |
|------|-------------------|
| Free | 60 |
| Starter | 300 |
| Pro | 1,000 |

Rate limit status is returned in response headers on every request:

```
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 299
X-RateLimit-Reset: 1712150400
```

When you exceed the limit, the API returns a `429 Too Many Requests` response. See the [Rate Limits guide](/docs/api/rate-limits) for best practices.

## Resources

- [Authentication](/docs/api/authentication) -- API keys and security
- [Posts](/docs/api/posts) -- Create, schedule, and publish posts
- [Accounts](/docs/api/accounts) -- Manage connected social accounts
- [Presets](/docs/api/presets) -- Publishing presets
- [Webhooks](/docs/api/webhooks) -- Real-time event notifications
- [Rate Limits](/docs/api/rate-limits) -- Limits and backoff strategies
- [Error Codes](/docs/api/errors) -- Error responses and handling
