PIM-integratie

In dit voorbeeld bouwen we een integratie tussen een PIM-systeem (Product Information Management) en de Boom API. Het PIM is de single source of truth — productwijzigingen worden automatisch doorgestuurd naar Boom, die vervolgens je webshop, ERP én de EDU-V Catalogue op de hoogte brengt.

Architectuur

                                                            webhook POST      ┌──────────┐
                                                          ┌─────────────────▶ │  Webshop │
                                                          │                   └──────────┘
┌──────────┐    PUT /v1/products     ┌──────────┐         │  webhook POST     ┌──────────┐
│          │ ──────────────────────▶ │          │ ────────┼─────────────────▶ │   ERP    │
│   PIM    │                         │   API    │         │                   └──────────┘
│  Systeem │                         │          │         │
│          │                         │          │ ◀───────┘
└──────────┘                         └──────────┘
                                       │      ▲
                           automatisch │      │ GET /edu-v/v2/catalogue-api/products
                                       ▼      │
                                     ┌──────────────────┐
                                     │  EDU-V Catalogue  │
                                     │                   │
                                     │  Scholen, portals │
                                     │  en bestelomg.    │
                                     └──────────────────┘

De flow:

  1. Een productmanager wijzigt een product in het PIM
  2. Het PIM stuurt de wijziging naar de Boom API via PUT /v1/products/:ean
  3. Boom slaat de wijziging op en:
    • Verstuurt product.updated webhooks naar geabonneerde systemen (webshop, ERP)
    • Maakt het product beschikbaar via de EDU-V Catalogue API voor scholen en portalen

Wat is de EDU-V Catalogue?

De EDU-V Catalogue API is onderdeel van het EDU-V Afsprakenstelsel — de Nederlandse standaard voor digitale gegevensuitwisseling in het onderwijs. Als leverancier bied je via deze API je productcatalogus aan, zodat:

  • Bestelomgevingen (bijv. schoolbesturen) je producten kunnen ontdekken en bestellen
  • Leermiddelenportalen (bijv. Magister) productinformatie kunnen tonen aan leerlingen
  • Aanspraakmanagers weten welke producten beschikbaar zijn voor licentieverlening

Het mooie: als je product in Boom staat, is het automatisch beschikbaar via de EDU-V Catalogue. Geen extra integratie nodig.

Van PIM tot leerling

PIM ──▶ /v1/products ──▶ EDU-V Catalogue ──▶ School bestelt ──▶ Aanspraak ──▶ Leerling gebruikt product

Stap 1: Authenticatie

Vraag een access token aan met je client credentials:

Token opvragen

curl -X POST https://api.example.nl/auth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=pim-sync" \
  -d "client_secret=your-secret"

Stap 2: Producten synchroniseren

Wanneer een product in je PIM wordt gewijzigd, stuur de update naar de Boom API. Het product wordt dan beschikbaar via zowel de /v1/products API als de EDU-V Catalogue.

Nieuw product aanmaken

Als het product nog niet bestaat in Boom, gebruik POST /v1/products. Voeg EDU-V-specifieke velden toe zodat het product correct verschijnt in de Catalogue:

  • Name
    ean
    Type
    string
    Description

    EAN/ISBN — wordt het productId in de EDU-V Catalogue.

  • Name
    type
    Type
    string
    Description

    physical, digital of combi — bepaalt of het product licentieplichtig is.

  • Name
    status
    Type
    string
    Description

    Beschikbaarheidsstatus — wordt direct overgenomen in de EDU-V Catalogue.

  • Name
    licensePeriod
    Type
    string
    Description

    Bijv. 1j, 4j — vereist voor digitale producten in EDU-V.

  • Name
    forSale
    Type
    boolean
    Description

    Moet true zijn om zichtbaar te zijn in bestelomgevingen.

Request

POST
/v1/products
curl https://api.example.nl/v1/products \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{
    "ean": "9789493113862",
    "name": "POLARIS nask1 leerwerkboek vmbo-basis 3 deel A",
    "price": "32.50",
    "type": "physical",
    "status": "available",
    "forSale": true,
    "publisherId": "clx..."
  }'

Na het aanmaken is het product direct beschikbaar via:

  • GET /v1/products/9789493113862 (je eigen API)
  • GET /edu-v/v2/catalogue-api/products/9789493113862 (EDU-V Catalogue)

Bestaand product bijwerken

Voor updates gebruik PUT /v1/products/:ean. Prijswijzigingen, statusveranderingen en andere updates worden automatisch doorgevoerd in de EDU-V Catalogue.

Request

PUT
/v1/products/9789493113862
curl -X PUT https://api.example.nl/v1/products/9789493113862 \
  -H "Authorization: Bearer {token}" \
  -H "Content-Type: application/json" \
  -d '{"price": "34.95", "status": "available"}'

Stap 3: Verifieer de EDU-V Catalogue

Na het synchroniseren kun je controleren hoe je product eruitziet in de EDU-V Catalogue — precies zoals scholen en portalen het zien:

De EDU-V Catalogue API retourneert je product in het standaard EDU-V formaat, inclusief velden als publisher, studies, subjects, licensePeriod en deliveryTypes.

Request

GET
/edu-v/v2/catalogue-api/products/9789493113862
curl https://api.example.nl/edu-v/v2/catalogue-api/products/9789493113862 \
  -H "Authorization: Bearer {token}"

EDU-V Catalogue response

{
  "productId": "9789493113862",
  "publisher": "Boom Uitgevers",
  "type": "physical",
  "status": "available",
  "forSale": true,
  "name": "POLARIS nask1 leerwerkboek vmbo-basis 3 deel A",
  "shortDescription": "Leerwerkboek nask1 voor vmbo-basis leerjaar 3",
  "price": {
    "priceExcl": 30.19,
    "priceIncl": 32.50,
    "priceCurrency": "EUR",
    "validFrom": "2026-01-01"
  },
  "studies": [
    {
      "studyName": "vmbo-basis",
      "subjects": [
        { "subjectPrefix": "nask1", "subjectName": "Natuur- en scheikunde 1" }
      ]
    }
  ],
  "media": {
    "images": [
      { "url": "https://cdn.example.nl/9789493113862.jpg", "type": "cover" }
    ]
  },
  "dateCreated": "2026-03-24T10:00:00Z",
  "dateLastModified": "2026-03-24T14:30:00Z"
}

Stap 4: Bulk synchronisatie

Bij de eerste koppeling of een grote cataloguswijziging wil je alle producten in één keer synchroniseren. Loop door je PIM-catalogus en stuur elk product naar de API:

Bulk sync

import ApiClient from '@example/wimpel-api'

const client = new ApiClient(token)

// Haal alle producten op uit je PIM
const pimProducts = await pim.products.list()

for (const product of pimProducts) {
  try {
    // Probeer eerst te updaten
    await client.products.update(product.ean, {
      name: product.name,
      price: product.price,
      status: product.available ? 'available' : 'not_yet_available',
    })
  } catch (err) {
    if (err.status === 404) {
      // Product bestaat nog niet, maak het aan
      await client.products.create({
        ean: product.ean,
        name: product.name,
        price: product.price,
        type: product.isDigital ? 'digital' : 'physical',
        status: product.available ? 'available' : 'not_yet_available',
        forSale: true,
      })
    }
  }
}

Samenvatting

Met één integratie vanuit je PIM bereik je:

KanaalHoeAutomatisch?
Je eigen webshopWebhooks (product.created/updated/deleted)Ja
ERP / backofficeWebhooksJa
EDU-V CatalogueBeschikbaar via GET /edu-v/v2/catalogue-api/productsJa
Scholen & bestelomgevingenOntdekken je product via de EDU-V CatalogueJa
LeermiddelenportalenTonen productinfo aan leerlingenJa

Volgende stappen

Was this page helpful?