Machine-readable entry points
Setup
- Sign in on the account page.
- Activate Creator 300 for $8/month through Polar.
- Connect one TikTok creator account and claim an API key.
- Install the skill and store the key as
AGENTIC_POSTING_API_KEY. - Ask the API for context and current capabilities before preparing a post.
For Codex, install the canonical skill file locally. Other agents should read the hosted SKILL.md before acting and preserve its confirmation rules.
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills/agentic-posting"
curl -fsSL https://agenticposting.com/SKILL.md \
-o "${CODEX_HOME:-$HOME/.codex}/skills/agentic-posting/SKILL.md"
curl https://api.agenticposting.com/v1/context \
-H "x-api-key: $AGENTIC_POSTING_API_KEY"
curl https://api.agenticposting.com/v1/capabilities
Launch operations
GET /v1/contextreturns the authorized workspace and connected/default TikTok account identifiers.GET /v1/capabilitiesreports which publishing and review paths are enabled in the current environment. The current launch contract is version2026-08-09and advertises the 70-asset/1,000,000,000-byte active workspace capacity. The agent must also inspect the connected account scopes inGET /v1/context: draft requiresvideo.uploadand Direct Post requiresvideo.publish.POST /v1/uploadsandPUT /v1/uploads/{assetId}/contentprepare short-lived media.POST /v1/postswithmode: "draft"requests TikTok inbox delivery for finishing there. Only a non-null TikTokpublishIdproves initialization acceptance, and acceptance is not proof that inbox delivery or publication completed. An exact idempotent replay returns the stored job without a second TikTok publish initialization or usage reservation and remains recoverable after entitlement ends. A racing retry may repeat a safe creator-info metadata read before it observes the winning D1 attempt. The recovered job may befailedorsubmission_unknown, so inspect and report that exact state. Reusing the key with a different account, media type, or ordered asset list returnsidempotency_key_reused. Direct mode is rejected here and must use a post intent.POST /v1/post-intentscreates one immutable Direct Post intent and returns its review summary.GET /v1/post-intents/{postIntentId}returns the current intent or resulting publish state to its API-key workspace. Asubmittingintent is already claimed and may still be in flight: do not confirm it again or prepare a replacement; keep polling the existing identity.GET /v1/post-intents/{postIntentId}/reviewis the browser-only read route. New links carry an opaqueagp_review_capability; legacy bare digest tokens are invalid. The token may read an active intent; inactive responses contain only the intent id, status, and expiry.POST /v1/post-intents/{postIntentId}/confirmsubmits Direct Post initialization only after a separate creator response. Agent confirmation uses the workspace API key and is disabled by default pending TikTok approval. Browser confirmation requires both the review token and a current Clerk session for a member of the intent's workspace. An exact replay recovers the stored job without a second TikTok publish initialization or usage reservation and remains recoverable after entitlement ends; a racing retry may repeat a safe creator-info metadata read before observing the winner. Changed confirmation input under the claimed key is rejected.GET /v1/posts/{jobId}reads the last known TikTok job state. Its publicjobobject contains exactlyid,status,publishId,tiktokPostId, andfailReason; internal owner, request, and idempotency hashes are never returned.POST /v1/posts/{jobId}/refreshasks TikTok for the current state and returns the same five-field public job shape. Poll the existing job after ambiguous results; never create a replacement request that could duplicate a post.
Required headers and media shape
Agent routes use X-API-Key. Draft, prepare, and confirm requests also require a unique Idempotency-Key. A key is durably bound to the exact logical input and may be replayed only with that identical input for recovery; changed input returns a conflict. Upload and status requests include the workspaceId returned by GET /v1/context.
One upload reservation contains exactly one MP4 video or between 1 and 35 JPEG/WebP photos. Do not mix roles or repeat an assetId. Videos may be at most 50 MB; each photo may be at most 20 MB. A workspace may have at most 70 unexpired active assets and 1,000,000,000 active bytes across pending, uploading, and ready media. Each one-shot upload must use the reserved content type, exact Content-Length, and declared lowercase SHA-256 digest.
Creator confirmation is mandatory
Intent preparation fails closed with tiktok_creator_identity_missing if TikTok does not return a recognizable username or nickname. Never confirm a generic or missing creator identity.
An agent may prepare the intent, but it must show the creator identity, every media preview, and every submitted text field and setting. For video, title is the TikTok caption (up to 2,200 characters), description is rejected, and the video-only settings are Duet, Stitch, and videoCoverTimestampMs; omit autoAddMusic and photoCoverIndex entirely. For photo, the short title (up to 90 characters) and full description (up to 4,000 characters) are separate and both must be shown when supplied; Duet and Stitch must be false, videoCoverTimestampMs is rejected, and the photo-only settings are autoAddMusic and photoCoverIndex. Omitted photo photoCoverIndex is normalized to 0 before hashing, storage, review, and submission. The API rejects media-incompatible settings instead of silently dropping them. The creator must also see visibility, interactions, AI-generated status, auto-add music, photo cover index, video cover timestamp, the umbrella commercial-content disclosure, Your brand, Branded content, content hash, expiry, and confirmation phrase. A setting for the other media type must be shown as not applicable rather than hidden. The umbrella disclosure must equal the logical OR of the two detailed brand toggles; each value is reviewed independently. The agent must then stop and wait for a new user response. A standing instruction, the original request, silence, or an agent-generated approval is not consent.
If agent confirmation is unavailable, give the creator the signed, expiring browser reviewUrl. The creator must sign in with a member account for the same workspace. The URL token alone cannot confirm, and an API key cannot select the browser channel. The review page can confirm only that one immutable intent. Any content change requires a new intent. Never work around an unavailable capability.
Plan and platform limits
Creator 300 is $8 per month for one connected TikTok account and 300 TikTok-accepted draft or Direct Post initializations per Polar billing period. There is no rollover. TikTok's own creator-level and app-level limits still apply; an allowance does not guarantee visibility, moderation approval, or a particular daily throughput.
Uploads, prepared intents, validation failures, and idempotent retries do not consume the allowance. Accepted usage belongs to the Polar period in which TikTok accepts initialization. An ambiguous provider attempt is shown separately as reserved capacity: it is not accepted usage, but it reduces currently available capacity and remains held across a period boundary until internal provider or operator evidence reconciles it. If TikTok did not return a publish id, the agent or creator cannot release or expire that hold. There is no public reconciliation endpoint. Never create a replacement request or new idempotency key for an ambiguous result; recover and poll the existing job or intent when one is exposed.
Per-post analytics are not part of the launch promise.
AI-generated photo slideshows must use the TikTok draft/inbox path at launch because TikTok's photo Direct Post request does not carry the required AI-generated-content disclosure field. The creator completes that disclosure and publishing inside TikTok.
Billing and support
Use Manage subscription in Polar for supported invoices, payment-method updates, renewal, and cancellation; Agentic Posting does not maintain a parallel billing-admin screen. Only the configured Creator 300 product can grant access. If a verified event moves the exact stored Polar subscription to an unsupported or missing product, access fails closed to inactive/no-plan; unrelated subscription identities are audit-only. A scheduled cancellation retains publishing access only through its future paid period end. Ended, expired, revoked, past-due, and unscheduled canceled states do not grant access.
API-key labels are limited to 80 characters and 320 UTF-8 bytes. The account page lists at most 50 records: the active key and up to 49 revoked audit entries. When disconnecting TikTok, local encrypted credentials are deleted only after TikTok confirms revocation. A temporary revocation failure preserves the connection so the creator can retry.
Use support for product, privacy, deletion, or security requests. Do not include secrets or payment-card data in any field: matching submissions are rejected before storage with support_message_contains_secret. Accepted support rows are scheduled for deletion after 30 days. Intake is capped at 1,000 accepted requests globally and 10 per trusted connection source in a rolling 24-hour window, plus 30,000 rows total. Per-source admission stores only a keyed hash of the normalized Cloudflare connection address, not the raw address. A full cap or missing/malformed trusted source returns the same HTTP 429 support_capacity_reached without storing the request or returning a request id; retry later without duplicating or changing the message. Rotate any credential that was exposed. See the Privacy Policy and Terms of Service.