Your posts,from your own code.

One key. Every network you connect.

Schedule, publish and follow posts from your shop, your app or the tools you already run. Plain HTTP and JSON, on the same rules and limits as everything else in Spica Post.

A smiling woman with curly blonde hair holding a large plug, about to plug it into the matching socket on the Spica Post robot's chest

Three requests to a scheduled post.

Connect your accounts once on your account page. After that, your code does the rest: write the post, check it, pick the time.

  1. Make a key

    On your account page, under API keys. It is shown once; keep it as you would a password.

    Authorization: Bearer sp_live_…
  2. Write the post

    One version per account, each with its own words and pictures. Nothing goes out yet.

    POST /v1/drafts
    {
      "title": "Fresh bread",
      "variants": [{
        "accountId": "…",
        "text": "Fresh bread from 7am.",
        "mediaIds": ["…"]
      }]
    }
  3. Pick the time

    Send it now, at a time, or into your next free slot. Repeating a request never posts twice. Or write and send in one go with POST /v1/posts.

    POST /v1/drafts/{id}/schedule
    {
      "version": 1,
      "idempotencyKey": "b1f0…",
      "scheduledAt": "2026-11-06T14:00:00Z"
    }

Hear it the moment it happens.

Add an address of yours and Spica Post tells it at once, so your shop, your sheet or your team chat knows without asking.

post.published
A post went out, with its link.
post.failed
It did not, and why, in plain words.
post.needs_check
The network gave no clear answer yet.
post.cancelled
Someone took it off the schedule.
account.needs_reconnect
An account must be connected again.

Your server is down? Each event is tried again by itself, 8 times over a day, and your account page shows what reached you.

POST https://yourshop.com/hooks/spica
Spica-Event: post.published
Spica-Signature: t=1792641600,v1=5f2c…

{
  "type": "post.published",
  "data": { "delivery": {
    "network": "instagram",
    "state": "published",
    "url": "https://www.instagram.com/p/…"
  } }
}

Check it came from us

hmac_sha256(secret, t + "." + body) == v1

Every request is signed with a secret only you and Spica Post hold.

Everything your assistant can do, your code can too.

34 routes. Each one does exactly what the matching assistant tool does, so a post made either way follows the same rules. Every field is in the reference. Read the reference

Accounts

  • GET /v1/accounts
  • GET /v1/accounts/connect-links
  • GET /v1/accounts/{accountId}/recent-posts
  • DELETE /v1/accounts/{id}
  • GET /v1/capabilities

Media

  • GET /v1/media
  • POST /v1/media
  • POST /v1/media/from-url
  • DELETE /v1/media/{id}

Drafts

  • GET /v1/drafts
  • POST /v1/drafts
  • GET /v1/drafts/{id}
  • PATCH /v1/drafts/{id}
  • DELETE /v1/drafts/{id}
  • POST /v1/drafts/{id}/validate
  • POST /v1/check

Publishing

  • POST /v1/posts
  • POST /v1/drafts/{id}/publish
  • POST /v1/drafts/{id}/schedule
  • POST /v1/drafts/{id}/queue
  • GET /v1/queue
  • PUT /v1/queue
  • GET /v1/jobs
  • GET /v1/jobs/{id}
  • POST /v1/jobs/{id}/cancel
  • POST /v1/jobs/{id}/reschedule

Results

  • GET /v1/results

Plan

  • GET /v1/usage

Webhooks

  • GET /v1/webhooks
  • POST /v1/webhooks
  • PATCH /v1/webhooks/{id}
  • DELETE /v1/webhooks/{id}
  • POST /v1/webhooks/{id}/test
  • GET /v1/webhooks/{id}/events

The limits, plainly

  • Every paid planThe API comes with Starter, Studio and Pro.
  • 120 a minuteRequests each key may make.
  • 5 keysOne for each app; revoke any of them at once.
  • 5 webhooksAddresses that hear about your posts.
Is this the same as connecting my assistant?

No. Your assistant connects with one link and a sign-in, and needs no key. A key is for software you or your developer write.

Do I need my own developer accounts with the networks?

No. You connect your accounts on your account page, the same as always. Your key only reaches your own Spica Post account.

What happens if a post fails?

The answer says why in a sentence, and a webhook tells your address at once. Repeating a request with the same idempotency key never posts twice.

Where is the full list of fields?

In the API reference, a standard OpenAPI document that tools like Postman and most code generators read as it is.

Your first post, from your own code, today.

Make a key

Prefer to ask? Your assistant can do all of this with one link and no key.