Skip to content

Quickstart

  1. Create an API key.

    In the admin, open Configurações → Integrações API, click Gerar chave, select the scope posts:write (add post_types:read and sites:read if your tool inspects the site), and copy the ck_… secret. It is shown once. Details: Authentication.

  2. Publish a post.

    Janela do terminal
    curl -X POST https://api.canverly.com/v1/posts \
    -H "Authorization: Bearer ck_live_xxx" \
    -H "Content-Type: application/json" \
    -d '{
    "title": "My first API post",
    "status": "published",
    "blocks_json": {
    "v": 1,
    "blocks": [
    { "id": "p1", "type": "paragraph", "text": "Hello, world." }
    ]
    }
    }'

    Response:

    { "id": "01K…", "slug": "my-first-api-post", "status": "published", "public_url": null }
  3. Verify it’s live.

    Janela do terminal
    # Find your site's domain (once):
    curl -s https://api.canverly.com/v1/sites/me -H "Authorization: Bearer ck_live_xxx"
    # → { "id": "...", "slug": "...", "primary_domain": "blog.example.com", "default_language": "pt-BR" }
    # Then open https://blog.example.com/my-first-api-post
You see Cause Fix
401 unauthorized Missing/typo’d Authorization, or key revoked Resend Authorization: Bearer ck_…; regenerate if revoked
403 forbidden Key lacks posts:write Generate a key with the right scope
400 bad_request (title is required) Empty/missing title Provide a non-empty title
422 (missing field blocks_json) No body block document Include blocks_json: { "v": 1, "blocks": [...] }
429 rate_limited Over 60 req/min Back off; honor Retry-After