Docs
Docs/API Reference/Presets

Presets

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

{
  "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

FieldTypeDescription
idstringUnique preset identifier.
namestringDisplay name for the preset. Maximum 100 characters.
platformsstring[]Platforms included in this preset.
primary_platformstring | nullThe 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_enabledbooleanWhether to append a link to the primary platform post when publishing to secondary platforms.
cross_link_templatestringTemplate for cross-link text. Available variables: {platform}, {link}, {title}, {excerpt}.
is_defaultbooleanWhether this is the user's default preset, applied automatically to new posts in the dashboard.
is_systembooleanWhether this is a built-in system preset. System presets cannot be modified or deleted.
created_atstringISO 8601 timestamp.
updated_atstringISO 8601 timestamp.

List Presets

GET /presets

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

Example

curl https://api.octopost.ink/v1/presets \
  -H "Authorization: Bearer oct_live_abc123"
{
  "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

FieldTypeRequiredDescription
namestringYesDisplay name. Maximum 100 characters.
platformsstring[]YesArray of platform identifiers.
primary_platformstringNoPlatform to publish first for cross-linking. Must be included in platforms.
cross_link_enabledbooleanNoEnable cross-linking. Defaults to false.
cross_link_templatestringNoCross-link text template. Defaults to "New post on {platform}: {link}".

Example

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}"
  }'
{
  "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.

FieldTypeDescription
namestringUpdated display name.
platformsstring[]Updated platform list.
primary_platformstring | nullUpdated primary platform, or null to remove.
cross_link_enabledbooleanEnable or disable cross-linking.
cross_link_templatestringUpdated cross-link template.

Example

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}"
  }'
{
  "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

CodeReason
403 ForbiddenCannot modify a system preset.
404 Not FoundPreset does not exist.
422 Validation Errorprimary_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

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

Returns 204 No Content on success.

Errors

CodeReason
403 ForbiddenCannot delete a system preset.
404 Not FoundPreset 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

curl -X POST https://api.octopost.ink/v1/presets/preset_abc123/set-default \
  -H "Authorization: Bearer oct_live_abc123"
{
  "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"
}