---
title: "Presets"
description: "Manage publishing presets via API"
---

# Presets

Publishing presets are saved configurations of platform selections and cross-linking behavior. Instead of specifying platforms on every post, you can apply a preset. Octopost includes system presets (e.g., "All Platforms", "Professional") and supports custom presets.

## The Preset Object

```json
{
  "id": "preset_abc123",
  "name": "Professional",
  "platforms": ["linkedin", "twitter"],
  "primary_platform": "linkedin",
  "cross_link_enabled": true,
  "cross_link_template": "New post on {platform}: {link}",
  "is_default": false,
  "is_system": false,
  "created_at": "2026-03-20T10:00:00Z",
  "updated_at": "2026-03-20T10:00:00Z"
}
```

### Fields

| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique preset identifier. |
| `name` | string | Display name for the preset. Maximum 100 characters. |
| `platforms` | string[] | Platforms included in this preset. |
| `primary_platform` | string \| null | The platform to publish to first when cross-linking is enabled. The post URL from this platform is used in cross-link text for other platforms. |
| `cross_link_enabled` | boolean | Whether to append a link to the primary platform post when publishing to secondary platforms. |
| `cross_link_template` | string | Template for cross-link text. Available variables: `{platform}`, `{link}`, `{title}`, `{excerpt}`. |
| `is_default` | boolean | Whether this is the user's default preset, applied automatically to new posts in the dashboard. |
| `is_system` | boolean | Whether this is a built-in system preset. System presets cannot be modified or deleted. |
| `created_at` | string | ISO 8601 timestamp. |
| `updated_at` | string | ISO 8601 timestamp. |

---

## List Presets

```
GET /presets
```

Returns all presets, including system presets and user-created presets.

### Example

```bash
curl https://api.octopost.ink/v1/presets \
  -H "Authorization: Bearer oct_live_abc123"
```

```json
{
  "presets": [
    {
      "id": "preset_sys_001",
      "name": "All Platforms",
      "platforms": ["twitter", "linkedin", "bluesky", "mastodon", "threads"],
      "primary_platform": null,
      "cross_link_enabled": false,
      "cross_link_template": "New post on {platform}: {link}",
      "is_default": false,
      "is_system": true,
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z"
    },
    {
      "id": "preset_sys_002",
      "name": "Text-first",
      "platforms": ["twitter", "bluesky", "mastodon", "threads"],
      "primary_platform": null,
      "cross_link_enabled": false,
      "cross_link_template": "New post on {platform}: {link}",
      "is_default": false,
      "is_system": true,
      "created_at": "2026-01-01T00:00:00Z",
      "updated_at": "2026-01-01T00:00:00Z"
    },
    {
      "id": "preset_abc123",
      "name": "Professional",
      "platforms": ["linkedin", "twitter"],
      "primary_platform": "linkedin",
      "cross_link_enabled": true,
      "cross_link_template": "New post on {platform}: {link}",
      "is_default": true,
      "is_system": false,
      "created_at": "2026-03-20T10:00:00Z",
      "updated_at": "2026-03-20T10:00:00Z"
    }
  ]
}
```

---

## Create a Preset

```
POST /presets
```

Creates a new publishing preset.

### Request Body

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `name` | string | Yes | Display name. Maximum 100 characters. |
| `platforms` | string[] | Yes | Array of platform identifiers. |
| `primary_platform` | string | No | Platform to publish first for cross-linking. Must be included in `platforms`. |
| `cross_link_enabled` | boolean | No | Enable cross-linking. Defaults to `false`. |
| `cross_link_template` | string | No | Cross-link text template. Defaults to `"New post on {platform}: {link}"`. |

### Example

```bash
curl -X POST https://api.octopost.ink/v1/presets \
  -H "Authorization: Bearer oct_live_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Dev Community",
    "platforms": ["twitter", "bluesky", "mastodon"],
    "primary_platform": "twitter",
    "cross_link_enabled": true,
    "cross_link_template": "Also posted on {platform}: {link}"
  }'
```

```json
{
  "id": "preset_def456",
  "name": "Dev Community",
  "platforms": ["twitter", "bluesky", "mastodon"],
  "primary_platform": "twitter",
  "cross_link_enabled": true,
  "cross_link_template": "Also posted on {platform}: {link}",
  "is_default": false,
  "is_system": false,
  "created_at": "2026-04-03T15:00:00Z",
  "updated_at": "2026-04-03T15:00:00Z"
}
```

---

## Update a Preset

```
PUT /presets/:id
```

Updates an existing preset. System presets cannot be updated.

### Request Body

All fields are optional. Only include the fields you want to change.

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Updated display name. |
| `platforms` | string[] | Updated platform list. |
| `primary_platform` | string \| null | Updated primary platform, or `null` to remove. |
| `cross_link_enabled` | boolean | Enable or disable cross-linking. |
| `cross_link_template` | string | Updated cross-link template. |

### Example

```bash
curl -X PUT https://api.octopost.ink/v1/presets/preset_def456 \
  -H "Authorization: Bearer oct_live_abc123" \
  -H "Content-Type: application/json" \
  -d '{
    "platforms": ["twitter", "bluesky", "mastodon", "threads"],
    "cross_link_template": "Read the full thread on {platform}: {link}"
  }'
```

```json
{
  "id": "preset_def456",
  "name": "Dev Community",
  "platforms": ["twitter", "bluesky", "mastodon", "threads"],
  "primary_platform": "twitter",
  "cross_link_enabled": true,
  "cross_link_template": "Read the full thread on {platform}: {link}",
  "is_default": false,
  "is_system": false,
  "created_at": "2026-04-03T15:00:00Z",
  "updated_at": "2026-04-03T15:30:00Z"
}
```

### Errors

| Code | Reason |
|------|--------|
| `403 Forbidden` | Cannot modify a system preset. |
| `404 Not Found` | Preset does not exist. |
| `422 Validation Error` | `primary_platform` is not included in `platforms`. |

---

## Delete a Preset

```
DELETE /presets/:id
```

Deletes a preset. System presets cannot be deleted. If the deleted preset was the default, no preset will be marked as default.

### Example

```bash
curl -X DELETE https://api.octopost.ink/v1/presets/preset_def456 \
  -H "Authorization: Bearer oct_live_abc123"
```

Returns `204 No Content` on success.

### Errors

| Code | Reason |
|------|--------|
| `403 Forbidden` | Cannot delete a system preset. |
| `404 Not Found` | Preset does not exist. |

---

## Set Default Preset

```
POST /presets/:id/set-default
```

Marks a preset as the default. The previously default preset (if any) is unset. The default preset is applied automatically when creating posts in the dashboard.

### Example

```bash
curl -X POST https://api.octopost.ink/v1/presets/preset_abc123/set-default \
  -H "Authorization: Bearer oct_live_abc123"
```

```json
{
  "id": "preset_abc123",
  "name": "Professional",
  "platforms": ["linkedin", "twitter"],
  "primary_platform": "linkedin",
  "cross_link_enabled": true,
  "cross_link_template": "New post on {platform}: {link}",
  "is_default": true,
  "is_system": false,
  "created_at": "2026-03-20T10:00:00Z",
  "updated_at": "2026-04-03T16:00:00Z"
}
```
