PIM · API
Mijn producten
GET /my-products: één regel per klantartikel, met jouw prijs en voorraad, SEO, categorieën en kenmerken.
Mijn producten ophalen
/my-products
Eén regel per klantartikel, met jouw prijs en voorraad.
Dit adres geeft je klantartikelen: de artikelen zoals ze bij jou in de PIM staan. Het antwoord heeft dezelfde velden als Producten, plus jouw prijs, jouw voorraad en enkele extra gegevens.
# Zet je token in een omgevingsvariabele. Zet het nooit in een script dat je deelt.
export PIM_API_TOKEN='<jouw-token>'
# -g laat curl de blokhaken in filter[...] ongemoeid.
curl -sS -g "https://pim.internetservicebureau.nl/api/v1/my-products?per_page=2" \
-H "Accept: application/json" \
-H "Authorization: Bearer $PIM_API_TOKEN"
// Alleen in code op je eigen server: zet het token nooit in browsercode.
// Top-level await werkt in een ES-module (een .mjs-bestand of "type": "module").
const token = process.env.PIM_API_TOKEN;
const response = await fetch('https://pim.internetservicebureau.nl/api/v1/my-products?per_page=2', {
headers: {
Accept: 'application/json',
Authorization: `Bearer ${token}`,
},
});
// Een fout is ook JSON: {"message": "..."}
console.log(response.status, await response.json());
<?php
// Het token komt uit de omgeving, niet uit de code.
$token = getenv('PIM_API_TOKEN');
$curl = curl_init('https://pim.internetservicebureau.nl/api/v1/my-products?per_page=2');
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Accept: application/json',
"Authorization: Bearer {$token}",
],
]);
$body = json_decode(curl_exec($curl), true);
// Een fout is ook JSON: {"message": "..."}
echo curl_getinfo($curl, CURLINFO_RESPONSE_CODE), PHP_EOL;
print_r($body);
import json
import os
import urllib.error
import urllib.request
# Het token komt uit de omgeving, niet uit de code.
token = os.environ["PIM_API_TOKEN"]
request = urllib.request.Request(
"https://pim.internetservicebureau.nl/api/v1/my-products?per_page=2",
headers={
"Accept": "application/json",
"Authorization": f"Bearer {token}",
},
)
try:
with urllib.request.urlopen(request) as response:
print(response.status, json.load(response))
except urllib.error.HTTPError as error:
# Een fout is ook JSON: {"message": "..."}
print(error.code, json.load(error))
Het verschil met Producten
- Welke artikelen. Producten laat zien wat je kunt verkopen, op basis van de aanbiedingen. Mijn producten geeft één regel per actief klantartikel, ook als er op dit moment geen aanbod is dat je mag gebruiken. Dan is
suppliersleeg. - Prijs. Producten heeft alleen de prijzen van de leveranciers. Mijn producten heeft ook jouw prijs:
priceenprice_incl. - Voorraad. In Producten is
stockje eigen voorraad uit je kassa of ERP, ofnull. In Mijn producten isstockaltijd een geheel getal. - Extra gegevens. Mijn producten heeft ook
seo,categoriesenfeatures. - Extra filter. Mijn producten kent ook
filter[reference]. - Volgorde. Mijn producten staat in een vaste volgorde, ook als je door de pagina's loopt.
Parameters
page, per_page en limit werken zoals bij Producten: standaard 100, maximaal 1000, en een andere waarde wordt stilzwijgend 100. Het antwoord heeft ook hier geen totaal.
| Naam | Type | Verplicht | Omschrijving |
|---|---|---|---|
filter[updated_at] |
string | Optioneel | Alleen artikelen die zijn gewijzigd. Zelfde voorvoegsels, URL-codering en tijdzone als bij Producten. Zie hieronder. |
filter[stock] |
string | Optioneel | Filter op de voorraad van je klantartikel, met een voorvoegsel zoals >=5 (in de URL %3E%3D5). |
filter[reference] |
string | Optioneel | De referentie van het artikel. Moet precies kloppen. |
filter[ean13] |
string | Optioneel | Eén EAN. Zoekt op de EAN van het artikel en op de extra EAN-codes die erbij horen. |
filter[eancode] |
string | Optioneel | Hetzelfde als filter[ean13]. |
filter[nut_plas_number] |
string | Optioneel | Een of meer NUT- of PLAS-nummers, gescheiden door een komma. |
Wat het filter updated_at oplevert
Een artikel komt mee als zijn eigen inhoud is gewijzigd: naam, beschrijving, afbeeldingen, prijs of voorraad. Bij een artikel uit je eigen kassa of ERP tellen ook een wijziging van je voorraad en een wijziging van de status van een aanbod mee.
Alle klantartikelen die sinds 12 maart 2026 om 10:00 uur zijn gewijzigd:
curl -sS -g "https://pim.internetservicebureau.nl/api/v1/my-products?filter[updated_at]=%3E%3D2026-03-12T10:00:00" \
-H "Accept: application/json" \
-H "Authorization: Bearer $PIM_API_TOKEN"
Het verschil bij het filter stock
Bij Producten moet de waarde een getal zijn en krijg je anders een 422. Hier krijg je bij een waarde die geen getal is geen foutmelding, alleen geen resultaten. Controleer dus of je waarde klopt.
Het antwoord
Het antwoord heeft dezelfde indeling als bij Producten: data, links en meta, zonder totaal. Een artikel heeft alle velden van een product. Hieronder staan alleen de extra velden en een ingekort voorbeeld. De waarden zijn verzonnen.
| Veld | Type | Omschrijving |
|---|---|---|
price |
number | Jouw prijs voor dit artikel, zonder btw. |
price_incl |
string | Jouw prijs met btw, op twee decimalen, als tekst. Berekend met vat. |
stock |
integer | Jouw voorraad voor dit artikel, als geheel getal. 0 als er geen voorraad is. |
seo |
object | SEO-gegevens van het artikel, zoals een metatitel. Leeg als er niets is: []. |
categories |
array | De categorieën van het artikel. Leeg als er geen zijn: []. |
features |
array | De kenmerken van het artikel, zoals een naam met een waarde. Leeg als er geen zijn: []. |
{
"ean13": "8710000000001",
"reference": "REF-1",
"name": "Voorbeeldmerk Voorbeeld Vitamine C - 90cp",
"brand": "Voorbeeldmerk",
"vat": 9,
"status": "active",
"suppliers": [
{ "supplier": "Voorbeeldleverancier", "sku": "V-1", "stock": 40, "price": 8.5, "price_incl": "9.27" }
],
"price": 12.5,
"price_incl": "13.63",
"stock": 7,
"seo": {
"meta_title": "Voorbeeldtitel"
},
"categories": [
{ "id": 1, "name": "Vitamines" }
],
"features": [
{ "id": 1, "name": "Vorm", "value": "Capsules" }
]
}
In dit voorbeeld zijn de velden die je ook bij Producten ziet weggelaten. Wat er in seo, categories en features staat, hangt af van wat voor jouw artikelen is vastgelegd.
Welk adres kies je
Wil je alleen weten wat je kunt verkopen en tegen welke leveranciersprijs, gebruik dan Producten. Wil je je eigen artikelen met prijs, voorraad, SEO, categorieën en kenmerken, gebruik dan Mijn producten. Je kunt ook allebei gebruiken.