{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Coupling API","description":"Comprehensive API documentation for Zimark Integration platform. Learn how to seamlessly integrate and leverage Zimark's powerful features into your warehouse operations.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"__idx":0,"id":"coupling-api"},"children":["Coupling API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Coupling"]}," pairs a Zimarker code with your WMS ID, linking the Zimarker to a ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/key-concepts#pallet"},"children":["pallet"]},". The Coupling API brings that operation to the integration API, so you can allocate Zimarkers and couple them programmatically, with no coupling station, pre-printed stock, or printer-mounted scanner required."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It uses the same ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/integration/rest/api/v1/**"]}," surface and the same ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/rest-api/authentication"},"children":["authentication"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["X-AUTH-KEY"]},") and organization scoping as the rest of the integration API, so there's no new auth to set up."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/coupling_api.d6294de49132863423544957a41d9e79b5c569a1e6df3c26b6012053cb1be836.9c1bb791.svg","alt":"Coupling API"},"children":[]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":1,"id":"concepts"},"children":["Concepts"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Code"]},": the unique identifier a Zimarker carries, drawn from the pool of codes Zimark has produced for your organization."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Allocation"]},": handing out the next unassigned code(s), each with a printable image. Allocation is atomic: a code is issued once and never reused."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Coupling"]},": pairing an allocated code with a WMS ID (and any custom fields), linking the Zimarker to the pallet."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Bank"]},": a batch of codes allocated ahead of time and drawn from locally, so printing keeps working offline or over an intermittent connection."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":2,"id":"building-blocks"},"children":["Building blocks"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Three operations plus one webhook, combined to fit your setup."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":3,"id":"allocate-codes"},"children":["Allocate code(s)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Hand out the next unassigned Zimarker code (or a batch), each with a printable image. Allocation is synchronous and low-latency, so it can sit inside a printing loop. Output starts as a PNG (CDN link or inline base64); ZPL is available on request, so printers can render the marker natively without rasterizing an image."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":4,"id":"couple-a-code"},"children":["Couple a code"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pair a code with a WMS ID and custom fields, linking the Zimarker to the pallet. Two modes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Synchronous"]},": waits and returns the pallet. Use when your next step needs it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Asynchronous"]},": returns an operation id immediately and completes coupling in the background. Use when you can't wait (a printer that just needs the sticker out)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":5,"id":"get-and-couple"},"children":["Get-and-couple"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A convenience wrapper that allocates and couples in one call. The code and image always come back synchronously so you can print right away; the pallet returns now (sync) or via the webhook (async). This is the typical entry point."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"__idx":6,"id":"coupling-events-webhook"},"children":["Coupling-events webhook"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subscribe once and receive the outcome of every coupling for your organization, whatever its origin (this API, a coupling station, the Back Office, or a scanner). Each event carries the status, the operation id, and the pallet on success. It's configured like any other trigger; see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/webhooks/webhooks"},"children":["Webhook Reference"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":7,"id":"printing-offline-with-a-bank"},"children":["Printing offline with a bank"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If printing can't depend on a live call per label, pre-fetch a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["bank"]}," of codes with a batch allocation. Your software draws codes locally (issuing markers even while disconnected) and couples them asynchronously once the connection returns. Without a bank, a single dropped connection stalls the line; the bank turns that hard dependency into a soft one. Codes drawn into a bank are treated as consumed."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"__idx":8,"id":"marker-info-on-a-pallet"},"children":["Marker info on a pallet"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The pallet returned by the integration API includes the marker(s) it carries, so a coupling result is self-describing, with no second call needed to learn which Zimarker a pallet holds."]}]},"headings":[{"value":"Coupling API","id":"coupling-api","depth":1},{"value":"Concepts","id":"concepts","depth":2},{"value":"Building blocks","id":"building-blocks","depth":2},{"value":"Allocate code(s)","id":"allocate-codes","depth":3},{"value":"Couple a code","id":"couple-a-code","depth":3},{"value":"Get-and-couple","id":"get-and-couple","depth":3},{"value":"Coupling-events webhook","id":"coupling-events-webhook","depth":3},{"value":"Printing offline with a bank","id":"printing-offline-with-a-bank","depth":2},{"value":"Marker info on a pallet","id":"marker-info-on-a-pallet","depth":2}],"frontmatter":{"seo":{"title":"Coupling API"}},"lastModified":"2026-07-07T18:25:08.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/zimarkers/coupling-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}