What this guide does: Build content with your own tools, upload the finished files to Sprid, and keep editing, reviewing and measuring the same posts in chat or the dashboard.
sprid post does both halves. Locally it builds, checks and pushes the media in your repo (init, new, build, register, check, push, draft, preview, status); on the server it works on shared posts (create, get, update, preview --id, deliveries, schedule, publish). sprid media handles media on the server (upload, import, the hosted reel and job); its other subcommands are the same local commands as sprid post. Run sprid post help for every local command. If sign-in fails, the local result stays usable. Keep the same post and plan IDs when you move work into Sprid.
Build
Use your app’s own renderer or design tools, or a built-in recipe:
sprid post init --kind stills # or text (your text renderer) or own (you render the MP4s)
sprid post new <slug>
sprid post build <slug>
sprid post check <slug>
init writes sprid.config.ts. A lane’s build is your own command, or a built-in recipe: stills for photographs and screenshots, screen for an app recorded in the simulator from a gesture script. A TS/JS config runs local code, so only use one you trust. Native captures and binary builds need your app’s own environment. A local slug stays local; a shared preview is always sprid post preview --id <postId>.
Upload
sprid login
sprid media upload slide-01.png slide-02.png --account my-account --json
Files go straight to storage and come back as ordered asset IDs. PNG, JPEG, WebP and MP4, up to 32 MiB each; larger videos go through sprid post push. The command prints a request ID first. To resume, rerun with the same files in the same order and --request-id <UUID>, or read the saved result with sprid media job <UUID>. Don’t reuse a request ID for a different selection.
Create and review the post
Sprid record IDs are UUIDs. Posts also have readable references such as SPR-9; either identifies the same post.
Write draft.json with the returned IDs and a new UUID as requestId (keep it for retries):
{
"account": "my-account",
"requestId": "5e253644-d8a5-4b18-9cc9-d4d921874138",
"title": "A concrete moment",
"captionInstagram": "The caption, with hashtags at the end",
"aspectRatio": "4:5",
"presentation": "finished",
"assets": [{ "kind": "image", "id": "28dc0981-a925-44b0-8ec5-70279f8fef41" }, { "kind": "image", "id": "b7a4e0bc-92de-451d-9b3e-d384a2ddcc83" }]
}
For a finished reel, use one asset with kind: "video". finished artwork gets no overlay or music; images fit inside the canvas, so check the preview for margins.
sprid post create --file draft.json --json
sprid post get SPR-9 --json
sprid post update SPR-9 --file changes.json --json # e.g. {"captionInstagram":"Revised caption"}
sprid post preview --id SPR-9 --json
sprid post deliveries SPR-9 --json
The review link opens the same dashboard screen as from chat. To continue in chat, give it post reference SPR-9 instead of creating another draft. Approval and platform choices stay with a person. Check delivery receipts before reporting success.
Hosted options and results
sprid capabilities --json: server limits and what stays local.sprid media import --file sources.json: the same account/files/urls/assets payload as MCPimport_assets.sprid media reel --file recipe.json: the metered hosted reel. Payload and approval rules are insprid docs chat. Poll withsprid media job <UUID>.sprid marketing-review: connected evidence.sprid docs marketing-reviewcovers coverage and attribution.
Keys go in through CLI key-file commands or the secure Sprid forms, never a conversation.