De Nexera API is opgebouwd rond REST. Het accepteert JSON-gecodeerde request bodies, retourneert JSON-gecodeerde responses en gebruikt standaard HTTP-statuscodes, authenticatie en methodes. Alle API-toegang verloopt via HTTPS.
Basis-URL
https://api.nexerapxm.nl/api/v1
De Nexera API ondersteunt twee authenticatiemethoden. JWT Bearer tokens worden uitgegeven via de wachtwoordloze inlogflow en verlopen na 15 minuten. API-sleutels zijn langlevende, tenant-gebonden tokens die worden aangemaakt in Instellingen → API-sleutels en beginnen met pam_.
Authorization header
# JWT Bearer token
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
# API key
X-API-Key: pam_live_a1b2c3d4e5f6...General: 100 requests · 1 minuut
Auth endpoints: 10 requests · 1 minuut
Authenticated: 1.000 requests · 1 minuut (per tenant)
Snelheidsbeperkte responses retourneren 429 Too Many Requests met een Retry-After header die aangeeft wanneer je opnieuw kunt proberen.
Alle fouten volgen een consistente JSON-structuur. Het code-veld is een machineleesbare identificatie en het message-veld is een leesbare uitleg.
Foutrespons
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Field 'name' is required",
"details": {
"field": "name",
"rule": "required"
}
}
}200: OK, verzoek geslaagd.
201: Created, resource succesvol aangemaakt.
400: Bad Request, ongeldige parameters of request body.
401: Unauthorized, ontbrekende of ongeldige authenticatie.
403: Forbidden, onvoldoende rechten of planlimiet.
404: Not Found, resource bestaat niet.
409: Conflict, dubbele resource of versieconflict.
429: Too Many Requests, snelheidslimiet overschreden.
500: Internal Server Error, onverwachte fout aan onze kant.
Nexera gebruikt wachtwoordloze authenticatie. Gebruikers ontvangen een eenmalige code via e-mail, wisselen deze in voor een JWT-tokenpaar en gebruiken het kortstondige access token voor vervolgverzoeken. Refresh tokens maken naadloze vernieuwing mogelijk zonder opnieuw in te loggen.
POST /api/v1/auth/login
Verstuurt een 6-cijferige OTP naar het opgegeven e-mailadres. Retourneert een succesbericht ongeacht of het e-mailadres bestaat, om enumeratie te voorkomen.
email: string · requiredE-mailadres van de gebruiker.
200 OK
{
"data": {
"message": "Verification code sent"
}
}POST /api/v1/auth/verify
Valideert de OTP-code en retourneert een JWT access token, refresh token en gebruikersprofiel. Het access token verloopt na 15 minuten.
email: string · requiredE-mailadres van de gebruiker.
code: string · required6-cijferige verificatiecode uit de e-mail.
200 OK
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
"user": {
"id": "clx1abc23def456",
"email": "[email protected]",
"name": "Jan de Vries",
"role": "TENANT_ADMIN"
},
"tenant": {
"id": "clx0ten01abc789",
"name": "Rehall",
"plan": "PRO"
}
}
}POST /api/v1/auth/refresh
Wisselt een geldig refresh token in voor een nieuw access token en refresh token paar. Het oude refresh token wordt ingetrokken (rotatie).
refreshToken: string · requiredHuidig refresh token.
200 OK
{
"data": {
"accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "bmV3IHJlZnJlc2ggdG9rZW4gYWZ0ZXIgcm90YXRpb24..."
}
}POST /api/v1/auth/logout
Trekt het opgegeven refresh token in, waardoor de gebruiker effectief wordt uitgelogd. Het access token blijft geldig tot het verloopt.
refreshToken: string · requiredRefresh token om in te trekken.
200 OK
{
"data": {
"message": "Logged out"
}
}Producten zijn de kernresource in Nexera. Elk product bevat gestructureerde data inclusief meertalige titels en beschrijvingen, SKU, EAN, prijzen, varianten, categorieen en aangepaste attributen. Producten doorlopen een statusworkflow: Concept → Actief → Gearchiveerd.
GET /api/v1/products
Retourneert een gepagineerde lijst van producten in je werkruimte. Ondersteunt filtering op status, categorie, merk en full-text zoeken op naam, SKU en beschrijving.
Requires JWT
page: integer · Paginanummer. Standaard: 1.
limit: integer · Items per pagina. Standaard: 50, max: 100.
status: string · Filter op status: DRAFT, ACTIVE of ARCHIVED.
search: string · Full-text zoeken op naam, SKU en beschrijving.
categoryId: string · Filter op categorie-UUID.
brandId: string · Filter op merk-UUID.
sortBy: string · Sorteerveld. Standaard: createdAt.
sortOrder: string · Sorteerrichting: asc of desc. Standaard: desc.
200 OK
{
"data": [
{
"id": "clx1abc23def456",
"title": { "en": "Alpine Pro Jacket", "nl": "Alpine Pro Jas", "de": "Alpine Pro Jacke" },
"sku": "APJ-001",
"ean": "8712345678901",
"status": "ACTIVE",
"brandId": "clx0brd01abc789",
"completeness": 87,
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-02-01T14:22:00Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 142,
"totalPages": 3
}
}POST /api/v1/products
Maakt een nieuw product aan in de status Concept. Het titelveld ondersteunt meertalige content als een JSON-object met taalkeuze als sleutel. Retourneert het volledige productobject inclusief gegenereerd ID.
Requires JWT
title: object · requiredMeertalige titel, bijv. { "en": "Alpine Pro Jacket", "nl": "Alpine Pro Jas" }.
sku: string · Unieke voorraadeenheidscode. Moet uniek zijn binnen je tenant.
ean: string · European Article Number (barcode).
description: object · Meertalige beschrijving als JSON met taalkeuze als sleutel.
status: string · Initiële status: DRAFT (standaard), ACTIVE of ARCHIVED.
categoryId: string · UUID van de primaire categorie.
brandId: string · UUID van het merk.
201 Created
{
"data": {
"id": "clx2new01xyz789",
"title": { "en": "Alpine Pro Jacket", "nl": "Alpine Pro Jas" },
"sku": "APJ-001",
"ean": "8712345678901",
"status": "DRAFT",
"description": { "en": "Waterproof insulated jacket for alpine conditions." },
"brandId": "clx0brd01abc789",
"categoryId": "clx0cat01abc789",
"completeness": 42,
"variants": [],
"createdAt": "2025-02-08T09:15:00Z",
"updatedAt": "2025-02-08T09:15:00Z"
}
}GET /api/v1/products/:id
Retourneert een enkel product op basis van ID, inclusief varianten, categorietoewijzingen, assetkoppelingen en berekende compleetsheidsscore.
Requires JWT
200 OK
{
"data": {
"id": "clx1abc23def456",
"title": { "en": "Alpine Pro Jacket", "nl": "Alpine Pro Jas", "de": "Alpine Pro Jacke" },
"sku": "APJ-001",
"ean": "8712345678901",
"status": "ACTIVE",
"description": {
"en": "Waterproof insulated jacket designed for alpine conditions.",
"nl": "Waterdichte geisoleerde jas voor alpine omstandigheden."
},
"brandId": "clx0brd01abc789",
"completeness": 87,
"variants": [
{
"id": "clx1var01abc123",
"sku": "APJ-001-M-BLK",
"title": "M / Black",
"price": 249.99,
"currency": "EUR",
"stock": 34
}
],
"categories": [
{ "categoryId": "clx0cat01abc789", "name": "Jackets" }
],
"createdAt": "2025-01-15T10:30:00Z",
"updatedAt": "2025-02-01T14:22:00Z"
}
}PATCH /api/v1/products/:id
Werkt een of meer velden van een product bij. Alleen opgegeven velden worden gewijzigd; weggelaten velden blijven ongewijzigd. Maakt een nieuwe versiemomentopname aan voor rollback.
Requires JWT
title: object · Meertalig titelobject.
sku: string · Bijgewerkte SKU.
ean: string · Bijgewerkte EAN.
description: object · Meertalige beschrijving.
status: string · Nieuwe status: DRAFT, ACTIVE of ARCHIVED.
categoryId: string · UUID van primaire categorie.
brandId: string · UUID van het merk.
200 OK
{
"data": {
"id": "clx1abc23def456",
"title": { "en": "Alpine Pro Jacket v2", "nl": "Alpine Pro Jas v2" },
"sku": "APJ-001",
"status": "ACTIVE",
"completeness": 92,
"updatedAt": "2025-02-08T16:45:00Z"
}
}DELETE /api/v1/products/:id
Soft-delete van een product. Het product wordt als verwijderd gemarkeerd maar kan door support worden hersteld. Alle gekoppelde varianten en assetassociaties blijven behouden.
Requires JWT
200 OK
{
"data": {
"message": "Product deleted"
}
}De Digital Asset Management (DAM) module verzorgt bestandsuploads, opslag, formaatconversie en het genereren van ondertekende URL's. Assets worden opgeslagen in Cloudflare R2 met automatische metadata-extractie, thumbnaigeneratie en optioneel AI-gegenereerde alt-tekst.
GET /api/v1/assets
Retourneert een gepagineerde lijst van assets in je werkruimte. Ondersteunt filtering op map, tag en full-text zoeken.
Requires JWT
page: integer · Paginanummer. Standaard: 1.
limit: integer · Items per pagina. Standaard: 50, max: 100.
folderId: string · Filter op map-UUID.
search: string · Zoeken op bestandsnaam of alt-tekst.
mimeType: string · Filter op MIME-type prefix, bijv. image/.
200 OK
{
"data": [
{
"id": "clx1ast01img123",
"filename": "APJ-001-front.jpg",
"mimeType": "image/jpeg",
"size": 2458624,
"width": 2400,
"height": 3200,
"altText": "Alpine Pro Jacket front view in black",
"folderId": "clx0fld01abc789",
"createdAt": "2025-01-20T11:00:00Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 847,
"totalPages": 17
}
}POST /api/v1/assets/upload
Uploadt een enkel bestand via multipart/form-data. Geaccepteerde formaten: JPEG, PNG, WebP, AVIF, TIFF, GIF, SVG. Maximale bestandsgrootte is 50 MB. Het bestand wordt asynchroon verwerkt voor thumbnaigeneratie en metadata-extractie.
Requires JWT
file: file · requiredHet te uploaden bestand (multipart/form-data).
folderId: string · Doelmap-UUID. Standaard: root.
201 Created
{
"data": {
"id": "clx2ast02img456",
"filename": "APJ-001-detail.png",
"mimeType": "image/png",
"size": 3145728,
"width": 1920,
"height": 1080,
"r2Key": "tenants/clx0ten01/assets/clx2ast02img456.png",
"folderId": null,
"createdAt": "2025-02-08T10:30:00Z"
}
}Multipart upload
Verstuur het bestand als
multipart/form-datamet de veldnaamfile. DefolderIdkan als formulierveld naast het bestand worden meegestuurd.
GET /api/v1/assets/:id/download
Genereert een tijdgebonden ondertekende URL voor het downloaden van het originele assetbestand. De URL verloopt na 1 uur.
Requires JWT
200 OK
{
"data": {
"url": "https://r2.nexera.app/tenants/clx0ten01/assets/clx1ast01img123.jpg?X-Amz-Signature=...",
"expiresAt": "2025-02-08T11:30:00Z"
}
}PATCH /api/v1/assets/:id
Werkt bewerkbare metadata van een asset bij, zoals alt-tekst, tags of maptoewijzing.
Requires JWT
altText: string · Alt-tekst voor toegankelijkheid en SEO.
folderId: string · Verplaats asset naar een andere map.
tags: string[] · Array van tag-strings.
200 OK
{
"data": {
"id": "clx1ast01img123",
"filename": "APJ-001-front.jpg",
"altText": "Alpine Pro Jacket front view on white background",
"folderId": "clx0fld01abc789",
"tags": ["product-shot", "jacket", "hero"],
"updatedAt": "2025-02-08T12:00:00Z"
}
}DELETE /api/v1/assets/:id
Soft-delete van een asset. Het bestand blijft 30 dagen in de opslag voordat het permanent wordt verwijderd. Productkoppelingen worden ontkoppeld.
Requires JWT
200 OK
{
"data": {
"id": "clx1ast01img123",
"deletedAt": "2025-02-08T12:30:00Z"
}
}Categorieen organiseren producten in een hierarchische boomstructuur. Elke categorie kan een bovenliggende categorie hebben, waardoor onbeperkt nesten mogelijk is. Producten kunnen tot meerdere categorieen behoren.
GET /api/v1/categories
Retourneert de volledige categorieboom voor je werkruimte als een genest array. Rootcategorieen hebben geen parentId; subcategorieen zijn genest onder hun bovenliggende categorie.
Requires JWT
200 OK
{
"data": [
{
"id": "clx0cat01abc789",
"name": "Outerwear",
"parentId": null,
"productCount": 45,
"children": [
{
"id": "clx0cat02def012",
"name": "Jackets",
"parentId": "clx0cat01abc789",
"productCount": 28,
"children": []
},
{
"id": "clx0cat03ghi345",
"name": "Vests",
"parentId": "clx0cat01abc789",
"productCount": 17,
"children": []
}
]
},
{
"id": "clx0cat04jkl678",
"name": "Accessories",
"parentId": null,
"productCount": 62,
"children": []
}
]
}POST /api/v1/categories
Maakt een nieuwe categorie aan. Geef een parentId op om deze onder een bestaande categorie te nesten, of laat het weg om een rootcategorie aan te maken.
Requires JWT
name: string · requiredWeergavenaam van de categorie.
parentId: string · UUID van bovenliggende categorie voor nesting.
201 Created
{
"data": {
"id": "clx2cat05mno901",
"name": "Snowboard Jackets",
"parentId": "clx0cat02def012",
"productCount": 0,
"createdAt": "2025-02-08T13:00:00Z"
}
}PATCH /api/v1/categories/:id
Werkt de naam of het bovenliggende element van een categorie bij. Het wijzigen van de parentId verplaatst de categorie (en alle onderliggende elementen) binnen de boom.
Requires JWT
name: string · Nieuwe weergavenaam.
parentId: string · Nieuwe bovenliggende UUID, of null voor rootniveau.
200 OK
{
"data": {
"id": "clx2cat05mno901",
"name": "Snow Jackets",
"parentId": "clx0cat02def012",
"updatedAt": "2025-02-08T13:15:00Z"
}
}DELETE /api/v1/categories/:id
Verwijdert een categorie. Producten die aan deze categorie zijn toegewezen worden ontkoppeld maar niet verwijderd. Subcategorieen moeten eerst worden verplaatst of verwijderd.
Requires JWT
200 OK
{
"data": {
"message": "Category deleted"
}
}De sync-engine pusht en pullt productdata tussen Nexera en verbonden Shopify-winkels. Sync-taken draaien asynchroon via een achtergrondwachtrij en ondersteunen volledige syncs, delta-syncs en per-product bewerkingen.
POST /api/v1/shopify/sync/all
Start een volledige synchronisatietaak die alle actieve producten naar de opgegeven Shopify-winkel pusht. Retourneert een taak-ID om de voortgang te volgen.
Requires JWT
storeId: string · requiredUUID van de verbonden Shopify-winkel.
200 OK
{
"data": {
"jobId": "clx2job01sync01",
"status": "QUEUED",
"type": "FULL",
"storeId": "clx0str01abc789",
"createdAt": "2025-02-08T14:00:00Z"
}
}POST /api/v1/shopify/sync/products
Pusht een specifieke set producten naar de verbonden Shopify-winkel. Handig voor het synchroniseren van individuele producten na bewerkingen.
Requires JWT
storeId: string · requiredUUID van de verbonden Shopify-winkel.
productIds: string[] · requiredArray van product-UUID's om te synchroniseren.
200 OK
{
"data": {
"jobId": "clx2job02sync02",
"status": "QUEUED",
"productCount": 5,
"storeId": "clx0str01abc789",
"createdAt": "2025-02-08T14:10:00Z"
}
}GET /api/v1/shopify/sync/history
Retourneert gepagineerde geschiedenis van sync-taken voor een specifieke winkel, gesorteerd op meest recent eerst.
Requires JWT
storeId: string · requiredUUID van de Shopify-winkel.
page: integer · Paginanummer. Standaard: 1.
limit: integer · Items per pagina. Standaard: 25.
200 OK
{
"data": [
{
"jobId": "clx2job01sync01",
"status": "COMPLETED",
"type": "FULL",
"itemsSynced": 142,
"errors": 0,
"duration": 34500,
"startedAt": "2025-02-08T14:00:05Z",
"completedAt": "2025-02-08T14:00:39Z"
},
{
"jobId": "clx1job03sync03",
"status": "COMPLETED",
"type": "DELTA",
"itemsSynced": 8,
"errors": 1,
"duration": 2100,
"startedAt": "2025-02-07T09:00:02Z",
"completedAt": "2025-02-07T09:00:04Z"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 47,
"totalPages": 2
}
}Beheer Shopify-winkelverbindingen. Elke tenant kan meerdere Shopify-winkels verbinden. De OAuth-flow wordt gestart vanuit Nexera en voltooid in het Shopify-beheerportaal.
GET /api/v1/shopify/stores
Retourneert alle Shopify-winkels die zijn verbonden met je werkruimte, inclusief hun synchronisatiestatus en configuratie.
Requires JWT
200 OK
{
"data": [
{
"id": "clx0str01abc789",
"shopDomain": "rehall-outdoor.myshopify.com",
"shopName": "Rehall Outdoor",
"isActive": true,
"lastSyncAt": "2025-02-08T14:00:39Z",
"productCount": 142,
"createdAt": "2025-01-10T09:00:00Z"
}
]
}POST /api/v1/shopify/stores/connect
Start de Shopify OAuth-autorisatieflow. Retourneert een autorisatie-URL die de gebruiker moet bezoeken om de Nexera-app op hun Shopify-winkel te installeren.
Requires JWT
shop: string · requiredShopify-winkeldomein, bijv. my-store.myshopify.com.
200 OK
{
"data": {
"authUrl": "https://rehall-outdoor.myshopify.com/admin/oauth/authorize?client_id=...&scope=read_products,write_products&redirect_uri=..."
}
}DELETE /api/v1/shopify/stores/:id
Verwijdert de Shopify-winkelverbinding. Dit verwijdert geen producten uit Nexera of Shopify. Toekomstige syncs stoppen totdat de winkel opnieuw wordt verbonden.
Requires JWT
200 OK
{
"data": {
"message": "Store disconnected"
}
}Facturatie wordt beheerd via Stripe. Deze endpoints laten je het huidige abonnement bekijken, planwijzigingen beheren en facturen raadplegen. Betalingsmethodebeheer verloopt via het Stripe-klantenportaal.
GET /api/v1/billing
Retourneert de huidige abonnementsdetails inclusief plan, status, verbruik en factureringsperiode.
Requires JWT
200 OK
{
"data": {
"plan": "PRO",
"status": "active",
"currentPeriodEnd": "2025-03-08T00:00:00Z",
"usage": {
"products": { "used": 142, "limit": 10000 },
"storage": { "usedBytes": 5368709120, "limitBytes": 53687091200 },
"users": { "used": 4, "limit": 25 },
"stores": { "used": 1, "limit": 5 }
}
}
}POST /api/v1/billing/checkout
Maakt een Stripe Checkout-sessie aan voor het afsluiten of wijzigen van een abonnement. Retourneert een URL om de gebruiker door te sturen naar de door Stripe gehoste afrekenpagina.
Requires JWT
planId: string · requiredPlan-identificatie: FREE, BASIC, PRO of ENTERPRISE.
200 OK
{
"data": {
"url": "https://checkout.stripe.com/c/pay/cs_live_a1b2c3...",
"sessionId": "cs_live_a1b2c3d4e5f6"
}
}GET /api/v1/billing/invoices
Retourneert recente facturen van Stripe voor de huidige tenant.
Requires JWT
limit: integer · Aantal facturen om te retourneren. Standaard: 10.
200 OK
{
"data": [
{
"id": "in_1abc2def3ghi",
"amount": 7900,
"currency": "eur",
"status": "paid",
"invoiceUrl": "https://invoice.stripe.com/i/acct_1abc/...",
"periodStart": "2025-01-08T00:00:00Z",
"periodEnd": "2025-02-08T00:00:00Z",
"createdAt": "2025-02-08T00:00:00Z"
}
]
}POST /api/v1/billing/portal
Maakt een Stripe Customer Portal-sessie aan waar de gebruiker betalingsmethoden kan beheren, facturen kan bekijken en abonnementen kan opzeggen.
Requires JWT
200 OK
{
"data": {
"url": "https://billing.stripe.com/p/session/bps_1abc2def3ghi..."
}
}Beheer teamleden binnen je werkruimte. Gebruikers worden uitgenodigd via e-mail en krijgen een rol toegewezen die hun rechten bepaalt. Rollen volgen een hierarchie: Viewer < Editor < Tenant Admin < Super Admin.
GET /api/v1/users
Retourneert alle gebruikers in je werkruimte met hun rollen, status en laatste inlogtijdstempel.
Requires JWT
200 OK
{
"data": [
{
"id": "clx1usr01abc123",
"email": "[email protected]",
"name": "Jan de Vries",
"role": "TENANT_ADMIN",
"status": "ACTIVE",
"lastLoginAt": "2025-02-08T09:15:00Z",
"createdAt": "2025-01-10T09:00:00Z"
},
{
"id": "clx1usr02def456",
"email": "[email protected]",
"name": "Lisa Bakker",
"role": "PRODUCT_MANAGER",
"status": "ACTIVE",
"lastLoginAt": "2025-02-07T16:30:00Z",
"createdAt": "2025-01-12T11:00:00Z"
}
]
}POST /api/v1/users
Verstuurt een uitnodigingsmail naar een nieuw teamlid. De gebruiker ontvangt een verificatielink en wordt bij de eerste login aan de werkruimte toegevoegd.
Requires JWT
email: string · requiredE-mailadres van de uit te nodigen gebruiker.
role: string · requiredToe te wijzen rol: VIEWER, PRODUCT_MANAGER, MARKETING, ASSET_MANAGER, SUPPLIER_MANAGER, FINANCE of TENANT_ADMIN.
name: string · Weergavenaam voor de uitgenodigde gebruiker.
201 Created
{
"data": {
"id": "clx2usr03ghi789",
"email": "[email protected]",
"role": "PRODUCT_MANAGER",
"status": "INVITED",
"createdAt": "2025-02-08T15:00:00Z"
}
}PATCH /api/v1/users/:id
Wijzigt de rol van een bestaand teamlid. Alleen Tenant Admins kunnen gebruikers promoveren of degraderen.
Requires JWT
role: string · requiredNieuwe rol: VIEWER, PRODUCT_MANAGER, MARKETING, ASSET_MANAGER, SUPPLIER_MANAGER, FINANCE of TENANT_ADMIN.
200 OK
{
"data": {
"id": "clx1usr02def456",
"email": "[email protected]",
"role": "TENANT_ADMIN",
"updatedAt": "2025-02-08T15:30:00Z"
}
}DELETE /api/v1/users/:id
Verwijdert een gebruiker uit de werkruimte. De gebruiker verliest direct de toegang. Door hen aangemaakte content (producten, assets) blijft behouden.
Requires JWT
200 OK
{
"data": {
"message": "User removed"
}
}API-sleutels bieden langlevende authenticatie voor server-naar-server integraties. Elke sleutel is gekoppeld aan je tenant en kan worden beperkt tot specifieke rechten. De volledige sleutelwaarde wordt slechts eenmaal getoond bij het aanmaken.
GET /api/v1/api-keys
Retourneert alle API-sleutels voor je werkruimte. De volledige sleutelwaarde wordt na aanmaak nooit meer getoond; alleen het prefix wordt weergegeven ter identificatie.
Requires JWT
200 OK
{
"data": [
{
"id": "clx0key01abc123",
"name": "Production Integration",
"keyPrefix": "pam_live_a1b2",
"permissions": ["product:read", "product:write", "asset:read"],
"lastUsedAt": "2025-02-08T14:00:00Z",
"createdAt": "2025-01-15T10:00:00Z"
},
{
"id": "clx0key02def456",
"name": "Staging Read-Only",
"keyPrefix": "pam_test_x9y8",
"permissions": ["product:read", "asset:read"],
"lastUsedAt": null,
"createdAt": "2025-02-01T09:00:00Z"
}
]
}POST /api/v1/api-keys
Maakt een nieuwe API-sleutel aan. De volledige sleutelwaarde wordt in de response geretourneerd en kan daarna niet meer worden opgehaald. Sla deze direct veilig op.
Requires JWT
name: string · requiredLeesbaar label voor de sleutel.
permissions: string[] · requiredArray van rechtenbereiken, bijv. ["product:read", "asset:read"].
201 Created
{
"data": {
"id": "clx2key03ghi789",
"name": "Webhook Integration",
"key": "pam_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
"keyPrefix": "pam_live_a1b2",
"permissions": ["product:read", "product:write"],
"createdAt": "2025-02-08T16:00:00Z"
}
}Bewaar je sleutel veilig
De volledige API-sleutel wordt slechts eenmaal getoond in de aanmaakrespons. Kopieer deze direct en sla deze op in een veilige locatie zoals een omgevingsvariabele of secrets manager. Je kunt deze niet opnieuw ophalen.
DELETE /api/v1/api-keys/:id
Trekt een API-sleutel permanent in. Verzoeken met deze sleutel ontvangen direct 401-responses.
Requires JWT
200 OK
{
"data": {
"message": "API key revoked"
}
}Officiele clientbibliotheken wrappen de REST API met getypeerde methoden, automatische paginering, foutafhandeling en token-vernieuwing. Installeer de SDK voor jouw taal om snel aan de slag te gaan.
N
JavaScript / TypeScript
npm install nexera-sdk
Py
Python 3.8+
pip install nexera
Node.js voorbeeld
import { Nexera } from 'nexera-sdk';
const client = new Nexera({
apiKey: process.env.NEXERA_API_KEY,
baseUrl: 'https://api.nexerapxm.nl/api/v1',
});
// List active products
const products = await client.products.list({
status: 'ACTIVE',
limit: 25,
});
console.log(products.data);
console.log(products.pagination);