PM3K REST API

Post to TikTok now or on schedule. API‑first; minimal UI.

Auth

Endpoints

POST /v1/creators/{id}/jobs create

Create a posting job.

FieldTypeRequiredDescription
mode"now" | "schedule"yesImmediate or scheduled publish.
schedule_atISO 8601if mode="schedule"UTC timestamp within plan limits (Free: 3 days; Paid: 30 days).
titlestringnoOptional title.
video.source"pm3k_storage" | "url"yesStorage key (PM3K) or pull‑from‑URL.
video.storage_keystringif source="pm3k_storage"Key returned by PM3K upload (e.g., pm3k/123.mp4).
video.urlstringif source="url"Must be under a Verified‑URL you own (paid plans).

Plan constraints:

Example — Free plan (allowed)

curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: Bearer FREE_KEY'  -H 'Content-Type: application/json'  -d '{ "mode": "now", "video": { "source": "pm3k_storage", "storage_key": "pm3k/123.mp4" } }'

Example — Free plan (blocked)

curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: Bearer FREE_KEY'  -H 'Content-Type: application/json'  -d '{ "mode": "now", "video": { "source": "url", "url": "https://media.client.com/v.mp4" } }'
# → 400 SOURCE_NOT_ALLOWED_FOR_PLAN

Example — Paid plan (URL)

curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: Bearer PAID_KEY'  -H 'Content-Type: application/json'  -d '{ "mode": "schedule", "schedule_at": "2025-11-20T10:00:00Z",
       "video": { "source": "url", "url": "https://media.client.com/v.mp4" } }'

Example — Errors

# Missing video.source
curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: Bearer FREE_KEY' -H 'Content-Type: application/json'  -d '{"mode":"now","video":{}}'          # → 400 INVALID_REQUEST

# Missing storage_key for pm3k_storage
curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: Bearer FREE_KEY' -H 'Content-Type: application/json'  -d '{"mode":"now","video":{"source":"pm3k_storage"}}'   # → 400 MISSING_STORAGE_KEY

# Missing url for source=url (paid)
curl -i -X POST 'https://api.pm3k.dev/v1/creators/123/jobs'  -H 'Authorization: BearER PAID_KEY' -H 'Content-Type: application/json'  -d '{"mode":"now","video":{"source":"url"}}'            # → 400 MISSING_URL

GET /v1/jobs/{id} status

Fetch job status. Returns { id, status, error? }. Status flow: INIT → VALIDATING → SCHEDULED → PUBLISHING → COMPLETE | FAILED.

curl -s 'https://api.pm3k.dev/v1/jobs/abcd-1234'  -H 'Authorization: Bearer <KEY>'

POST /v1/webhooks register

Register your webhook to receive final job events. We forward TikTok outcomes to your endpoint.

curl -i -X POST 'https://api.pm3k.dev/v1/webhooks'  -H 'Authorization: Bearer <KEY>' -H 'Content-Type: application/json'  -d '{"url":"https://example.com/pm3k/webhook"}'

Security: verify our signature header (to be documented).

Errors

CodeHTTPDescription
INVALID_REQUEST400Missing/invalid fields.
SOURCE_NOT_ALLOWED_FOR_PLAN400Free plan tried to use video.source="url".
MISSING_STORAGE_KEY400storage_key required for pm3k_storage.
MISSING_URL400url required for source=url.