Documentation

LinkWrangler Customer API

The LinkWrangler API allows you to programmatically access your data, sync products, and manage batches and serials.

Note: API access requires a paid subscription. You can manage your API keys in the Account Settings.

1. API Key Setup

To start using the LinkWrangler API, you first need to generate an API key.

  1. Navigate to the Account Settings page.
  2. Click on the API Access tab.
  3. Enter a descriptive name for your key (e.g., "Production Web Server").
  4. Select the required permissions (scopes) for this key.
  5. Click Generate New Key.

Important: Your API key will only be shown once. Copy it immediately and store it securely. We cannot recover lost keys.

2. Scopes & Permissions

LinkWrangler uses scopes to restrict API key access to specific endpoints. You should always use the principle of least privilege when creating keys.

ScopeDescription
products:readList and view product details
products:writeCreate or update products by GTIN
batches:writeCreate or update production batches
serials:writeBulk upload serial numbers to batches
scans:readAccess historical scan event data

3. Authentication

Authenticate your requests by including your API key in the Authorization header of your HTTP requests.

Authorization: Bearer sk_live_...

Your API keys carry many privileges, so be sure to keep them secure! Do not share your secret API keys in publicly accessible areas such as GitHub, client-side code, and so forth.

4. Rate Limiting

The API is rate limited to 100 requests per minute per account. If you exceed this limit, you will receive a 429 Too Many Requests response.

5. Base URL

All API requests should be made to the following base URL:

https://www.linkwrangler.com/api/v1

6. Scans Endpoint

Retrieve a list of scan events for your account. Segments can be filtered by product, batch, or date.

GEThttps://www.linkwrangler.com/api/v1/scans

Retrieve a paginated list of scan events for your account.

Developer Note: This is a GET endpoint. All parameters must be passed as URL search parameters (e.g. ?gtin=123...). If you are using tools like Make.com or Zapier, do not put these fields in the "Request Body" as they will be ignored.

Query Parameters:

  • limit (int): Max records (default 50, max 100)
  • offset (int): Pagination offset for large datasets
  • gtin (string): Filter events by Product GTIN
  • batch (string): Filter events by Batch Number
  • start_date (ISO 8601): Filter events occurring after this date
  • end_date (ISO 8601): Filter events occurring before this date

Response Structure:

{ "data": [ { "id": "uuid", "created_at": "2023-10-27T10:00:00Z", "ip_address": "1.2.3.4", "user_agent": "Mozilla/5.0...", "city": "Sydney", "region": "NSW", "country_code": "AU", "product_name": "Amazing Widget", "gtin": "12345678901234", "batch_number": "BATCH-001", "serial_number": "SN-9928" } ], "meta": { "limit": 50, "offset": 0, "count": 1 } }

7. Products Endpoint

Manage your product catalog.

GEThttps://www.linkwrangler.com/api/v1/products

List all products associated with your account.

Query Parameters:

  • limit (int): Max records (default 50, max 100)
  • offset (int): Pagination offset
  • gtin (string): Filter by specific GTIN
POSThttps://www.linkwrangler.com/api/v1/products

Create or update (upsert) a product. Identify records by GTIN.

Payload Fields:

  • gtin (string, required): Product barcode (14 digits)
  • name (string, required): Product display name
  • brand_name (string): Product brand (e.g., Acme Co)
  • sku (string): Your internal Stock Keeping Unit
  • category (string): Product category (see values below)
  • msrp (float): Manufacturer suggested retail price
  • image_url (string): Public URL for product photo
  • video_url (string): Public URL for promotional video
  • description_short (string): Brief marketing text
  • product_url (string): Primary destination URL for redirects
  • is_active (boolean): Product availability status

Example Body:

{ "gtin": "12345678901234", "name": "My Amazing Product", "brand_name": "Acme Co", "sku": "SKU-9928", "image_url": "https://example.com/image.png", "video_url": "https://youtube.com/watch?v=...", "category": "food_beverage", "msrp": 19.99, "description_short": "The best product ever.", "product_url": "https://example.com/p1", "is_active": true }

Valid Categories:

Value (Payload)Display Label
food_beverageFood, Beverage & Tobacco
beauty_personal_careBeauty & Personal Care
health_pharmaHealth & Pharmaceuticals
apparel_footwearClothing, Apparel & Footwear
home_gardenHome, Garden & Kitchen
pet_carePet Care
electronicsElectronics & Computing
automotive_toolsAutomotive & Tools
toys_sportsToys, Games & Sports
constructionBuilding & Construction
otherOther / Logistics

8. Batches Endpoint

Create or update production batches linked to a product.

POSThttps://www.linkwrangler.com/api/v1/batches

Create or update (upsert) a production batch.

Payload Fields:

  • product_gtin (string, required): Product barcode / GTIN-14
  • batch_number (string, required): Unique batch identifier
  • mfg_date (ISO 8601): Manufacturing date
  • expiry_date (ISO 8601): Expiry date
  • authorized_countries (array of strings): ISO country codes (e.g. [US, AU])
  • quantity (int): Total batch quantity
  • status (string): active, recalled, quarantine, or expired

Example Body:

{ "product_gtin": "12345678901234", "batch_number": "BATCH-2023-001", "mfg_date": "2023-10-01", "expiry_date": "2025-12-31", "authorized_countries": ["US", "AU", "NZ"], "quantity": 5000, "status": "active" }

9. Serials Endpoint

Bulk upload serial numbers for a specific batch.

POSThttps://www.linkwrangler.com/api/v1/serials

Bulk upload serial numbers to a specific batch. If the batch doesn't exist, it will be created automatically.

Payload Fields:

  • product_gtin (string, required): GTIN of the parent product
  • batch_number (string, required): Batch number to assign serials to
  • serials (array of strings, required): List of serial numbers (max 1,000 per request)

Example Body:

{ "product_gtin": "12345678901234", "batch_number": "BATCH-2023-001", "serials": [ "sn-00001", "sn-00002", "sn-00003" ] }

Note: Duplicate serial numbers in the same batch will be ignored automatically.