VPD-schema: queries en het party-datamodel

GraphQL-queries, het party-datamodel en voorbeelden. Afgestemd op de officiële PSB schema reference.

De VPD-service biedt een GraphQL-endpoint. De volledige, actuele definitie van alle queries en types staat in de officiële Schema Reference (partySchema) op de PSB-documentatiesite. Vraag in GraphQL alleen de velden op die je nodig hebt; onderstaande uitleg en voorbeelden zijn een praktische samenvatting.

Beschikbare root queries
QueryDoelpartyPartijen zoeken; resultaten geordend op relevantiefindBest-effort match wanneer gegevens onzeker of onvolledig zijn (alle argumenten optioneel)companyRechtsvorm-/bedrijfstypecodes voor een gegeven landsbiSBI-codes (Standaard Bedrijfsindeling, NL)naceNACE-codes (EU-classificatie)

Details en typen voor find, company, sbi en nace staan in de schema reference.

De party-query: parameters
ParameterTypeBeschrijvingsearchStringVrij zoeken over alle veldenidStringZoeken op identifier (bijv. KvK, btw-nummer of eConnectId)nameStringZoeken op (bedrijfs)naampostcodeStringFilter op postcodecityStringFilter op plaatscountryStringLandcode, bijv. NL of BElangStringTaal voor resultaten; standaard nlmaxResultsIntMaximum aantal resultaten; standaard 10

Je kunt parameters combineren om de zoekopdracht te verfijnen.

Het party-type (kernvelden)
VeldTypeBeschrijvingidStringeConnect-ID van de partijtypeStringPartijtypeisActiveBooleanOf de partij actief ispreferredNameStringJuridische naam indien beschikbaar; anders de eerste handelsnaamlegalNameStringBevestigde juridische naam (kan leeg zijn als die niet zeker is vastgesteld)tradeNamesStringHandelsnamendescriptionStringKorte omschrijving van de activiteitenidentifierspartyIdentifierIdentifiers (KvK, btw, GLN, enz.)sectorCodesactivitySectorcodes (bijv. SBI/NACE)locationslocationBekende vestigingen/adressenwebsiteStringWebsiteeDeliveryeDeliveryMogelijkheden voor elektronische levering (o.a. Peppol-kanalen)highlightshighlightGemarkeerde fragmenten bij zoektreffers
identifiers: partyIdentifier en partyId

Identifiers staan niet meer als platte type/value-paren op het party-object. Je gebruikt identifiers: elke entry heeft een name (label van het schema, bijv. "KvK") en een id van type partyId met onder meer value, text, schemeIdText, schemeIdNumber en schemeAuthority. Zie de schema reference voor alle velden.

Locaties

Een location heeft onder andere text (volledig geformatteerd adres), street, number, numberAddition, postcode, city, country (object met o.a. iso) en optioneel latitude / longitude.

Het eDelivery-veld

Het eDelivery-veld geeft per kanaal aan welke documenttypen een partij kan ontvangen of versturen, zonder dat je een aparte SMP-lookup hoeft uit te voeren:

Sub-veldBeschrijvingacceptsLijst van documenttypen die de partij kan ontvangenprovidesLijst van documenttypen die de partij kan versturen

Per documenttype worden onder meer channel (bijvoorbeeld Peppol), partyId (de identifier op dat kanaal), listedName, documentName, documentTypeId, processId, family en kanaalspecifieke details teruggegeven. Hiermee kan een integratie in één call controleren of een ontvanger een specifiek documenttype op een bepaald kanaal accepteert.

Voorbeeldqueries
Organisatie op naam
{
  party(name: "eConnect", country: "NL", maxResults: 5) {
    id
    preferredName
    legalName
    tradeNames
    identifiers {
      name
      id {
        value
        text
        schemeIdText
      }
    }
  }
}
Zoeken op identifier
{
  party(id: "12345678", maxResults: 1) {
    id
    preferredName
    legalName
    locations {
      text
      street
      postcode
      city
      country {
        iso
      }
      latitude
      longitude
    }
    website
  }
}
Vrij zoeken met meer detail
{
  party(search: "facturatie Woerden", maxResults: 10) {
    id
    type
    isActive
    preferredName
    legalName
    description
    identifiers {
      name
      id {
        value
        text
      }
    }
    sectorCodes {
      type
      value
      text
      description
    }
    locations {
      text
      postcode
      city
      country {
        iso
      }
    }
    website
  }
}
Onzekere invoer: find

Voor fuzzy of onvolledige gegevens gebruik je find met een args-object (zie de documentatie voor alle optionele velden, waaronder ids.legal, ids.vat, ids.iban, ids.oin, ids.gln).

{
  find(args: { name: "Gemeente", country: "NL", postcode: "3511" }) {
    eConnectId
    name
    address
    identifiers {
      name
      id {
        value
        text
      }
    }
  }
}
Tips voor effectief zoeken

Gebruik search voor brede tekstzoekacties en name of id voor gerichtere filters. Met lang stel je de taal van tekstvelden in (standaard Nederlands). Beperk het resultaat met maxResults tijdens testen. Controleer errors in de GraphQL-response bij syntactische of schemafouten; een lege lijst bij party of find betekent geen treffer, niet per se een fout.

Veelgestelde vragen
Kan ik meerdere zoekparameters combineren in één `party`-query? Ja. Je kunt bijvoorbeeld `name` samen met `city`, `postcode` of `country` gebruiken om resultaten te verfijnen. De officiële parameterlijst staat in de [schema reference](https://psb.econnect.eu/vpd/introduction/partySchema.html). Hoe vraag ik identifiers op? Via het veld `identifiers` op `party` (of op `matchResult` bij `find`). Selecteer `name` en de gewenste velden van `id` (bijv. `value` en `text`). Dit vervangt het oudere patroon met een vlakke lijst `partyIds { type value }`. Wat is het maximale aantal resultaten per query? Standaard maximaal 10 resultaten voor `party`, tenzij je `maxResults` hoger zet. Voor snelle validatie is `maxResults: 1` vaak genoeg.

Wil je queries interactief testen? Gebruik de VPD Playground. Of lees hoe je de VPD in je integratie verwerkt.

Probeer de VPD Playground

Gerelateerd