# Praeko > API to publish short videos to YouTube, Instagram and TikTok with one key and one contract. Documentation in English (also in Portuguese: https://praeko.app/docs); every page also exists as Markdown (append .md to the URL). Full contract: https://praeko.app/openapi.json. Full text: https://praeko.app/docs/en/llms-full.txt ## Get started - [Praeko Docs](https://praeko.app/docs/en.md): Praeko API documentation: publish to YouTube, Instagram and TikTok with one key and one contract. Reference for every route, guides, webhooks and AI agents. - [From zero to your first published video](https://praeko.app/docs/en/get-started.md): 7 steps with the Praeko API: account, API key, first request, your first video (SDK, CLI or agent), media, scheduling and a webhook, with examples in 10 languages. - [Get started with your AI agent](https://praeko.app/docs/en/get-started-with-agent.md): From zero to a first published video with an AI agent: the prompt to paste, what only you do (accounts, keys, channel, license), the first test Short, two-step publishing and how to learn from the insights. - [Authentication, errors and limits](https://praeko.app/docs/en/auth.md): How to authenticate with the Praeko API (Bearer key), what each scope allows, the error format, the limits and versioning. ## Guides - [Guides](https://praeko.app/docs/en/guides.md): Praeko API guides: publish a video end to end, upload media, webhooks, metrics and retention, errors and limits, and safe request retries. - [Publish a video end to end](https://praeko.app/docs/en/guides/publish-a-video.md): Step by step: publish a video with the Praeko API. Upload the media, create a post with one item per network, pick the queue or a fixed time, and check the result. - [Upload media: single file and parts](https://praeko.app/docs/en/guides/media.md): How to upload a video, cover or photo with the Praeko API: a single request (up to 50 MiB), multipart upload with 5 to 95 MiB parts, accepted types, limits and errors, and how to publish a single photo on Instagram. - [Webhooks: events, signatures and retries](https://praeko.app/docs/en/guides/webhooks.md): Praeko webhooks: register a URL, the post.sent, post.failed and post.scheduled-fail events, verify the HMAC-SHA256 signature and understand retries. - [Metrics, retention and CTR](https://praeko.app/docs/en/guides/insights.md): Read post metrics, retention, impressions and CTR with the Praeko API: GET /v1/insights, /v1/insights/retention and the retention curve of a post. - [Errors and limits](https://praeko.app/docs/en/guides/errors-and-limits.md): The Praeko API error envelope, the 116 contract error codes with status and meaning, and the limits for requests, bodies, media and webhooks. - [Retry a request without duplicates](https://praeko.app/docs/en/guides/idempotency.md): The Idempotency-Key header of the Praeko API: retry a POST, PATCH or DELETE after a network failure without creating two posts, two media items or two webhooks. Rules, errors, curl, SDK and CLI. ## AI agents and tools - [Praeko MCP server](https://praeko.app/docs/en/mcp.md): Praeko's remote MCP server at praeko.app/mcp: 18 tools, a Bearer API key or OAuth sign-in, and a two-step confirmation before any post is published or changed. - [SDK and CLI](https://praeko.app/docs/en/sdk.md): The npm packages @praeko/sdk (JavaScript client) and @praeko/cli (the praeko command): install with npm, yarn, pnpm or bun, quick start, safe retries with idempotencyKey and commands. - [Praeko Studio: make videos with your agent](https://praeko.app/docs/en/studio.md): Install Praeko Studio, make your first video in 10 minutes with your coding agent (Claude Code, Codex, Gemini CLI, Cursor, opencode), see the commands, the project, keys, licenses (Remotion is not MIT) and how to publish through Praeko. - [Studio in Claude Desktop: the local MCP server](https://praeko.app/docs/en/studio/mcp.md): Make a Praeko Studio video with an agent that has no terminal (Claude Desktop, Cursor, Codex, Gemini CLI, opencode): installing `@praeko/studio-mcp`, the 14 tools, the upload to Praeko and the split with the remote MCP that publishes. - [API changelog](https://praeko.app/docs/en/changelog.md): What changed in the Praeko API and panel, newest first, with the date of each change: new features, changes and deprecations. - [Use Praeko with your AI agent](https://praeko.app/docs/en/agents.md): Connect Claude Code, Codex, Cursor, Gemini CLI, opencode and other agents to Praeko: MCP server with a key or sign-in, rules file, llms.txt and openapi.json. - [Use Praeko with Claude Code](https://praeko.app/docs/en/agents/claude-code.md): How to use Praeko with Claude Code: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Claude Desktop](https://praeko.app/docs/en/agents/claude-desktop.md): How to use Praeko with Claude Desktop: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Codex CLI](https://praeko.app/docs/en/agents/codex-cli.md): How to use Praeko with Codex CLI: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Cursor](https://praeko.app/docs/en/agents/cursor.md): How to use Praeko with Cursor: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Gemini CLI](https://praeko.app/docs/en/agents/gemini-cli.md): How to use Praeko with Gemini CLI: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with opencode](https://praeko.app/docs/en/agents/opencode.md): How to use Praeko with opencode: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Kimi CLI](https://praeko.app/docs/en/agents/kimi-cli.md): How to use Praeko with Kimi CLI: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Cline](https://praeko.app/docs/en/agents/cline.md): How to use Praeko with Cline: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Zed](https://praeko.app/docs/en/agents/zed.md): How to use Praeko with Zed: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with GitHub Copilot](https://praeko.app/docs/en/agents/copilot.md): How to use Praeko with GitHub Copilot: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Windsurf (Devin)](https://praeko.app/docs/en/agents/windsurf.md): How to use Praeko with Windsurf (Devin): MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Continue](https://praeko.app/docs/en/agents/continue.md): How to use Praeko with Continue: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Goose](https://praeko.app/docs/en/agents/goose.md): How to use Praeko with Goose: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Amp](https://praeko.app/docs/en/agents/amp.md): How to use Praeko with Amp: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with Aider](https://praeko.app/docs/en/agents/aider.md): How to use Praeko with Aider: MCP server with a key or sign-in, rules file, starter prompt and checks. - [Use Praeko with n8n](https://praeko.app/docs/en/agents/n8n.md): How to use Praeko with n8n: call the API from inside your automation. - [Use Praeko with Zapier](https://praeko.app/docs/en/agents/zapier.md): How to use Praeko with Zapier: call the API from inside your automation. - [Use Praeko with Make](https://praeko.app/docs/en/agents/make.md): How to use Praeko with Make: call the API from inside your automation. ## API reference - [API reference](https://praeko.app/docs/en/api.md): All 79 routes of the Praeko API in 18 resources: parameters, body, examples in 10 languages, responses and errors for each one. - [Health](https://praeko.app/docs/en/api/health.md): Routes of the Health resource in the Praeko API (2): Service health, Service health (versioned path). - [Service health](https://praeko.app/docs/en/api/health/service-health.md): Service health: GET /health. Checks that the service is up. No key required. - [Service health (versioned path)](https://praeko.app/docs/en/api/health/service-health-versioned-path.md): Service health (versioned path): GET /v1/health. Same as /health, on the versioned path. No key required. - [Connections](https://praeko.app/docs/en/api/connections.md): Routes of the Connections resource in the Praeko API (4): OAuth callback, Start network connection, Disconnect network, Instagram token. - [OAuth callback](https://praeko.app/docs/en/api/connections/oauth-callback.md): OAuth callback: GET /connections/:network/callback. Where YouTube, TikTok and Meta send the browser back after login (an HTML page). Previously registered redirect URLs keep working. - [Start network connection](https://praeko.app/docs/en/api/connections/start-network-connection.md): Start network connection: GET /v1/connections/:network/start. Starts the OAuth login for youtube, tiktok or meta (Instagram) and returns the authorization URL. Another account on the same network becomes another channel; the same account is reconnected. With meta you can pass replace=true (replaces - [Disconnect network](https://praeko.app/docs/en/api/connections/disconnect-network.md): Disconnect network: DELETE /v1/connections/:network. Disconnects one youtube, tiktok or instagram account (for Instagram, only the Meta token; the Buffer channel is never touched). channel picks the account; without it, the default channel is used. The other accounts, the channel and its history are - [Instagram token](https://praeko.app/docs/en/api/connections/instagram-token.md): Instagram token: PUT /v1/connections/instagram/token. Stores the Meta API token for Instagram (encrypted). The token is verified with Meta before it is saved. - [Media](https://praeko.app/docs/en/api/media.md): Routes of the Media resource in the Praeko API (11): Public media by token, Public media by token, Create media, List media, Get media, Upload media part, Upload media file, Download media file, Check media file, Complete media upload, Delete media. - [Public media by token](https://praeko.app/docs/en/api/media/public-media-by-token.md): Public media by token: GET /v1/m/:id/:token/:name. Public media served through a tokenized link (supports Range). Also served at /m/…. This is the URL Meta and TikTok download from. - [Public media by token](https://praeko.app/docs/en/api/media/public-media-by-token-head.md): Public media by token: HEAD /v1/m/:id/:token/:name. Same as GET, but returns only the headers. - [Create media](https://praeko.app/docs/en/api/media/create-media.md): Create media: POST /v1/media. Starts a media upload (video, cover or image: the photo of an image post, JPEG only). With simple: true and up to 50 MB, send the whole file at once with PUT /v1/media/:id/content; otherwise upload it in parts and finish with POST /v1/media/:id/complete. - [List media](https://praeko.app/docs/en/api/media/list-media.md): List media: GET /v1/media. Lists media items (the latest 100). Older videos get their duration, width and height filled in on first read. - [Get media](https://praeko.app/docs/en/api/media/get-media.md): Get media: GET /v1/media/:id. One media item (with publicUrl once it is ready; videos also include durationMs, width and height when the file header provides them; images include width and height). - [Upload media part](https://praeko.app/docs/en/api/media/upload-media-part.md): Upload media part: PUT /v1/media/:id/parts/:part. Uploads one part of the file (raw bytes in the body). Re-sending the same part is safe. Every part except the last must have the same size (at least 5 MiB). - [Upload media file](https://praeko.app/docs/en/api/media/upload-media-file.md): Upload media file: PUT /v1/media/:id/content. Uploads the whole file at once (media created with simple: true, up to 50 MB). The body is the raw bytes. - [Download media file](https://praeko.app/docs/en/api/media/download-media-file.md): Download media file: GET /v1/media/:id/content. Downloads the file (key required; supports Range). - [Check media file](https://praeko.app/docs/en/api/media/check-media-file.md): Check media file: HEAD /v1/media/:id/content. Same as GET, but returns only the headers. - [Complete media upload](https://praeko.app/docs/en/api/media/complete-media-upload.md): Complete media upload: POST /v1/media/:id/complete. Joins the uploaded parts. Checks the declared size and the 1..N sequence (and, for a image media item, that the file is a JPEG). Calling it again is harmless. - [Delete media](https://praeko.app/docs/en/api/media/delete-media.md): Delete media: DELETE /v1/media/:id. Removes a media item (refused while a pending post uses it). - [Channels](https://praeko.app/docs/en/api/channels.md): Routes of the Channels resource in the Praeko API (8): List channels, Set default channel, Remove channel, Channel avatar, Channel time slots, Save channel time slots, Record followers, Channel followers. - [List channels](https://praeko.app/docs/en/api/channels/list-channels.md): List channels: GET /v1/channels. One item per connected channel (several accounts on the same network give several items; default marks the one used when channel is omitted), plus a "not connected" item for each network without an account. Includes the status and the number of time slots. - [Set default channel](https://praeko.app/docs/en/api/channels/set-default-channel.md): Set default channel: PUT /v1/channels/:channel/default. Makes this account the default for its network (used when a network route has no channel); the other accounts on the same network lose the mark. Returns 404 channel_not_found if it is not an active channel in this workspace. - [Remove channel](https://praeko.app/docs/en/api/channels/remove-channel.md): Remove channel: DELETE /v1/channels/:channel. Removes a DISCONNECTED account from the list (its history is kept). Refused while the account is connected, has pending items, or is the Buffer Instagram channel. - [Channel avatar](https://praeko.app/docs/en/api/channels/channel-avatar.md): Channel avatar: GET /v1/channels/:network/avatar. Profile picture of the channel (channel picks the account). - [Channel time slots](https://praeko.app/docs/en/api/channels/channel-time-slots.md): Channel time slots: GET /v1/channels/:network/slots. Weekly publishing time slots of a channel (channel picks the account; without it, the default one). - [Save channel time slots](https://praeko.app/docs/en/api/channels/save-channel-time-slots.md): Save channel time slots: PUT /v1/channels/:network/slots. Replaces all weekly time slots of a channel and reorganizes what is in its queue (channel picks the account). - [Record followers](https://praeko.app/docs/en/api/channels/record-followers.md): Record followers: PUT /v1/channels/:network/followers. Records the follower count by hand (Instagram only; channel picks the account). It becomes the record for that day. - [Channel followers](https://praeko.app/docs/en/api/channels/channel-followers.md): Channel followers: GET /v1/channels/:network/followers. The last 60 daily follower records (channel picks the account). - [TikTok](https://praeko.app/docs/en/api/tiktok.md): Routes of the TikTok resource in the Praeko API (1): TikTok creator info. - [TikTok creator info](https://praeko.app/docs/en/api/tiktok/tiktok-creator-info.md): TikTok creator info: GET /v1/tiktok/creator. What the connected TikTok account accepts (creator_info: privacy levels, maximum duration…). channel picks the account. - [Posts](https://praeko.app/docs/en/api/posts.md): Routes of the Posts resource in the Praeko API (9): Create post, Adopt scheduled post, List posts, Get post, Update post, Cancel post, Publish now, Schedule on YouTube, Release item comment. - [Create post](https://praeko.app/docs/en/api/posts/create-post.md): Create post: POST /v1/posts. Creates a post with one item per network (queue, fixed time or draft). Each item may carry channel (the account on that network; without it, the default channel). With kind: "image" it is a single-photo post, Instagram only (through Buffer or directly through Meta). - [Adopt scheduled post](https://praeko.app/docs/en/api/posts/adopt-scheduled-post.md): Adopt scheduled post: POST /v1/posts/adopt. Registers in Praeko a Reel that is already scheduled in Buffer (does not call Buffer). - [List posts](https://praeko.app/docs/en/api/posts/list-posts.md): List posts: GET /v1/posts. Lists posts, newest first (queued posts and drafts: soonest first). Filters: state, channel, tag. - [Get post](https://praeko.app/docs/en/api/posts/get-post.md): Get post: GET /v1/posts/:id. One post with its items and next actions. - [Update post](https://praeko.app/docs/en/api/posts/update-post.md): Update post: PATCH /v1/posts/:id. Edits the title, texts, media, tags and items, or moves the post to drafts or to the queue. Send only what changed; everything else stays. A YouTube item that is already uploaded and still scheduled can also change its time and metadata (checked live on YouTube). - [Cancel post](https://praeko.app/docs/en/api/posts/cancel-post.md): Cancel post: DELETE /v1/posts/:id. Cancels the pending items of a post. - [Publish now](https://praeko.app/docs/en/api/posts/publish-now.md): Publish now: POST /v1/posts/:id/publish-now. Takes the pending items out of the queue and publishes them now (?network= limits it to one network). - [Schedule on YouTube](https://praeko.app/docs/en/api/posts/schedule-on-youtube.md): Schedule on YouTube: POST /v1/posts/:id/youtube/schedule. Schedules the publication of a video already uploaded to YouTube (as private). - [Release item comment](https://praeko.app/docs/en/api/posts/release-item-comment.md): Release item comment: POST /v1/posts/:id/items/:item/comment. Releases the stored pinned comment of an item. - [Calendar](https://praeko.app/docs/en/api/calendar.md): Routes of the Calendar resource in the Praeko API (1): Calendar. - [Calendar](https://praeko.app/docs/en/api/calendar/calendar.md): Calendar: GET /v1/calendar. Items in a period and the free time slots. - [Insights](https://praeko.app/docs/en/api/insights.md): Routes of the Insights resource in the Praeko API (4): Metrics, Retention, impressions and CTR, Post retention, Import metrics. - [Metrics](https://praeko.app/docs/en/api/insights/metrics.md): Metrics: GET /v1/insights. Cards, top posts, results per channel (one row per account when a network has several; channel filters one), summary and the 48 h reading. - [Retention, impressions and CTR](https://praeko.app/docs/en/api/insights/retention-impressions-and-ctr.md): Retention, impressions and CTR: GET /v1/insights/retention. Retention (% watched and average watch time), impressions and CTR from YouTube, and skip rate from Instagram, per post. Data the network does not provide comes as null, with the reason in retention.message. Requires the yt-analytics.readonl - [Post retention](https://praeko.app/docs/en/api/insights/post-retention.md): Post retention: GET /v1/insights/:item/retention. Retention curve of one item (:item is the id of an item from /v1/insights: a post item or imported content) and its reach metrics. Same state and message as the list route. - [Import metrics](https://praeko.app/docs/en/api/insights/import-metrics.md): Import metrics: POST /v1/insights/import. Imports the history from YouTube, Buffer (Instagram) and TikTok (every connected account; channel together with network limits it to one). - [Content](https://praeko.app/docs/en/api/content.md): Routes of the Content resource in the Praeko API (1): Published content. - [Published content](https://praeko.app/docs/en/api/content/published-content.md): Published content: GET /v1/content. Everything already published (by Praeko or imported). - [YouTube](https://praeko.app/docs/en/api/youtube.md): Routes of the YouTube resource in the Praeko API (7): YouTube videos, Get YouTube video, Update YouTube video, YouTube comments, Reply to YouTube comment, Resolve YouTube comment, Reopen YouTube comment. - [YouTube videos](https://praeko.app/docs/en/api/youtube/youtube-videos.md): YouTube videos: GET /v1/youtube/videos. Videos of the channel (including private and scheduled ones); channel picks the account. - [Get YouTube video](https://praeko.app/docs/en/api/youtube/get-youtube-video.md): Get YouTube video: GET /v1/youtube/videos/:id. One video of the channel. - [Update YouTube video](https://praeko.app/docs/en/api/youtube/update-youtube-video.md): Update YouTube video: PATCH /v1/youtube/videos/:id. Edits the title, description and tags of a video (with dryRun: true it only shows the before and after, without saving). - [YouTube comments](https://praeko.app/docs/en/api/youtube/youtube-comments.md): YouTube comments: GET /v1/youtube/comments. Comment threads of the channel (channel picks the account). - [Reply to YouTube comment](https://praeko.app/docs/en/api/youtube/reply-to-youtube-comment.md): Reply to YouTube comment: POST /v1/youtube/comments/:id/reply. Replies to a thread (this really posts on YouTube). - [Resolve YouTube comment](https://praeko.app/docs/en/api/youtube/resolve-youtube-comment.md): Resolve YouTube comment: POST /v1/youtube/comments/:id/resolve. Marks a thread as resolved (in Praeko only). - [Reopen YouTube comment](https://praeko.app/docs/en/api/youtube/reopen-youtube-comment.md): Reopen YouTube comment: DELETE /v1/youtube/comments/:id/resolve. Reopens a resolved thread. - [Instagram](https://praeko.app/docs/en/api/instagram.md): Routes of the Instagram resource in the Praeko API (6): Instagram media, Instagram comments, Reply to Instagram comment, Hide Instagram comment, Resolve Instagram comment, Reopen Instagram comment. - [Instagram media](https://praeko.app/docs/en/api/instagram/instagram-media.md): Instagram media: GET /v1/instagram/media. The post grid of the profile (Meta API). - [Instagram comments](https://praeko.app/docs/en/api/instagram/instagram-comments.md): Instagram comments: GET /v1/instagram/comments. Instagram comments (Meta API). - [Reply to Instagram comment](https://praeko.app/docs/en/api/instagram/reply-to-instagram-comment.md): Reply to Instagram comment: POST /v1/instagram/comments/:id/reply. Replies to a comment (this really posts on Instagram). - [Hide Instagram comment](https://praeko.app/docs/en/api/instagram/hide-instagram-comment.md): Hide Instagram comment: POST /v1/instagram/comments/:id/hide. Hides or unhides a comment. - [Resolve Instagram comment](https://praeko.app/docs/en/api/instagram/resolve-instagram-comment.md): Resolve Instagram comment: POST /v1/instagram/comments/:id/resolve. Marks a comment as resolved (in Praeko only). - [Reopen Instagram comment](https://praeko.app/docs/en/api/instagram/reopen-instagram-comment.md): Reopen Instagram comment: DELETE /v1/instagram/comments/:id/resolve. Reopens a resolved comment. - [Comments](https://praeko.app/docs/en/api/comments.md): Routes of the Comments resource in the Praeko API (2): Comments from all networks, Mentions. - [Comments from all networks](https://praeko.app/docs/en/api/comments/comments-from-all-networks.md): Comments from all networks: GET /v1/comments. Comments from all networks together, from EVERY active account on each network (each comment carries channel; channel filters one account; an account that fails goes into errors and the others still respond). - [Mentions](https://praeko.app/docs/en/api/comments/mentions.md): Mentions: GET /v1/mentions. Mentions (Instagram, through tags; YouTube has none). - [API keys](https://praeko.app/docs/en/api/api-keys.md): Routes of the API keys resource in the Praeko API (3): List API keys, Create API key, Revoke API key. - [List API keys](https://praeko.app/docs/en/api/api-keys/list-api-keys.md): List API keys: GET /v1/api-keys. Lists the API keys (never the secret). - [Create API key](https://praeko.app/docs/en/api/api-keys/create-api-key.md): Create API key: POST /v1/api-keys. Creates a key. The secret is shown ONCE, in the response. - [Revoke API key](https://praeko.app/docs/en/api/api-keys/revoke-api-key.md): Revoke API key: DELETE /v1/api-keys/:id. Revokes a key (the key making the call cannot be revoked). - [Usage and log](https://praeko.app/docs/en/api/usage-and-log.md): Routes of the Usage and log resource in the Praeko API (2): Usage summary, Request log. - [Usage summary](https://praeko.app/docs/en/api/usage-and-log/usage-summary.md): Usage summary: GET /v1/usage. API usage of this workspace over the last days (1 to 30, default 7, in UTC): total, successful (< 400), errors, p95 duration, peak requests in one minute against the per-minute limit, byDay, byHour (only with days=1: the last 24 hours) and byKey (session = the dashboard - [Request log](https://praeko.app/docs/en/api/usage-and-log/request-log.md): Request log: GET /v1/usage/log. Request log, newest first, kept for 30 days; metadata only (method, route without ids, status, duration, key), never bodies, headers or query strings. Filters: key (id or session), status (2xx, 3xx, 4xx, 5xx or a code), route (substring), method, days (1 to 30); limit - [Preferences](https://praeko.app/docs/en/api/preferences.md): Routes of the Preferences resource in the Praeko API (2): Get preferences, Save preferences. - [Get preferences](https://praeko.app/docs/en/api/preferences/get-preferences.md): Get preferences: GET /v1/preferences. Dashboard preferences of the signed-in user in this workspace (an API key reads the workspace row): theme, language and notifications per event, with the email and panel flags. Missing values come back as the defaults (dark theme, pt-BR, no email, panel on). - [Save preferences](https://praeko.app/docs/en/api/preferences/save-preferences.md): Save preferences: PUT /v1/preferences. Changes the preferences. Partial (only what is sent changes) and strict (an unknown field or value returns 422 invalid_field). Returns the full preferences. With email true, the server emails postSent, postFailed, scheduledFail, the weeklySummary (Mondays at 08 - [Notifications](https://praeko.app/docs/en/api/notifications.md): Routes of the Notifications resource in the Praeko API (2): List notifications, Mark notifications as read. - [List notifications](https://praeko.app/docs/en/api/notifications/list-notifications.md): List notifications: GET /v1/notifications. The notification center (the bell) of the signed-in user in this workspace, newest first: notifications (id, event = postSent, postFailed, scheduledFail, weeklySummary or newComment, data with the facts of the event, link to where it leads, read, readAt and - [Mark notifications as read](https://praeko.app/docs/en/api/notifications/mark-notifications-as-read.md): Mark notifications as read: POST /v1/notifications/read. Marks notifications as read: ids (up to 100) or all: true. Ids that are not yours, or that do not exist, are ignored, and marking again is harmless. Returns marked (how many changed) and the new unreadCount. - [Webhooks](https://praeko.app/docs/en/api/webhooks.md): Routes of the Webhooks resource in the Praeko API (9): List webhooks, Create webhook, Get webhook, Update webhook, Delete webhook, Test webhook, Webhook deliveries, Retry delivery, Rotate webhook secret. - [List webhooks](https://praeko.app/docs/en/api/webhooks/list-webhooks.md): List webhooks: GET /v1/webhooks. Outgoing webhooks of this workspace (never the secret: only secretHint), with the delivery success of the last 7 days (recentDeliveries) and the events you can subscribe to. - [Create webhook](https://praeko.app/docs/en/api/webhooks/create-webhook.md): Create webhook: POST /v1/webhooks. Creates a webhook. The url must be https on a public host (private IPs, localhost and cloud metadata addresses are refused with unsafe_url). The signing secret is returned ONCE. At most 10 per workspace. - [Get webhook](https://praeko.app/docs/en/api/webhooks/get-webhook.md): Get webhook: GET /v1/webhooks/:id. One webhook (without the secret). - [Update webhook](https://praeko.app/docs/en/api/webhooks/update-webhook.md): Update webhook: PATCH /v1/webhooks/:id. Changes url, events or active; send only what changed. Pausing discards the pending deliveries; reactivating resets the failure count. - [Delete webhook](https://praeko.app/docs/en/api/webhooks/delete-webhook.md): Delete webhook: DELETE /v1/webhooks/:id. Deletes a webhook and its delivery history. - [Test webhook](https://praeko.app/docs/en/api/webhooks/test-webhook.md): Test webhook: POST /v1/webhooks/:id/test. Sends a ping.test event now (even if the webhook is paused) and returns the result in delivery. It does not count towards automatic deactivation. - [Webhook deliveries](https://praeko.app/docs/en/api/webhooks/webhook-deliveries.md): Webhook deliveries: GET /v1/webhooks/:id/deliveries. Recent deliveries, newest first (limit 1 to 100, default 20; kept for 30 days): event, state (pending, delivered, failed, discarded), attempts, last HTTP status and error, duration. - [Retry delivery](https://praeko.app/docs/en/api/webhooks/retry-delivery.md): Retry delivery: POST /v1/webhooks/:id/deliveries/:delivery/retry. Resends a delivery now, with the same Praeko-Delivery id (so the receiver can deduplicate). - [Rotate webhook secret](https://praeko.app/docs/en/api/webhooks/rotate-webhook-secret.md): Rotate webhook secret: POST /v1/webhooks/:id/rotate-secret. Replaces the signing secret: the new secret is returned ONCE and the old one stops signing immediately. - [Ideas](https://praeko.app/docs/en/api/ideas.md): Routes of the Ideas resource in the Praeko API (5): List ideas, Create idea, Import ideas, Update idea, Delete idea. - [List ideas](https://praeko.app/docs/en/api/ideas/list-ideas.md): List ideas: GET /v1/ideas. The idea board of this workspace (the Create screen), newest first: title, note, group (idea, scripting, ready, posted), tags (the first one is the series), createdAt and updatedAt. - [Create idea](https://praeko.app/docs/en/api/ideas/create-idea.md): Create idea: POST /v1/ideas. Adds an idea. At most 2000 per workspace. - [Import ideas](https://praeko.app/docs/en/api/ideas/import-ideas.md): Import ideas: POST /v1/ideas/import. Adds several ideas at once (up to 500 per call), as the dashboard does with the ideas it kept in the browser. An item whose id was already imported is skipped (skippedCount), so repeating the call never creates duplicates. Items without a valid title are skipped. - [Update idea](https://praeko.app/docs/en/api/ideas/update-idea.md): Update idea: PATCH /v1/ideas/:id. Changes title, note, group (moves the card) or tags; anything not sent stays as it is. - [Delete idea](https://praeko.app/docs/en/api/ideas/delete-idea.md): Delete idea: DELETE /v1/ideas/:id. Deletes an idea. ## Optional - [openapi.json](https://praeko.app/openapi.json): OpenAPI 3.1 generated from the contract