HitCanvas APIGet a key

For developers

A brief in, a finished thumbnail out

Describe the video, say the words, and get back a YouTube thumbnail with the headline painted in. No canvas to build, no fonts to pick, no text to place. Sign in, create a key in the console, and call it from your own product.

curl -X POST https://app.hitcanvas.com/v1/thumbnails \
  -H "authorization: Bearer $HITCANVAS_KEY" \
  -H "content-type: application/json" \
  -d '{
    "topic": "a producer watching a song go viral overnight",
    "headline": "1M streams in 7 days",
    "style": "bold"
  }'

The answer, in about a minute:

{
  "id": "0c1f…",                       // the library item it was kept as
  "picture": "/v1/library/0c1f…/image", // fetch it again with the same key
  "image": "data:image/png;base64,…",   // 1280 × 720, the headline painted in
  "headline": "1M streams in 7 days",
  "model": "…",
  "requestId": "req_…",
  "usage": { "generations": { "used": 12, "cap": 200 }, "resetsAt": "…" }
}

The brief

Everything POST /v1/thumbnails takes is about the picture, never about the canvas.

Endpoints

Contract 2.9.2 · OpenAPI 3.1 — every field, enum and status code, built from the same schemas the routes parse with. Generate a client from it.

Thumbnails

The public API: a brief in, a finished thumbnail out. Each counts against the workspace's monthly allowance.

POST /v1/thumbnails
A finished thumbnail from a creative brief: the words painted in, nothing to set or render. One generation.generate
POST /v1/improve
The same thumbnail back with a review's changes made. One generation.generate

Ideas

What to make: the niche studied, concepts, headlines, and a review of a finished thumbnail. Studies and ideas count against their own allowances.

POST /v1/study
The niche's outperforming thumbnails, and a brief on what they share. Cached for a day and not counted when served from cache.generate
POST /v1/direct
Three concepts for the picture: emotion, pose and background. Counts as an idea.generate
POST /v1/headlines
Five headlines from what the video is about. Counts as an idea.generate
POST /v1/review
A finished thumbnail checked against its niche brief. Counts as an idea.generate

Jobs

The same work, answered with a 202 and finished after.

POST /v1/jobs
Any of the picture calls as a job: 202 now, the route's own response later.generate
GET /v1/jobs/{id}
A job's status and, once finished, its result or error.generate

Library

Every thumbnail the workspace has made, kept as it was made.

GET /v1/library
Everything this space has made, newest first.library:read
DELETE /v1/library
Clear the pictures that were never saved as a design (?unsaved=1).library:write
GET /v1/library/{id}
One item with its text layers and the settings behind it.library:read
DELETE /v1/library/{id}
Remove an item.library:write
GET /v1/library/{id}/image
The picture itself. ?which=preview for the rendered preview; ?download=1 to get it as an attachment.library:read

Brand kits

GET /v1/kits
The space's brand kits.kits:read
POST /v1/kits
Create a brand kit.kits:write
PUT /v1/kits/{id}
Replace a kit's name, look and logo.kits:write
PATCH /v1/kits/{id}
Move a kit to another client space.Studio · owner or admin
DELETE /v1/kits/{id}
Remove a kit. Refused while personas belong to it.Studio · owner or admin
GET /v1/kits/{id}/logo
The kit's logo image.kits:read

Personas

Saved people. Photos need recorded consent.

GET /v1/personas
The space's saved people.personas:read
POST /v1/personas
Save a person: one to three photos of the same face, with recorded consent, filed under a brand.personas:write
PATCH /v1/personas/{id}
Move a persona to another brand.personas:write
DELETE /v1/personas/{id}
Remove a person and their photos.personas:write
GET /v1/personas/{id}/photo
One of the person's photos: ?n=0..2, or ?look=<lookId>&n=….personas:read
POST /v1/personas/{id}/photo
Add a photo at an angle the person does not have yet. Three at most.personas:write
DELETE /v1/personas/{id}/photo
Remove photo ?n=…. Two must remain.personas:write
POST /v1/personas/{id}/looks
Save a look: a named description of how the person is styled, with its own photos.personas:write
DELETE /v1/personas/{id}/looks
Remove look ?look=<lookId>.personas:write

Spaces

Client spaces: an agency's clients, each with its own library, kits and personas.

GET /v1/spaces
The client spaces you can work in, which is active, and (owners and admins) who is in each.
POST /v1/spaces
Create a client space.Studio · owner or admin
PATCH /v1/spaces
Change who is in which space.Studio · owner or admin
POST /v1/spaces/active
Move your session into a space. Sets a cookie; every request checks it again.Studio session
PUT /v1/spaces/{id}
Rename a space.Studio · owner or admin
DELETE /v1/spaces/{id}
Remove a space, moving its work to ?moveTo=general or another space's id.Studio · owner or admin
PUT /v1/invitations/{id}/spaces
Which client spaces an invited person may work in.Studio · owner or admin
POST /v1/invitations/{id}/spaces
Claim the spaces an invitation granted, on accepting it.Studio session

Videos

Published videos watched against their channel's typical video: public data, read by HitCanvas with its own YouTube credentials. No YouTube account of yours is involved.

GET /v1/videos
Published videos being watched, each against its channel's typical video. Public data, read by HitCanvas with its own YouTube credentials.videos:read
POST /v1/videos
Watch a video by link.videos:write
DELETE /v1/videos/{id}
Stop watching a video.videos:write

Workspace

GET /v1/usage
This month against the workspace's allowance, and when it resets. Owners and admins, signed in, also get it by key and by space.
GET /v1/keys
The workspace's API keys, each with the scopes it holds and the client spaces it may work in.Studio session
POST /v1/keys
Make a key. The key itself is in the answer once.Studio · owner or admin
PATCH /v1/keys/{id}
Narrow or widen a key: its scopes, its client spaces, its name. Takes effect on its next call.Studio · owner or admin
DELETE /v1/keys/{id}
Revoke a key. Anything using it stops working at once.Studio · owner or admin
POST /v1/billing/checkout
Start a subscription. The workspace's owner only.Studio session
POST /v1/billing/portal
Open the billing portal. The workspace's owner only.Studio session

AdvancedStudio-facing · compatibility

Studio-facing: the engine directly, layered designs, fonts, server rendering. Deprecated for new integrations, served for existing ones under the compatibility path.

POST /v1/generate
The engine directly: layout mode (a background with measurements for words you set) or full mode (what POST /v1/thumbnails wraps).generatedeprecated
POST /v1/library
Save a layered design onto the item it was made from, or as a new one.library:writedeprecated
POST /v1/renders
A layered design drawn as a file: 3840 × 2160 (or the 1280 × 720 frame) as JPG or PNG.library:readdeprecated
GET /v1/fonts
Every headline face a layered design can name, with the exact fontFamily and fontWeight to put in a text layer.deprecated
GET /v1/youtube
YouTube channels a signed-in person connected in the Studio. Sessions only; a key is refused.Studio sessiondeprecated
GET /v1/youtube/{id}/uploads
A Studio-connected channel's latest uploads, unlisted and private included. Sessions only; a key is refused.Studio sessiondeprecated
DELETE /v1/youtube/{id}
Disconnect a channel connected in the Studio.Studio · owner or admindeprecated

Meta

GET /v1/health
Whether the API is up, and which contract it speaks.
GET /v1/openapi.json
This document.

Routes marked Studio need a signed-in browser session and are not reachable with an API key. The scope beside a route is what a key needs to call it.

What is Studio-only

HitCanvas Studio has a second way of working: AI-plus-text, where the model paints a background composed around a headline the Studio then sets in real type, on its own canvas, with its own fonts, layers, arrows, logos and export. That is a product of the Studio’s typography and canvas, and it is not the API’s. An integration should not have to reproduce a canvas, choose fonts, read clearance measurements, manage layered designs or render a file to get a thumbnail — so the public API does not ask it to. Studio-only: AI-plus-text creation, layered editing, canvas controls, font choice, and the Studio’s render and export.

Compatibility and deprecation

Keys and limits

Open the console