Connect an AI assistant
Your own AI assistant can work in your workspace through Pixonaut’s MCP server: it uses the same tools Pixel uses in the studio. Pixonaut only runs the tools; your assistant is the model, and its app decides what to ask you before a change.
Connecting
Section titled “Connecting”Under API Keys, choose Create key and pick the MCP kind. The dialog shows the key once, and the MCP server address:
https://api.pixonaut.app/v1/mcpYour assistant sends the key in the Authorization header as a bearer token,
Authorization: Bearer mcp_live_…. The steps for each assistant are below;
in each, put your own key where the example has mcp_live_….
An MCP key acts as you, the member who created it, with exactly what you may do now: if your role changes or you leave the workspace, the key’s access changes with you. It always expires, on the date you chose when you created it. You can create one only while your workspace has MCP access.
In a sandbox
Section titled “In a sandbox”Create the key from inside your workspace’s sandbox to try an assistant’s
changes there first. The key reads mcp_test_…, acts on the sandbox alone,
never on live, and has the roles you hold live. It stops working when you
leave the team, as a live key does.
Claude Desktop
Section titled “Claude Desktop”Claude Desktop reaches a server that takes a key through mcp-remote, which
needs Node.js installed. In Claude Desktop, open
Settings → Developer → Edit Config, add Pixonaut to
claude_desktop_config.json, and restart Claude Desktop:
{ "mcpServers": { "pixonaut": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.pixonaut.app/v1/mcp", "--header", "Authorization:${PIXONAUT_AUTH}" ], "env": { "PIXONAUT_AUTH": "Bearer mcp_live_…" } } }}The key sits in env rather than in args because some systems split an
argument at its space.
Claude on the web
Section titled “Claude on the web”A custom connector on claude.ai (Settings → Connectors → Add custom connector) signs in with OAuth or without signing in, and cannot send a key. Pixonaut’s MCP server takes a key, so connect from Claude Desktop or Claude Code instead.
Claude Code
Section titled “Claude Code”Add the server from a terminal:
claude mcp add --transport http pixonaut https://api.pixonaut.app/v1/mcp \ --header "Authorization: Bearer mcp_live_…"Add --scope user to have it in every project. claude mcp list shows
whether it connected.
ChatGPT
Section titled “ChatGPT”A custom connector in ChatGPT, made with developer mode on, signs in with OAuth or without signing in, and cannot send a key. Pixonaut’s MCP server takes a key, so ChatGPT cannot connect to it yet; use Codex, OpenAI’s coding agent, instead.
Cursor
Section titled “Cursor”Add Pixonaut to ~/.cursor/mcp.json, or to .cursor/mcp.json in one
project:
{ "mcpServers": { "pixonaut": { "url": "https://api.pixonaut.app/v1/mcp", "headers": { "Authorization": "Bearer mcp_live_…" } } }}It is listed under Cursor Settings → MCP.
VS Code
Section titled “VS Code”Add Pixonaut to .vscode/mcp.json in your project, or run MCP: Open User
Configuration for every project. VS Code asks for the key the first time it
starts the server, and keeps it out of the file:
{ "inputs": [ { "type": "promptString", "id": "pixonaut-key", "description": "Pixonaut MCP key", "password": true } ], "servers": { "pixonaut": { "type": "http", "url": "https://api.pixonaut.app/v1/mcp", "headers": { "Authorization": "Bearer ${input:pixonaut-key}" } } }}Codex reads the key from an environment variable you name. Add Pixonaut to
~/.codex/config.toml:
[mcp_servers.pixonaut]url = "https://api.pixonaut.app/v1/mcp"bearer_token_env_var = "PIXONAUT_MCP_KEY"and set the variable, with the key alone, in the shell you start Codex from:
export PIXONAUT_MCP_KEY=mcp_live_…What it serves
Section titled “What it serves”These are the tools your assistant’s client lists. Each one is marked as a read, a change, or a change to something that already exists, which your client may confirm with you first. Deleting, approving or rejecting a design, making a print, placing an order, submitting one again or changing where it ships, revoking a share link, changing the workspace’s settings and changing a picture cannot be undone, or set off what cannot: the server asks your assistant to check with you before each, as the studio asks you before Pixel does any of them.
A tool that spends credits says so, and what it costs, and asks your assistant
to check with you first, unless you accepted credit costs for the whole
session. upscale_image and remove_background are listed on every plan,
wherever upscaling and background removal are available, and are paid in
credits.
generate_image draws a picture on a transparent background in two steps:
the image model draws the subject on one flat background colour it does not
use, solid and crisp-edged, and the subject is then cut out of it, keeping
the soft edges the cut marks partly see-through. Describe the subject alone
in its prompt; asking the model itself for transparency, which it cannot
draw, is taken out of the prompt.
Content your assistant writes into a template, its text, layer and step
names and labels, belongs in your workspace’s language, which get_settings
and describe_template answer. describe_template also names what each
layer offers your customers: a layer in a form step offers them only the
attributes marked editable, and the artwork’s own settings: its background,
die-cut, fit and alignment. Asked for layers by id, it reads them whole, every
setting an edit can change as the edit writes it, so your assistant changes
what you asked and keeps the rest as it was. A text comes back with its line
breaks, and one cut short says so. create_template answers the new draft’s
issues, the errors and warnings the studio’s builder shows for it, so your
assistant can fix them or ask you about them before it says it is done, and
edit_template answers them for the draft it edited, with the template as
it now reads. One edit carries up to 200 changes, applied together or not at
all. An edit or a showcase (the example values your product images show) is
written to the template’s draft at once, and only if the draft has not
changed since your assistant read it: an edit that names the revision (or,
for a template with no draft, the published version) it was planned against
is refused once the template has moved on.
Your assistant sees what it makes. look_at shows it a template’s draft or
published preview, a design as it prints, or a library picture, and can draw
a template with trial values, a very long name or an empty field, to see how
the template takes them; that drawing is made in memory and saved nowhere.
look_at_mockup shows it a published template or a design on a product
photo, as your store shows it. Each answers with the picture itself, as an
image beside its text, at most 1024 pixels on its long edge, and reads it as
the member who made the key.
Every answer is valid JSON. A list answers a page, says with hasMore
whether more rows follow, and names the page to ask for in next; every list
that pages also takes a pageSize. A page too long to send whole holds fewer
rows, and its next reads on from the last one, so paging from the first
page to the last reaches every row once. Any other answer too long to send
whole is sent shortened, with a truncated note naming each list and text
that was cut, so your assistant can ask for less: a smaller page, a narrower
filter, or the tool that reads that part on its own.
Templates
| Tool | What it does | Kind |
|---|---|---|
list_templates | List the tenant's templates by name, in every status unless narrowed, each published one with previewUrl, its preview's link, open with no key for an hour or two. Search with q. | Reads |
create_template | Create a new template draft: a title, the ratio of the product it is for, and commands (builder commands, all or nothing) that build its content. It holds exactly what the commands add. A picture the user asks for as the background is the artwork's own background, not a layer: an updateArtwork command whose patch is { background: { kind: 'image', imageAssetId: { value: assetId, editable: false } } }. Add other layers only when the user asks for content or leaves the design open; then write their copy in the workspace's language, never the request's words. Name each addLayer id for what it is (background, headline). Write a date or a year in a text as a dynamic value, written out on every read, so it stays right: "Class of {date.year}", never "Class of 2026". The values are {date.year}, {date.nextYear}, {date.month}, {date.academicYear}, {date.dayMonth}, {date.monthYear}, {date.long}, {date.short}, {date.iso}, {date.custom(<pattern>)}; explain_concept says what each writes. A literal { is written {{. Before creating, read the template categories with list_template_categories and put the template in the one whose name fits what it is, by its id in categoryId (a student sign in Student signs); leave categoryId out when none fits. Never create a category for it unless asked. Never publishes. get_settings answers the workspace's language. It answers the draft's issues: fix or ask about each before saying you are done. Place a picture by its assetId. A colour is the CMYK it prints as; one named as a screen colour (RGB or HEX) is given as { rgb: [r, g, b] }, three bytes, and is converted for you the way the press profile prints it. Never work a CMYK out from a screen colour yourself by formula. | Changes |
publish_template | Publish a template's saved draft as its next version, which customers order from while the template is live, until a later publish supersedes it. Read the template with describe_template first and pass its revision as body.expectedRevision; the publish is refused if the draft has changed since. | Changes; confirm first |
start_run | Start a batch run that creates targetCount template drafts from one brief, in the background. Use for more than a couple of designs; follow its progress and the drafts it made with get_run and the runId this answers, or find the run again with list_runs. It spends the workspace's credits: each design is a paid generation, charged what it cost; check_credits with action run and the targetCount estimates the whole run. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
duplicate_template | Duplicate a template as a new template draft, named body.name in the workspace's language. Read it with describe_template first and pass what it answered as body.expect: {kind: revision, value: its revision}, or, for a template with no draft, {kind: publishedVersion, value: its latestVersion from list_templates}; the copy is refused if the template changed since. | Changes |
set_template_live | Show a published template on the storefront (isLive true) or hide it (false). Hiding it stops customers ordering from it; nothing is deleted, and it can be shown again. | Changes; confirm first |
list_template_categories | List the tenant's template categories, by name, with how many templates each holds. With q or page, a page of those whose name holds q. | Reads |
create_template_category | Create a template category, by its name. | Changes |
rename_template_category | Rename a template category, by the id list_template_categories answers. | Changes; confirm first |
delete_template_category | Delete a template category. Its templates are kept, filed in none. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
set_template_category | File a template in a category, by the category's id, or in none with null. | Changes; confirm first |
list_template_tags | List the tags the tenant's templates carry, the most used first, with how many templates carry each. With q or page, a page of those whose name holds q. | Reads |
add_template_tag | Tag a template with one tag. | Changes; confirm first |
remove_template_tag | Take one tag off a template. | Changes; confirm first |
get_template_blank_preview | Read the blank preview a template remembers: the blank, placement and photo the studio previews it on, and the print height, or null when it has none. | Reads |
set_template_blank_preview | Set the blank a template is previewed on in the studio, or forget it with null. Not an edit to the template: no revision is written and nothing it makes changes. | Changes; confirm first |
list_template_revisions | List a template's saved revisions, newest first: who saved each, which is the draft, and what each was published as. Pass nextBefore as before for older ones. | Reads |
restore_template_revision | Make an earlier revision of a template its draft again, as a new revision; published versions stay as they are. Refused if the draft changed since it was read. | Changes; confirm first |
delete_template | Delete a template, by its base id: no new design, proof or share link starts from it. Designs made from it can still be corrected, printed and ordered. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
set_templates_live | Show many published templates on the storefront (isLive true) or hide them (false), as set_template_live does for one. A template never published is skipped. Up to 100 templates in one call; answers how many changed and how many were already as asked (unchanged), and each skipped template's id by reason. A template skipped leaves the others changed; only a request wrong as a whole changes nothing. | Changes; confirm first |
set_templates_category | File many templates in one category, by its id, or in none with null, as set_template_category does for one. An unknown category changes nothing. Up to 100 templates in one call; answers how many changed and how many were already as asked (unchanged), and each skipped template's id by reason. A template skipped leaves the others changed; only a request wrong as a whole changes nothing. | Changes; confirm first |
add_templates_tag | Tag many templates with one tag, as add_template_tag does for one. A template already carrying the most tags it may is skipped; an illegal tag changes nothing. Up to 100 templates in one call; answers how many changed and how many were already as asked (unchanged), and each skipped template's id by reason. A template skipped leaves the others changed; only a request wrong as a whole changes nothing. | Changes; confirm first |
remove_templates_tag | Take one tag off many templates, as remove_template_tag does for one. A template not carrying it is left unchanged; an illegal tag changes nothing. Up to 100 templates in one call; answers how many changed and how many were already as asked (unchanged), and each skipped template's id by reason. A template skipped leaves the others changed; only a request wrong as a whole changes nothing. | Changes; confirm first |
delete_templates | Delete many templates, by base id, as delete_template does for one: no new design, proof or share link starts from any of them. Designs made from them can still be corrected, printed and ordered. One already gone is skipped as notFound. Up to 100 templates in one call; answers how many changed and how many were already as asked (unchanged), and each skipped template's id by reason. A template skipped leaves the others changed; only a request wrong as a whole changes nothing. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
publish_templates | Publish many templates' saved drafts, each as its next version, as publish_template does for one: read each with describe_template first and pass its revision. Up to 10 in one call, each published on its own: answers how many were published, and each refused template's id with why (stale_draft when its draft changed since, no_draft, invalid_template with its reason, and publish_template on it answers its issues in full; one answered publish_failed or not_attempted may be sent again). One refused leaves the others published. | Changes; confirm first |
get_run | Read a batch run's progress: its status, how many of its designs were made or failed, the credits it spent, and drafts, the base ids of the template drafts it made, which describe_template reads. | Reads |
cancel_run | Stop a batch run that is queued or running. The drafts it made are kept unless body.discard is true. | Changes; confirm first |
get_template_shopper_pixel | Read what a template's customers may ask Pixel in its designer: whether they may at all, whether it fills fields, generates pictures or cuts pictures out, and the per-session limits. A template that never set them answers the defaults, off. | Reads |
update_template_shopper_pixel | Set what a template's customers may ask Pixel in its designer, for every version of the template on every designer link and storefront that shows it. Send every field as read, with your changes: the settings are replaced whole. | Changes; confirm first |
test_run_automation | Test-run an automation, or a draft, on one past event (find_automation_test_events): whether it would fire, each condition with the values compared, and each step it would run, wait at or stop at, or why it would be blocked. Nothing is moved, sent or stored. | Reads |
describe_template | Read a template's structure: its ratio, its artwork's fields, its layers (id, type, a short label, group, what it offers and a text's font: family, weight and style, and its words, dynamic values as written) and its groups in the customer form's step order, and which document it describes: the saved draft's revision, or, for a template with no draft, its latest publishedVersion (revision is then null). Read before editing; layerIds reads layers whole. A template's original is in its workspace's language (describe_template's language); it may override, per language (its languages), a text's words, a field's label, help and choices, a group's label, a layer's name, place and size, and whether it prints. Name a language to read the template as it reads there or edit its overrides, as the builder's language switch does; leave it out for the original. A language never adds, removes or reorders layers or groups, nor changes a customer's offer (refused not_in_language). | Reads |
edit_template | Edit a template's draft with builder commands. Every addLayer names its own id. A new layer joins only the group its groupId names, with every property fixed. A layer offering something needs a groupId or a setLayerGroup, or the customer never sees it. It is checked against the saved draft (or the published version) and written to the draft at once, only if that has not changed since: put every change to one template in one call. A failure names the command index and why. Write a date or a year in a text as a dynamic value, written out on every read, so it stays right: "Class of {date.year}", never "Class of 2026". The values are {date.year}, {date.nextYear}, {date.month}, {date.academicYear}, {date.dayMonth}, {date.monthYear}, {date.long}, {date.short}, {date.iso}, {date.custom(<pattern>)}; explain_concept says what each writes. A literal { is written {{. A template's original is in its workspace's language (describe_template's language); it may override, per language (its languages), a text's words, a field's label, help and choices, a group's label, a layer's name, place and size, and whether it prints. Name a language to read the template as it reads there or edit its overrides, as the builder's language switch does; leave it out for the original. A language never adds, removes or reorders layers or groups, nor changes a customer's offer (refused not_in_language). | Changes |
Blanks
| Tool | What it does | Kind |
|---|---|---|
update_blanks | Change many blanks' names or placements, as update_blank does for one, each at the updatedAt get_blank answered. Placements are replaced as a whole list. Up to 10 in one call, one after another, each answered on its own: how many were changed, and each refused one's id with why. One refused leaves the others changed; one changed since it was read is refused stale_update with the updatedAt it has now (currentUpdatedAt), to read again before changing it. | Changes; confirm first |
list_blanks | List the tenant's blanks: the physical products designs are printed on, each with its placements (print areas). | Reads |
get_blank | Read one blank with its placements, including its updatedAt. | Reads |
create_blank | Create a blank: a product with its placements, the areas a design is printed into. | Changes |
update_blank | Change a blank's name or placements. Placements are replaced as a whole list, each view's names in other languages (localizedLabels) with it. | Changes; confirm first |
delete_blank | Delete a blank; restore_blank brings it back. Refused while an order on its way or a live designer link needs it; the refusal names them. | Changes; confirm first |
restore_blank | Restore a deleted blank. Refused when a live blank took its name. | Changes; confirm first |
list_blank_variants | List a blank's variants: each purchasable combination of its options (such as Color and Size) with its ref, whether it is retired, and the views it has a photo in. | Reads |
update_blank_variant | Change one variant of a blank, by its ref from list_blank_variants: relabel its options, replace its printshop attributes, or retire it or put it back on sale. An imported blank's variants change only by resync_blank. | Changes; confirm first |
edit_blank_variants | Change a blank's options and variants in one batch, applied in order, all or none: add options and values (a variant for each new combination), sell combinations, add one variant, retire or put back variants, rename or remove an option or a value, name an option or a value in other languages (set_localized_names), set a value's look and tone (set_appearance), reorder the options. An imported blank's variants change only by resync_blank; its values' looks are set here. | Changes; confirm first |
copy_blank | Copy a blank to a printshop, by the printshop's id as list_printshops returns it: a new blank with the same placements, views, photos and option values, new variant refs, and no retired variants. | Changes |
list_blank_views | List a blank's views of several placements: each a way of photographing the product that shows several print areas at once (a sweater's front and both sleeves), with its regions (rect, mesh, window, mask) and photos, and its updatedAt. A view of one placement is listed under that placement by get_blank. | Reads |
create_blank_view | Add a view of several placements to a blank: two to six regions, each of a different placement, each with its rect on the photo and optionally a mesh, a window in mm (a roll shows a fixed piece of the print at true scale) or a mask picture. Photos may follow once uploaded. | Changes |
update_blank_view | Replace a blank's view of several placements whole: its label, regions and photos. | Changes; confirm first |
delete_blank_view | Delete a blank's view of several placements, with its photos. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_catalogue_product_options | Read a catalogue product's colours (each with its hex code and how many sizes it has) and views, by its productId and the connectionId it is listed through: the colour names add_blank_colours and start_mockup_job take. An imported blank's productId and connectionId are the ones it was imported with. | Reads |
add_blank_colours | Add colours to an imported blank: photos of each named colour are fetched from its printshop and added to the blank's views, a new view where none matches. The answer is the blank, with how many photos were added and any colour the printshop had no photo of. | Changes; confirm first |
list_blank_categories | List the blank categories, by name, with how many blanks each holds and its defaults. With q or page, a page of those whose name holds q. | Reads |
create_blank_category | Create a blank category, by its name. | Changes |
rename_blank_category | Rename a blank category. | Changes; confirm first |
delete_blank_category | Delete a blank category. Its blanks are kept, in no category, and take what they inherited from it from the workspace. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
set_blank_category_defaults | Set a blank category's defaults: the print method, resolution, bleed, safe area and preview looks every blank in it inherits for a field the blank leaves out. They are replaced whole: read them with list_blank_categories and send every one to keep, with the category's updatedAt. | Changes; confirm first |
list_catalogue_products | List a page of a connected printshop's catalogue, by its connectionId: the products it sells that can become blanks, and whether one already has. | Reads |
import_catalogue_blank | Import one catalogue product as a new blank, by its productId and the connectionId it was listed through. The blank is created at once with status importing; a background job then gives it the product's print areas, variants and photos, and it reads ready (or failed) when done. | Changes |
list_blank_drift | Read which of the named imported blanks need attention: what their printshop changed (discontinued, a print area moved, colours or sizes changed) and how serious it is. Only changed ones are answered. | Reads |
check_blank_drift | Check one imported blank against its printshop now, rather than at the next scheduled check. Once a minute at most. | Changes; confirm first |
resync_blank | Re-sync an imported blank's colours and sizes from its printshop: new ones are added without photos, ones no longer sold are retired, ones sold again come back. | Changes; confirm first |
Shapes, inks and palettes
| Tool | What it does | Kind |
|---|---|---|
update_inks | Change many inks, as update_ink does for one: send each whole, its kind included, at the updatedAt get_ink answered. A Colour takes its cmyk or its rgb. Up to 10 in one call, one after another, each answered on its own: how many were changed, and each refused one's id with why. One refused leaves the others changed; one changed since it was read is refused stale_update with the updatedAt it has now (currentUpdatedAt), to read again before changing it. | Changes; confirm first |
update_shapes | Change many shapes' names or outlines, as update_shape does for one, each at the updatedAt get_shape answered. Whether each is a cut shape follows the outline written. Up to 10 in one call, one after another, each answered on its own: how many were changed, and each refused one's id with why. One refused leaves the others changed; one changed since it was read is refused stale_update with the updatedAt it has now (currentUpdatedAt), to read again before changing it. | Changes; confirm first |
list_shapes | List the tenant's shapes: named outlines that a template's die, shape layers and mats refer to by id. Not layers; a shape layer is create_template's commands' addLayer with type shape. | Reads |
get_shape | Read one shape, including its updatedAt. | Reads |
create_shape | Create a shape: a name and its outline, SVG path data in fractions of its box (0 to 1 on both axes, no arcs). A plain rectangle is M 0 0 L 1 0 L 1 1 L 0 1 Z. Every shape is offered as a shape layer's outline and a mat; one whose outline is one closed outline is also a cut shape, offered as the artwork's cut shape (the die), and the answer's cutShape says which. | Changes |
update_shape | Change a shape's name or outline (SVG path data in fractions of its box, as create_shape). Whether it is a cut shape follows the outline written, as on create_shape. | Changes; confirm first |
delete_shape | Delete a shape. Refused while anything still uses it; the refusal names where. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_inks | List the tenant's inks, optionally of one kind. An ink is a Colour (kind process: the CMYK it prints as, four percentages) or a Spot ink (kind spot: the reference a printshop mounts, a CMYK fallback in percent, and an optional screen preview as three bytes). There are no screen-colour inks. | Reads |
get_ink | Read one ink, including its updatedAt. | Reads |
create_ink | Create an ink: its kind, its name, and that kind's fields, as list_inks tells them apart. A spot's reference is what the printshop reads on the job ticket. A Colour named as a screen colour (RGB or HEX) is given as rgb, three bytes, in place of cmyk, and is converted for you the way the press profile prints it; never work a CMYK out from it yourself by formula. | Changes |
update_ink | Change an ink: send it whole, its kind included; the kind may change. A Colour named as a screen colour (RGB or HEX) is given as rgb, three bytes, in place of cmyk, and is converted for you the way the press profile prints it; never work a CMYK out from it yourself by formula. | Changes; confirm first |
delete_ink | Delete an ink. Refused while a template, a published version or a palette still uses it; the refusal names where. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
print_area_shape_from_svg | Read an SVG file as a print area's shape: its largest closed path is the outline, and every closed path inside it a cut-out. The answer's dFrac is the shape in fractions of the file's viewBox, to write as the placement's shape with update_blank. Stores nothing. | Reads |
print_area_shape_from_cut_out | Trace a product's cut-out to a print area's shape: the product's edge is the outline and every transparent gap inside it a cut-out. The cut-out is a library picture with the product on a transparent background, such as remove_background makes. The answer's dFrac is the shape in fractions of the outline's box, and boxPx where that box lies on the picture. Stores nothing and costs nothing. | Reads |
shape_outline_from_svg | Read an SVG file as one shape's outline: the answer's dFrac is the outline in fractions of the file's viewBox, to write with create_shape or update_shape, and whether it is a cut shape. Refused for a file of more than one outline. Stores nothing. | Reads |
list_shape_categories | List the shape categories, by name, with how many shapes each holds. With q or page, a page of those whose name holds q. | Reads |
create_shape_category | Create a shape category, by its name. | Changes |
rename_shape_category | Rename a shape category. | Changes; confirm first |
delete_shape_category | Delete a shape category. Its shapes are kept, in no category. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_palettes | List the tenant's palettes: named sets of colours a template offers its customers to choose from. Search with q. | Reads |
get_palette | Read one palette with its colours, how many templates use it, and its updatedAt. | Reads |
create_palette | Create a palette: a name and its colours. Each entry is a named colour; keep an entry's id when changing it, since templates link entries by id. A colour is the CMYK it prints as; one named as a screen colour (RGB or HEX) is given as { rgb: [r, g, b] }, three bytes, and is converted for you the way the press profile prints it. Never work a CMYK out from a screen colour yourself by formula. | Changes |
update_palette | Change a palette's name or colours, sending the colours as a whole list. Each entry is a named colour; keep an entry's id when changing it, since templates link entries by id. A colour is the CMYK it prints as; one named as a screen colour (RGB or HEX) is given as { rgb: [r, g, b] }, three bytes, and is converted for you the way the press profile prints it. Never work a CMYK out from a screen colour yourself by formula. Once templates use the palette, body.uses says what happens to them: update (they follow the change) or unlink (they keep the colours they had); get_palette says whether any does, and the refusal names the choices left. | Changes; confirm first |
delete_palette | Delete a palette. Refused while a template's draft still uses it; the refusal says how many. A published version keeps the colours it was published with and does not hold the delete. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
find_round_shapes | Find the round shapes in a library picture, such as a photo frame, a badge or a ring, read from its pixels, the largest first: each one's centre and radius as fractions of the picture. Give ratio, the template's as w:h, to have each placed on that template with the picture as its background: onArtwork.box is the square round the shape, as fractions of the plate. Text that follows a shape is a text layer at box's x and y with sizeFrac box's w and h (grown evenly for a gap) and textPath { type: 'arc', centerDeg, sweepDeg, side }: outside at centerDeg 0 runs over its top, inside at 180 under its bottom. | Reads |
Pictures
| Tool | What it does | Kind |
|---|---|---|
delete_assets | Delete many pictures from the asset library, or customers' design uploads, by id, as delete_asset does for one. Each is refused as delete_asset refuses it, while a template, a blank's photo or the workspace's logo still uses it, and a design upload an order holds. Up to 100 in one call, each answered on its own: how many were done, and each refused one's id with why. One refused leaves the others done. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
retain_assets | Keep many customers' design uploads, by id, past the workspace's retention for uploads nothing holds. An upload a design names stays as long as that design does: once the design is rejected or deleted, retention applies to it again. A library picture is always kept and answers not_found, as does an id no upload has. Up to 100 in one call, each answered on its own: how many were done, and each refused one's id with why. One refused leaves the others done. | Changes; confirm first |
update_assets | Change many library pictures' names, visibility, categories or tags, as update_asset does for one, each at the updatedAt list_assets answered. Up to 10 in one call, one after another, each answered on its own: how many were changed, and each refused one's id with why. One refused leaves the others changed; one changed since it was read is refused stale_update with the updatedAt it has now (currentUpdatedAt), to read again before changing it. | Changes; confirm first |
list_assets | List the tenant's asset library: uploaded and generated pictures, by name, each with pictureUrl, a link to it that opens with no key for an hour or two. Search with q. | Reads |
delete_asset | Delete a picture from the asset library, by the id list_assets answers. Refused while a template, a blank's photo or the workspace's logo still uses it; the refusal names where. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
upload_asset | Save a picture to the asset library from a public URL, or as its bytes in base64 (a small one only; a larger one by URL), with a name, tags and a category (an id from list_asset_categories). It is checked as an upload is: an image the library takes, within the size limits and the workspace's storage. Once saved it is an ordinary library asset, placed by the assetId this answers. | Changes |
start_asset_upload | Start uploading a file to the asset library by its bytes, for a picture larger than upload_asset takes as data (655360 bytes) that has no public URL. Give its type, its exact size in bytes and a name: this answers the new picture's assetId and an uploadUrl. Send the file's raw bytes, exactly sizeBytes of them, as the body of an HTTP PUT to uploadUrl, with no key or other credential: the address is the credential, good once and for 10 minutes. Use your own HTTP or shell tool for the PUT, e.g. curl -X PUT --data-binary @file.png "<uploadUrl>". The PUT answers the stored picture, or why it was refused (its type, size, pixels or the workspace's storage). Once it is stored it is an ordinary library asset, placed by its assetId; set its tags and category with update_asset. | Changes |
generate_image | Generate new pictures from descriptions; they are added to the tenant's asset library and placed nowhere. Place one by its assetId with builder commands: edit_template's on an existing template, or create_template's for a new one; as a template's background it is the artwork's background imageAssetId (updateArtwork), not a layer. Ask for every picture the request wants in one call, one entry each in pictures: they are drawn at the same time, and each lands in the library as it is done. Write each prompt as a full description of the picture. Set lettering to true only when legible text must appear inside the picture itself (a sign, a label); otherwise leave text to a text layer. Pick the aspectRatio of the box it will fill. Pick background: transparent for a subject that goes on a product on its own, and whenever the author asks for the picture transparent or without its background; otherwise scene when the prompt places it in a setting or it fills a template's background. A transparent picture is drawn on a flat background of its own and then cut out, so its prompt describes the subject alone, solid and crisp-edged, and never asks for transparency or for a see-through part. When the request points at pictures (ones the author attached, or library pictures) or asks to match their style or subject, name them in that picture's references, by their up_ asset id or pxu_ upload id: the model is shown them; otherwise leave references out. The answer lists each picture in the order asked: its assetId, or the error it failed with. If a picture says letteringUnreliable, tell the user the text in it may be wrong. It spends the workspace's credits: each picture is charged what drawing it cost, which check_credits with action picture estimates beforehand; a picture that fails costs nothing. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
generate_layer_image | Generate a square picture from a description straight onto a template's saved draft: it is added to the asset library and placed on a new image layer filling the layer's box, in one step. The answer names the picture's assetId and the new layerId; move or size the layer with edit_template. For a picture of another shape, or several at once, use generate_image and place it. It spends the workspace's credits: each picture is charged what drawing it cost, which check_credits with action picture estimates beforehand; a picture that fails costs nothing. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
upscale_image | Make a larger copy of a library picture, so it prints sharp at a larger size: a faithful upscale that adds no detail of its own, saved as a new picture in the library. It runs in the background: the answer only says it started, and the new picture appears in the library once it is done, a minute or more later, so tell your user to find it there. The original is kept, and nothing is placed. widthPx is the new width; the height follows the picture's ratio. At most 4 times the picture's width and 12000 px on either edge; a refusal names the largest width allowed. It spends the workspace's credits: one credit per megapixel the upscale outputs, rounded up; check_credits with action upscale answers its exact price. When the credits are short, say how many it needs. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
remove_background | Cut a library picture's subject out of its background: a new picture in the library, a PNG of the subject on a transparent background, for a picture that goes on a product as a lone subject. Only a JPEG or PNG picture can be cut out, not a vector graphic or a PDF; a picture larger than 4096 px on its longest edge is cut out at that size. It runs in the background: the answer only says it started, and the new picture appears in the library once it is done, named after the original with "(cut-out)", so tell your user to find it there. The original is kept, and nothing is placed. It spends the workspace's credits: a credit per megapixel of the picture as it is cut out, rounded up, and never less than five; check_credits with action cutout answers its exact price. A cut-out that fails costs nothing. When the credits are short, say how many it needs. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
update_asset | Change a library picture's name, visibility (public pictures can be offered to customers), category (an id from list_asset_categories, or null) or tags. Tags are sent as the whole list: add to or remove from the list list_assets answered. | Changes; confirm first |
list_asset_categories | List the asset library's categories, by name, with how many pictures each holds. With q or page, a page of those whose name holds q. | Reads |
create_asset_category | Create an asset library category, by its name. | Changes |
rename_asset_category | Rename an asset library category, by the id list_asset_categories answers. | Changes; confirm first |
delete_asset_category | Delete an asset library category. Its pictures are kept, in no category. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_asset_tags | List the tags the asset library's pictures carry, the most used first, each with how many pictures carry it: with neither q nor page, every tag; with q or page, a page of the tags that hold q, and how many tags match in all. | Reads |
Designs, prints and orders
| Tool | What it does | Kind |
|---|---|---|
approve_designs | Approve many committed designs so they can be printed, as approve_design does for one: read each with get_design first and pass its revision. Pass body.afterDays to approve each after that many days instead of now. Up to 100 in one call, each answered on its own: how many were done, and each refused one's id with why. One refused leaves the others done. A refused design is not_found, not_committed (decided already, or never committed) or revision_changed (with the revision it has now). | Changes; confirm first |
reject_designs | Reject many committed designs, as reject_design does for one: none will be printed, and none can be approved afterwards. Read each with get_design first and pass its revision; body.reason, when given, is kept on each. Up to 100 in one call, each answered on its own: how many were done, and each refused one's id with why. One refused leaves the others done. A refused design is not_found, not_committed or revision_changed. | Changes; confirm first |
list_designs | List the tenant's designs, newest first: what customers committed from its templates. A committed design waits for a decision; approved and rejected ones are decided. Narrow with status. | Reads |
get_design | Read one design: its template, status, revision and dates; changeRequest, what its customer asked to change, and rejection_reason; choices, what each field of correctionForm holds now; the blank, placement and variant_row it was made for; canDecide, whether this user may approve or reject it; and pictureUrl, a link to a picture of its current revision that opens with no key for an hour or two, to show the user. | Reads |
approve_design | Approve a committed design so it can be printed. Read it with get_design first and pass its revision as body.expectedRevision; the approval is refused if the design was corrected since. Pass body.afterDays to approve after that many days instead of now. | Changes; confirm first |
reject_design | Reject a committed design: it will not be printed, and cannot be approved afterwards. | Changes; confirm first |
list_prints | List the tenant's prints, newest first: the print files made from approved designs. Narrow with status, or to one design with designId. | Reads |
get_print | Read one print: its design, status and dates, and fileUrl, a link to its file that opens with no key for an hour or two, to show the user or hand to a printshop. | Reads |
list_orders | List the tenant's orders, newest first: prints submitted to its printshop, each with its status and, when it failed, lastError. Narrow to one print with printId; total is then how many orders that print has. Who an order is for and where it ships are not shown, only whether it names them. | Reads |
get_order | Read one order with its history. Why it failed is in lastError and the history's reasons; retryable says whether it can be submitted again, and canRetry whether this user may. | Reads |
retry_order | Submit a failed order again: this places a new order with the printshop, which is paid for. Only a failed order that get_order calls retryable can be. | Changes; confirm first |
update_order_delivery | Give an order that was sent who it is for and where it ships: one placed without them, or one whose customer moved. body.recipient and body.shippingAddress replace what it had. Its printshop is told, and the answer's delivery.state says what it made of it: accepted, refused (the order keeps the address the printshop has), sending while it is being told, or carried. Refused when the order has shipped, failed or been cancelled, when its printshop is already making it, or when its printshop takes no address changes. | Changes; confirm first |
delete_design | Delete a design, by its id. Refused once it is approved or printed. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
edit_design | Correct a committed design's text, as a member corrects a customer's typo: body.values is keyed by the ids of get_design's correctionForm, whose choices say what each field holds now, and anything not named stays as it was. Only a design get_design calls canEdit can be. Read it first and pass its revision as body.expectedRevision; the correction is refused if the design changed since. A design that was printed is printed again once approved. | Changes; confirm first |
duplicate_design | Duplicate a design as a new committed design with the same text, for one that can no longer be corrected (it was ordered). | Changes |
list_design_revisions | List a design's revisions, newest first: revision 1 is what the customer committed, each correction or restore added the next, and printed says whether a print rendered it. Pass nextBefore as before to read older ones. | Reads |
restore_design_revision | Restore an earlier revision of a design, by its number as body.revision: its text becomes the design's again, as a new revision. Pass the design's current revision as body.expectedRevision; the restore is refused if the design changed since. | Changes; confirm first |
create_print | Make the print files for an approved design, by the design's id. Read it with get_design first and pass its hasPrint as body.expectedHasPrint; the print is refused if the design was printed since. The print is answered while it renders, status created: read it with get_print until it is completed before ordering it. | Changes; confirm first |
retry_print | Render a failed print again, by the print's id: the same print, under the same id, from the design revision it was made from. It is answered while it renders, status created: read it with get_print until it is completed. Only a print whose status is failed can be; refused once its design's personal data was erased or its files were deleted. Nothing is counted. | Changes; confirm first |
place_order | Order a completed print from the printshop, by the print's id: a paid order. Read the print's orders first with list_orders and its printId, and pass their total as body.expectedOrderCount; the order is refused if the print was ordered since, so the same order is never placed twice. Each field of body says what it does. | Changes; confirm first |
create_order | Order one item from the printshop: a paid order of body.prints, the prints of one item (a front and a back of one shirt), or of body.designs, approved designs the order prints first. Each must be on the same blank, in a placement of its own. A design with a live order is refused, so one is not ordered twice by mistake; a standing design is ordered on every sale. For a single print, place_order is the simpler call. Each field of body says what it does. | Changes; confirm first |
update_order_status | Set an order's status by hand, by its id, as a member does in the studio: settle an order whose outcome is unknown (status outcome_unknown) once its printshop was asked, as failed when the printshop does not have it, or as submitted, with its externalOrderRef, when it does, giving a reason either way. In a sandbox, also move an order forward: printed, shipped (with tracking) or failed (with a reason). An order never moves back, and every other move is refused, with the reason. | Changes; confirm first |
delete_print_files | Delete a print's files and previews, by the print's id, to free the workspace's storage. The print stays as the record of what was made, with nothing to hand out, and can never be ordered again. Refused while it renders, or while an order that has not shipped, failed or been cancelled holds it. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
request_design_changes | Ask for changes to a committed design, for its customer, beside approve_design and reject_design: body.message says what should change, in the customer's words, and the design stays waiting for a decision. A later request replaces it. Read the design with get_design first and pass its revision as body.expectedRevision; the request is refused if the design was corrected since. | Changes; confirm first |
set_design_delivery | Give who a design's first order is for and where it ships, by the design's id, as its customer does on the address capture page: body.recipient and body.shippingAddress replace any given before. Once the design is ordered, it changes its open order's address when that order's printshop takes address changes, and the answer's orderId and delivery.state say what came of it. Refused once the design was rejected or its personal data erased. | Changes; confirm first |
clear_design_delivery | Erase who a design's first order is for and where it ships, by the design's id, on its customer's request. Once the design is ordered, the order holds them, and the order's own erasure applies. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
set_design_external_ref | Replace a design's external reference, by its id: the store's own reference it was committed with, such as moving it from a cart line to the order line that bought it. null clears it. Nothing else about the design changes. | Changes; confirm first |
report_order_job | Report how an order's job stands, by its id, as its printshop does on its order page: printed, shipped (with tracking) or failed (with a reason; a reason goes with failed only). For an order to a printshop a person works, one that takes its orders as steps, such as the workspace's own; an order to a printshop whose system reports on it is refused. An order moves forward only, and never out of an unknown outcome, which update_order_status settles. | Changes; confirm first |
set_store_print_file_form | Choose the form print files of designs a connected store sends are made in, and how far their live text may lie from its outline, unless their template chooses otherwise. null follows the workspace's setting. | Changes; confirm first |
Printshops
| Tool | What it does | Kind |
|---|---|---|
list_printshops | List the printshops the tenant is connected to: each connection's id, name, adapter (which printshop it is), whether it is active and whether it is the default printshop. | Reads |
list_machine_profiles | List one printshop connection's machine profiles: the cutting and printing setups its machines offer, which blanks name. | Reads |
update_machine_profiles | Change a printshop connection's machine profiles: how each machine is handed its files, such as its file format (PDF, PNG or TIFF) and, for a repeating print on a raster machine, its repeat output (one raster or strips). Send the whole list as read, with your changes. | Changes; confirm first |
Your workspace
| Tool | What it does | Kind |
|---|---|---|
set_fonts_active | Turn many font families on (active true) or off (false) for new text, by the ids list_fonts answers, as update_font does for one. All or nothing: one transaction answers how many changed and how many were already as asked. The default family is never turned off; keptOn names it when the call named it. Up to 100 families in one call. | Changes; confirm first |
set_fonts_favourite | Mark many font families as favourites (favourite true), listed first in font pickers, or unmark them (false), by the ids list_fonts answers, as update_font does for one. All or nothing: one transaction answers how many changed, how many were already as asked, and how many were off and turned on, since a favourite is always on. Up to 100 families in one call. | Changes; confirm first |
revoke_share_links | Revoke many share links, by the ids list_share_links answers, as revoke_share_link does for one: the page each opens stops working for whoever holds it. Answers how many were withdrawn, and each id no working link holds (unknown, or withdrawn already). Up to 100 in one call; one not found leaves the others withdrawn. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
upload_output_profile | Upload a CMYK output (printer) ICC profile the workspace holds the licence for, by a public URL or as its bytes in base64 (a small one only), with its file name, which it is named by less its .icc. A machine profile can then convert through it (update_machine_profiles). The tables a screen previews its colours through are made after the answer; list_output_profiles says when they are ready. | Changes |
get_workspace_health | Read what the studio is warning the tenant about (for example no printshop connected, or failed orders) and its latest notifications. | Reads |
list_notifications | Read your notifications, newest first: those addressed to you, and those addressed to the workspace about what you may read. Each says whether you have seen it and who handled it. Pass nextCursor as before to read older ones. | Reads |
mark_notifications_handled | Mark every notification you may see handled, for everyone, up to and including those created at body.upTo: the createdAt of the newest one list_notifications showed you that should go. One somebody handled already keeps who handled it. Answers the ids this handled; a member can mark each one unhandled again in the studio. | Changes; confirm first |
get_storage | Read the tenant's storage: bytes its files use against its quota and how many there are, in all and by category (library pictures, customer uploads, blank photos, the sandbox), the categories adding up to the total. | Reads |
get_settings | Read the workspace's settings: its name, its language, default printshop, logo, accent colour, what a new spot ink does where no plate can be made, the default bleed and safe area in mm, and the form of print files (printFileForm) and their text tolerance (printFileTextTolerance), each of which a store or a template may override. | Reads |
update_settings | Change the workspace's settings, as get_settings reads them. Send only what changes. | Changes; confirm first |
list_saved_addresses | List the workspace's saved addresses, such as its office or its warehouse, by name: each one's id, name and address. update_settings' deliverOrdersTo and place_order's shipToAddressId name one by id. | Reads |
create_saved_address | Save an address in the workspace: a name, unique in the workspace case aside, and the address. | Changes |
update_saved_address | Rename a saved address, change where it is, or both. Orders already placed to it keep the address they were placed with. Send only what changes. | Changes; confirm first |
delete_saved_address | Remove a saved address. Refused while update_settings' deliverOrdersTo names it. Orders placed to it keep the address they were placed with. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
get_upload_retention | Read how long a customer's upload that nothing holds is kept, in hours. Only Pixonaut changes it. | Reads |
get_proof_settings | Read the workspace's proof settings: whether a new proof carries a watermark, what it says, and its size, opacity and density. | Reads |
update_proof_settings | Turn the watermark on new proofs on or off, or change what it says (null for the brand's name), its size, opacity or density. A watermark never reaches a print file. Send only what changes. | Changes; confirm first |
list_fonts | List the font families the workspace can use, by name, fifty a page: which are on, which are favourites and which is the default. Search with q; narrow with category or state. | Reads |
update_font | Change a font family, by the id list_fonts answers: turn it on or off for new text (active), list it first in font pickers (favourite), or make it the default for new text (default). The default, and the last family that is on, cannot be turned off. Send only what changes. | Changes; confirm first |
inspect_font_files | Read what a font family's files hold before uploading them with upload_font: per file in their order, how many styles it holds and, for a variable font, the styles it names, each by its index and marked when upload_font, given no instances for that file, would cut it. Each file by a public URL or as its bytes in base64 (a small one only). Nothing is kept. | Reads |
upload_font | Upload a font family the workspace holds a licence for: one file per style (TrueType, OpenType, WOFF, WOFF2, a collection or a variable font), each by a public URL or as its bytes in base64 (a small one only), with its licence file if there is one and a category. Read a variable font with inspect_font_files first and choose its styles in instances. confirmRights must be true: ask your user to confirm the workspace holds the rights to use the font in its templates, its designer and its print files, and never set it without their confirmation. The family is prepared after the answer, and list_fonts lists it once it can be used. | Changes |
delete_font | Delete a font family the workspace uploaded, by the id list_fonts answers, with its licence file. Refused while anything was made with it: a draft sets text in it or offers it, a published version froze it or keeps it as its fallback, or it is the default. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
get_shopper_pixel_settings | Read whether a shop's customers may ask Pixel at all in the workspace, the most credits they may spend in a calendar month, and what they spent this month. | Reads |
update_shopper_pixel_settings | Turn customers' Pixel on or off for the whole workspace, or set the most credits it may spend in a calendar month (null for no ceiling beyond the workspace's credits). Off, no template's customers may ask Pixel, whatever the template says. Send every field as read, with your changes: the settings are replaced whole. | Changes; confirm first |
list_share_links | List the share links the workspace has handed out, newest first: each opens one hosted page (a designer, a proof, an order's status) about one subject, until it expires or is revoked. mayDecide says whether a proof page's visitor may approve. | Reads |
update_share_link | Change a working share link, by the id list_share_links answers: rename it (null removes the name), or, on a designer link, change its design limit, how many days it works from now, or the language its page is shown in (null for each removes it). The link keeps its address, so whoever holds it opens the changed link. A name another working link holds is refused. | Changes; confirm first |
revoke_share_link | Revoke a share link, by the id list_share_links answers: the page it opens stops working for whoever holds it. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_audit_log | Read the workspace's audit log, newest first: who changed settings, connected a printshop, decided or edited a design, placed an order, handed out a share link or changed a font. Entries about members, roles, API keys and webhooks are not shown. Pass nextCursor as before to read older entries. | Reads |
check_credits | Read the workspace's available credits and, given an action, what it would cost: an upscale's, cut-out's, mask's or depth map's price, or an estimate for a batch run or pictures, since a picture is charged what it cost once drawn. Nothing is spent. A refusal in the answer is what the action itself would answer. | Reads |
get_credit_confirmation | Read "Confirm before spending credits" for the member this key acts as: whether Pixonaut's studio asks them before generating, upscaling or cutting out a picture or starting a batch run. On unless they turned it off. Over this connection, ask your user before spending credits either way. | Reads |
update_credit_confirmation | Turn "Confirm before spending credits" on or off for the member this key acts as, and no one else, when your user asks: it decides whether Pixonaut's studio asks them before spending credits. | Changes; confirm first |
update_automation_settings | Change the workspace's automation settings: the spend ceiling every automation together stays under per rolling 24 hours, and whether a message is sent once per chain. Send only what changes. A higher ceiling lets automations spend more before a member is asked. Ask your user before calling. | Changes; confirm first |
Everything else
| Tool | What it does | Kind |
|---|---|---|
list_runs | List the workspace's batch runs, newest first: each one's runId, brief, status and how many drafts it made or failed. Use to find a run whose id was lost. | Reads |
list_stock_views | List the stock views Pixonaut ships for a product with no photo of its own: a rolled roll and a flat sheet of paper, a sweater and a hoodie laid flat, each with its regions by key. | Reads |
copy_stock_view | Copy a stock view onto a blank as a view of its own, mapping each region to one of the blank's placements; a region left out is not copied. One region lands as a view of its placement, several as a view of several placements. | Changes |
list_mockup_styles | List the model and lifestyle photo styles an imported blank's placement can be photographed in, read live from its printshop: each style's key and the label its view takes. | Reads |
start_mockup_job | Make model and lifestyle photos of an imported blank's placement: each style becomes a new view of the placement, and each colour a photo in it. It runs in the background within the printshop's request limit and costs no credits; the answer is the job, with its id, which get_mockup_job reads until its status is finished. Refused while a job of the placement is still running. | Changes |
get_mockup_job | Read a model and lifestyle photo job: running or finished, how many photos it makes and has made, how long it is waiting on the printshop's limit, and each photo that failed, with whether a retry could make it. | Reads |
retry_mockup_job | Ask again for the photos a finished job failed to make that a retry could make, and only those. Refused while the job is still running, or when nothing in it can be retried. | Changes; confirm first |
list_panel_layouts | List a blank's panel layouts: each record's canvas and windows (a piece of a placement's print, placed by its centre in mm) at the size it is drawn at, whether it is the layout's reference, and its updatedAt. | Reads |
get_panel_layout | Read one layout record, or the layout at one variant's size: drawn by hand there, or its reference scaled (scaled says which). | Reads |
create_panel_layout | Draw a panel layout on a blank by hand: its canvas and windows at one size, as its reference, or a record of an existing layout at another size (reference false, the layout's name). apply_layout_preset lays one out by panel instead. | Changes |
update_panel_layout | Replace a layout record whole: its canvas, size and windows. A new name renames every record of the layout. | Changes; confirm first |
delete_panel_layout | Delete a layout record: the reference takes every record of its layout with it, a size drawn by hand goes back to the reference scaled. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_layout_presets | List the layout presets a blank is offered, each by source and id: layouts drawn by panel (a hoodie's front, back, sleeves and hood halves), its printshop's first, then Pixonaut's. | Reads |
apply_layout_preset | Lay a blank's panels out by a preset at one size and save it as a new layout's reference: each slot's placement's print area edge to edge, every other size reading it scaled. A slot takes the placement its name matches unless mapping names another, or null to leave it out. | Changes |
mask_picture | Mask the regions inside a box on a library picture, such as the product in a blank view's photo: a new library picture of the same size, white inside the regions and black outside. The box is in the picture's pixels from its top left corner (list_assets answers its widthPx and heightPx); a region is kept when nearly all of it is inside the box. It runs in the background: the answer comes at once with the segmentation's id, and get_segmentation says when it is done and the new picture's assetId. The original is kept, and nothing is placed. A box that holds no region fails, as nothing_in_box. It spends the workspace's credits: a credit per megapixel of the picture as it is sent, rounded up, and never less than 7; check_credits with action mask answers its exact price. One that fails costs nothing. When the credits are short, say how many it needs. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
estimate_depth | Estimate how near each part of a library picture is, such as a garment's folds in a blank view's photo: a new library picture, grey, nearer lighter, which a view's warp bends over. It runs in the background: the answer comes at once with the segmentation's id, and get_segmentation says when it is done and the new picture's assetId. The original is kept, and nothing is placed. It spends the workspace's credits: a credit per megapixel of the picture as it is sent, rounded up, and never less than 5; check_credits with action depth answers its exact price. One that fails costs nothing. When the credits are short, say how many it needs. Ask your user to confirm before calling it, unless they already accepted credit costs for this session. | Changes; confirm first |
get_segmentation | Read how a cut-out, a mask or a depth map stands: running, done with the new picture's assetId, or failed with why. | Reads |
list_printshop_positions | List the positions a printshop connection prints at: the names the printshop knows each place by (front, sleeve…), each with its placement field values, and the placements printed as it, by blank. | Reads |
update_printshop_positions | Replace a printshop connection's positions: send the whole list as read, with your changes, and the revision it was read at; refused if the list changed since. A position sent with renamedFrom takes the placements printed as its old name along; one left out while placements print as it is refused. A printshop that publishes its positions in its catalogue keeps none here. | Changes; confirm first |
list_printshop_categories | Read a printshop connection's own category tree, which update_category_mapping maps onto the workspace's blank categories. When the printshop cannot be read the answer says why. Only a printshop that publishes categories has them. | Reads |
get_category_mapping | Read how a printshop connection's categories map onto the workspace's blank categories: each mapped category's target (a blank category, none, or its parent's), and how many imported blanks in no category apply_category_mapping would place now. | Reads |
update_category_mapping | Change part of a printshop connection's category mapping: the entries in set replace their category's saved one, the categories in remove go back to following their parent, and every other entry stays as saved. It applies to the next import; apply_category_mapping places blanks already imported. | Changes; confirm first |
apply_category_mapping | Use a printshop connection's saved category mapping on the blanks imported through it that are in no category, placing each where the mapping now puts it. A blank already in a category, or one the mapping places nowhere, is left alone. Answers how many were placed. | Changes; confirm first |
reconnect_printshop | Take a disconnected printshop connection back into use under its own id, with the credential it keeps, so the blanks, designs and orders that name it work again. Checked as a connect is; a printshop whose credential has to change is reconnected in the studio. | Changes; confirm first |
list_output_profiles | List the ICC output profiles the workspace uploaded, by name: each one's id, size, and whether the tables a screen previews its colours through are ready. A machine profile converts through one (update_machine_profiles). | Reads |
delete_output_profile | Delete an uploaded output profile. Refused while a machine converts through it: the refusal names the machines, to move to another profile first. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_brands | List the workspace's brands, the default first: each one's id, name, logo, accent colour and background colour, each with the ink it follows if any, and whether it is the default. A hosted page (a proof page, a designer or correction link) is drawn in a brand. | Reads |
create_brand | Add a brand to the workspace: a name, unique in the workspace case aside, and optionally a logo (a finished library image's id), an accent and a background colour, each as a colour or an ink it follows. It is not the default until set_default_brand makes it one. | Changes |
update_brand | Change a brand's name, logo, accent or background colour. Send only what changes; null clears one. Pages already handed out in the brand are drawn in its new look. | Changes; confirm first |
set_default_brand | Make a brand the workspace's default: the one hosted pages are drawn in when nothing names another. The default before stays a brand. | Changes; confirm first |
delete_brand | Delete a brand. Refused for the default brand (make another the default first), and while a connected store, or a share link that still opens, is drawn in it: the refusal names each store and the newest such links. A store or link following the default never holds a brand. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_store_connections | List the stores connected to the workspace, newest first: each one's id, kind (client), name, site address, the brand its hosted pages are drawn in (brandId, null for the default), and whether its address answered when it connected. | Reads |
set_store_brand | Choose the brand a connected store's hosted pages are drawn in: the proof pages, correction links and designer links its key creates from then on. null draws them in the workspace's default brand. | Changes; confirm first |
disconnect_store | Disconnect a store: revokes the keys and the webhook endpoint it was given when it connected, so it stops reaching the workspace until someone connects it again from the store. Say which store first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_custom_domains | List the workspace's own domains for its share links: each one's id, hostname, status (checking, verified, broken or failed), the DNS records the domain's owner must create and which are still missing, the connected store whose links use it, and whether it is the default. | Reads |
add_custom_domain | Add a subdomain such as `design.shop.com` for the workspace's share links. It answers the CNAME and TXT records the domain's owner must create at their registrar; the domain is then checked in the background for up to 24 hours. The plan includes a number of domains; past them it is refused, since one more is bought on the workspace's subscription, which an administrator does on the studio's Domains page. | Changes; confirm first |
update_custom_domain | Tie a domain to a connected store, so that store's share links open on it (null unties it), or make it the default every other share link opens on. A store has one domain at most; a link keeps the domain it was made on. | Changes; confirm first |
check_custom_domain | Check a domain's DNS records and certificate now, once its owner has created the records list_custom_domains names: one checking or broken is checked at once, one that failed is checked for another 24 hours, and a verified one is answered as it is. | Changes; confirm first |
delete_custom_domain | Remove a domain from the workspace. It stops at once: share links made on it open on the studio's own address. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
list_jobs | List the workspace's background jobs, newest first, of the kinds you may read (a print's render needs prints read): each job's kind, what it works on (subjectId), state, attempts, next run and lastError, the code it last failed with. retryable says whether you may retry it now. Narrow with kind (one of kinds, which the answer lists) or state. | Reads |
retry_job | Retry a background job, by its id: one waiting for a later run runs now, and a failed one of a kind that can run again is queued again. Only a job list_jobs calls retryable can be; refused while it runs. | Changes; confirm first |
find_usage | Read where a picture, ink, palette, shape, font family or blank is used: the templates (drafts and versions) and, for each kind, what else holds it. Read before deleting one. | Reads |
explain_concept | Answer what something in Pixonaut is or how it works (a variant on a blank, a share link) from its documentation, with the glossary for depth. Answer in the documentation's words: the glossary is the team's own vocabulary, never the product's copy. On known: false, say you don't know rather than guess. | Reads |
list_automations | List the workspace's automations: each one's trigger, whether it is enabled, how it stands, and its firings' counts. Search with q. | Reads |
get_automation | Read one automation whole: its trigger, the sources it acts on, steps with their settings, who it runs as, its spend limit, how it stands, and its updatedAt. | Reads |
list_automation_firings | List an automation's firings, newest first: what each acted on, the step it got to and why it stopped. Filter by status, or by a design, print file or order id with q. | Reads |
get_automation_firing | Read one firing: the event that set it off, the chain it is in, and each step of its version with its state and reason. | Reads |
list_automation_recipes | List the recipes an automation starts from: each one's name, what it does, what making one asks for, and whether the workspace can use it now, with why not. | Reads |
find_automation_test_events | Find the past events an automation, or a draft, can be test-run on: the newest 20 of its trigger in its sources. Nothing is run. | Reads |
create_automation_from_recipe | Make an automation from a recipe (list_automation_recipes), with a name and what the recipe needs. It is made disabled and does nothing until a member enables it. | Changes |
create_automation | Make an automation from nothing: a name, the event it fires on, and its steps; it acts on designs from every source unless an only_if on origin narrows it. It is made disabled and does nothing until a member enables it. Read an existing automation (get_automation) or a recipe's for the step types and their settings; a draft the check refuses is answered with each refusal. | Changes |
save_automation | Save a disabled automation's whole draft as its next version. Refused for an enabled one: change that with update_automation. Read an existing automation (get_automation) or a recipe's for the step types and their settings; a draft the check refuses is answered with each refusal. | Changes |
disable_automation | Switch an automation off: it fires no more, and its waiting firings are cancelled (the answer says how many; list_automations' firings.waiting says it beforehand). One already off is answered as it is. Only a member switches it on again, in the studio. | Changes; confirm first |
duplicate_automation | Copy an automation: the copy is switched off, at version 1, and does nothing until a member switches it on. A copy of one that runs as the workspace does too, and only an admin may make it. | Changes |
delete_automation | Delete an automation: it is gone from every read, and its unfinished firings are cancelled. Its firings are kept for their 90 days. Say exactly what will be deleted first. It cannot be undone. Ask your user before calling. | Changes; confirm first |
mute_automation | Mute or unmute an automation's notifications for the member you act for: whether its notify steps reach them. Nobody else's is changed. | Changes; confirm first |
cancel_automation_firing | Cancel a waiting or paused firing of an automation: it stops where it is and does nothing more. It cannot be undone. Ask your user before calling. | Changes; confirm first |
resume_automation_firing | Resume a firing paused at a spend limit: it takes its spend action once, past the limit, then goes on. Its automation must be switched on. Ask your user before calling. | Changes; confirm first |
retry_automation_firing | Retry a failed firing from its failed action, on the version it started on; what that action does (an order, a message) is done again. A firing stopped for a chain too deep is not retried. Its automation must be switched on. Ask your user before calling. | Changes; confirm first |
preview_automation_past_events | Preview applying a switched-on automation to the past events of its trigger in a window (at most 500 events over at most 30 days): how many events it would fire on, whether it spends, and a test run on the newest. Nothing is fired. Always call it before apply_automation_to_past_events, and tell your user how many events it would fire on. | Reads |
apply_automation_to_past_events | Apply a switched-on automation to the past events of its trigger in a window, as preview_automation_past_events previewed it: it fires once on each event in its scope that meets its conditions, without a person, under its spend limits. Send the window and the number of events the preview answered; a window that holds another number now is refused. It answers how many events the window held and how many firings opened. Ask your user before calling. | Changes; confirm first |
set_photo_adjustments | Set an image layer's photo adjustments: brightness, contrast, saturation, and the tone (none, blackAndWhite, sepia, duotone, recolour to draw every visible pixel in one colour or ink, invert), with a duotone's or a recolour's colours. Only the adjustments named change; one already offered to the customer stays offered (edit_template's setConstraint offers one). It is written to the template's draft at once, only if that has not changed since it was read. | Changes |
list_showcases | List a template's showcases: named sets of example values (a real name, a real photo) its preview and mockup images can be drawn with in place of its placeholders, one a shop picks per product photo. Answers each set's id, name and values, and the draft's revision. | Reads |
create_showcase | Save a new showcase on a template: a named set of values its preview and mockup images can be drawn with in place of its defaults, for a shop's product photos. Saved at once on the template's draft, only if the draft has not changed since it was read. A shop sees the sets once the template is published again. | Changes |
update_showcase | Rename a template's showcase, or replace its values whole. Saved at once on the template's draft, only if the draft has not changed since it was read. A shop sees the sets once the template is published again. | Changes |
delete_showcase | Remove a template's showcase. Saved at once on the template's draft, only if the draft has not changed since it was read. A shop sees the sets once the template is published again. | Changes |
look_at | See a picture: a template's draft or published preview, a design as it prints, or a library picture (one you generated included). Look before you say how something looks, and after an edit to check it: text that overflows, clips or is too small, and layers that overlap. Sent at most 1024 px on its long edge. | Reads |
look_at_mockup | See a published template or a design on a product photo, as a store shows it: on a blank's placement, in one of its views or photos. Look to check how the artwork sits on the product. Sent at most 1024 px on its long edge. | Reads |
What stays in the studio
Section titled “What stays in the studio”Every tool Pixel has is served over MCP, except these, and your assistant can do whatever the member who made its key may do. Four stay in the studio for what they hand over or set going: cancelling an order answers with the customer’s name and address, a designer link’s address is a credential only the studio shows, and an automation switched on acts without a person, so a member switches it on, or changes one that is on, in the studio.
The rest belong to a conversation with Pixel itself: your assistant asks you its questions in its own conversation, and has no file attached to Pixel to keep.
| Tool | Why it is not served |
|---|---|
cancel_order | Its answer holds the customer's name and delivery address, which an MCP key is never shown. Cancel an order in the studio. |
update_automation | Changes an automation that is switched on, which then acts on it without a person. A member confirms that in the studio; over MCP, a disabled automation is saved with save_automation. |
enable_automation | Switches an automation on, after which it acts without a person. A member confirms that in the studio. |
create_designer_link | Makes a designer link whose address only the studio shows, on its Share links page. Over MCP there is no page to copy it from. |
save_upload | Keeps a file you attached to a conversation with Pixel. An assistant over MCP has no such conversation, so it has no such file to keep. |
ask_author | Asks you a question in the studio's Pixel panel and waits for your answer. An assistant over MCP asks you in its own conversation instead. |
Questions? Write to [email protected].