> ## 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 API Posts Endpoints: Schedule, List, and Delete

> Schedule, list, and delete posts via the Volta REST API. POST /public/v1/posts, GET /public/v1/posts, DELETE /public/v1/posts/:id.

The posts endpoints are the core of the Volta API. You can schedule a post to one or more connected channels simultaneously, retrieve a paginated list of your scheduled and published posts, and delete posts that are no longer needed. Each post carries its own content per channel, so you can tailor the copy, images, and format for each platform in a single API call.

## POST /public/v1/posts

Schedule a new post or save it as a draft. A single request can target multiple connected channels at once — each channel entry in the `posts` array receives its own content block.

### Request body

<ParamField body="type" type="string" required>
  The post disposition. Use `"schedule"` to publish at a specific time, or `"draft"` to save without scheduling.
</ParamField>

<ParamField body="date" type="string" required>
  The target publish time in ISO 8601 format (e.g. `"2025-01-15T10:00:00"`). Required when `type` is `"schedule"`. The time is interpreted in UTC unless an offset is included.
</ParamField>

<ParamField body="posts" type="array" required>
  An array of channel-post objects. Each entry targets one connected channel and carries its own content.

  <ParamField body="posts[].integration.id" type="string" required>
    The ID of the connected channel to post to. Retrieve channel IDs from `GET /public/v1/integrations`.
  </ParamField>

  <ParamField body="posts[].value" type="array" required>
    An array of content objects. Most platforms take a single entry; some (e.g. carousel formats) accept multiple.

    <ParamField body="posts[].value[].content" type="string">
      The text body of the post.
    </ParamField>

    <ParamField body="posts[].value[].image" type="array">
      An optional array of media IDs returned by `POST /public/v1/upload`. Pass the `id` field from the upload response.
    </ParamField>
  </ParamField>
</ParamField>

### Example

```bash theme={null}
curl -X POST https://your-instance.com/public/v1/posts \
  -H 'Authorization: your-api-key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "schedule",
    "date": "2025-01-15T10:00:00",
    "posts": [
      {
        "integration": { "id": "channel-id" },
        "value": [{ "content": "Hello from Volta!" }]
      }
    ]
  }'
```

### Response

```json theme={null}
{ "id": "post_abc123", "status": "scheduled" }
```

<Note>
  To include an image in your post, first upload it with `POST /public/v1/upload` and then pass the returned `id` in the `image` array.
</Note>

***

## GET /public/v1/posts

Retrieve a paginated list of posts for your organization. Results include scheduled, drafted, and published posts.

### Query parameters

<ParamField query="page" type="number">
  The page number to return. Zero-indexed — pass `0` for the first page. Defaults to `0`.
</ParamField>

<ParamField query="limit" type="number">
  The number of results to return per page. Defaults to `20`.
</ParamField>

### Example

```bash theme={null}
curl 'https://your-instance.com/public/v1/posts?page=0&limit=10' \
  -H 'Authorization: your-api-key'
```

### Response

```json theme={null}
[
  {
    "id": "post_abc123",
    "status": "scheduled",
    "date": "2025-01-15T10:00:00.000Z",
    "posts": [
      {
        "integration": { "id": "ch_abc123", "name": "My Twitter" },
        "value": [{ "content": "Hello from Volta!" }]
      }
    ]
  }
]
```

***

## DELETE /public/v1/posts/:id

Delete a post by its ID. Deleting a scheduled post removes it from the publishing queue. Deleting an already-published post removes it from Volta's records but does not remove the content from the social platform.

### Path parameters

<ParamField path="id" type="string" required>
  The unique identifier of the post to delete. Use the `id` field returned when creating a post or from `GET /public/v1/posts`.
</ParamField>

### Example

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

### Response

A successful deletion returns HTTP `200` with an empty body or a confirmation object.

<Warning>
  Deleting a scheduled post is irreversible. If you need to reschedule rather than delete, update the post's date through the dashboard or create a new post.
</Warning>
