Skip to content
maskostudioDocs

All pages

  • Overview/docs/use-cases
  • Mobile app/docs/use-cases#mobile
  • Website/docs/use-cases#website
  • Desktop/docs/use-cases#desktop
  • AI agents/docs/use-cases#agents
  • Videos/docs/use-cases#videos
  • Brand/docs/use-cases#brand
  • Start building/docs/ai-agents
  • Set up once/docs/ai-agents#set-up-once
  • Ask in plain words/docs/ai-agents#ask-in-plain-words
  • What your agent does/docs/ai-agents#what-your-agent-does
  • MCP server/docs/mcp
  • Masko for Cursor/docs/ai-tools/cursor
  • Masko in ChatGPT/docs/ai-tools/chatgpt
  • Start here/docs/tutorials#start-here
  • All tutorials/docs/tutorials
  • Create your first mascot/docs/tutorials/first-mascot
  • Create an animated character/docs/tutorials/first-animation
  • Make a character talk/docs/tutorials/make-it-talk
  • Put your mascot on your website/docs/tutorials/mascot-on-your-website
  • Guide onboarding with a talking mascot/docs/tutorials/web-onboarding-mascot
  • Add a mascot that celebrates progress and welcomes users back/docs/tutorials/web-progress-companion
  • Add a talking support mascot in the bottom right/docs/tutorials/web-support-mascot
  • Show a mascot while your AI thinks/docs/tutorials/ai-loading-mascot
  • Give your AI agent a face/docs/tutorials/ai-agent-face
  • Animate the mascot you already have/docs/tutorials/animate-your-mascot
  • How to make Telegram stickers/docs/tutorials/telegram-stickers
  • How to make Discord stickers/docs/tutorials/discord-stickers
  • Quickstart: your first animation/docs/quickstart
  • Terminal quickstart/docs/terminal
  • API keys and workspaces/docs/authentication
  • CLI browser login/docs/authentication/cli
  • How mascots work/docs/how-mascots-work
  • Credits and costs/docs/credits
  • From text/docs/create/from-text
  • From an image/docs/create/from-image
  • From a website/docs/create/from-website
  • From a brand book/docs/create/from-brand-book
  • Reference images/docs/manage/references
  • What you can generate/docs/generation
  • Pose-to-animation walkthrough/docs/generate/workflow
  • Images and poses/docs/generate/images
  • Animations/docs/generate/animations
  • Talking animations/docs/generate/talking
  • Logos, backgrounds and stickers/docs/generate/design-assets
  • Cursor follower/docs/generate/cursor-follower
  • Batch generation/docs/generate/batch
  • Image and video exports/docs/manage/media-exports
  • Canvases and releases/docs/canvas
  • Build a canvas/docs/canvas/build
  • Canvas templates/docs/canvas/templates
  • Generate canvas assets/docs/canvas/generate-all
  • Export a canvas/docs/canvas/export
  • Overview and demo/docs/player
  • Play one animation/docs/player/one-animation
  • Play a canvas/docs/player/canvas
  • Hosting and file formats/docs/generate/cdn
  • File sizes/docs/generate/file-sizes
  • Float a mascot on your Mac/docs/integrations/desktop
  • Jobs and polling/docs/manage/jobs
  • Webhooks/docs/manage/webhooks
  • Manage mascots and assets/docs/manage/collections
  • All endpoints/docs/reference
  • Requests and responses/docs/reference/conventions
  • Errors and recovery/docs/reference/errors
  • Command line reference/docs/terminal/commands
  • TypeScript SDK/docs/sdk/typescript
  • Changelog/docs/reference/changelog
  • Migrate to mascots and canvases/docs/manage/studio-migration
Get an API key
Documentation

Create a mascot from an image

Upload your existing mascot design; the API detects the character's name and description from it.

Upload Your Image

Upload multipart form data or a URL. Multipart needs a binary file field; let your HTTP client set the boundary, since a malformed body or missing file returns 400.

Multipart Upload

curl -X POST https://api.masko.ai/v1/upload \
  -H "Authorization: Bearer masko_YOUR_API_KEY" \
  -F "file=@mascot.png"

URL Upload

Public HTTP(S) PNG, JPEG, WebP, GIF or SVG (converted to PNG), up to 10 MB, downloaded within 15 seconds. Every redirect must stay public; private addresses and URLs with credentials are rejected. Reference image URLs follow the same rules.

curl -X POST https://api.masko.ai/v1/upload \
  -H "Authorization: Bearer masko_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/my-mascot.png" }'

Create Mascot

Pass the upload's asset_id as a reference. prompt and name are optional: both are detected from the image.

curl -X POST https://api.masko.ai/v1/mascots \
  -H "Authorization: Bearer masko_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": "PROJECT_ID",
    "reference_asset_ids": ["a1b2c3d4-e5f6-7890-abcd-ef1234567890"]
  }'

How Auto-Analysis Works

AI vision reads the reference and writes the character's name and a detailed prompt of its visual traits, for free.

Adding More References

Up to 6 references; more give better consistency. Send an asset_id, or a url for a public image.

curl -X POST https://api.masko.ai/v1/mascots/MASCOT_ID/references \
  -H "Authorization: Bearer masko_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "asset_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
  }'

Changing references clears the style card, which is extracted again on the next generation.

Best Practices

  • 3 or 4 references from different angles.
  • One art style; do not mix 3D and flat vector.
  • 1024 × 1024 or larger.
  • White or transparent backgrounds.

Animate the uploaded image directly

For a new mascot, upload and animate creates it in the animation request. For an existing mascot, send the unattached upload to /generate:

curl -X POST https://api.masko.ai/v1/mascots/MASCOT_ID/generate \
  -H "Authorization: Bearer masko_YOUR_API_KEY" \
  -H "Idempotency-Key: animate-my-upload-001" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "animation",
    "name": "Gentle wave",
    "source_image_asset_id": "UPLOADED_IMAGE_ASSET_ID",
    "animation_prompt": "Wave gently, keeping the feet planted.",
    "animation_model": "standard",
    "duration": 5,
    "loop": true
  }'

It returns 202 with a job to poll at /v1/jobs/{job_id}?api_version=2026-09-26: 10 credits for 5 seconds of Standard, with no image charge.

  • The upload is kept; non-square images are center-cropped to a separate 1024 × 1024 source, or use source_image_crop (image framing). The video model can still change details.
  • It is imported as a source image, not a reference, and does not change the mascot's identity.
  • An approved variant_id ties a fresh upload to that variant. Existing images keep their saved context, and a conflicting variant returns 409.
  • Retry an uncertain response with the same idempotency key and request to avoid a second charge.