dopost Posts API
Schedule, retrieve, reschedule, and delete posts across connected networks.
Schedule, retrieve, reschedule, and delete posts across connected networks.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/dopost-co-posts-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: dopost Social Scheduler Media Posts API
version: v1
summary: REST API for scheduling and publishing posts across Instagram, Facebook, TikTok, Pinterest, X, and YouTube.
description: 'Hand-authored OpenAPI 3.1 specification for the dopost Social Media Scheduler API,
derived from public documentation at https://dopost.co/docs/api as of 2026-05-27.
Authentication uses an API key passed via the `x-api-key` header. API key generation
happens inside the dopost web app.
All endpoints are mounted under `/api/v1/` and return `application/json`.
NOTE: Per-network publish options (Instagram, Facebook, TikTok, Pinterest, X, YouTube)
are referenced in the dopost docs but the exact field-level schemas for each network
are not enumerated in the public docs visible to anonymous users. They are modeled here
as `additionalProperties: true` containers so spec consumers do not lose data, and the
review notes (review.yml) flag these as `reconciled: false`.
'
contact:
name: dopost
url: https://dopost.co/
license:
name: Proprietary
url: https://dopost.co/
servers:
- url: https://dopost.co
description: Production
security:
- ApiKeyAuth: []
tags:
- name: Posts
description: Schedule, retrieve, reschedule, and delete posts across connected networks.
paths:
/api/v1/post/publish:
post:
tags:
- Posts
operationId: publishPost
summary: Publish or schedule a post
description: 'Publish a post immediately or schedule it for a future time on a single connected
social account. When `publishAt` is `null`, the post publishes immediately. When
`publishAt` is an ISO 8601 timestamp, the post is scheduled.
'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PublishPostRequest'
examples:
immediate:
summary: Publish immediately
value:
accountId: acc_01HXYZ...
text: Hello from the dopost API!
publishAt: null
scheduled:
summary: Schedule for later
value:
accountId: acc_01HXYZ...
text: New product drop tomorrow.
publishAt: '2026-06-01T15:00:00Z'
responses:
'200':
description: Post accepted for publishing or scheduling
content:
application/json:
schema:
$ref: '#/components/schemas/Post'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'422':
$ref: '#/components/responses/Unprocessable'
'429':
$ref: '#/components/responses/RateLimited'
/api/v1/post:
get:
tags:
- Posts
operationId: listPosts
summary: List posts
description: Retrieve posts from your workspace with optional status filtering and cursor-based pagination.
parameters:
- name: status
in: query
required: false
description: Filter by post status.
schema:
$ref: '#/components/schemas/PostStatus'
- name: cursor
in: query
required: false
description: Opaque cursor returned by a previous response for pagination.
schema:
type: string
- name: limit
in: query
required: false
description: Maximum number of posts to return.
schema:
type: integer
minimum: 1
maximum: 100
responses:
'200':
description: Paginated list of posts
content:
application/json:
schema:
$ref: '#/components/schemas/PostList'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
/api/v1/post/{postId}:
get:
tags:
- Posts
operationId: getPost
summary: Get a post by ID
parameters:
- $ref: '#/components/parameters/PostId'
responses:
'200':
description: Post details
content:
application/json:
schema:
$ref: '#/components/schemas/Post'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
patch:
tags:
- Posts
operationId: reschedulePost
summary: Reschedule a post
description: Update the scheduled publish time of a draft or scheduled post.
parameters:
- $ref: '#/components/parameters/PostId'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- publishAt
properties:
publishAt:
type: string
format: date-time
description: New ISO 8601 publish time.
examples:
reschedule:
value:
publishAt: '2026-06-02T12:00:00Z'
responses:
'200':
description: Updated post
content:
application/json:
schema:
$ref: '#/components/schemas/Post'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/Unprocessable'
/api/v1/post/delete/{postId}:
delete:
tags:
- Posts
operationId: deletePost
summary: Delete a post
description: Delete a draft or scheduled post. Published posts cannot be deleted.
parameters:
- $ref: '#/components/parameters/PostId'
responses:
'204':
description: Post deleted
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/NotFound'
'409':
description: Post is in a state that cannot be deleted (e.g. already published).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
responses:
Unauthorized:
description: Missing or invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unprocessable:
description: Validation failed against platform constraints (character/media limits, schedule window, etc).
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimited:
description: Rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
NotFound:
description: Resource not found.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: The request body is malformed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
required:
- message
properties:
code:
type: string
message:
type: string
details:
type: object
additionalProperties: true
PublishPostRequest:
type: object
required:
- accountId
- text
properties:
accountId:
type: string
description: ID of the connected social account that owns the post.
text:
type: string
description: Post body / caption text.
publishAt:
type:
- string
- 'null'
format: date-time
description: ISO 8601 timestamp when the post should publish. `null` publishes immediately.
mediaIds:
type: array
description: Optional list of `mediaId` values previously created via the Media API.
items:
type: string
instagram:
$ref: '#/components/schemas/NetworkOptions'
facebook:
$ref: '#/components/schemas/NetworkOptions'
tiktok:
$ref: '#/components/schemas/NetworkOptions'
pinterest:
$ref: '#/components/schemas/NetworkOptions'
x:
$ref: '#/components/schemas/NetworkOptions'
youtube:
$ref: '#/components/schemas/NetworkOptions'
NetworkOptions:
type: object
description: 'Network-specific publish options. dopost docs reference per-network option blocks
(e.g. Instagram feed/story/reel, YouTube short, Pinterest board) but do not enumerate
every field publicly. This object is intentionally open.
'
additionalProperties: true
PostList:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Post'
nextCursor:
type:
- string
- 'null'
Platform:
type: string
description: Supported social network identifier.
enum:
- instagram
- facebook
- tiktok
- pinterest
- x
- youtube
Post:
type: object
properties:
id:
type: string
accountId:
type: string
status:
$ref: '#/components/schemas/PostStatus'
text:
type: string
publishAt:
type:
- string
- 'null'
format: date-time
publishedAt:
type:
- string
- 'null'
format: date-time
mediaIds:
type: array
items:
type: string
platform:
$ref: '#/components/schemas/Platform'
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
PostStatus:
type: string
enum:
- draft
- scheduled
- published
- failed
parameters:
PostId:
name: postId
in: path
required: true
schema:
type: string
description: Unique identifier of the post.
securitySchemes:
ApiKeyAuth:
type: apiKey
in: header
name: x-api-key
description: Workspace API key issued from the dopost web app.