company logo

Helpcenter

NEXERA-PXM openen
Alle collectiesAPIAPI-referentie

API-referentie

Authenticatie, endpoints en voorbeelden van de REST API.

API Referentie

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

Authenticatie

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...

Snelheidslimieten

  • 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.

Foutformaat

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"
    }
  }
}

HTTP-statuscodes

  • 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.

Authenticatie

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

Send verification code

Verstuurt een 6-cijferige OTP naar het opgegeven e-mailadres. Retourneert een succesbericht ongeacht of het e-mailadres bestaat, om enumeratie te voorkomen.

Request Body

  • email: string · requiredE-mailadres van de gebruiker.

Response

200 OK

{
  "data": {
    "message": "Verification code sent"
  }
}

POST /api/v1/auth/verify

Verify OTP and get tokens

Valideert de OTP-code en retourneert een JWT access token, refresh token en gebruikersprofiel. Het access token verloopt na 15 minuten.

Request Body

  • email: string · requiredE-mailadres van de gebruiker.

  • code: string · required6-cijferige verificatiecode uit de e-mail.

Response

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

Refresh access token

Wisselt een geldig refresh token in voor een nieuw access token en refresh token paar. Het oude refresh token wordt ingetrokken (rotatie).

Request Body

  • refreshToken: string · requiredHuidig refresh token.

Response

200 OK

{
  "data": {
    "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refreshToken": "bmV3IHJlZnJlc2ggdG9rZW4gYWZ0ZXIgcm90YXRpb24..."
  }
}

POST /api/v1/auth/logout

Revoke session

Trekt het opgegeven refresh token in, waardoor de gebruiker effectief wordt uitgelogd. Het access token blijft geldig tot het verloopt.

Request Body

  • refreshToken: string · requiredRefresh token om in te trekken.

Response

200 OK

{
  "data": {
    "message": "Logged out"
  }
}

Producten

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

List 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

Query Parameters

  • 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.

Response

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

Create product

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

Request Body

  • 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.

Response

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

Get product

Retourneert een enkel product op basis van ID, inclusief varianten, categorietoewijzingen, assetkoppelingen en berekende compleetsheidsscore.

Requires JWT

Response

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

Update product

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

Request Body

  • 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.

Response

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

Delete product

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

Response

200 OK

{
  "data": {
    "message": "Product deleted"
  }
}

Assets

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

List assets

Retourneert een gepagineerde lijst van assets in je werkruimte. Ondersteunt filtering op map, tag en full-text zoeken.

Requires JWT

Query Parameters

  • 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/.

Response

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

Upload asset

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

Request Body

  • file: file · requiredHet te uploaden bestand (multipart/form-data).

  • folderId: string · Doelmap-UUID. Standaard: root.

Response

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-data met de veldnaam file. De folderId kan als formulierveld naast het bestand worden meegestuurd.

GET /api/v1/assets/:id/download

Get signed download URL

Genereert een tijdgebonden ondertekende URL voor het downloaden van het originele assetbestand. De URL verloopt na 1 uur.

Requires JWT

Response

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

Update asset metadata

Werkt bewerkbare metadata van een asset bij, zoals alt-tekst, tags of maptoewijzing.

Requires JWT

Request Body

  • altText: string · Alt-tekst voor toegankelijkheid en SEO.

  • folderId: string · Verplaats asset naar een andere map.

  • tags: string[] · Array van tag-strings.

Response

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

Delete asset

Soft-delete van een asset. Het bestand blijft 30 dagen in de opslag voordat het permanent wordt verwijderd. Productkoppelingen worden ontkoppeld.

Requires JWT

Response

200 OK

{
  "data": {
    "id": "clx1ast01img123",
    "deletedAt": "2025-02-08T12:30:00Z"
  }
}

Categorieen

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

List 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

Response

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

Create category

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

Request Body

  • name: string · requiredWeergavenaam van de categorie.

  • parentId: string · UUID van bovenliggende categorie voor nesting.

Response

201 Created

{
  "data": {
    "id": "clx2cat05mno901",
    "name": "Snowboard Jackets",
    "parentId": "clx0cat02def012",
    "productCount": 0,
    "createdAt": "2025-02-08T13:00:00Z"
  }
}

PATCH /api/v1/categories/:id

Update category

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

Request Body

  • name: string · Nieuwe weergavenaam.

  • parentId: string · Nieuwe bovenliggende UUID, of null voor rootniveau.

Response

200 OK

{
  "data": {
    "id": "clx2cat05mno901",
    "name": "Snow Jackets",
    "parentId": "clx0cat02def012",
    "updatedAt": "2025-02-08T13:15:00Z"
  }
}

DELETE /api/v1/categories/:id

Delete category

Verwijdert een categorie. Producten die aan deze categorie zijn toegewezen worden ontkoppeld maar niet verwijderd. Subcategorieen moeten eerst worden verplaatst of verwijderd.

Requires JWT

Response

200 OK

{
  "data": {
    "message": "Category deleted"
  }
}

Shopify Sync

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 full sync

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

Request Body

  • storeId: string · requiredUUID van de verbonden Shopify-winkel.

Response

200 OK

{
  "data": {
    "jobId": "clx2job01sync01",
    "status": "QUEUED",
    "type": "FULL",
    "storeId": "clx0str01abc789",
    "createdAt": "2025-02-08T14:00:00Z"
  }
}

POST /api/v1/shopify/sync/products

Sync specific products

Pusht een specifieke set producten naar de verbonden Shopify-winkel. Handig voor het synchroniseren van individuele producten na bewerkingen.

Requires JWT

Request Body

  • storeId: string · requiredUUID van de verbonden Shopify-winkel.

  • productIds: string[] · requiredArray van product-UUID's om te synchroniseren.

Response

200 OK

{
  "data": {
    "jobId": "clx2job02sync02",
    "status": "QUEUED",
    "productCount": 5,
    "storeId": "clx0str01abc789",
    "createdAt": "2025-02-08T14:10:00Z"
  }
}

GET /api/v1/shopify/sync/history

Sync history

Retourneert gepagineerde geschiedenis van sync-taken voor een specifieke winkel, gesorteerd op meest recent eerst.

Requires JWT

Query Parameters

  • storeId: string · requiredUUID van de Shopify-winkel.

  • page: integer · Paginanummer. Standaard: 1.

  • limit: integer · Items per pagina. Standaard: 25.

Response

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
  }
}

Winkels

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

List connected stores

Retourneert alle Shopify-winkels die zijn verbonden met je werkruimte, inclusief hun synchronisatiestatus en configuratie.

Requires JWT

Response

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 OAuth flow

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

Request Body

  • shop: string · requiredShopify-winkeldomein, bijv. my-store.myshopify.com.

Response

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

Disconnect store

Verwijdert de Shopify-winkelverbinding. Dit verwijdert geen producten uit Nexera of Shopify. Toekomstige syncs stoppen totdat de winkel opnieuw wordt verbonden.

Requires JWT

Response

200 OK

{
  "data": {
    "message": "Store disconnected"
  }
}

Facturatie

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

Get subscription

Retourneert de huidige abonnementsdetails inclusief plan, status, verbruik en factureringsperiode.

Requires JWT

Response

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

Create checkout session

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

Request Body

  • planId: string · requiredPlan-identificatie: FREE, BASIC, PRO of ENTERPRISE.

Response

200 OK

{
  "data": {
    "url": "https://checkout.stripe.com/c/pay/cs_live_a1b2c3...",
    "sessionId": "cs_live_a1b2c3d4e5f6"
  }
}

GET /api/v1/billing/invoices

List invoices

Retourneert recente facturen van Stripe voor de huidige tenant.

Requires JWT

Query Parameters

  • limit: integer · Aantal facturen om te retourneren. Standaard: 10.

Response

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

Create customer portal

Maakt een Stripe Customer Portal-sessie aan waar de gebruiker betalingsmethoden kan beheren, facturen kan bekijken en abonnementen kan opzeggen.

Requires JWT

Response

200 OK

{
  "data": {
    "url": "https://billing.stripe.com/p/session/bps_1abc2def3ghi..."
  }
}

Team

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

List team members

Retourneert alle gebruikers in je werkruimte met hun rollen, status en laatste inlogtijdstempel.

Requires JWT

Response

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

Invite user

Verstuurt een uitnodigingsmail naar een nieuw teamlid. De gebruiker ontvangt een verificatielink en wordt bij de eerste login aan de werkruimte toegevoegd.

Requires JWT

Request Body

  • 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.

Response

201 Created

{
  "data": {
    "id": "clx2usr03ghi789",
    "email": "[email protected]",
    "role": "PRODUCT_MANAGER",
    "status": "INVITED",
    "createdAt": "2025-02-08T15:00:00Z"
  }
}

PATCH /api/v1/users/:id

Update user role

Wijzigt de rol van een bestaand teamlid. Alleen Tenant Admins kunnen gebruikers promoveren of degraderen.

Requires JWT

Request Body

  • role: string · requiredNieuwe rol: VIEWER, PRODUCT_MANAGER, MARKETING, ASSET_MANAGER, SUPPLIER_MANAGER, FINANCE of TENANT_ADMIN.

Response

200 OK

{
  "data": {
    "id": "clx1usr02def456",
    "email": "[email protected]",
    "role": "TENANT_ADMIN",
    "updatedAt": "2025-02-08T15:30:00Z"
  }
}

DELETE /api/v1/users/:id

Remove user

Verwijdert een gebruiker uit de werkruimte. De gebruiker verliest direct de toegang. Door hen aangemaakte content (producten, assets) blijft behouden.

Requires JWT

Response

200 OK

{
  "data": {
    "message": "User removed"
  }
}

API-sleutels

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

List 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

Response

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

Create API key

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

Request Body

  • name: string · requiredLeesbaar label voor de sleutel.

  • permissions: string[] · requiredArray van rechtenbereiken, bijv. ["product:read", "asset:read"].

Response

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

Revoke API key

Trekt een API-sleutel permanent in. Verzoeken met deze sleutel ontvangen direct 401-responses.

Requires JWT

Response

200 OK

{
  "data": {
    "message": "API key revoked"
  }
}

SDKs

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

Node.js

JavaScript / TypeScript

npm install nexera-sdk

Py

Python

Python 3.8+

pip install nexera

Snel starten

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);

Actuele prijzen: de abonnementsnamen en limieten in de technische voorbeelden in deze gids zijn historisch en vormen geen actuele prijslijst. Gebruik Facturatie & abonnementen en https://nexerapxm.com/pricing voor commerciële prijzen en capaciteit. Controleer technische identifiers in de actuele API voordat je integreert.

Heeft dit antwoord je vraag beantwoord?
😞
😐
😁