Skip to main content

Sticker Mule API

The Sticker Mule API lets you reorder products and read your saved items, addresses, and payment methods from your own code. It is a small REST API authenticated with a personal API key.

Quick start

1. Generate an API key

Open your account settings and, under Store settings, generate an API key. Copy it right away, it is shown only once.

Open account settings

2. Call the API

Send your key as a Bearer token. This example places an order for a saved item:

POST /api/orders
curl -X POST https://www.stickermule.com/api/orders \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{ "id": "456", "quantity": 50 }],
    "addressId": "22",
    "paymentId": "7"
  }'

Authentication

Every request must include your API key as a Bearer token in the Authorization header.

Authorization: Bearer YOUR_API_KEY
  • The API is available on personal accounts only, not team accounts.
  • Each account has one key. Generating a new key replaces the old one.
  • Treat the key like a password. It can place orders and read your saved data.

Base URL

All endpoints are relative to this base URL.

https://www.stickermule.com/api

Endpoints

Returns the items you can reorder. Each item's id is valid as an items[].id when creating an order.

GET /api/items
curl "https://www.stickermule.com/api/items?limit=20" \
  -H "Authorization: Bearer YOUR_API_KEY"

Query parameters

ParameterTypeDefaultDescription
limitnumber20Number of items to return, from 1 to 50.
offsetnumber0Number of items to skip before returning results.
currencystringUSDISO 4217 currency code used for prices.
localestringenLocale used for product names and prices.

Response

Results are paginated with limit and offset, and canLoadMore is true when more items are available. Because paging is offset-based, pages can shift as new orders arrive.

FieldTypeDescription
idstringItem identifier. Use it as an items[].id when creating an order.
namestring | nullCustom name you gave the item, if any.
productIdnumberSticker Mule product identifier.
productNamestring | nullProduct name, or null if the product is no longer available.
quantitynumberQuantity from the original order.
sizeRegularItemDimensions | TShirtDimensions | HoodieDimensionsItem size. For t-shirts and heavyweight t-shirts, an apparel size object with __typename TShirtDimensions and a size. For hoodies, __typename HoodieDimensions and a size. For every other product, physical dimensions in inches with __typename RegularItemDimensions and width and height.
isSizeRequiredbooleanTrue when the product needs an apparel size to reorder (t-shirts, heavyweight t-shirts, and hoodies). Otherwise false.
buyingOptionsobject | nullAllowed reorder quantities as min, max, and increment. null if the product is unavailable.
retailPricenumber | nullPrice at the minimum quantity, or null if pricing is unavailable.
artworkUrlsstring[]URLs of the approved artwork for the item.
Example response
{
  "items": [
    {
      "id": "456",
      "name": "Logo stickers",
      "productId": 12,
      "productName": "Die cut stickers",
      "quantity": 50,
      "size": { "__typename": "RegularItemDimensions", "width": 3, "height": 3 },
      "isSizeRequired": false,
      "buyingOptions": {
        "quantity": { "min": 50, "max": 5000, "increment": 5 }
      },
      "retailPrice": 79,
      "artworkUrls": ["https://cdn.stickermule.com/artwork.png"]
    },
    {
      "id": "789",
      "name": "Team t-shirt",
      "productId": 34,
      "productName": "Custom t-shirts",
      "quantity": 25,
      "size": { "__typename": "TShirtDimensions", "size": "sizeL" },
      "isSizeRequired": true,
      "buyingOptions": {
        "quantity": { "min": 1, "max": 500, "increment": 1 }
      },
      "retailPrice": 18,
      "artworkUrls": ["https://cdn.stickermule.com/shirt.png"]
    },
    {
      "id": "812",
      "name": "Team hoodie",
      "productId": 56,
      "productName": "Custom hoodies",
      "quantity": 10,
      "size": { "__typename": "HoodieDimensions", "size": "sizeM" },
      "isSizeRequired": true,
      "buyingOptions": {
        "quantity": { "min": 1, "max": 500, "increment": 1 }
      },
      "retailPrice": 32,
      "artworkUrls": ["https://cdn.stickermule.com/hoodie.png"]
    }
  ],
  "canLoadMore": true
}

Returns your saved shipping addresses, default first. Each id is valid as the addressId when creating an order.

GET /api/addresses
curl https://www.stickermule.com/api/addresses \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

FieldTypeDescription
idstringAddress identifier. Use it as the addressId when creating an order.
namestring | nullFull recipient name.
firstNamestring | nullRecipient first name.
lastNamestring | nullRecipient last name.
companyNamestring | nullCompany name, if any.
addressLine1stringStreet address.
addressLine2string | nullAdditional address line, if any.
cityNamestringCity.
stateNamestring | nullState or province name, if any.
stateAbbreviationstring | nullState or province abbreviation, if any.
zipCodestringPostal code.
countryIsostringISO 3166 country code, such as US.
countryNamestringCountry name.
phonestring | nullContact phone number, if any.
isDefaultbooleanTrue for your default shipping address.
Example response
{
  "addresses": [
    {
      "id": "22",
      "name": "Jane Doe",
      "firstName": "Jane",
      "lastName": "Doe",
      "companyName": null,
      "addressLine1": "123 Main St",
      "addressLine2": null,
      "cityName": "Amsterdam",
      "stateName": null,
      "stateAbbreviation": null,
      "zipCode": "1000AA",
      "countryIso": "NL",
      "countryName": "Netherlands",
      "phone": "+31612345678",
      "isDefault": true
    }
  ]
}

Returns your saved payment methods, default first. Each id is valid as the paymentId when creating an order.

GET /api/payments
curl https://www.stickermule.com/api/payments \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

FieldTypeDescription
idstringPayment method identifier. Use it as the paymentId when creating an order.
ccTypestringCard brand, such as visa or mastercard.
lastDigitsstringLast four digits of the card.
expirationobjectCard expiry as month and year.
isDefaultbooleanTrue for your default payment method.
Example response
{
  "payments": [
    {
      "id": "7",
      "ccType": "visa",
      "lastDigits": "1007",
      "expiration": { "month": 7, "year": 2028 },
      "isDefault": true
    }
  ]
}

Lists your placed orders, most recent first. Each order's number matches the one POST /api/orders returns.

GET /api/orders
curl "https://www.stickermule.com/api/orders?limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

Query parameters

ParameterTypeDefaultDescription
limitnumber10Number of orders to return, from 1 to 50.
offsetnumber0Number of orders to skip before returning results.

Response

Results are paginated with limit and offset, and canLoadMore is true when more orders are available. Because paging is offset-based, pages can shift as new orders are placed.

FieldTypeDescription
numberstringOrder number. The same value returned by POST /api/orders.
state"complete" | "canceled" | "gift_unclaimed" | "ready_for_production" | "in_production" | "ready_to_proof" | "awaiting_scheduled_date"The order's status.
paymentState"paid" | "credit_owed" | "balance_due" | "failed" | "checkout" | "completed" | "pending" | "processing" | "void" | nullThe order's payment status, or null.
shipmentState"backorder" | "canceled" | "partial" | "pending" | "ready" | "shipped" | "returned_for_reship" | "reship" | "delivered"The order's shipment status. Defaults to pending.
placedAtstringWhen the order was placed, as an ISO 8601 timestamp.
currencystringISO 4217 currency the order was charged in.
itemTotalnumberItems subtotal, before shipping, tax, and discounts.
totalnumberGrand total charged, including shipping and tax, less discounts.
expectedDeliveryDatestring | nullEstimated delivery date as an ISO 8601 timestamp, or null.
deliveredAtstring | nullWhen the order was delivered, as an ISO 8601 timestamp, or null.
Example response
{
  "orders": [
    {
      "number": "R286234605",
      "state": "complete",
      "paymentState": "paid",
      "shipmentState": "shipped",
      "placedAt": "2026-07-20T14:03:00.000Z",
      "currency": "USD",
      "itemTotal": 79,
      "total": 88.5,
      "expectedDeliveryDate": "2026-07-27T00:00:00.000Z",
      "deliveredAt": null
    }
  ],
  "canLoadMore": true
}

Places an order for one or more saved items, shipped to a saved address and charged to a saved payment method.

POST /api/orders
curl -X POST https://www.stickermule.com/api/orders \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [{ "id": "456", "quantity": 50 }],
    "addressId": "22",
    "paymentId": "7"
  }'

Request body

FieldTypeRequiredDescription
itemsarrayYesItems to order. Must contain at least one item.
items[].idstringYesAn item id from GET /api/items.
items[].quantitynumberYesQuantity to order for the item.
items[].sizeTShirtSize | HoodieSize | nullNoApparel size, required when ordering apparel (t-shirts, heavyweight t-shirts, and hoodies). Use the values below that match the product. Omit for other products.
addressIdstringYesAn address id from GET /api/addresses.
paymentIdstringYesA payment method id from GET /api/payments.

An order can contain up to 50 items. Each quantity must respect the product's min, max, and increment from GET /api/items.

Apparel sizes

Which sizes are valid depends on the product's cut:

  • T-shirts and heavyweight t-shirts (TShirtSize): "sizeYS" | "sizeYM" | "sizeYL" | "sizeS" | "sizeM" | "sizeL" | "sizeXL" | "size2XL" | "size3XL" | "size4XL" | "size5XL" | "size6XL" | "size7XL"
  • Hoodies (HoodieSize): "sizeS" | "sizeM" | "sizeL" | "sizeXL" | "size2XL"

Response

Example response
{
  "order": { "number": "R286234605" }
}

Errors

Errors return the matching HTTP status and a JSON body with a type and a message.

Example response
{
  "type": "UserInputError",
  "message": "items is required and must be a non-empty array"
}
StatusTypeMeaning
400UserInputErrorThe request was invalid, such as a missing field or an unknown id.
401UnauthorizedErrorThe Authorization header is missing or malformed.
403ForbiddenErrorThe API key is invalid.
500Something went wrong on our side. Try again later.

How it fits together

  • You can only order items you have ordered before. Custom items, packaging tape, and vinyl lettering are not available through the API.
  • Read your items, addresses, and payment methods first, then pass their ids to POST /api/orders.
  • GET /api/orders lists your placed orders, most recent first. Each order's number matches the one POST /api/orders returns.
  • Most products reorder at their original dimensions (width and height in inches). Apparel (t-shirts, heavyweight t-shirts, and hoodies) carries an apparel size instead: GET /api/items returns it under size with isSizeRequired true, and you pass items[].size to order them. Valid sizes depend on the product, and you can change the size on reorder, for example, reorder a sizeM shirt as sizeL.
  • GET /api/items and GET /api/orders are paginated with limit and offset. The endpoints for addresses and payments are not.