twimco.Let’s talk ↗︎
Menu
Field notes / Product & engineering

Canva's Craft model is in the API now. Build your app around a one-minute wait

Canva opened its new Craft image model to developers on October 22. Jobs take about a minute, use the customer's own AI credits and return a link that expires in a day. Each of those details changes how the feature should feel to users.

Editorial engraving of a print studio where a designer hangs prints while an image renders on a tablet and a developer works beside a small sand timer.

Canva's Connect API added its Craft image model (craft_v1_2k) on October 22, 2026. Canva says to expect roughly 50 to 60 seconds per job and to poll with backoff. Each job uses the user's AI credits, download links expire after 24 hours unless you save to the user's uploads, requests are limited to 20 per minute per user, and the endpoint is a preview API that public apps can't ship with yet. Design for the wait, the credit cost and the fallback before you design the prompt.

What Canva opened up

On October 22, 2026, Canva announced that its new Craft image model is available through the Connect API, the interface that lets other apps work with a user's Canva account. Developers request it with the model name craft_v1_2k on the image generation endpoint. Canva says it produces images up to 2K, handles prompts in any language and can render text in 55 languages.

That's the interesting part for marketing teams. The parts that matter to whoever builds the integration are further down the announcement and in the API reference. They're mostly about time, money and expiry, and each one shapes the product more than the prompt does.

The basics are straightforward. The app needs a user access token with permission to write assets, and the user's account needs the image generation capability. Aspect ratios include square by default, 16:9 and 9:16, 3:2 and 2:3, and 4:5, which covers most social and web layouts.

The wait

Canva says Craft plans an image before it renders it, so jobs take longer than with its other models. Its guidance: expect roughly 50 to 60 seconds end to end, and poll for the result with backoff rather than in a tight loop.

A one-minute job isn't a slow request. It's a different kind of feature. Nobody watches a spinner for a minute without wondering whether something broke. So the interface should tell people what's happening and let them get on with something else. Show that the image is being made, let the user keep editing the rest of the page, and put the result where they'll see it when it arrives, even if they've moved to another screen in the meantime.

On the server side, the job is asynchronous anyway. You start it, get a job ID and check back. Let the first check wait about as long as Canva's estimate suggests, then back off. That keeps you well inside the rate limit of 20 requests per minute for each user of your app, which a loop checking every second would burn through.

How the work moves

One Craft job, start to finish

  1. Start job

    Prompt, idempotency key, user's credits.

  2. Tell the user

    About a minute; let them keep working.

  3. Poll with backoff

    Stay under 20 requests per minute per user.

  4. Save the result

    Copy it or save to uploads; link expires in 24 hours.

  5. Handle failures

    Credits, unsafe input, timeout, model unavailable.

Flow based on Canva's Oct 22, 2026 Connect API announcement and image generation reference; illustrative.
A one-minute job isn't a slow request. It's a different kind of feature.

The money

Starting a job uses the user's own Canva AI credits, the same as Canva's other models. If they've run out, the API returns a 429 error with a code saying so, either credit_quota_exceeded or credit_quota_cooldown.

That has two consequences. First, the user should know before they click that generating an image uses their Canva credits, not yours. Second, the out-of-credits error is a normal outcome, not a crash. It needs a plain message and somewhere useful to go, not a generic "something went wrong". Tell the user their Canva credits have run out, and offer to keep their prompt so they can try again later without retyping it.

Canva also requires an idempotency key on every job and holds it for 24 hours. Use it properly. If a user double-clicks, or your app retries after a network blip, the same key stops the request from starting, and paying for, a second job.

The expiry

When a job finishes, the result comes back with a download link that's valid for 24 hours. Alternatively, you can ask Canva to save the image straight into the user's uploads.

Choose deliberately. If your app stores the link and shows the image from it, every image in your product will break the next day. Either copy the file to your own storage as soon as the job succeeds, or save it to the user's Canva uploads and treat Canva as the source of truth. Don't keep the temporary link.

While you're saving the file, save the prompt and the model that made it alongside it. When someone asks in three months why an image looks the way it does, or wants a variation, that record is the only way to answer.

The fallback

Canva's reference recommends leaving the model parameter out. In that case Canva picks the best available model and falls back to another if one is temporarily unavailable. If you pin Craft by name and it can't serve the job, the job fails with model_not_available, and Canva never substitutes another model.

That's a product decision. If your feature depends on Craft's strengths, like legible text in the image, pin it and handle the failure with a retry or a clear message. If any good image will do, leave the pin off and let Canva handle availability. Either way, the other failure codes in the reference need a plan too: unsafe_input when a prompt is rejected, timeout, model_retired and internal_error.

Decision guide

Pin Craft or let Canva choose?

ConsiderationPin craft_v1_2kOmit the model
WhenYou need Craft's text rendering or style.Any good image will do.
If unavailableJob fails with model_not_available.Canva falls back to another model.
Your workRetry logic and a clear message.Less handling; less control over output.
Decision framework from Canva's model parameter guidance; illustrative.

The status

The image generation endpoint is a preview API. Canva warns there may be breaking changes, and its reference says public apps that use preview APIs won't pass its review process and can't be made available to all Canva users. In practice, that makes it a fit for internal tools and private integrations today, not a feature to promise customers in a public app. Canva also says Craft is coming to its MCP server, which will matter for teams wiring it into AI agents.

If you build with it now, keep all the Canva calls behind one small piece of your own code: start a job, check a job, save a result. When the preview API changes, you fix it in one place instead of in every screen that makes images. The same layer is where the credit messages, retries and fallback rules belong, so the rest of the app never has to know which model made the picture.

If you're building AI image generation into a product and want the waiting, credits and failure states designed properly, that's what our AI applications and agents team does. Talk to us.

Related work: Nine's Style.

twimco.

We build alongside the people doing the work.
Bring us the problem you’re thinking about.

Related work

Spin:Market ↗︎