POST

Mettre à jour le statut

Mettre à jour le statut personnalisé d'une commande spécifique. Envoie automatiquement des notifications basées sur la configuration du statut.

Point de terminaison

Requête HTTP
POST /v1/orders/:order_id/status

Authentification

Ce point de terminaison nécessite une clé API valide avec la permission canChangeOrderStatus . La clé API doit être passée dans l'en-tête X-API-Key .
En-tête requis
X-API-Key: ucos_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Paramètres de chemin

ParamètreTypeRequisDéfautDescription
order_idstringOui-Identifiant de commande (UUID par défaut, ou partie numérique de l'ID Shopify si use_shopify_order_id est true dans le corps de la requête). Pour les ID de commande Shopify, extraire le numéro du format GID (par ex., pour 'gid://shopify/Order/450789469', utiliser '450789469').

Corps de la requête

ParamètreTypeRequisDéfautDescription
status_idstringOui-L'UUID du statut personnalisé
sub_status_option_idstringConditionnel-L'UUID de l'option de sous-statut. Requis si le statut a des options de sous-statut.
use_shopify_order_idbooleanNonfalseDéfinir à 'true' pour rechercher la commande en utilisant l'ID Shopify au lieu de l'UUID. Extraire le numéro du format GID Shopify (gid://shopify/Order/450789469 → 450789469) et l'utiliser dans le paramètre de chemin order_id.
fulfillment_selectionsobjetNon-Réponse facultative (v1.5) à un bloc fulfillment_readiness : { [shopOrderId]: { [fulfillmentOrderId]: locationId } }.

Réponse

Retourne une confirmation avec les détails de la commande mise à jour:
200 OK - Réponse de succès
{
  "success": true,
  "data": {
    "message": "string",
    "order": {
      "id": "string",
      "shopify_order_id": "string",
      "name": "string",
      "status": {
        "id": "string",
        "name": "string",
        "color": "string"
      },
      "sub_status": null,
      "workflow_id": "string",
      "workflow_name": "string"
    },
    "notifications": {
      "total_sent": 0,
      "total_failed": 0,
      "by_channel": {}
    },
    "orders_fulfilled": 0,
    "fulfillment_errors": [
      {
        "channel": "string",
        "code": "string",
        "message": "string"
      }
    ]
  }
}

Champs de réponse

Objet de réponse racine

ChampTypeDescription
successbooleanToujours true pour une réponse réussie.
dataobjectCharge utile de le point de terminaison. Ses champs sont détaillés dans les tableaux ci-dessous.
messagestringMessage de confirmation
orderobjectObjet contenant les détails de la commande mise à jour
notificationsobjectObjet contenant les statistiques de notification
orders_fulfillednumberNombre de commandes dont l'exécution a été appliquée.
fulfillment_errorsarrayErreurs d'exécution ; une exécution bloquée ne s'applique jamais à moitié.
fulfillment_readinessobject | nullPrésent lorsque l'exécution est refusée ; bloc de choix pour la résoudre (v1.5 uniquement).
fulfillment_move_resultsarrayRésultat d'un déplacement demandé (v1.5 uniquement).

Objet de commande

ChampTypeDescription
idstringUUID de la commande
shopify_order_idstringID de commande Shopify
namestringNom/numéro de commande Shopify
statusobjectObjet de statut avec id, nom et couleur
sub_statusobject | nullObjet de sous-statut avec id et nom (si applicable)
workflow_idstringUUID du workflow auquel la commande appartient (v1.3+ uniquement)
workflow_namestringNom du workflow auquel la commande appartient (v1.3+ uniquement)

Champs d'objet de statut

ChampTypeDescription
idstringUUID du statut
namestringNom d'affichage du statut
colorstringCode couleur hexadécimal du statut

Objet de sous-statut

ChampTypeDescription
idstringUUID du sous-statut
namestringNom du sous-statut

Champs d'objet de notifications

ChampTypeDescription
total_sentnumberNombre total de notifications envoyées avec succès
total_failednumberNombre total de notifications ayant échoué
by_channelobjectObjet avec les statistiques par canal (par ex., email, sms)

Champs d'objet de statistiques par canal

ChampTypeDescription
sentnumberNombre de notifications envoyées avec succès pour ce canal
failednumberNombre de notifications ayant échoué pour ce canal

Champs d'un objet d'erreur d'exécution

ChampTypeDescription
channelstringCanal d'exécution en échec.
codestringCode d'erreur lisible par la machine.
messagestringMessage d'erreur lisible par l'humain.

Champs de l'objet de préparation d'exécution

ChampTypeDescription
requiredbooleanIndique si un choix d'emplacement est nécessaire.
codestringCode de refus lisible par la machine.
causestringCause sous-jacente.
messagestringMessage à montrer à l'opérateur.
orders_to_fulfillment_orders_mapobjectMap identifiant de commande → identifiants d'ordres d'exécution.
moveable_fulfillment_order_idsarrayOrdres d'exécution pouvant être déplacés.
location_choicesarrayEmplacements de destination candidats.
submit_withstringChamp de requête dans lequel envoyer la réponse — fulfillment_selections.

Champs d'un résultat de déplacement d'exécution

ChampTypeDescription
shop_order_idstringGID de la commande Shopify concernée par le déplacement.
fulfillment_order_idstringGID de l'ordre d'exécution déplacé.
location_idstringIdentifiant de l'emplacement de destination.
successbooleanIndique si le déplacement a réussi.
errorstring | nullMessage d'erreur en cas d'échec du déplacement.

Exemples

Requête de base (UUID)

Requête cURL
curl -X POST "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders/8c1d4e2f-0a53-49b7-b6e4-7f2d9c3a5e10/status" \
  -H "X-API-Key: ucos_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "X-API-Version: 1.5" \
  -H "Content-Type: application/json" \
  -d '{"order_id":"8c1d4e2f-0a53-49b7-b6e4-7f2d9c3a5e10","use_shopify_order_id":false,"status_id":"8c1d4e2f-0a53-49b7-b6e4-7f2d9c3a5e10","sub_status_option_id":"8c1d4e2f-0a53-49b7-b6e4-7f2d9c3a5e10","fulfillment_selections":{}}'

Utilisation de l'ID de commande Shopify

Requête cURL
curl -X POST "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders/5460132438316/status" \
  -H "X-API-Key: ucos_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" \
  -H "X-API-Version: 1.5" \
  -H "Content-Type: application/json" \
  -d '{
    "status_id": "status-uuid-abc123",
    "sub_status_option_id": "sub-status-uuid-def456",
    "use_shopify_order_id": true
  }'

Limitation de débit

Ce point de terminaison est soumis à des limites de débit par minute et par jour en fonction de votre clé API. Les informations de limite de débit sont renvoyées dans les en-têtes de réponse:
  • X-RateLimit-Limit-Minute: Nombre maximum de requêtes par minute
  • X-RateLimit-Remaining-Minute: Requêtes restantes dans la minute en cours
  • X-RateLimit-Reset-Minute: Horodatage Unix de réinitialisation de la fenêtre minute
  • X-RateLimit-Limit-Day: Nombre maximum de requêtes par jour
  • X-RateLimit-Remaining-Day: Requêtes restantes dans le jour en cours
  • X-RateLimit-Reset-Day: Horodatage Unix de réinitialisation de la fenêtre jour
  • Retry-After: Secondes à attendre avant de réessayer (en cas de limitation)

Réponses d'erreur

400 Mauvaise requête

Corps de requête invalide, échec de validation ou le statut nécessite un sous-statut

400 Mauvaise requête
{
  "success": false,
  "error": "Validation failed",
  "details": {
    "errors": [
      {
        "code": "invalid_type",
        "expected": "string",
        "received": "undefined",
        "path": [
          "status_id"
        ],
        "message": "Required"
      }
    ]
  }
}

401 Non autorisé

Clé API manquante ou invalide

401 Non autorisé
{
  "success": false,
  "error": "Missing API key. Include it in the X-API-Key header"
}

403 Interdit

La clé API manque de permissions requises ou l'application de la chaîne de produits empêche ce changement de statut

403 Interdit
{
  "success": false,
  "error": "Insufficient permissions. Required: canChangeOrderStatus"
}

404 Non trouvé

Commande, statut ou sous-statut non trouvé

404 Non trouvé
{
  "success": false,
  "error": "Order not found"
}

500 Erreur interne du serveur

Une erreur du serveur s'est produite

500 Erreur interne du serveur
{
  "success": false,
  "error": "Internal server error",
  "details": {
    "message": "An unexpected error occurred"
  }
}