Base address
Send every request to this address. A self-hosted PostNimbo uses its own backend address instead.
https://postnimbo.com/api/public/v1
Authentication
Put the credential in the Authorization header as it is, without a Bearer prefix. Two kinds work:
- An API key, from Settings > Agents / Dev. It acts as the whole workspace and reaches every route below.
- An OAuth access token (it starts with pos_), from an OAuth app. It acts as the member who approved it, sees only their brands and channels, and is limited to the scopes they approved.
curl https://postnimbo.com/api/public/v1/me \ -H "Authorization: <api key or pos_ token>"
A missing or wrong credential answers 401. A route a token was not approved for answers 403. Errors carry a msg or message field.
Rate limits
- 120 requests a minute for each API key or token, across every route.
- Creating posts is also limited per workspace each hour (90 by default).
- Over a limit the answer is 429 with a Retry-After header in seconds. Wait that long before trying again.
Self-hosted servers set their own limits with PUBLIC_API_RATE_LIMIT, PUBLIC_API_RATE_TTL and API_LIMIT.
Endpoints
The scope column is what an OAuth token needs. An API key reaches every route.
Account
- GET
/public/v1/meThe workspace the credential belongs to, and for an OAuth token the member who approved it.
ScopeAny token - GET
/public/v1/is-connectedCheck that the credential works.
ScopeAny token - GET
/public/v1/groupsThe brands (customers) the credential can see.
ScopeAny token - GET
/public/v1/countsPosts waiting for approval and unread open inbox conversations.
Scopeposts:readinbox:readInputquery: brandId?
Channels
- GET
/public/v1/integrationsThe connected channels, with their ids and networks.
Scopeposts:readInputquery: group? (a brand id) - GET
/public/v1/integration-settings/:idThe rules of a channel: character limits, media rules and the settings a post needs.
ScopeAPI key or full-access token - GET
/public/v1/find-slot/:idThe next free posting slot of a channel.
Scopeposts:read - GET
/public/v1/social/:integrationThe sign-in link that connects a new channel of a network (for example linkedin).
ScopeAPI key or full-access tokenInputquery: refresh? (a channel id to reconnect) - DELETE
/public/v1/integrations/:idDisconnect a channel.
ScopeAPI key or full-access token - POST
/public/v1/integration-trigger/:idRun a lookup a network offers (for example the boards of a Pinterest account).
ScopeAPI key or full-access tokenInputbody: { methodName, data }
Posts
- GET
/public/v1/postsThe posts between two dates.
Scopeposts:readInputquery: startDate, endDate (ISO 8601), customer? - POST
/public/v1/postsCreate a draft, schedule a post or publish now, on one or more channels.
Scopeposts:scheduleInputbody: { type: draft|schedule|now, date, shortLink, tags, posts: [{ integration: { id }, value: [{ content, image? }], settings? }] } - PUT
/public/v1/posts/:id/settingsChange the network settings of a post.
ScopeAPI key or full-access tokenInputbody: { settings } - PUT
/public/v1/posts/:id/statusMove a post between draft and scheduled.
ScopeAPI key or full-access tokenInputbody: { status: draft|schedule } - GET
/public/v1/posts/:id/missingFor a post the network accepted without returning its id: the recent posts of the channel to pick it from.
ScopeAPI key or full-access token - PUT
/public/v1/posts/:id/release-idLink a post to the network post it became.
ScopeAPI key or full-access tokenInputbody: { releaseId } - DELETE
/public/v1/posts/:idDelete a post.
ScopeAPI key or full-access token - DELETE
/public/v1/posts/group/:groupDelete every post of a group (one post sent to several channels).
ScopeAPI key or full-access token
Media
- POST
/public/v1/uploadUpload a file to the media library.
Scopemedia:writeInputmultipart: file, adjust? - POST
/public/v1/upload-from-urlAdd a file from a public https address.
Scopemedia:writeInputbody: { url, adjust? } - GET
/public/v1/mediaThe media library, a page at a time.
ScopeAPI key or full-access tokenInputquery: page?, search?, folder? - GET
/public/v1/media/:id/statusWhether an uploaded video finished processing.
ScopeAPI key or full-access token
Ideas
- POST
/public/v1/ideasSave an idea to the Ideas board.
Scopeideas:writeInputbody: { title, content? } - DELETE
/public/v1/ideas/:idRemove an idea the credential saved.
Scopeideas:write
Analytics
- GET
/public/v1/performanceA summary of the last 7 days: posts, reach and engagement.
Scopeanalytics:readInputquery: brandId?, tz? - GET
/public/v1/best-times/nextThe next best times to post, from your own results.
Scopeposts:readInputquery: integrationId?, brandId?, tz?, goal?: engagement|reach|views, count? (1-20) - GET
/public/v1/analytics/:integrationThe analytics of a channel.
ScopeAPI key or full-access tokenInputquery: date (days back) - GET
/public/v1/analytics/post/:postIdThe analytics of one published post.
ScopeAPI key or full-access tokenInputquery: date (days back)
AI
- POST
/public/v1/ai/draftDraft a post about a web page with PostNimbo AI.
Scopeai:useInputbody: { url, title?, selection?, mode: summary|captions } - POST
/public/v1/ai/replyDraft a reply to a comment or message.
Scopeai:useInputbody: { text, url? }
Link in bio
- GET
/public/v1/link-in-bioThe link-in-bio pages of the workspace.
Scopelink-in-bio:write - POST
/public/v1/link-in-bio/:id/linksAdd a link to a link-in-bio page.
Scopelink-in-bio:writeInputbody: { label, url }
Video and clipping
- POST
/public/v1/generate-videoGenerate a video with one of the AI video tools.
ScopeAPI key or full-access token - POST
/public/v1/video/functionLoad the options of a video tool (voices, avatars).
ScopeAPI key or full-access token - POST
/public/v1/clippingCut a long video into short clips.
ScopeAPI key or full-access token - GET
/public/v1/clippingThe clipping jobs, a page at a time.
ScopeAPI key or full-access tokenInputquery: page - GET
/public/v1/clipping/:idOne clipping job and its clips.
ScopeAPI key or full-access token
Notifications
- GET
/public/v1/notificationsThe workspace notifications, a page at a time.
ScopeAPI key or full-access tokenInputquery: page?
Webhooks
- GET
/public/v1/webhooks/eventsThe events a webhook is sent, with a sample payload of each.
ScopeAny token - GET
/public/v1/webhooksThe webhooks of the workspace, without their addresses; ?url= finds the webhooks of one address.
Scopewebhooks:writeInputquery: url? - POST
/public/v1/webhooksSubscribe an address to events (how Zapier, Make and n8n triggers switch on).
Scopewebhooks:writeInputbody: { url, events?, integrations? (channel ids), name? } - DELETE
/public/v1/webhooks/:idRemove a webhook (how a trigger switches off).
Scopewebhooks:write