Passer au contenu principal

API Sticker Mule

L'API Sticker Mule vous permet de renouveler la commande de produits et de consulter vos articles enregistrés, adresses et moyens de paiement depuis votre propre code. Il s'agit d'une petite API REST authentifiée avec une clé API personnelle.

Démarrage rapide

1. Générer une clé API

Ouvrez les paramètres de votre compte et, dans les paramètres de Boutique, générez une clé API. Copiez-la immédiatement, elle n'est affichée qu'une seule fois.

Ouvrir les paramètres du compte

2. Appeler l'API

Envoyez votre clé en tant que jeton Bearer. Cet exemple passe une commande pour un article enregistré :

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"
  }'

Authentification

Chaque requête doit inclure votre clé API en tant que jeton Bearer dans l'en-tête "Authorization".

Authorization: Bearer YOUR_API_KEY
  • L'API est disponible uniquement sur les comptes personnels, et non sur les comptes d'équipe.
  • Chaque compte possède une clé. La génération d'une nouvelle clé remplace l'ancienne.
  • Traitez la clé comme un mot de passe. Elle peut passer des commandes et lire vos données sauvegardées.

URL de base

Tous les endpoints sont relatifs à cette URL de base.

https://www.stickermule.com/api

Points de terminaison

Renvoie les articles que vous pouvez commander. L'identifiant de chaque article peut être utilisé sous la forme items[].id lors de la création d'une commande.

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

Paramètres de requête

ParamètreTypePar défautDescription
limitnumber20Nombre d'articles à retourner, de 1 à 50.
offsetnumber0Nombre d'éléments à ignorer avant d'afficher les résultats.
currencystringUSDCode de devise ISO 4217 utilisé pour les prix.
localestringenLangue utilisée pour les noms et les prix des produits.

Réponse

Les résultats sont paginés avec une limite et un décalage, et l'option "canLoadMore" est activée lorsque davantage d'articles sont disponibles. La pagination étant basée sur le décalage, les pages peuvent se déplacer à mesure que de nouvelles commandes arrivent.

ChampTypeDescription
idstringIdentifiant de l'article. À utiliser sous la forme items[].id lors de la création d'une commande.
namestring | nullNom personnalisé que vous avez donné à l'article, le cas échéant.
productIdnumberIdentifiant du produit Sticker Mule.
productNamestring | nullNom du produit, ou null si le produit n'est plus disponible.
quantitynumberQuantité de la commande initiale.
sizeRegularItemDimensions | TShirtDimensions | HoodieDimensionsTaille de l'article. Pour les t-shirts et les t-shirts épais, un objet de taille de vêtement avec __typename TShirtDimensions et une taille. Pour les sweats à capuche, __typename HoodieDimensions et une taille. Pour tous les autres produits, les dimensions physiques en pouces avec __typename RegularItemDimensions ainsi que la largeur et la hauteur.
isSizeRequiredbooleanVrai lorsque le produit nécessite une taille de vêtement pour être réapprovisionné (t-shirts, t-shirts épais et sweats à capuche). Faux dans le cas contraire.
buyingOptionsobject | nullQuantités de réapprovisionnement autorisées : minimum, maximum et incrément. Valeur nulle si le produit est indisponible.
retailPricenumber | nullPrix correspondant à la quantité minimale, ou valeur nulle si le prix n'est pas disponible.
artworkUrlsstring[]URL des maquettes approuvées pour l'article.
Exemple de réponse
{
  "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
}

Renvoie vos adresses de livraison enregistrées, par défaut en premier. Chaque identifiant est valide comme identifiant d'adresse lors de la création d'une commande.

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

Réponse

ChampTypeDescription
idstringIdentifiant d'adresse. À utiliser comme addressId lors de la création d'une commande.
namestring | nullNom complet du destinataire.
firstNamestring | nullPrénom du destinataire.
lastNamestring | nullNom de famille du destinataire.
companyNamestring | nullNom de l'entreprise, le cas échéant.
addressLine1stringAdresse postale.
addressLine2string | nullLigne d'adresse supplémentaire, le cas échéant.
cityNamestringVille.
stateNamestring | nullNom de l'État ou de la province, le cas échéant.
stateAbbreviationstring | nullAbréviation de l'État ou de la province, le cas échéant.
zipCodestringCode Postal.
countryIsostringCode pays ISO 3166, tel que "US".
countryNamestringNom du pays.
phonestring | nullNuméro de téléphone, le cas échéant.
isDefaultbooleanValable pour votre adresse de livraison par défaut.
Exemple de réponse
{
  "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
    }
  ]
}

Renvoie vos moyens de paiement enregistrés, en commençant par celui défini par défaut. Chaque identifiant peut être utilisé comme paymentId lors de la création d'une commande.

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

Réponse

ChampTypeDescription
idstringIdentifiant du mode de paiement. Utilisez-le comme paymentId lors de la création d'une commande.
ccTypestringMarque de carte, telle que Visa ou Mastercard.
lastDigitsstringLes quatre derniers chiffres de la carte.
expirationobjectDate d'expiration de la carte (mois et année).
isDefaultbooleanC'est valable pour votre mode de paiement par défaut.
Exemple de réponse
{
  "payments": [
    {
      "id": "7",
      "ccType": "visa",
      "lastDigits": "1007",
      "expiration": { "month": 7, "year": 2028 },
      "isDefault": true
    }
  ]
}

Affiche la liste de vos commandes passées, de la plus récente à la plus ancienne. Le numéro de chaque commande correspond à celui renvoyé par la requête POST /api/orders.

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

Paramètres de requête

ParamètreTypePar défautDescription
limitnumber10Nombre de commandes à retourner, de 1 à 50.
offsetnumber0Nombre de commandes à ignorer avant d'afficher les résultats.

Réponse

Les résultats sont paginés avec une limite et un décalage, et l'option "canLoadMore" est activée lorsque davantage de commandes sont disponibles. La pagination étant basée sur le décalage, les pages peuvent se déplacer à mesure que de nouvelles commandes sont placées.

ChampTypeDescription
numberstringNuméro de commande. La même valeur que celle renvoyée par la requête POST /api/orders.
state"complete" | "canceled" | "gift_unclaimed" | "ready_for_production" | "in_production" | "ready_to_proof" | "awaiting_scheduled_date"Statut de la commande.
paymentState"paid" | "credit_owed" | "balance_due" | "failed" | "checkout" | "completed" | "pending" | "processing" | "void" | nullLe statut de paiement de la commande, ou la valeur "null".
shipmentState"backorder" | "canceled" | "partial" | "pending" | "ready" | "shipped" | "returned_for_reship" | "reship" | "delivered"Statut d'expédition de la commande. Par défaut : en attente.
placedAtstringLorsque la commande a été passée, sous la forme d'un horodatage conforme à la norme ISO 8601.
currencystringDevise ISO 4217 dans laquelle la commande a été facturée.
itemTotalnumberSous-total des articles, avant frais de port, taxes et réductions.
totalnumberMontant total facturé, frais de port et taxes inclus, moins les remises.
expectedDeliveryDatestring | nullDate de livraison estimée sous forme d'horodatage ISO 8601, ou nulle.
deliveredAtstring | nullLorsque la commande a été livrée, sous forme d'horodatage ISO 8601 ou de valeur nulle.
Exemple de réponse
{
  "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
}

Passe une commande pour un ou plusieurs articles enregistrés, expédiée à une adresse enregistrée et facturée selon un mode de paiement enregistré.

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"
  }'

Corps de la requête

ChampTypeObligatoireDescription
itemsarrayOuiArticles à commander. Doit contenir au moins un article.
items[].idstringOuiUn identifiant d'article provenant de la requête GET /api/items.
items[].quantitynumberOuiQuantité à commander pour cet article.
items[].sizeTShirtSize | HoodieSize | nullNonTaille du vêtement, à indiquer lors de la commande de vêtements (t-shirts, t-shirts épais et sweats à capuche). Utilisez les valeurs ci-dessous correspondant au produit. Ne rien indiquer pour les autres produits.
addressIdstringOuiUn identifiant d'adresse provenant de GET /api/addresses.
paymentIdstringOuiUn identifiant de mode de paiement issu de l'API GET /api/payments.

Une commande peut contenir jusqu'à 50 articles. La quantité de chaque article doit respecter les valeurs minimales, maximales et d'incrément du produit, telles que définies dans l'API GET /api/items.

Tailles de vêtements

Les tailles disponibles dépendent de la coupe du produit :

  • T-shirts et t-shirts épais (TShirtSize) : "sizeYS" | "sizeYM" | "sizeYL" | "sizeS" | "sizeM" | "sizeL" | "sizeXL" | "size2XL" | "size3XL" | "size4XL" | "size5XL" | "size6XL" | "size7XL"
  • Sweats à capuche (HoodieSize) : "sizeS" | "sizeM" | "sizeL" | "sizeXL" | "size2XL"

Réponse

Exemple de réponse
{
  "order": { "number": "R286234605" }
}

Erreurs

Les erreurs renvoient le code d'état HTTP correspondant ainsi qu'un corps JSON contenant un type et un message.

Exemple de réponse
{
  "type": "UserInputError",
  "message": "items is required and must be a non-empty array"
}
StatutTypeSignification
400UserInputErrorLa requête était invalide, par exemple en raison d'un champ manquant ou d'un identifiant inconnu.
401UnauthorizedErrorL'en-tête d'autorisation est manquant ou mal formé.
403ForbiddenErrorLa clé API est invalide.
500Une erreur s'est produite de notre côté. Veuillez réessayer plus tard.

Comment tout cela s'articule-t-il ?

  • Vous ne pouvez commander que des articles que vous avez déjà commandés. Les articles personnalisés, le ruban adhésif d'emballage et les lettrages en vinyle ne sont pas disponibles via l'API.
  • Veuillez d'abord lire vos articles, adresses et modes de paiement, puis transmettre leurs identifiants à la requête POST /api/orders.
  • La requête GET /api/orders affiche la liste de vos commandes passées, classées par ordre chronologique décroissant. Le numéro de chaque commande correspond à celui renvoyé par la requête POST /api/orders.
  • La plupart des produits sont commandés à nouveau dans leurs dimensions d'origine (largeur et hauteur en pouces). Les vêtements (t-shirts, t-shirts épais et sweats à capuche) sont quant à eux proposés selon un système de tailles : l'appel GET /api/items renvoie cette information sous la clé size lorsque isSizeRequired est défini sur true, et vous devez transmettre items[].size pour les commander. Les tailles valides dépendent du produit, et vous pouvez modifier la taille lors d'une nouvelle commande, par exemple, commander un t-shirt de taille M en taille L.
  • Les requêtes GET /api/items et GET /api/orders sont paginées à l'aide des paramètres "limit" et "offset". Ce n'est pas le cas des points de terminaison relatifs aux adresses et aux paiements.