Skip to content

Hand out a hosted designer for a template

POST
/v1/templates/{id}/designer-links
curl --request POST \
--url https://api.pixonaut.app/v1/templates/example/designer-links \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "blankId": "blank_poster_matte", "layout": "steps", "mockups": [ { "label": "Oak frame", "placementRectPx": { "h": 380, "w": 300, "x": 115, "y": 90 }, "url": "https://shop.acme.example/media/poster-oak.jpg" } ], "placementId": "front", "printSizes": [ { "heightMm": 400, "label": "30×40", "widthMm": 300 }, { "heightMm": 700, "label": "50×70", "widthMm": 500 } ], "returnUrl": "https://shop.acme.example/cart", "state": "cart-8f2c1a" }'

Operation ID: templates.designerLinks.create

A designer share link for the template’s live version that mounts the designer with what the store sells it on: the blank and placement every proof is fitted to, the store’s size menu and its colourway photos, and which size and photo start selected, exactly as the SDK takes them on a store’s own page. A front and a back are one link with sides: one hosted page with a step per side, each side its own menus and, when it names one, its own template. A link holds two to 10 sides; one with more than 4 is made, and answered with a sides_over_recommended warning, since each side is one more step on the page and one more designer in the shopper’s browser. The sides of a garment each name a placement on its blank; the sides of an item with no blank, such as a sign or a coaster, name neither blankId nor placementId, and each is proofed on its template alone. Every side names a blank and its placement or neither, and either every side is on a blank or none is. With a returnUrl, approving makes a proof and sends the shopper back to returnUrl?state=…&proofToken=… (with sides, returnUrl?state=…&proofToken[front]=…&proofToken[back]=…), cancelling to returnUrl?state=…. locale shows the page and the designer in one of en, sv, de, fr, es, nl, da, nb, fi, and the returned url then carries ?lang=<locale>; absent, they are shown in the workspace’s default language. layout fixes how every side’s form lays out its steps, page or steps; absent, each side’s form follows its template’s own form.layout, and is a page when the template names none. A link carrying state, which names one shopper’s visit, works for 24 hours; one without it works for the expiresInDays it names, or until withdrawn. Every size a side offers is judged as the shopper’s approval would judge it, against the side’s template and placement, and one it would refuse is refused print_size_illegal, naming the side, the size’s place in the menu and why. On a blank, the link holds a side for every placement its blank says an order must print: one leaving such a placement out could never be ordered, and is refused 422 placement_unfilled, naming it. A link through a blank’s panel layout is refused unknown_layout when the blank has no layout of that name, layout_out_of_date when the layout no longer fits the blank at the size the link sells, and layout_wrong_ratio when the template’s shape is not the layout’s canvas, which the template is drawn on. name names the link for the workspace, and designLimit limits the designs its page makes. The link’s address is kept, and the share-link list answers it again as url. A member needs what handing out a designer needs; a connected store’s integration key, templates:read and designs:update.

id
required

The template’s base id: the link follows whatever version is live.

string

The template’s base id: the link follows whatever version is live.

Media typeapplication/json
object
blankId

The blank it is printed on; with placementId, or a panelLayout.

string
>= 1 characters
brandId

The brand the link’s page is drawn in: its name, logo and accent colour (GET /v1/brands). Refused brand_not_found unless it is one of the workspace’s. Absent, a link a connected store’s key hands out keeps the store’s brand, and any other is drawn in whichever brand is the workspace’s default when it opens. A brand a link that still opens names cannot be deleted.

string
>= 1 characters
designLimit

How many designs the link’s page may make, in total or per rolling hour, day or week. Each side approved counts one. At the limit the page, and an approval, answer 429 link_design_limit. Absent, no limit.

object
count
required

How many designs the link may make in its period.

integer
>= 1 <= 10000
period
required

total counts every design the link made; hour, day and week the last 60 minutes, 24 hours or 7 days, rolling.

string
Allowed values: total hour day week
expiresInDays

How long the link works, in days, up to 365. Absent, it works until withdrawn. Not with state, which names one shopper’s visit and fixes the link’s lifetime at 24 hours.

integer
> 0 <= 365
initialVariant

The variant the side starts on, by ref: one of variants when it names any.

string
>= 3 characters <= 64 characters
initialView

The view shown first; absent, the side’s first with a photo.

string
>= 1 characters <= 64 characters
layout

How every side’s form lays out its steps: page, every step on one page, or steps, one step at a time. Absent, each side’s form follows its template’s own form.layout, and is a page when the template names none.

string
Allowed values: page steps
linkedPlacements

Which of the sides’ placements one design drives, such as a sweater’s sleeves: a preset, or groups of the sides’ placements, a group with a repeat of its own where it repeats apart from the link. The sides of one group print one template. Absent, the groups the blank suggests whose sides print one template; the link keeps the groups it was made with.

object
designSeparately

Whether the shopper may take a placement out of its group and design it on its own. Absent, no.

boolean
groups

Groups of your own in place of a preset, each a list of placements, or { placements, repeat } for a group that repeats apart from the link. A mirror left out is the blank’s suggestion, else none.

Array
Any of:

Placements one design drives, two at least.

Array<object>
>= 2 items
object
mirror

Whether the placement’s print is mirrored left to right.

boolean
placementId
required

The id of one of the blank’s placements.

string
>= 1 characters
preset

each: every placement is designed on its own. suggested: the groups the blank suggests, such as its sleeves. all: one design drives every placement. Absent with no groups, suggested.

string
Allowed values: each suggested all
locale

The language the page is shown in: one of en, sv, de, fr, es, nl, da, nb, fi. Absent, the page is shown in the workspace’s default language. The link’s url carries ?lang=<locale> when it names one.

string
Allowed values: en sv de fr es nl da nb fi
mockups

The store’s own product photos the design is shown on, in place of the blank’s views.

Array<object>
>= 1 items <= 50 items
object
displacementStrength

How far the photo’s folds move the design, above 0 and at most 1; absent or null, not at all.

number | null
label
required

What the menu calls the photo.

string
>= 1 characters <= 120 characters
localizedLabels

The label per customer-facing language, by code: only the languages it has one in. A designer shown in a language left out reads label.

object
da
string
>= 1 characters <= 120 characters
de
string
>= 1 characters <= 120 characters
en
string
>= 1 characters <= 120 characters
es
string
>= 1 characters <= 120 characters
fi
string
>= 1 characters <= 120 characters
fr
string
>= 1 characters <= 120 characters
nb
string
>= 1 characters <= 120 characters
nl
string
>= 1 characters <= 120 characters
sv
string
>= 1 characters <= 120 characters
photoSizePx

The size of the photo the rect is measured in, when it is not the size of the image the url serves; absent, the image’s own.

object
h
required

Its height, in pixels.

number
> 0
w
required

Its width, in pixels.

number
> 0
placementRectPx
required

Where the print sits in the photo, in the photo’s pixels.

object
h
required

Its height, in the photo’s pixels.

number
w
required

Its width, in the photo’s pixels.

number
x
required

From the photo’s left edge, in its pixels.

number
y
required

From the photo’s top edge, in its pixels.

number
shadingStrength

How strongly the photo’s light and shade carry onto the design, from 0 (flat) to 1; absent, the default.

number
url
required

The photo’s address, http or https.

string format: uri
<= 2048 characters
viewId

The store’s own name for the way the product is photographed: photos sharing one are one view.

string
>= 1 characters <= 64 characters
warp

How the design wraps round the product in the photo, a mug or a bottle; absent or null, flat.

object
curvature
required

How far round the product the rect reaches, above 0 and at most 1.

number
edgeFalloff

How dark the design turns toward the product’s silhouette, 0 to 1.

number
kind
required

The one kind of wrap: an upright round product.

string
Allowed values: cylinder
name

The workspace’s own name for the link (Spring market stand), at most 80 characters, never shown on its page. Trimmed, inner spaces made one; empty is no name. Unique among the workspace’s working links, case aside: one another holds is refused share_link_name_taken naming the holder, a longer one share_link_name_too_long. A withdrawn or expired link frees its name.

string
panelLayout

The name of a panel layout of the link’s blankId, in place of placementId: the page draws one design across the layout’s canvas, and each placement it lays out gets its print cut from it, so art runs across the seams. Not with sides or printSizes.

string
>= 1 characters <= 200 characters
placementFrame

Whether the link’s page draws the placement frame, the ring and corner handles around the shopper’s picture, at rest, as the SDK’s showPlacementFrame does. Absent, the frame shows only while the picture is dragged or sized on the preview.

boolean
placementId

The blank’s placement it is printed in; with blankId.

string
>= 1 characters
printAreaFrame

Whether the link’s page draws a thin frame around the print area on the product photo, as the SDK’s showPrintAreaFrame does. Absent, no frame.

boolean
printSizes

The sizes the shopper picks from, for a print within its area.

Array<object>
>= 1 items <= 50 items

One size in the size menu.

object
heightMm
required

The print’s height, in mm.

number
> 0
label
required

What the menu calls the size.

string
>= 1 characters <= 120 characters
localizedLabels

The label per customer-facing language, by code: only the languages it has one in. A designer shown in a language left out reads label.

object
da
string
>= 1 characters <= 120 characters
de
string
>= 1 characters <= 120 characters
en
string
>= 1 characters <= 120 characters
es
string
>= 1 characters <= 120 characters
fi
string
>= 1 characters <= 120 characters
fr
string
>= 1 characters <= 120 characters
nb
string
>= 1 characters <= 120 characters
nl
string
>= 1 characters <= 120 characters
sv
string
>= 1 characters <= 120 characters
widthMm
required

The print’s width, in mm.

number
> 0
repeat

Whether every side’s design is laid as a repeat of its template, which layouts the shopper may pick, what it starts as, and whether they may change it or turn it off; a linked group with a repeat of its own takes that instead. Absent, each design is placed once and a request through the link naming a repeat is refused. Not with panelLayout.

object
modes
required

The layouts the shopper may pick, one at least, each once.

Array<string>
>= 1 items
Allowed values: grid brick halfDrop scatter
shopperMayChange
required

Whether the shopper may pick another of modes and another size. Otherwise every design prints as start.

boolean
shopperMayTurnOff
required

Whether the shopper may place the design once instead (repeat: null). Only with shopperMayChange.

boolean
start
required

What the design starts as: a repeat in one of modes, or null for placed once, which needs shopperMayTurnOff. A request through the link that names no repeat is made with it.

object
mode
required

How the tiles are laid: grid lines them up, brick moves every other row along by half a tile, halfDrop moves every other column down by half a tile, and scatter strews them at random places, turns and sizes, arranged by seed.

string
Allowed values: grid brick halfDrop scatter
seed
required

Which arrangement a scatter draws: another seed is another arrangement of the same tile. Read by scatter only.

integer
<= 9007199254740991
size
required

The tile’s width in percent of the print area’s width, above 0 and at most 100; the tile keeps the template’s shape. A tile that would print under 10 mm on a side is drawn at 10 mm.

number
> 0 <= 100
returnUrl

Where the hosted designer sends the shopper back to: with state and the approved proof’s proofToken, which the store commits with its key, or with state alone when they cancel. A link with sides returns each side’s proof under its key, proofToken[<key>], and only once every side is approved. Without it, the page commits the design of every side itself and shows their ids. On one of the origins the tenant’s publishable keys are allowed on.

string
<= 2048 characters
selectedMockupIndex

The photo that starts selected, by its place in mockups.

integer
selectedPrintSizeIndex

The size that starts selected, by its place in printSizes.

integer
sides

Several sides of one item, a front and a back, each its own template and placement, designed one after the other; then the one-side fields go on each side instead.

Array<object>
>= 2 items <= 10 items
object
blankId

The blank it is printed on; with placementId, or a panelLayout.

string
>= 1 characters
initialVariant

The variant the side starts on, by ref: one of variants when it names any.

string
>= 3 characters <= 64 characters
initialView

The view shown first; absent, the side’s first with a photo.

string
>= 1 characters <= 64 characters
key
required

The side’s own short name, such as front: lowercase letters, digits, - and _, unique within the link.

string
/^[a-z0-9_-]{1,32}$/
label
required

What the side’s step is called, such as Front.

string
>= 1 characters <= 120 characters
localizedLabels

The label per customer-facing language, by code: only the languages it has one in. A designer shown in a language left out reads label.

object
da
string
>= 1 characters <= 120 characters
de
string
>= 1 characters <= 120 characters
en
string
>= 1 characters <= 120 characters
es
string
>= 1 characters <= 120 characters
fi
string
>= 1 characters <= 120 characters
fr
string
>= 1 characters <= 120 characters
nb
string
>= 1 characters <= 120 characters
nl
string
>= 1 characters <= 120 characters
sv
string
>= 1 characters <= 120 characters
mockups

The store’s own product photos the design is shown on, in place of the blank’s views.

Array<object>
>= 1 items <= 50 items
object
displacementStrength

How far the photo’s folds move the design, above 0 and at most 1; absent or null, not at all.

number | null
label
required

What the menu calls the photo.

string
>= 1 characters <= 120 characters
localizedLabels

The label per customer-facing language, by code: only the languages it has one in. A designer shown in a language left out reads label.

object
da
string
>= 1 characters <= 120 characters
de
string
>= 1 characters <= 120 characters
en
string
>= 1 characters <= 120 characters
es
string
>= 1 characters <= 120 characters
fi
string
>= 1 characters <= 120 characters
fr
string
>= 1 characters <= 120 characters
nb
string
>= 1 characters <= 120 characters
nl
string
>= 1 characters <= 120 characters
sv
string
>= 1 characters <= 120 characters
photoSizePx

The size of the photo the rect is measured in, when it is not the size of the image the url serves; absent, the image’s own.

object
h
required

Its height, in pixels.

number
> 0
w
required

Its width, in pixels.

number
> 0
placementRectPx
required

Where the print sits in the photo, in the photo’s pixels.

object
h
required

Its height, in the photo’s pixels.

number
w
required

Its width, in the photo’s pixels.

number
x
required

From the photo’s left edge, in its pixels.

number
y
required

From the photo’s top edge, in its pixels.

number
shadingStrength

How strongly the photo’s light and shade carry onto the design, from 0 (flat) to 1; absent, the default.

number
url
required

The photo’s address, http or https.

string format: uri
<= 2048 characters
viewId

The store’s own name for the way the product is photographed: photos sharing one are one view.

string
>= 1 characters <= 64 characters
warp

How the design wraps round the product in the photo, a mug or a bottle; absent or null, flat.

object
curvature
required

How far round the product the rect reaches, above 0 and at most 1.

number
edgeFalloff

How dark the design turns toward the product’s silhouette, 0 to 1.

number
kind
required

The one kind of wrap: an upright round product.

string
Allowed values: cylinder
placementId

The blank’s placement it is printed in; with blankId.

string
>= 1 characters
printSizes

The sizes the shopper picks from, for a print within its area.

Array<object>
>= 1 items <= 50 items

One size in the size menu.

object
heightMm
required

The print’s height, in mm.

number
> 0
label
required

What the menu calls the size.

string
>= 1 characters <= 120 characters
localizedLabels

The label per customer-facing language, by code: only the languages it has one in. A designer shown in a language left out reads label.

object
da
string
>= 1 characters <= 120 characters
de
string
>= 1 characters <= 120 characters
en
string
>= 1 characters <= 120 characters
es
string
>= 1 characters <= 120 characters
fi
string
>= 1 characters <= 120 characters
fr
string
>= 1 characters <= 120 characters
nb
string
>= 1 characters <= 120 characters
nl
string
>= 1 characters <= 120 characters
sv
string
>= 1 characters <= 120 characters
widthMm
required

The print’s width, in mm.

number
> 0
selectedMockupIndex

The photo that starts selected, by its place in mockups.

integer
selectedPrintSizeIndex

The size that starts selected, by its place in printSizes.

integer
templateId

The template’s base id; the link’s own when absent.

string
>= 1 characters
variantRow

The size the side sells, as a value of each option its blank’s print areas change with ({"Size": "XL"}): its proofs and designs are made at that size, and a request naming another is refused. Only on a blank whose print areas change with its size; absent, the shopper’s request names the size.

object
key
additional properties
string
>= 1 characters <= 80 characters
variants

The blank’s variants offered, by ref; empty or absent, all.

Array<string>
<= 50 items
views

The blank’s views the side is shown in; empty or absent, all.

Array<string>
<= 50 items
state

Carried back to returnUrl untouched, for the store to match the customer to its own session. Only with returnUrl.

string
>= 1 characters <= 512 characters
variantRow

The size the side sells, as a value of each option its blank’s print areas change with ({"Size": "XL"}): its proofs and designs are made at that size, and a request naming another is refused. Only on a blank whose print areas change with its size; absent, the shopper’s request names the size.

object
key
additional properties
string
>= 1 characters <= 80 characters
variants

The blank’s variants offered, by ref; empty or absent, all.

Array<string>
<= 50 items
views

The blank’s views the side is shown in; empty or absent, all.

Array<string>
<= 50 items

Examples

Example

{
"blankId": "blank_poster_matte",
"layout": "steps",
"mockups": [
{
"label": "Oak frame",
"placementRectPx": {
"h": 380,
"w": 300,
"x": 115,
"y": 90
},
"url": "https://shop.acme.example/media/poster-oak.jpg"
}
],
"placementId": "front",
"printSizes": [
{
"heightMm": 400,
"label": "30×40",
"widthMm": 300
},
{
"heightMm": 700,
"label": "50×70",
"widthMm": 500
}
],
"returnUrl": "https://shop.acme.example/cart",
"state": "cart-8f2c1a"
}

The new link

Media typeapplication/json
object
brandId
required

The brand the link’s page is drawn in; null for the workspace’s default, whichever that is when it opens.

string | null
designLimit
required

How many designs a designer link may make; null for none.

object
count
required

How many designs the link may make in its period.

integer
>= 1 <= 10000
period
required

total counts every design the link made; hour, day and week the last 60 minutes, 24 hours or 7 days, rolling.

string
expiresAt
required

When the link stops working: 24 hours after it was handed out for a link carrying state, expiresInDays days after for one that names them, and null for one that names neither, which works until withdrawn.

number | null
id
required

The link’s id, as the share-link list names it.

string
locale
required

The language the link’s page is shown in, which its url names as ?lang=<locale>; null when it names none, and the page is shown in the workspace’s default language.

string | null
name
required

The workspace’s name for the link.

string | null
placementFrame
required

Whether a designer link’s page draws the placement frame around the shopper’s picture at rest; false for every other link.

boolean
printAreaFrame
required

Whether a designer link’s page draws the print area’s frame; false for every other link.

boolean
token
required

The link’s token. Shown in this response only.

string
url
required

The hosted designer the link opens, with ?lang=<locale> when the link names a locale.

string
warnings

What the link was made with that it is not built for, for whoever builds it; the shopper is shown none. sides_over_recommended: the link holds more than 4 sides. Each side is one more step on the hosted page, one more designer, canvas and photo set in the shopper’s browser, and one more proofToken[<key>] on the return address. Absent when there is nothing to warn of.

Array<object>
object
code
required
string
recommended
required

The most sides a designer is built for.

integer
sides
required

How many sides the link holds.

integer

Examples

Example

{
"brandId": null,
"designLimit": null,
"expiresAt": 1791972000000,
"id": "shl_9a8b7c6d5e4f3a2b1c0d9e8f",
"locale": null,
"name": null,
"placementFrame": false,
"printAreaFrame": false,
"token": "EXAMPLE_designer_link_token_not_a_real_one",
"url": "https://app.pixonaut.example/h/design/EXAMPLE_designer_link_token_not_a_real_one"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: return_url_not_https, return_url_off_store, invalid_input

Media typeapplication/json
object
error
required
string
reason

Always sent with invalid_input.

string

Examples

invalid_input

{
"error": "invalid_input",
"reason": "string"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: unauthorized

Media typeapplication/json
object
error
required
string

Examples

Exampleunauthorized

unauthorized

{
"error": "unauthorized"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: plan_limit_reached, origin_forbidden, feature_disabled

Media typeapplication/json
object
error
required
string
feature

The feature the tenant does not have. Always sent with feature_disabled.

string
limit

The limit the tenant is at: templates, connectedStores, apiKeys, shareLinks, customDomains, printsMadePerMonth (prints made without an order this month), members, orders (this month’s orders, which getting a print’s files without an order counts as), or a sandbox’s own caps: sandboxPrintsPerDay, sandboxPrintsPerMonth, sandboxOrdersPerMonth. A sandbox shares every other limit with its live workspace. Always sent with plan_limit_reached.

string
max

How many the plan allows. Always sent with plan_limit_reached.

number
plan

The plan whose limit it is. Always sent with plan_limit_reached.

string

Examples

feature_disabled

{
"error": "feature_disabled",
"feature": "api"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: subject_not_found, brand_not_found

Media typeapplication/json
object
error
required
string

Examples

brand_not_found

{
"error": "brand_not_found"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: share_link_name_taken, layout_out_of_date

Media typeapplication/json
object
error
required
string
holderId

The link holding the name. Always sent with share_link_name_taken.

string | null
reason

Always sent with layout_out_of_date.

string

Examples

layout_out_of_date

{
"error": "layout_out_of_date",
"reason": "string"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: unknown_placement, print_size_illegal, placement_unfilled, variant_row_invalid, unknown_layout, layout_wrong_ratio, linked_templates_differ, share_link_name_too_long, payload_too_large

Media typeapplication/json
object
bytes

Sent with payload_too_large.

number
error
required
string
index

The size’s place in the side’s menu. Always sent with print_size_illegal.

integer
maxBytes

Always sent with payload_too_large.

number
maxLength

The longest name a link may have. Always sent with share_link_name_too_long.

integer
placement

Always sent with placement_unfilled.

string
reason

With print_size_illegal: too_large: larger than the placement takes. print_size_not_area: smaller than a placement printed across its whole area. wrong_ratio: further from the template’s shape than its tolerance allows. Always sent with print_size_illegal, placement_unfilled, variant_row_invalid, layout_wrong_ratio. With print_size_illegal: one of too_large, print_size_not_area, wrong_ratio.

string
side

The side’s key; null on a link with one side. Always sent with print_size_illegal.

string | null

Examples

layout_wrong_ratio

{
"error": "layout_wrong_ratio",
"reason": "string"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: rate_limited

Media typeapplication/json
object
error
required
string

Examples

Examplerate_limited

rate_limited

{
"error": "rate_limited"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: db_error. A request that failed unexpectedly answers as text instead.

object
error
required
string

Examples

Exampledb_error

db_error

{
"error": "db_error"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Refused: lock_timeout

Media typeapplication/json
object
error
required
string

Examples

Examplelock_timeout

lock_timeout

{
"error": "lock_timeout"
}
X-Request-Id
required
string

Every response names the request it answers in X-Request-Id: the id the request was sent with in that header, when it is well formed, else one the API gave it. Quote it when reporting a refusal or a failure: the API’s log lines for that request carry it.

Questions? Write to [email protected].

Status · Terms of service · Privacy policy · Subprocessors