NAV
cURL

Introduction

API de synchronisation des données entre l'ERP et Shopify

Authentification

Exemple de authentification:

curl http://127.0.0.1/api/endpoint \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Remplacer •••••• par votre clé d'API.

Passer la clé d'API dans le header de la requête avec le format suivant:

Authorization: Bearer ma_cle_api

Le header Accept: application/json force le format de la réponse en JSON.

Produits

Ajouter et modifier un produit

curl http://127.0.0.1/api/products/upsert \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Exemple de payload

{
    "id": "I230647695",
    "espece": "ABRICOTIER",
    "variete": "CANINO",
    "forme": "TIGE HAUTE",
    "forme_categorie":"Arbres de plein vent",
    "force": "FORCE 1",
    "gamme": "SECOND CHOIX",
    "prix_ht": 158.181818,
    "prix_ttc": 174,
    "commentaire": "LEGEREMENT COURBE 150CM",
    "photos": [
        "base64photo1==",
        "base64photo2=="
    ],
    "couleurs": [
        "Vert"
    ],
    "saison_cueillettes": [
        "Été",
        "Automne"
    ],
    "aspect_culinaires": [
        "Tarte",
        "A croquer"
    ],
    "saveurs": [
        "Acidulé"
    ],
    "environnements": [
        "Tous types de sol",
        "Sol profond"
    ],
    "specificite": "",
    "fruit": "Abricot",
    "defaut": "",
    "description_espece": "",
    "categorie": "arbres fruitiers",
    "poids": 20000,
    "statut": "disponible",
    "periode_arrachage": "Hiver"
}

HTTP Request

POST http://127.0.0.1/api/products/upsert

Propriétés

Paramètre Description
id ID
espece Espèce
variete Variété
forme Forme
forme_categorie Catégories de le forme ("Arbres de plein vent", "Espaliers"...)
force Force
gamme "" ou "SECOND CHOIX"
prix_ht Prix HT
prix_ttc Prix TTC
prix_avant_reduction Prix TTC avant réduction, affiché en barré
commentaire Commentaire
photos Liste des photos
couleurs Liste des couleurs
saison_cueillettes Liste des saisons de cueillettes
aspect_culinaires Liste des aspects culinaires
saveurs Liste des saveurs
environnements Liste des environnements de culture
specificite Spécificité des petits fruits (Remontant, Non-remontant)
fruit Fruit de l'arbre
defaut Défaut de l'arbre
description_espece Description de l'espece
categorie Catégorie (arbres fruitiers, petits fruits, autre)
poids Poids en gramme
statut Disponibilité du produit (disponible, reserve)
periode_arrachage Période d'arrachage

Modifier les images d'un produit (variété)

Ce endpoint permet de mettre à jour les images d'une variété qui correspond à un produit. Pour les images spécifiques à une déclinaison (forme, force) utiliser le endpoint products/upsert

curl http://127.0.0.1/api/products/images \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Exemple de payload

{
    "espece": "ABRICOTIER",
    "variete": "CANINO",
    "forme_categorie":"Arbres de plein vent",
    "photos": [
        "base64photo1==",
        "base64photo2=="
    ],
}

HTTP Request

POST http://127.0.0.1/api/products/images

Propriétés

Paramètre Description
espece Espèce
variete Variété
forme_categorie Catégories de le forme ("Arbres de plein vent", "Espaliers"...)
photos Liste des photos

Archiver un produit

curl http://127.0.0.1/api/products/archive \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Endpoint pour supprimer un produit

Requête HTTP

POST http://127.0.0.1/api/products/archive

Propriétés

Paramètre Description
id ID

Exemple de payload

{
    "id": "I230647695"
}

Lister les stocks

curl http://127.0.0.1/api/products/stocks \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Récupérer les stocks des produits

Requête HTTP

GET http://127.0.0.1/api/products/stocks

Exemple de réponse

{
    "I230662575": 0,
    "I230662576": 1,
    "I230662580": 0
}

Catégories

Mettre à jour les catégories

curl http://127.0.0.1/api/categories/upsert \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Exemple de payload

{
    "categories": [
        {
            "espece": "ABRICOTIER",
            "description": "Abricotier robuste"
        }
    ]
}

HTTP Request

POST http://127.0.0.1/api/categories/upsert

Propriétés

Paramètre Description
categories Liste des catégories
- espece Espèce (au même format que dans les produits)
- description Description

Commandes

Récupérer les commandes

curl http://127.0.0.1/api/orders?from="2024-05-30 10:00:00" \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Endpoint pour récupérer les nouvelles commandes depuis une date donnée

Requête HTTP

GET http://127.0.0.1/api/orders?from=<DATE>

Exemple de réponse

{
    "orders": [
        {
            "shopify_id": 5748587364501,
            "numero": 1013,
            "articles": [
                {
                    "id": "I230600842",
                    "shopify_id": "13718966829205",
                    "nom": "Andre desportes - Jolis Moches - CORDON 1/2 3 ETAGES / FORCE 2 / 1",
                    "prix": "116.00",
                    "tva": "10.55",
                    "tva_pourcent": "10",
                    "reductions": []
                }
            ],
            "articles_rembourses": [],
            "client": {
                "shopify_id": 7705749946517,
                "email": "baptiste@agence-webup.com",
                "prenom": "baptiste",
                "nom": "test",
                "entreprise": null,
                "adresse1": "8 Rue Raymond Poincaré",
                "adresse2": null,
                "ville": "Troyes",
                "code_postal": "10000",
                "pays": "France",
                "telephone": null
            },
            "adresse_livraison": {
                "prenom": "baptiste",
                "nom": "test",
                "entreprise": null,
                "adresse1": "8 Rue Raymond Poincaré",
                "adresse2": null,
                "code_postal": "10000",
                "ville": "Troyes",
                "pays": "France",
                "telephone": null
            },
            "adresse_facturation": {
                "prenom": "baptiste",
                "nom": "test",
                "entreprise": null,
                "adresse1": "8 Rue Raymond Poincaré",
                "adresse2": null,
                "code_postal": "10000",
                "ville": "Troyes",
                "pays": "France",
                "telephone": null
            },
            "mode_reglement": "bogus",
            "date_livraison": null,
            "frais_expedition_total": "8.80",
            "frais_expedition_total_tva": "1.47",
            "frais_expedition_total_tva_pourcent": "20",
            "total": "124.80",
            "total_tva": "12.02",
            "traite": false,
            "date_creation": "2024-09-18 09:51:31",
            "date_modification": "2024-09-18 09:51:32"
        }
    ]
}

Query Parameters

Paramètre Description
from Récupére les commandes à partir de cette date au format YYYY-MM-DD HH:MM:SS

Marquer une commande comme traitée

curl http://127.0.0.1/api/orders/close \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Exemple de payload

{
    "shopify_id": 5657239126165
}

HTTP Request

POST http://127.0.0.1/api/orders/close

Propriétés

Paramètre Description
shopify_id Id Shopify de la commande

Divers

Reset de la base de données

Reset base de données de l'API (mais pas celle de Shopify)

curl http://127.0.0.1/api/database/reset \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Authorization: Bearer ••••••'

Requête HTTP

POST http://127.0.0.1/api/database/reset

Propriétés

Aucun paramètre requis

Erreurs

Exemple d'erreur 422

{
    "message": "The title field is required. (and 2 more errors)",
    "errors": {
        "title": [
            "The title field is required."
        ],
        "price": [
            "The price field is required."
        ],
        "inventory": [
            "The inventory field is required."
        ]
    }
}

L'API retourne les erreurs HTTP suivantes

Code d'erreur Description
401 La clé d'API n'est pas valide.
403 Vous n'avez pas les droits d'accès à la ressource demandée.
404 La ressource demandée n'a pas été trouvée.
405 La méthode HTTP utilisée n'est pas supportée.
422 Le contenu de la requête n'est pas valide. Les erreurs sont retournées dans le corps de la réponse.
500 Une erreur non prévue est survenue.