Pushing content
The three push workflows in the inklet SDK — Auto, Manual, and Hardcode — and what each one decides for you.
inklet.push.* is the high-level entry point: one call that uploads a
Content and immediately starts an Analysis
over it. Each method takes assets, uploads any binaries, retries a failed
upload once, and hands back both objects.
The three methods differ in how much of the decision you keep and whether inklet AI processes the assets.
| Chooses the display | Lays out the content | Plan | Assets | |
|---|---|---|---|---|
push.auto | inklet | inklet AI | Pro | 1–50, any type |
push.manual | You | inklet AI | Pro | 1–50, any type |
push.hardcode | You | You | Free or Pro | exactly 1 PNG or JPEG |
See Plans and AI features for authorization behavior and upgrade handling.
Shared options
push.auto and push.manual accept:
| Option | Type | Notes |
|---|---|---|
assets | InkletAsset[] | At least one. Build them with inklet.assets.*. |
title | string | Optional label. Overrides the title inklet would generate. |
intent | string | Optional sentence of direction for the layout. |
context | "submitted" | "history" | Defaults to submitted. history lets the agent also read the user's earlier Contents. |
idempotencyKey | string | Optional. Generated if omitted, and always returned. |
push.manual additionally requires displayId. push.hardcode takes only
displayId, image, and idempotencyKey — there is nothing for a title or an
intent to steer.
Shared result
All three return the same shape:
Prop
Type
state is the Analysis state, not the Content state.
One idempotency key covers both writes: the Content and the Analysis are created under the same key, in their own namespaces.
A push is two requests that each create something, and neither is retried
automatically. If either fails, the error's idempotencyKey is the key both
used — generated or not — and calling the same push again with it picks up
whatever the first attempt created instead of making it twice. Every push also
takes an optional second argument, { signal, timeoutMs }; see
Timeouts and retries.
What intent is for
intent is a sentence of direction, not a template and not a prompt for prose.
It steers how inklet arranges what you sent:
intent: "Make the key update easy to scan"
intent: "Lead with the number, keep the chart secondary"
intent: "This is a reference sheet — density over drama"It is optional. Without it, inklet infers a layout from the assets themselves.
Assets
Build assets through inklet.assets.* so they are validated in your process,
before a request is made:
inklet.assets.text("Milk, eggs, coffee");
inklet.assets.link("https://example.com/report");
inklet.assets.image({ data, filename: "chart.png", contentType: "image/png" });
inklet.assets.file({ data, filename: "menu.pdf", contentType: "application/pdf" });Limits: 10 MiB per binary asset, 50 assets per Content. See Assets for accepted content types.