Skip to main content
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

type
string
required
The post disposition. Use "schedule" to publish at a specific time, or "draft" to save without scheduling.
date
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.
posts
array
required
An array of channel-post objects. Each entry targets one connected channel and carries its own content.
posts[].integration.id
string
required
The ID of the connected channel to post to. Retrieve channel IDs from GET /public/v1/integrations.
posts[].value
array
required
An array of content objects. Most platforms take a single entry; some (e.g. carousel formats) accept multiple.
posts[].value[].content
string
The text body of the post.
posts[].value[].image
array
An optional array of media IDs returned by POST /public/v1/upload. Pass the id field from the upload response.

Example

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

{ "id": "post_abc123", "status": "scheduled" }
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.

GET /public/v1/posts

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

Query parameters

page
number
The page number to return. Zero-indexed — pass 0 for the first page. Defaults to 0.
limit
number
The number of results to return per page. Defaults to 20.

Example

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

Response

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

id
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.

Example

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.
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.