Documentation

Resolver & Enterprise API

isbn.link implements the GS1 Digital Link URI Syntax and GS1-Conformant Resolver standards.

URI syntax

ISBN-13 is treated as GTIN. Values are normalized to 14 digits with a leading zero. Canonical form uses numeric Application Identifiers:

https://isbn.link/01/{GTIN-14}
https://isbn.link/01/{GTIN}/10/{lot}
https://isbn.link/01/{GTIN}/10/{lot}/21/{serial}
https://isbn.link/01/{GTIN}/22/{cpv}/10/{lot}/21/{serial}

# Qualifier order (required): CPV (22) → lot (10) → serial (21)
# Legacy alpha /gtin/... is accepted and mapped to AI 01

Resolution behaviour

  • Default — HTTP 307 to the link typed gs1:defaultLink.
  • linkType ?linkType=gs1:pip redirects to that type; missing type returns 404.
  • Invalid URI 400 Bad Request with structured error body.
  • Unknown GTIN 404 Not Found (never 200 on error).
  • CORS — enabled for GET, HEAD, OPTIONS as required by the resolver standard.
  • Link headers — available resources exposed via HTTP Link.

Linksets

Request the full set of links without redirecting:

GET /01/{GTIN}?linkType=linkset
GET /01/{GTIN}?linkType=all
Accept: application/linkset+json

# Response: application/linkset+json (RFC 9264 profile)

Enterprise API

Authenticate with Authorization: Bearer il_… keys from the portal (Pro+).

GET/api/v1/items

List/search catalog formats. Query: q, isbn, gtin, titleId, limit (1–500), offset. Returns work_name when linked to a title.

POST/api/v1/items

Create item. Body: { "isbn": "978…", "title": "…", "defaultLink": { "href": "…" } }

GET/api/v1/links?gtin=

List links for a GTIN.

POST/api/v1/links

Register link. Body: { "isbn", "linkType", "href", "isDefault?" }

POST/api/v1/barcodes

Generate barcode. Body: { "isbn", "symbology": "qrcode|datamatrix|ean13|composite", "format": "svg|png", "baseUrl"?, "includeSrp"?, "srp": "$19.99"?, "layout"?, "scale"?, "overlay": "none|scan-me|learn-more|interactive|more-info|custom"?, "overlayText"?, "overlayArrowStyle": "arc|brush|chevron|curve-down"?, "overlayTextStyle": "script|bold|sans|serif"?, "overlayArrowColor"?, "overlayTextColor"?, "overlayArrowWeight"?, "overlayPhoneIcon"?, "overlayPhoneIconScale"?, "overlayLayout"? }. Callouts sit in a band above the symbols (never cover QR/UPC). PNG matches SVG (sharp). Responses include X-Digital-Link-URI headers.

Barcodes

2D symbols encode the full Digital Link URI (scan → resolve). 1D EAN-13 encodes the GTIN for POS. Optional SRP expands the linear symbol with a Bookland EAN-5 price add-on ($19.99 → 51999) and encodes amount payable with ISO currency on the Digital Link (AI 3912, e.g. ?3912=8401999). Contrast analysis flags low-contrast and risky red/brown foregrounds per GS1 print guidance.

Optional consumer overlays bake a callout (e.g. “Scan me!”, “Interactive!”) with a curved arrow and optional phone glyph into SVG/PNG. Graphics live in a band above the barcode only — they never cover QR or UPC modules. PNG is a sharp raster of the same SVG as the studio preview. Options: overlay, overlayText, overlayArrowStyle (arc|brush|chevron|curve-down), overlayTextStyle (script|bold|sans|serif), overlayArrowColor / overlayTextColor, overlayArrowWeight, overlayPhoneIcon + overlayPhoneIconScale (0.25–1 of QR height), and overlayLayout (normalized drag handles for text + arrow tip).

InDesign plugin

Cover designers can search the publisher catalog and place dual-mark (QR + EAN), QR, EAN-13, or Data Matrix symbols from inside Adobe InDesign without leaving the layout. The panel calls the Enterprise API with a Pro+ API key; barcodes are generated on the server so quiet zones and Digital Link URIs match the portal Barcode Studio.

  • Source indesign-plugin/ (UXP panel, InDesign 2024+)
  • Install — sideload with Adobe UXP Developer Tools; Marketplace packaging is planned later
  • Auth — portal Settings → API key → paste into plugin Settings
  • Guide docs/indesign-plugin.md

Affinity script

Affinity by Canva does not yet offer a dockable third-party panel SDK comparable to Adobe UXP. isbn.link ships a Scripts panel tool that uses the same Enterprise catalog and barcode APIs as the InDesign plugin. Host place APIs are confirmed via a Phase 0 SPIKE on real Affinity builds.

  • Source affinity-plugin/ (single-file JS for Window → Scripts)
  • Auth — same Pro+ il_… API keys
  • Guide docs/affinity-plugin.md

Resolver description

Machine-readable capability document required by the Conformant Resolver standard:

/.well-known/gs1resolver

Try it

Demo titles are seeded for local exploration. After adding your own ISBNs in the portal:

curl -i https://isbn.link/01/09780201616224
curl -H 'Accept: application/linkset+json' \
  https://isbn.link/01/09780201616224