API Bephoto

Consultez la documentation ci-dessous pour automatiser vos commandes d'impression.

Bephoto API Documentatie

Introductie

Het verzenden van afdrukbestellingen gebeurt via een REST API. Voordat u verzoeken naar de API kunt doen, moet u eerst authentificeren met de ontvangen referenties om een authenticatietoken te verkrijgen. Dit token moet worden opgenomen in de "Authorization" header van elke daaropvolgende API-aanroep:

Authorization: Bearer <your-authentication-token>

Het token is één jaar geldig. Bij elke authenticatie wordt een nieuw token uitgegeven.

Live API URL https://api.bephoto.be

Inloggen

Authenticeer door de /user/login endpoint aan te roepen met uw inloggegevens:

POST /user/login { "email": "<string>", "password": "<string>" }

Succes antwoord:

{ "status": 1, "token": "<string>" }

Fout antwoord:

{ "error": "Unauthorized" }

Paramètres envoyés à l'API

  • email: L'adresse email de l'utilisateur.
  • password: Le mot de passe de l'utilisateur.

Authenticatie met API-sleutel

Om geen wachtwoord in uw integratie te gebruiken, authenticeert u met een API-sleutel door /user/loginToken aan te roepen. De sleutel wordt op aanvraag door Bephoto verstrekt, per account:

POST /user/loginToken { "token": "<string>" }

Succes antwoord:

{ "status": 1, "token": "<string>" }

Fout antwoord:

{ "error": "Unauthorised" }

Parameters verzonden naar de API

  • token: De API-sleutel die u van Bephoto heeft ontvangen.

Bestelling aanmaken

Maak een nieuwe bestelling aan door /orders aan te roepen met optionele metadata. Nadat u een bestelling heeft aangemaakt, ontvangt u een unieke idorder die in de volgende aanroepen moet worden gebruikt:

POST /orders { "metadata": "<string>" }

Succes antwoord:

{ "status": 1, "order": { "idorder": "<integer>", "datestart": "<timestamp>", "totalorder": "<float>", "totalcost": "<float>", "dateconfirmation": "<timestamp>", "dateprocessed": "<timestamp>", "shippingmethod": "<string>", "metadata": "<string>" } }

Paramètres envoyés à l'API

  • metadata: Métadonnées personnalisées associées à la commande. Max. longueur : 255 caractères.

Bestelling ophalen

Haal informatie op over een bestelling door /orders/{IDORDER} aan te roepen:

GET /orders/{IDORDER}

Succes antwoord:

{ "status": 1, "order": { "idorder": "<integer>", "datestart": "<timestamp>", "totalorder": "<float>", "totalcost": "<float>", "dateconfirmation": "<timestamp>", "dateprocessed": "<timestamp>", "shippingmethod": "<string>", "metadata": "<string>", "products": [{ "idproduct": "<integer>", "idpaper": "<integer>", "quantity": "<integer>", "size": "<string>" }] } }

Het veld shippingmethod is PICKUP (afhaling) of BPOST (levering op een adres). Het veld totalcost bevat de kosten van de bestelling, totalorder het te betalen totaal. Een hoofdbestelling geeft ook haar deelbestellingen terug (suborders); een deelbestelling geeft de ID van haar hoofdbestelling terug (parent_idorder).

Paramètres envoyés à l'API

  • idorder: L'ID unique de la commande.

Verzendmethode

Kies de verzendmethode door /orders/{IDORDER}/shipping/{SHIPPING_METHOD} aan te roepen. Zonder deze aanroep staat de bestelling op levering (BPOST). Elke andere waarde geeft een fout.

POST /orders/{IDORDER}/shipping/{SHIPPING_METHOD}

Succes antwoord:

{ "status": 1 }

Parameters verzonden naar de API

  • idorder: De unieke ID van de bestelling.
  • shipping_method: PICKUP voor afhaling, BPOST voor levering op een adres. Geef voor een levering het adres op via /orders/{IDORDER}/shipping-address.

Leveringsadres

Stel het leveringsadres van een bestelling in door /orders/{IDORDER}/shipping-address aan te roepen. De bestelling staat dan op levering. Een bestelling heeft één adres: maak één bestelling per ontvanger.

POST /orders/{IDORDER}/shipping-address { "nom": "<string>", "prenom": "<string>", "societe": "<string>", "adresse": "<string>", "complement_adresse": "<string>", "cp": "<string>", "localite": "<string>", "pays": "<string>", "email": "<string>" }

Succes antwoord:

{ "status": 1, "idadrliv": "<integer>" }

Parameters verzonden naar de API

  • idorder: De unieke ID van de bestelling.
  • nom: Achternaam van de ontvanger (verplicht).
  • prenom: Voornaam van de ontvanger (verplicht).
  • societe: Bedrijf, school of studio (optioneel).
  • adresse: Straat en nummer (verplicht).
  • complement_adresse: Extra adresregel (optioneel).
  • cp: Postcode (verplicht).
  • localite: Plaats (verplicht).
  • pays: Landcode, standaard BE (optioneel).
  • email: E-mail van de ontvanger voor het volgen van de zending (optioneel).

Producten ophalen

Haal een lijst op van beschikbare afdrukproducten door /products aan te roepen:

GET /products

Succes antwoord:

{ "status": 1, "products": { "<idformat>": { "idformat": "<integer>", "format": "<string>", "largeur": "<integer>", "hauteur": "<integer>", "prix": { "<idpaper>": "<float>" } } } }

De teruggegeven prijs is de basisprijs per stuk. De prijzen zijn degressief: de stukprijs daalt volgens de totale bestelde hoeveelheid voor hetzelfde product en hetzelfde papier. Gebruik /calculate of /orders/{IDORDER}/price om de werkelijk toegepaste prijs te kennen.

Voeg ?include=montage toe om ook de montages te krijgen die op uw account beschikbaar zijn (mapjes, pasfotovellen, schoolmontages), herkenbaar aan idtypeformat = 100. Elke opmaak is een apart product: u kiest de opmaak door het product te kiezen. Stuur één foto per montage; het labo stelt het vel samen.

Teruggegeven velden

  • idformat: De unieke ID van het product, te versturen als idproduct.
  • format: De naam van het product.
  • largeur, hauteur: De afmetingen van het product (in millimeter).
  • prix: De basisprijs per papiersoort: de sleutel is de idpaper, de waarde de stukprijs.
  • idtypeformat: 100 voor een montage die door het labo wordt samengesteld.

Prijs simuleren

Bereken de prijs van een lijst producten, zonder een bestelling aan te maken, door /calculate aan te roepen. De prijsschaal wordt toegepast op de hoeveelheid van elke lijn:

POST /calculate { "products": "[{ \"idproduct\": <integer>, \"idpaper\": <integer>, \"quantity\": <integer> }]", "shippingmethod": "<string>" }

Succes antwoord:

{ "products": [{ "idproduct": "<integer>", "idpaper": "<integer>", "quantity": "<integer>", "price": "<float>", "total": "<float>" }], "total_products": "<float>", "total_shipping": "<float>", "total_order": "<float>" }

Parameters verzonden naar de API

  • products: De lijst van producten, als JSON gecodeerd in een string. Elk product bevat idproduct, idpaper en quantity.
  • shippingmethod: Optioneel: PICKUP of BPOST. Indien aanwezig bevat total_shipping de kosten die op uw account van toepassing zijn; anders is het 0.

Producten toevoegen

Voeg producten toe aan uw bestelling door een POST-verzoek naar /orders/{IDORDER}/products te sturen:

POST /orders/{IDORDER}/products { "idproduct": "<integer>", "idpaper": "<integer>", "quantity": "<integer>", "fileurl": "<string>", "filename": "<string>", "filesize": "<integer>", "backprint": "<string>" }

Meerdere producten kunnen in één aanroep worden toegevoegd:

POST /orders/{IDORDER}/products { "products": [{ "idproduct": "<integer>", "idpaper": "<integer>", "quantity": "<integer>", "fileurl": "<string>", "filename": "<string>", "filesize": "<integer>", "backprint": "<string>" }] }

Succes antwoord:

{ "status": 1, "products": [{ "idproduct": "<integer>", "idpaper": "<integer>", "quantity": "<integer>", "fileurl": "<string>", "filename": "<string>", "filesize": "<integer>" }] }

Paramètres envoyés à l'API

  • idproduct: L'ID unique du produit à ajouter.
  • idpaper: ID du type de papier (1 pour brillant, 2 pour lustre).
  • quantity: Quantité de produit à ajouter.
  • fileurl: Publieke URL van het af te drukken beeldbestand (verplicht). Het bestand moet in JPEG-formaat zijn en beschikbaar blijven tijdens de verwerking van de bestelling.
  • filename: Nom du fichier image à imprimer.
  • filesize: Taille du fichier en octets.
  • backprint: Tekst die op de achterkant van de foto wordt gedrukt, gevolgd door de bestandsnaam (optioneel, maximaal 30 tekens). Op een deelbestelling wordt standaard het label van de envelop gebruikt. Langere tekst wordt afgekapt, niet geweigerd.

Deelbestellingen: één envelop per kind

Om een reeks envelop per envelop te laten verpakken (schoolfotografie), maakt u onder de hoofdbestelling één deelbestelling per envelop aan door /orders/{IDORDER}/suborders aan te roepen:

POST /orders/{IDORDER}/suborders { "label": "<string>" }

Succes antwoord:

{ "status": 1, "order": { "idorder": "<integer>", "label": "<string>", "parent_idorder": "<integer>" } }

Voeg daarna de foto's van de envelop toe met /orders/{SUBORDER_ID}/products. Prijs, verzending en bevestiging gebeuren alleen op de hoofdbestelling: die aanroepen op een deelbestelling geven een fout. Door de hoofdbestelling te bevestigen worden al haar deelbestellingen bevestigd.

Enveloppen worden verpakt in de volgorde waarin de deelbestellingen zijn aangemaakt: maak ze aan gesorteerd per klas en daarna per kind. Het label wordt op het etiket van de envelop gedrukt en standaard op de achterkant van elke foto in de envelop.

Een envelop onder het minimum van uw account (aantal afdrukken en bedrag) brengt behandelingskosten mee, die bij de kosten van de hoofdbestelling worden opgeteld. /orders/{IDORDER}/price toont die kosten per envelop. Het veld totalorder van een deelbestelling blijft 0 tot de hoofdbestelling is bevestigd, die dan het bedrag van de envelop invult.

Parameters verzonden naar de API

  • idorder: De unieke ID van de bestelling.
  • label: Label van de envelop, bijvoorbeeld "3A - Dupont Léa" (verplicht, maximaal 100 tekens). Aanhalingstekens worden verwijderd en "/" wordt vervangen door "-". Tekens buiten het Latijnse alfabet worden getranslitereerd (Ł wordt L).

Prijs van een bestelling

Vraag vóór de bevestiging de stukprijs op die op elk product van de bestelling wordt toegepast door /orders/{IDORDER}/price aan te roepen. De hoeveelheden van hetzelfde product en hetzelfde papier worden opgeteld om de prijsschaal te bepalen:

POST /orders/{IDORDER}/price {}

Succes antwoord:

{ "status": 1, "products": [{ "idformat": "<integer>", "idpapier": "<integer>", "prix": "<float>", "quantite": "<integer>" }], "suborders": [{ "idorder": "<integer>", "label": "<string>", "prints": "<integer>", "total": "<float>", "fee": "<float>" }] }

Het veld suborders geeft per envelop het aantal afdrukken, het bedrag en eventuele behandelingskosten.

Parameters verzonden naar de API

  • idorder: De unieke ID van de bestelling.

Bestelling bevestigen

Sluit de bestelling door /orders/{IDORDER}/close aan te roepen nadat alle producten zijn toegevoegd:

Een bevestigde bestelling kan niet meer worden gewijzigd.

POST /orders/{IDORDER}/close {}

Succes antwoord:

{ "status": 1, "total_order": "<float>", "products": [{ "idformat": "<integer>", "idpapier": "<integer>", "prix": "<float>", "quantite": "<integer>" }] }

Paramètres envoyés à l'API

  • idorder: L'ID unique de la commande.

Voorbeeld: schoolfotografie

Eén school, één envelop per kind, geleverd op de school:

  1. POST /orders Maak de hoofdbestelling van de school aan.
  2. POST /orders/{IDORDER}/shipping-address Geef het adres van de school op.
  3. POST /orders/{IDORDER}/suborders Maak één deelbestelling per kind aan, gesorteerd per klas en daarna per kind.
  4. POST /orders/{SUBORDER_ID}/products Voeg de foto's van elk kind toe: afdrukken, mapjes, pasfotovellen.
  5. POST /orders/{IDORDER}/price Controleer de prijs en de kosten per envelop.
  6. POST /orders/{IDORDER}/close Bevestig: alle enveloppen gaan in productie.

Voor levering bij een ouder thuis maakt u een aparte bestelling aan met een eigen leveringsadres.