API reference
Channels
A channel is one connected account: a LinkedIn profile, a YouTube channel, a Telegram group. Channels are connected in the app; the API reads them.
List channels
GET/api/public/v1/channels
Returns every channel connected to the key’s workspace, sorted by network and name.
The channel object
idinteger- Use it as
channel_idwhen you schedule a post. platformstring- The network:
linkedin,youtube,bluesky,mastodon,telegram,discord,lemmy,tumblr,pinterest,webhook. namestring- The account or page name, as the network shows it.
usernamestring or null- The handle, where the network has one.
avatar_urlstring or null- The account’s picture.
needs_reconnectboolean- True when the network revoked access. Posts to it fail until someone reconnects it in the app.
posting_timesarray of strings- Times of day, like
09:00, in the workspace’s time zone. The queue picks from these. reconnect_bystring or null- When access runs out, for networks whose access can’t renew on its own. Reconnect before then.
created_atstring- When the channel was connected.
curl https://api.postzora.com/api/public/v1/channels \
-H "Authorization: Bearer $POSTZORA_API_KEY"const response = await fetch('https://api.postzora.com/api/public/v1/channels', {
headers: {
Authorization: `Bearer ${process.env.POSTZORA_API_KEY}`,
},
})
const { data } = await response.json()import os
import requests
response = requests.get(
"https://api.postzora.com/api/public/v1/channels",
headers={"Authorization": f"Bearer {os.environ['POSTZORA_API_KEY']}"},
)
data = response.json()["data"]{
"data": [
{
"id": 12,
"platform": "linkedin",
"name": "Acme",
"username": "acme",
"avatar_url": "https://media.licdn.com/dms/image/acme.png",
"needs_reconnect": false,
"posting_times": ["09:00", "12:30", "17:00"],
"reconnect_by": null,
"created_at": "2026-09-02T10:14:03.000000Z"
},
{
"id": 15,
"platform": "bluesky",
"name": "Acme",
"username": "acme.bsky.social",
"avatar_url": null,
"needs_reconnect": false,
"posting_times": ["10:00", "16:00"],
"reconnect_by": null,
"created_at": "2026-09-02T10:14:03.000000Z"
}
]
}Get post settings
GET/api/public/v1/channels/{id}/post-settings
Some networks take more than text: YouTube needs a title and a visibility, Pinterest a board. This returns the fields a channel takes, so you can filltargets[].settings when you create a post.
Networks with no extra settings return an empty list. Where the options depend on the account, like Pinterest boards, they’re read from the network live.
Each field
namestring- The key to use in
settings. labelstring- What the app calls it.
typestringtextorselect.optionsarray- For
select: the allowedvalues, each with alabel. defaultstring- Used when you leave the field out.
requiredboolean- Whether a post must set it before it can be scheduled.
curl https://api.postzora.com/api/public/v1/channels/21/post-settings \
-H "Authorization: Bearer $POSTZORA_API_KEY"const response = await fetch('https://api.postzora.com/api/public/v1/channels/21/post-settings', {
headers: {
Authorization: `Bearer ${process.env.POSTZORA_API_KEY}`,
},
})
const { data } = await response.json()import os
import requests
response = requests.get(
"https://api.postzora.com/api/public/v1/channels/21/post-settings",
headers={"Authorization": f"Bearer {os.environ['POSTZORA_API_KEY']}"},
)
data = response.json()["data"]{
"data": [
{
"name": "title",
"label": "Title",
"type": "text",
"placeholder": "What the video is called on YouTube",
"required": true
},
{
"name": "privacy",
"label": "Visibility",
"type": "select",
"options": [
{ "value": "public", "label": "Public" },
{ "value": "unlisted", "label": "Unlisted" },
{ "value": "private", "label": "Private" }
],
"default": "public",
"required": true
}
]
}Questions about the API? Email [email protected].