Agent API · version 1

Your agent has an
animation tool now.

Upload line art, optionally describe the drawing order, poll for the result, and hand the private review link back to the user. No account or general-purpose API key is required.

Base URL
https://scribble.boringstuff.club/agent/v1
Input
PNG or JPEG · up to 10 MB
Retention
Up to 24 hours
Preview
Free with watermark · $5 unlock
00

MCP and agent skill

For an MCP-capable agent, connect the Streamable HTTP endpoint at https://scribble.boringstuff.club/mcp. It provides tools to inspect current policy, create and monitor an animation, obtain downloads, redeem a user-provided unlock code, and delete a session.

The installable agent skill teaches the safe workflow and declares that MCP dependency. A deterministic ZIP package and SHA-256 digest are exposed by the discovery index. Use the REST API below when an MCP host cannot supply image bytes as base64.

01

Workflow

The API is asynchronous and scoped per animation. The recommended agent workflow is:

  1. Create an animation with a multipart image and a unique Idempotency-Key.
  2. Store the returned animation_id and access_token securely.
  3. Poll status_url with the bearer capability until the status is completed or failed.
  4. Download the free watermarked preview, and give manage_url to the user for browser review or unlock.
  5. After unlocked becomes true, download the clean video. Delete the session early when the user no longer needs it.
Important: the capability controls one private animation. It is not an account credential and must not be logged, embedded in prompts, or shared with unrelated users.
02

Create an animation

Send multipart/form-data to POST /agent/v1/animations. Version 1 accepts uploaded bytes only and never fetches a remote image URL.

Field or headerRequiredMeaning
imageYesPNG or JPEG, up to 10 MB and 4096 × 4096 pixels.
order_textNoNatural-language component order, up to 2,000 characters. Blank asks the model to choose.
show_handNotrue or false; defaults to false.
speedNoslow, normal, or fast.
accept_retentionYesMust be true to acknowledge 24-hour file retention.
accept_termsYesMust be true.
terms_versionYesCurrent version: 2026-08-23.1. Read Terms of Use.
client_nameYesA short non-personal client label.
client_versionNoThe calling integration’s version.
marketplaceNoA directory label such as the marketplace that supplied the integration.
Idempotency-KeyYesA unique, non-personal retry key, 8–200 characters.
X-Agent-Installation-IdRecommendedA stable non-personal installation identifier; only a one-way hash is retained.
curl --request POST 'https://scribble.boringstuff.club/agent/v1/animations' \
  --header 'Idempotency-Key: job-20260823-0001' \
  --header 'X-Agent-Installation-Id: install-a1b2c3d4' \
  --form 'image=@illustration.png;type=image/png' \
  --form 'order_text=Draw the title, then the diagram, then the labels.' \
  --form 'show_hand=true' \
  --form 'speed=normal' \
  --form 'accept_retention=true' \
  --form 'accept_terms=true' \
  --form 'terms_version=2026-08-23.1' \
  --form 'client_name=Example Agent' \
  --form 'client_version=1.0.0'

A new request returns HTTP 202. Repeating the identical request with the same idempotency scope and key returns HTTP 200 with idempotent_replay: true. Reusing the key for different input returns 409.

03

Authorization

The create response contains an access_token for exactly one animation. Send it on status, download, unlock, and delete requests:

Authorization: Bearer ANIMATION_CAPABILITY

The authenticated response also contains manage_url. Its URL fragment carries the same capability for browser handoff; fragments are not sent in HTTP requests or ordinary server access logs.

04

Poll status

Call GET /agent/v1/animations/{animation_id}. Poll conservatively—every 3–5 seconds is sufficient for a job that usually takes about two minutes.

{
  "animation_id": "00000000-0000-4000-8000-000000000000",
  "status": "running",
  "stage": "Drawing your illustration",
  "progress": 62,
  "expires_at": "2026-08-24T12:00:00+00:00",
  "unlocked": false,
  "preview_download_available": false,
  "clean_download_available": false,
  "status_url": "https://scribble.boringstuff.club/agent/v1/animations/…",
  "preview_url": "https://scribble.boringstuff.club/agent/v1/animations/…/preview",
  "clean_url": "https://scribble.boringstuff.club/agent/v1/animations/…/clean",
  "manage_url": "https://scribble.boringstuff.club/s/…#token=…"
}

Terminal statuses are completed and failed. A failed response includes a safe error code and message.

05

User handoff and unlock

The recommended payment boundary is browser-based: give manage_url to the user. They can review the watermarked result, buy a $5 single-use unlock code through Buy Me a Coffee, and enter it on the private page. The agent never needs payment details.

The agent can continue polling until unlocked becomes true. A trusted client that already has a code may instead send JSON to POST /agent/v1/animations/{animation_id}/unlock:

{ "code": "UNLOCK-XXXX-XXXX-XXXX" }

Unused purchase codes expire after 30 days and can unlock any one animation. A code is consumed atomically and cannot be reused.

06

Download or delete

  • GET /agent/v1/animations/{animation_id}/preview downloads the completed watermarked MP4.
  • GET /agent/v1/animations/{animation_id}/clean downloads the completed clean MP4 after unlock.
  • DELETE /agent/v1/animations/{animation_id} immediately removes the active session and its files.

A cloud deployment may answer a download with a short-lived redirect to private object storage. Clients should follow HTTP redirects without forwarding the bearer header to a different host.

07

Errors and limits

StatusMeaningAgent behavior
400Invalid upload, consent, terms version, or unlock code.Correct the request; do not blindly retry.
401Missing or malformed bearer capability.Restore the capability returned at creation.
403The clean video is still locked.Give the user manage_url.
404Animation, capability pairing, or video not found.Do not probe other identifiers.
409Video not ready or idempotency conflict.Poll status, or use a new key for different input.
410Animation expired or was deleted.Create a new animation if the user requests it.
422Malformed request shape.Fix fields using the OpenAPI schema.
429Generation or unlock-attempt limit reached.Respect Retry-After when present.
503Capacity or temporary storage/dispatch failure.Retry safely with the same idempotency key.

Failed direct unlock attempts are limited over 15 minutes: 5 per animation, 20 per source-IP hash, and 100 globally.

08

Security and retention

  • Uploaded artwork, instructions, working files, and videos expire within 24 hours.
  • Do not place names, emails, filenames, prompts, bearer capabilities, or other personal data in client labels, installation identifiers, idempotency keys, or logs.
  • The raw installation identifier and idempotency key are not retained; one-way hashes support attribution and safe retries.
  • Never expose the bearer capability to a different user, model prompt, analytics system, or third-party download host.
  • Users must own or have permission to process the submitted artwork and should review AI-generated results.

See the Privacy Policy, Terms of Use, and FAQ for the authoritative product rules.