Aller au contenu principal

Scopes

Un scope est une permission sur un type de données de la boutique. Vous enregistrez les scopes dont votre application a besoin dans la console développeur, et la demande d'autorisation peut les demander tous ou une partie. Le jeton d'accès porte exactement les scopes que le marchand a approuvés.

Scopes qu'une application peut demander​

Les descriptions de ce tableau sont celles que le marchand lit à l'écran de consentement.

ScopeDescription
analytics:readConsulter les statistiques de votre boutique
customers:readConsulter vos clients et leurs coordonnées (nom, téléphone, adresse)
delivery:sendRemettre vos commandes au transporteur
landing_pages:readConsulter vos pages de destination
landing_pages:writeConsulter, créer, modifier et publier des pages de destination
orders:readConsulter les commandes (lecture seule, aucune création ni modification)
orders:writeCréer et modifier des commandes
pixels:readConsulter vos pixels de suivi publicitaire
pixels:writeConsulter, ajouter et modifier vos pixels de suivi publicitaire
products:readConsulter vos produits
products:writeConsulter, créer, modifier et supprimer des produits
promos:readConsulter vos codes promo
promos:writeConsulter, créer et modifier des codes promo (cela change les prix payés par vos clients)
shipping:readConsulter vos tarifs et réglages de livraison
shipping:writeConsulter et modifier vos tarifs de livraison, et connecter ou déconnecter vos transporteurs
store:readConsulter les informations et les réglages de votre boutique
store:writeConsulter et modifier les réglages, le design et le thème de votre boutique
whatsapp:readConsulter les modèles de messages WhatsApp, votre solde et l'historique des messages envoyés
whatsapp:sendEnvoyer des messages WhatsApp à vos acheteurs au sujet de leurs commandes (chaque message est débité de votre solde WhatsApp)

Règles des scopes d'application​

  • Seuls les scopes du tableau ci-dessus peuvent être enregistrés sur une application ou lui être accordés. Tout autre scope dans la demande d'autorisation échoue avec invalid_scope.
  • Les applications ne peuvent pas demander ai:generate. Ce scope lance des générations IA qui consomment les crédits IA du marchand.
  • Les applications ne peuvent pas demander usage:read, webhooks:read ni webhooks:write. Votre application reçoit ses webhooks par l'URL de webhook de son enregistrement, pas par /v1/webhooks.
  • Un paramètre scope absent ou vide accorde tous les scopes enregistrés sur l'application.
  • Demandez le moins de scopes possible. Le marchand voit une ligne par ressource sur l'écran de consentement avant d'approuver.

Endpoints ouverts par chaque scope​

Cette liste est celle que déclare la description OpenAPI. Quelques écritures demandent aussi le scope de lecture : POST /v1/orders, PATCH /v1/orders/{id} et POST /v1/orders/{id}/cancel demandent orders:read et orders:write, POST /v1/products et PATCH /v1/products/{id} demandent products:read et products:write, et POST /v1/landing-pages, PATCH /v1/landing-pages/{id} et POST /v1/landing-pages/{id}/publish demandent landing_pages:read et landing_pages:write. Ces écritures répondent avec l'enregistrement mis à jour, et sa lecture demande le scope de lecture. Sans ce scope, l'écriture s'exécute quand même, puis l'appel répond 403 avec un message comme Missing scope: orders:read, et une nouvelle tentative avec le même Idempotency-Key renvoie ce 403 enregistré. Enregistrez et demandez les deux scopes.

ScopeEndpoints
analytics:readGET /v1/analytics
customers:readGET /v1/customers, GET /v1/customers/{id}, GET /v1/customers/{id}/orders
delivery:sendPOST /v1/orders/{id}/send-to-delivery
landing_pages:readGET /v1/landing-page-section-types, GET /v1/landing-pages, GET /v1/landing-pages/{id}, GET /v1/landing-pages/{id}/check, GET /v1/landing-pages/{id}/sections, GET /v1/landing-pages/generate/{id}
landing_pages:writePOST /v1/landing-pages, PATCH /v1/landing-pages/{id}, DELETE /v1/landing-pages/{id}, POST /v1/landing-pages/{id}/publish, POST /v1/landing-pages/{id}/sections, POST /v1/landing-pages/{id}/sections/batch, POST /v1/landing-pages/{id}/sections/reorder, PATCH /v1/landing-pages/{id}/sections/{section_id}, DELETE /v1/landing-pages/{id}/sections/{section_id}
orders:readGET /v1/orders, GET /v1/orders/{id}
orders:writePOST /v1/orders, PATCH /v1/orders/{id}, POST /v1/orders/{id}/cancel
pixels:readGET /v1/pixels
pixels:writePOST /v1/pixels, PATCH /v1/pixels/{id}, DELETE /v1/pixels/{id}
products:readGET /v1/categories, GET /v1/categories/{id}, GET /v1/products, GET /v1/products/{id}, GET /v1/products/{id}/addons, GET /v1/products/{id}/offers, GET /v1/products/{id}/quantity-rules, GET /v1/products/{id}/stock
products:writePOST /v1/categories, POST /v1/categories/reorder, PATCH /v1/categories/{id}, DELETE /v1/categories/{id}, POST /v1/products, PATCH /v1/products/{id}, DELETE /v1/products/{id}, POST /v1/products/{id}/addons, POST /v1/products/{id}/images, PATCH /v1/products/{id}/images/{image_id}, DELETE /v1/products/{id}/images/{image_id}, POST /v1/products/{id}/offers, POST /v1/products/{id}/quantity-rules, POST /v1/products/{id}/stock, PUT /v1/products/{id}/variants
promos:readGET /v1/promo-codes
promos:writePOST /v1/promo-codes, PATCH /v1/promo-codes/{id}, DELETE /v1/promo-codes/{id}
shipping:readGET /v1/shipping/coverage, GET /v1/shipping/providers, GET /v1/shipping/rates, GET /v1/shipping/settings, GET /v1/wilayas, GET /v1/wilayas/{id}/communes
shipping:writePOST /v1/shipping/providers, POST /v1/shipping/providers/default, POST /v1/shipping/providers/test, DELETE /v1/shipping/providers/{provider}, POST /v1/shipping/rates, POST /v1/shipping/rates/sync, PATCH /v1/shipping/settings
store:readGET /v1/store, GET /v1/store/design, GET /v1/store/design/fields, GET /v1/store/home-sections, GET /v1/store/home-layout, GET /v1/themes
store:writePATCH /v1/store, PATCH /v1/store/design, PATCH /v1/store/home-sections, PUT /v1/store/home-layout, POST /v1/store/home-layout/sections, PATCH /v1/store/home-layout/sections/{id}, DELETE /v1/store/home-layout/sections/{id}, POST /v1/store/home-layout/reorder, POST /v1/store/theme, POST /v1/store/fast-checkout-theme, POST /v1/store/variant-style
whatsapp:readGET /v1/whatsapp/templates, GET /v1/whatsapp/balance, GET /v1/whatsapp/messages
whatsapp:sendPOST /v1/orders/{id}/whatsapp

GET /v1/whoami ne demande aucun scope. GET /v1/ping ne demande aucun jeton. Un appel sans le scope nécessaire répond 403 avec le code forbidden et un message qui nomme le scope, par exemple Missing scope: orders:read.

Endpoints fermés aux jetons d'application​

Ces endpoints répondent 403 avec le message Apps cannot use this endpoint, quels que soient les scopes du jeton : /v1/keys, /v1/webhooks, /v1/changes et POST /v1/changes/{id}/undo. Le marchand garde la gestion des clés, les abonnements webhook et l'historique d'annulation. Les endpoints de connexion des assistants, GET /v1/connection et POST /v1/connection/active-store, répondent 403 sans store:read ou store:write, et 404 sinon, car un jeton d'application n'a pas été créé par une connexion d'assistant.

Scopes et webhooks​

Chaque événement de commande (order.created, order.confirmed, order.processing, order.shipped, order.delivered, order.cancelled, order.returned) contient le nom, le téléphone et l'adresse de l'acheteur. Votre installation ne reçoit les événements de commande que si le marchand a accordé orders:read. L'événement app.uninstalled est envoyé quels que soient les scopes. Voir webhooks.

Ce que voit le marchand​

L'écran de consentement regroupe les scopes par ressource et affiche une ligne par ressource : la ligne d'écriture quand l'application demande l'écriture, la ligne de lecture sinon. La ligne est rédigée dans la langue du marchand. Modifier les scopes enregistrés sur l'application ne change pas les jetons déjà émis ; une boutique reçoit les nouveaux scopes quand le marchand installe de nouveau l'application.

Cette page pour les outils IAVoir en MarkdownOuvrir dans ChatGPTOuvrir dans Claude