Ga naar de inhoud
agovena.
agovena.
Aan de slag
Community

Voor ontwikkelaars

API-overzicht

De huidige v1-endpoints, catalogus- en accountschema's, requestvoorbeelden en foutafhandeling.

API-overzicht

Bekijk elke handeling

Kies een handeling voor het request, responsestructuur, toegangsregels en implementatiebron.

Op deze pagina

Basis-URL en contract

De klant- en winkel-API staat op https://<jouw-winkel>/api/v1. Deze documentatiepagina is /development/api en werkt niet als API-proxy. Gebruik HTTPS en stuur Accept: application/json. Voeg voor JSON-schrijfverzoeken ook Content-Type: application/json toe.

De routes staan in routes/api.php. Core registreert ook GET /api/v1/openapi.json. Dat retourneert OpenAPI 3.0.3 uit OpenApiDocument. Het document beschrijft handelingen, beveiliging en een deel van de requestvelden. Het bevat geen volledige resourceschema's en bewijst niet dat een Module op een installatie ingeschakeld is. v1 is nadrukkelijk een vroege interface, geen onveranderlijk publiek contract.

bash
curl 'https://shop.example.test/api/v1/openapi.json' \
  --header 'Accept: application/json'

Alle domeinen, namen, ID's, tokens en productslugs in de voorbeelden zijn fictief. Vervang ze door waarden uit je eigen installatie. De JSON-voorbeelden tonen de structuur, geen opgenomen productieresponses.

Endpointcollectie

De paden hieronder zijn relatief aan /api/v1. Elke methode staat gegroepeerd zodat je de pagina kunt scannen als een API-clientcollectie. “Openbaar” betekent dat de route geen auth:sanctum vereist. Installatiecontroles en andere globale middleware blijven van toepassing. De bevoegdheden gelden voor bearer-tokens. Zie authenticatie voor sessies en tokenaanmaak.

GET · Lezen

Methode Pad Toegang Invoer / uitvoer
GET /openapi.json Openbaar OpenAPI-document
GET /products Openbaar q, category, page; productpaginering
GET /products/{slug} Openbaar Product op basis van slug
GET /categories Openbaar Categoriecollectie
GET /categories/{slug} Openbaar Categorie met gepagineerde producten
GET /search Openbaar q; maximaal acht productsuggesties
GET /me account.read Accountresource
GET /addresses addresses.read Adrescollectie
GET /cart Openbare winkelwagencontext Winkelwagen met responseheader X-Cart-Token
GET /checkout/requirements Openbare winkelwagencontext Vereisten en beschikbare betaalmethoden
GET /orders orders.read Gepagineerde bestellingen
GET /orders/{order} orders.read Eigen bestelling
GET /invoices invoices.read Gepagineerde facturen
GET /invoices/{invoice} invoices.read Eigen factuur
GET /credit-notes credit_notes.read Gepagineerde creditnota's
GET /credit-notes/{creditNote} credit_notes.read Eigen creditnota
GET /support-tickets tickets.read Gepagineerde supporttickets
GET /support-tickets/{ticket} tickets.read Samenvatting van eigen supportticket

POST · Aanmaken of starten

Methode Pad Toegang Invoer / uitvoer
POST /auth/tokens E-mail en wachtwoord Benoemd token; geef rechten expliciet op
POST /addresses addresses.create Volledig adres; adresresource
POST /cart Openbare winkelwagencontext product_id, optioneel aantal en keuzes
POST /checkout orders.create Factuuradres en checkoutinvoer; bestelresource
POST /orders/{order}/pay orders.pay Gateway en redirect-URL's; betaalpoging

PATCH · Bijwerken

Methode Pad Toegang Invoer / uitvoer
PATCH /me account.update Verplichte name; accountresource
PATCH /addresses/{address} addresses.update Volledig adres; adresresource
PATCH /cart/{lineKey} Openbare winkelwagencontext Aantal van 0 tot 99; bijgewerkte winkelwagen

DELETE · Intrekken of verwijderen

Methode Pad Toegang Invoer / uitvoer
DELETE /auth/tokens tokens.revoke Huidig token intrekken; {"ok":true}
DELETE /addresses/{address} addresses.delete {"ok":true}
DELETE /cart/{lineKey} Openbare winkelwagencontext Bijgewerkte winkelwagen

De collectie hierboven volgt de actuele Core-routes. Core biedt via v1 geen publieke routes voor productaanmaak, factuurstatuswijzigingen, terugbetalingen, nieuwe supporttickets, packagebeheer of een PUT-handeling. De requests voor winkelwagen, checkout en betalingen staan in Winkelwagen- en checkout-API. Financiële resources, tickets en optionele Modulereponses staan in Commerce-API-resources.

Catalogus doorzoeken

GET /products selecteert actieve producten, sorteert op naam en gebruikt pagina's van 24 producten. De q-filter zoekt in naam of beschrijving als de getrimde zoekterm minstens twee tekens telt. category accepteert een categorieslug of ID. De controller biedt geen instelbare paginagrootte of willekeurige sortering.

GET /products/{slug} zoekt een actief product op slug, niet op numeriek ID. Ontbrekende of inactieve producten geven 404.

GET /search?q=... retourneert maximaal acht producten zonder paginator. Bij minder dan twee tekens na trimmen is de collectie leeg. De suggestieservice beperkt producten ook tot beschikbare capabilities. Ga er niet van uit dat alle catalogushandelingen intern exact dezelfde selectie gebruiken.

bash
curl --get 'https://shop.example.test/api/v1/products' \
  --header 'Accept: application/json' \
  --data-urlencode 'q=lamp' \
  --data-urlencode 'category=verlichting' \
  --data-urlencode 'page=1'

curl 'https://shop.example.test/api/v1/products/leeslamp' \
  --header 'Accept: application/json'

curl --get 'https://shop.example.test/api/v1/search' \
  --header 'Accept: application/json' --data-urlencode 'q=lamp'

Productschema

Een enkel product staat onder data. De lijst gebruikt een data-array met daarnaast Laravel-pagineringsvelden links en meta.

Veld Structuur
id, name, slug Integer-ID en strings
subtitle, sku, description Productteksten; nullable als niet ingevuld
price {amount: integer, currency: string, formatted: string}
category null of {id, name, slug}
images Array met publieke afbeeldings-URL's
capabilities Array met capabilitysleutels
options Actieve opties: {key, label, type, required, choices}
options[].choices Actieve keuzewaarden: {value, label}

Bedragen zijn gehele getallen in de kleinste munteenheid. Reken met het bedrag en de valuta, niet met de opgemaakte tekst. options beschrijft de beschikbare selectie, geen door de client vast te stellen eindprijs.

Categorieschema

GET /categories retourneert data: Category[]. Een categorie bevat id, name, slug, nullable image, integer products_count en children. Een geladen kind bevat id, name, slug en products_count. De serializer bouwt geen onbeperkt diepe Category-boom.

GET /categories/{slug}?page=1 gebruikt een andere omhulling:

json
{
  "data": {
    "category": {
      "id": 7,
      "name": "Verlichting",
      "slug": "verlichting",
      "image": null,
      "products_count": 0,
      "children": []
    },
    "products": []
  },
  "meta": {"current_page": 1, "last_page": 1, "total": 0}
}

Deze actie zoekt een actieve categorie en pagineert de actieve producten met 24 items per pagina. Alleen de getoonde metadata wordt toegevoegd, niet de volledige links-structuur van een Laravel-resourcecollectie.

Bronnen: CatalogController, ProductResource, CategoryResource en SuggestStorefrontProducts.

Huidig account

GET /me en PATCH /me retourneren:

json
{
  "data": {
    "id": 12,
    "name": "Alex Voorbeeld",
    "email": "[email protected]",
    "email_verified": true
  }
}

PATCH accepteert uitsluitend de verplichte string name, maximaal 255 tekens. Het endpoint wijzigt geen e-mailadres, wachtwoord, rollen of willekeurige klanteigenschappen.

bash
curl --request PATCH 'https://shop.example.test/api/v1/me' \
  --header "Authorization: Bearer $AGOVENA_TOKEN" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"name":"Alex Voorbeeld"}'

Adressen lezen en opslaan

POST en PATCH gebruiken dezelfde validatie. PATCH is geen gedeeltelijke adreswijziging: name, line1, city, postal_code en country blijven verplicht.

Veld Regel
name, line1 Verplichte string, maximaal 255
city Verplichte string, maximaal 120
postal_code Verplichte string, maximaal 20
country Verplichte string, precies twee tekens
label Nullable string, maximaal 80
company, line2 Nullable string, maximaal 255
region Nullable string, maximaal 120
phone Nullable string, maximaal 40
is_default_billing, is_default_shipping Optionele boolean
properties Nullable array met ondersteunde adresaliassen

De ondersteunde properties-sleutels zijn phone, company_name, address, address2, city, state, zip en country. De lengtes volgen de equivalente bovenliggende velden. properties.country wordt bovendien gecontroleerd tegen CheckoutCountries::codes(). Meegegeven aliassen krijgen voorrang bij het samenstellen van het opgeslagen adres, maar vervangen de verplichte top-level invoervelden niet.

bash
curl --request POST 'https://shop.example.test/api/v1/addresses' \
  --header "Authorization: Bearer $AGOVENA_TOKEN" \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"label":"Kantoor","name":"Alex Voorbeeld","line1":"Voorbeeldstraat 1","city":"Brussel","postal_code":"1000","country":"BE","is_default_billing":true}'

Een adresresource bevat id, label, de bovenstaande adresvelden, beide standaardvlaggen en een properties-object met de aliassen. GET /addresses sorteert opgeslagen adressen op aflopend ID. Als er geen adressen zijn, kan het endpoint een adres uit klanteigenschappen reconstrueren. Dat heeft id: null, standaardfacturatie aan en standaardverzending uit. Dit is geen opgeslagen adres dat je met dat ID kunt wijzigen of verwijderen.

Een adres-ID van een andere klant geeft 404. Als je een opgeslagen adres als standaard instelt, wordt dezelfde standaardvlag op de andere adressen van deze klant uitgezet. POST retourneert momenteel een opnieuw geladen resource zonder expliciet een aanmaakstatus in te stellen. Gebruik de beschrijvende 201 uit OpenAPI daarom niet als enige runtimeverwachting.

Bronnen: AccountController, AddressResource en SaveCustomerAddress.

Foutstructuur

Verwachte API-fouten gebruiken message en code op het hoogste niveau, met optionele veldfouten:

json
{
  "message": "<vertaalde validatiemelding>",
  "code": "validation_error",
  "errors": {"name": ["<vertaalde veldfout>"]}
}
HTTP-status Gebruikelijke code Actie in de client
401 unauthenticated Geef geldige authenticatie mee
403 unauthorized, insufficient_scope, ip_not_allowed Controleer klantcontext, bevoegdheid en IP-beleid
404 not_found Controleer ID, zichtbaarheid, eigendom of actieve Module
409 invalid_state Laad de actuele toestand voordat je opnieuw probeert
422 validation_error, invalid_state, payment_failed Verbeter invoer of los de domeinvoorwaarde op
429 rate_limited Wacht voordat je verzoeken herhaalt

Een leeg errors-veld wordt weggelaten. Gebruik vertaalde meldingsteksten niet als vaste identifiers. Het type exception bepaalt de code: validatie-exceptions worden validation_error, terwijl een algemene HTTP 422 invalid_state wordt. Onverwachte serverfouten hebben geen gegarandeerd domeinfoutenschema.

Bronnen: ApiError, exceptionafhandeling en StorefrontApiTest.

Doorzoek de documentatie

Zoek handleidingen, commando’s en API-endpoints

Waar ben je naar op zoek?

Documentatie