Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: JuzPost REST Posts API
version: 1.0.0
summary: Token-only API behind the `juzpost` command line client.
description: 'The machine-facing surface of JuzPost: connect-once device login, draft creation,
media upload to R2, and scheduling posts across connected social accounts.
**Base URL.** `https://www.juzpost.com/api/cli/v1`. Note the `cli` segment:
`/api/v1` is a different, older surface used by the dashboard and is not this API.
**Authentication.** Every operation requires `Authorization: Bearer `. There are no
unauthenticated operations.
## Get a token
1. Open **Settings, General** in the JuzPost
dashboard.
2. Find the **API keys** card and choose **Generate API key**.
3. Copy the key. It begins with `jp_live_` and is shown **once**, at creation. Store it in
your secret manager before leaving the page.
4. Check it works:
```bash
curl https://www.juzpost.com/api/cli/v1/me \
--header "Authorization: Bearer jp_live_YOUR_KEY"
```
A `200` comes back with your account, plan and capabilities. A `401` means the key is
wrong, revoked, or was pasted with a trailing newline.
Revoke a key from the same card. Nothing in this API can delete the credential it is
calling with, which is deliberate: an automated client should not be able to lock itself
out, and revocation should be a human action.
**One token, one account.** A token belongs to exactly one JuzPost account (a *workspace*).
Every operation acts on that one account, and no operation anywhere accepts an account id.
**Entitlements.** Every operation other than `GET /me` requires the
caller''s plan to include the `api` capability, and `POST /schedule`,
`POST /posts/{postId}/schedule` and `POST /storage/presign` additionally require `schedule`
(or `publish`, for immediate posting). A plan that lacks the capability produces `402`,
never `403`. Call `GET /me` first to check before attempting a write that is doomed.
**Errors.** Every non-2xx response uses the same envelope: a single `error` object carrying
a stable machine-readable `code`, a human `message`, and optional `details`. Never branch on
the message text; branch on `error.code` or the HTTP status.
**Unknown ids.** An id that is not yours is reported as `404`, never `403`, so no operation
can be used to discover whether someone else''s data exists.'
contact:
name: JuzPost Support
url: https://www.juzpost.com/support
license:
name: Proprietary
url: https://www.juzpost.com/terms
servers:
- url: https://www.juzpost.com/api/cli/v1
description: The only supported base URL.
security:
- bearerAuth: []
tags:
# --- truncated at 32 KB (33 KB total) ---
# Full source: https://artifacts.apis.io/juzpost/openapi/juzpost-posts-api-openapi.yml