Skip to content
Docs
Sign in

Marks API

Mark sets, presets, fields and assets, cutter and printer mark settings, a job's marks, previews and production keys.

For integrators

The marks API manages your mark sets and applies them to imposition jobs. Every endpoint is under your team, starting with /a/{team_slug}/marks/api/v1/mark-sets/, and takes the same authentication as the rest of the API: an API key of a team member, or a signed-in session (see API overview). Lengths are in points (1/72 in). What marks are and how they place is on How print marks work.

Order data that marks print (order numbers, PO, your own fields, per-copy rows) is written on the imposition API: see Imposition API.

A job's marks from start to finish#

SETS=https://app.example.com/a/acme/marks/api/v1/mark-sets/
JOB=https://app.example.com/a/acme/marks/api/v1/jobs/42/marks/
AUTH="Authorization: Api-Key $API_KEY"

# 1. Make a mark set from a preset (the answer has its id, here 7)
curl -s -X POST "$SETS" -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"name": "Slug line", "preset": "slug_line"}'

# 2. Add it to imposition job 42
curl -s -X PUT "$JOB" -H "$AUTH" -H "Content-Type: application/json" \
  -d '{"added": [{"set": 7, "pin": null}]}'

# 3. Check the marks on the job's layout before exporting
curl -s "${JOB}check/" -H "$AUTH"

Mark sets and presets#

GET /a/{team_slug}/marks/api/v1/mark-sets/

marks_mark_sets_list · View in API reference

POST /a/{team_slug}/marks/api/v1/mark-sets/

marks_mark_sets_create · View in API reference

GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/

marks_mark_sets_retrieve · View in API reference

PATCH /a/{team_slug}/marks/api/v1/mark-sets/{id}/

Save the draft: a changed document makes a new version.

marks_mark_sets_partial_update · View in API reference

GET /a/{team_slug}/marks/api/v1/presets/

marks_presets_list · View in API reference

A set is a document of marks (doc): {"schema": 1, "name": …, "units": "mm", "requires": {"profile": null}, "marks": [...]}. Create a set from {name, doc} or from {name, preset}. Lengths in a doc you send may be unit strings ("8mm", "0.25in"); reads return points. Validation errors name the JSON path, such as {"doc": {"marks[0].place.anchor": ["…"]}}. Each change saves a version (versions/, versions/{number}/restore/); jobs can pin one. A set in use can't be deleted: archive it. export/ and import/ move a set between teams as JSON, with assets referenced by key.

Previews and templates#

POST /a/{team_slug}/marks/api/v1/preview/

Resolve a document or a set on a sample, a job layout sheet or an artwork: preview JSON.

marks_preview · View in API reference

GET /a/{team_slug}/marks/api/v1/variables/

The variable registry: dimensions, paths, types, labels, samples and team fields.

marks_variables · View in API reference

POST /a/{team_slug}/marks/api/v1/validate/

marks_validate · View in API reference

POST /a/{team_slug}/marks/api/v1/render/

marks_render · View in API reference

preview/ places a set (set or an unsaved doc) on a sample sheet, roll or 1-up, or on a job's layout ({"job": 42, "layout": "c-…", "sheet": 0}), and returns every placed mark with its box, text, code and problems. variables/ lists every field a template can use, with samples. validate/ checks a template; render/ fills one.

A job's marks#

GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/

Effective sets with their sources, and the job's added / disabled sets, item toggles, overrides and media settings.

marks_job_marks_retrieve · View in API reference

PUT /a/{team_slug}/marks/api/v1/jobs/{id}/marks/

Effective sets with their sources, and the job's added / disabled sets, item toggles, overrides and media settings.

marks_job_marks_update · View in API reference

GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/resolved/

Preview JSON for the viewer overlay: one sheet, or every sheet in pages of 20.

marks_job_resolved · View in API reference

GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/check/

Issues over every sheet and piece, grouped with counts and examples; nothing is drawn.

marks_job_check · View in API reference

jobs/{id}/marks/ returns the sets that apply (effective, each with its sources: team, cutter, printer or job), and what the job changed: added ([{set, pin}]), disabled (inherited sets turned off), artwork_disabled ({"<artwork id>": [set ids]}), settings (stretch, reflective) and dismissed_suggestions. PUT replaces the fields you send; settings merge.

resolved/ places the marks on a layout (layout = a c-… or l-… ref; default the selected or best layout) for one sheet, or every sheet in pages of 20. check/ returns the problems of every sheet grouped by code, with counts and examples, without drawing. Both answer 409 while the job has no layout. customize/ and reset/ make and drop a job-only copy of a set; exports/ lists what each export contained.

GET /a/{team_slug}/marks/api/v1/artworks/{id}/marks/

Item-mark sets for the 1-up tab with per-item toggles (?copy=n or ?preview=1 resolves them); PUT turns sets off on this item and sets its safe-area inset (used only without prepress data).

marks_artwork_marks_retrieve · View in API reference

artworks/{id}/marks/ lists the item-mark sets of one artwork with their toggles; PUT {"disabled": [...]} turns sets off on that item.

Cutters, printers and defaults#

GET /a/{team_slug}/marks/api/v1/registration-presets/

marks_registration_presets · View in API reference

PUT /a/{team_slug}/marks/api/v1/cutters/{id}/registration/

The cutter's registration rules: a vendor preset plus the team's overrides, with the effective profile and every value's source tag.

marks_cutter_registration_update · View in API reference

PUT /a/{team_slug}/marks/api/v1/printers/{id}/mark-profile/

The printer's non-printable edges (pt) and white spot name.

marks_printer_mark_profile_update · View in API reference

POST /a/{team_slug}/marks/api/v1/defaults/

Apply a set by default (team defaults need a team admin).

marks_defaults_create · View in API reference

A cutter's registration is a preset (see registration-presets/) plus your overrides. A printer's mark profile holds its nonprintable edges ({lead, trail, left, right}) and white spot. defaults/ adds a set as the team default or a cutter's or printer's default (target: team, cutter or printer; new_jobs_only).

Fields, assets and settings#

GET /a/{team_slug}/marks/api/v1/fields/

marks_fields_list · View in API reference

POST /a/{team_slug}/marks/api/v1/assets/

Upload (multipart): PNG, JPEG, PDF, SVG (converted to PDF) or a TrueType font.

marks_assets_create · View in API reference

POST /a/{team_slug}/marks/api/v1/assets/from-files/

Make an asset from a version picked in Files (`version_id`).

marks_assets_from_files · View in API reference

PUT /a/{team_slug}/marks/api/v1/settings/

The team's display unit, marks spot and export checks downgraded to warnings (admins change them).

marks_settings_update · View in API reference

Fields declare order-data keys (scope job, item or copy; key, label, type, sample, required); fields/discovered/ lists keys your system sent that aren't declared. variables/ also lists your team's file properties as fields with scope file (file.<key>, with their labels): items whose file is in Files print them (see Order data in marks).

Assets are images, PDFs or fonts (20 MB each) that image and text marks use by key. An asset's content is a version in Files: file_version (its id; null for an asset uploaded before assets moved to Files), file_id, file_path and file_version_number say which. An image asset's preview_url is assets/{id}/content/, which redirects to the image through a download link made for that request, so a page left open keeps showing it (the link it redirects to is short-lived: don't store it). An upload to assets/ is stored in Files, in your team's Marks folder, and counts toward storage (507 with code quota_exceeded when storage is full). assets/from-files/ makes an asset from a version you already have ({"version_id": 42}; key and name default to the file's name), without copying it; assets/ takes a version_id in place of the file too, with your own key and name. PATCH assets/{id}/ with a file upload or a version_id replaces the content and keeps the key. Deleting an asset leaves its file in Files; a version an asset uses can't be deleted from Files.

Team settings hold the display_unit, the team's marks spot colour (marks_spot) and gate_downgrades: problem codes team admins allow to export as warnings.

Production keys#

GET /a/{team_slug}/marks/api/v1/keys/{key}/

Resolve a scanned sheet code to its job, layout, sheet and cut-file name.

marks_keys_retrieve · View in API reference

keys/{key}/ resolves a sheet code (see Cutter registration and job codes) to its job, layout, sheet and cut file name. The short link /m/{key}/ opens it in the app for team members.

Every operation#

API operations tagged marks
MethodPathWhat it does
GET /a/{team_slug}/marks/api/v1/artworks/{id}/marks/ Item-mark sets for the 1-up tab with per-item toggles (?copy=n or ?preview=1 resolves them); PUT turns sets off on this item and sets its safe-area inset (used only without prepress data).
PUT /a/{team_slug}/marks/api/v1/artworks/{id}/marks/ Item-mark sets for the 1-up tab with per-item toggles (?copy=n or ?preview=1 resolves them); PUT turns sets off on this item and sets its safe-area inset (used only without prepress data).
GET /a/{team_slug}/marks/api/v1/assets/ marks_assets_list
POST /a/{team_slug}/marks/api/v1/assets/ Upload (multipart): PNG, JPEG, PDF, SVG (converted to PDF) or a TrueType font.
GET /a/{team_slug}/marks/api/v1/assets/{id}/ marks_assets_retrieve
PATCH /a/{team_slug}/marks/api/v1/assets/{id}/ Rename, replace the file (an upload, stored in Files) or point the asset at another Files version (`version_id`).
DELETE /a/{team_slug}/marks/api/v1/assets/{id}/ Delete the asset.
GET /a/{team_slug}/marks/api/v1/assets/{id}/content/ The asset's content: a redirect to a download URL made for this request (short-lived on S3).
POST /a/{team_slug}/marks/api/v1/assets/from-files/ Make an asset from a version picked in Files (`version_id`).
GET /a/{team_slug}/marks/api/v1/cutters/{id}/registration/ The cutter's registration rules: a vendor preset plus the team's overrides, with the effective profile and every value's source tag.
PUT /a/{team_slug}/marks/api/v1/cutters/{id}/registration/ The cutter's registration rules: a vendor preset plus the team's overrides, with the effective profile and every value's source tag.
GET /a/{team_slug}/marks/api/v1/defaults/ marks_defaults_list
POST /a/{team_slug}/marks/api/v1/defaults/ Apply a set by default (team defaults need a team admin).
PATCH /a/{team_slug}/marks/api/v1/defaults/{id}/ marks_defaults_partial_update
DELETE /a/{team_slug}/marks/api/v1/defaults/{id}/ marks_defaults_destroy
GET /a/{team_slug}/marks/api/v1/fields/ marks_fields_list
POST /a/{team_slug}/marks/api/v1/fields/ marks_fields_create
GET /a/{team_slug}/marks/api/v1/fields/{id}/ marks_fields_retrieve
PATCH /a/{team_slug}/marks/api/v1/fields/{id}/ marks_fields_partial_update
DELETE /a/{team_slug}/marks/api/v1/fields/{id}/ marks_fields_destroy
GET /a/{team_slug}/marks/api/v1/fields/discovered/ Undeclared metadata keys the API sent in the last 90 days.
GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/ Effective sets with their sources, and the job's added / disabled sets, item toggles, overrides and media settings.
PUT /a/{team_slug}/marks/api/v1/jobs/{id}/marks/ Effective sets with their sources, and the job's added / disabled sets, item toggles, overrides and media settings.
GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/check/ Issues over every sheet and piece, grouped with counts and examples; nothing is drawn.
GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/context/ The data bundle for JS previews (template.js contextFor(bundle, pieceId)).
POST /a/{team_slug}/marks/api/v1/jobs/{id}/marks/customize/ Customize for this job: fork a set into a job-local copy that replaces it here.
GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/exports/ marks_job_exports
POST /a/{team_slug}/marks/api/v1/jobs/{id}/marks/reset/ Reset to library: delete the job's fork; the library set applies again.
GET /a/{team_slug}/marks/api/v1/jobs/{id}/marks/resolved/ Preview JSON for the viewer overlay: one sheet, or every sheet in pages of 20.
GET /a/{team_slug}/marks/api/v1/keys/{key}/ Resolve a scanned sheet code to its job, layout, sheet and cut-file name.
GET /a/{team_slug}/marks/api/v1/mark-sets/ marks_mark_sets_list
POST /a/{team_slug}/marks/api/v1/mark-sets/ marks_mark_sets_create
GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/ marks_mark_sets_retrieve
PATCH /a/{team_slug}/marks/api/v1/mark-sets/{id}/ Save the draft: a changed document makes a new version.
DELETE /a/{team_slug}/marks/api/v1/mark-sets/{id}/ Delete an unused set; 409 with its usage otherwise (archive it instead).
POST /a/{team_slug}/marks/api/v1/mark-sets/{id}/archive/ Archiving a team default removes it from every job, so it needs a team admin.
POST /a/{team_slug}/marks/api/v1/mark-sets/{id}/duplicate/ marks_mark_sets_duplicate
GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/export/ marks_mark_sets_export
POST /a/{team_slug}/marks/api/v1/mark-sets/{id}/restore/ marks_mark_sets_restore
GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/usage/ marks_mark_sets_usage
GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/versions/ marks_mark_sets_versions
GET /a/{team_slug}/marks/api/v1/mark-sets/{id}/versions/{number}/ marks_mark_sets_version
POST /a/{team_slug}/marks/api/v1/mark-sets/{id}/versions/{number}/restore/ marks_mark_sets_version_restore
POST /a/{team_slug}/marks/api/v1/mark-sets/import/ Create a library set from a portable export; asset keys the team lacks come back as problems.
GET /a/{team_slug}/marks/api/v1/presets/ marks_presets_list
GET /a/{team_slug}/marks/api/v1/presets/{id}/ marks_presets_retrieve
POST /a/{team_slug}/marks/api/v1/preview/ Resolve a document or a set on a sample, a job layout sheet or an artwork: preview JSON.
GET /a/{team_slug}/marks/api/v1/printers/{id}/mark-profile/ The printer's non-printable edges (pt) and white spot name.
PUT /a/{team_slug}/marks/api/v1/printers/{id}/mark-profile/ The printer's non-printable edges (pt) and white spot name.
GET /a/{team_slug}/marks/api/v1/registration-presets/ marks_registration_presets
POST /a/{team_slug}/marks/api/v1/render/ marks_render
GET /a/{team_slug}/marks/api/v1/settings/ The team's display unit, marks spot and export checks downgraded to warnings (admins change them).
PUT /a/{team_slug}/marks/api/v1/settings/ The team's display unit, marks spot and export checks downgraded to warnings (admins change them).
POST /a/{team_slug}/marks/api/v1/validate/ marks_validate
GET /a/{team_slug}/marks/api/v1/variables/ The variable registry: dimensions, paths, types, labels, samples and team fields.

All “marks” operations in the API reference

Last updated Sept. 28, 2026