Kaarten

Een kaart is het hart van de koppeling. Je maakt hem aan met wat je uit je dossier kent, de familie vult de rest aan in de customiser, en jij volgt de status.

Het Card-model

  • Name
    id
    Type
    ID!
    Description

    Het globale id, bijvoorbeeld gid://rouwkaart/Card/069a4543-62ed-442a-b69f-489b3182431a. Bewaar dit bij je dossier.

  • Name
    theme
    Type
    Theme
    Description

    Het gekozen thema, of null wanneer de familie nog moet kiezen. Wordt alleen opgehaald wanneer je er velden van vraagt.

  • Name
    externalDossierId
    Type
    String
    Description

    Jouw eigen dossiernummer. Uniek binnen je partneraccount en onveranderlijk na het aanmaken.

  • Name
    externalFuneralDirectorId
    Type
    String
    Description

    Welke uitvaartondernemer het dossier voert. Wij doen er niets mee; het staat er zodat jij kunt terugvinden waar een kaart vandaan kwam.

  • Name
    deceased
    Type
    Deceased!
    Description

    firstName, lastName, dateOfBirth, dateOfDeath en photoUrl.

  • Name
    livestreamUrl
    Type
    URL
    Description

    De link naar de uitzending van de uitvaart. Blijft ook na het bestellen te wijzigen, want die link is vaak pas op de ochtend zelf bekend.

  • Name
    familyContact
    Type
    FamilyContact!
    Description

    name en email. Op dit adres komt de bestelling te staan, met de links naar de kaart en de genodigdenlijst.

  • Name
    status
    Type
    CardStatus!
    Description

    DRAFT, ORDERED of ACTIVE.

  • Name
    cardUrl
    Type
    URL
    Description

    De openbare link. Alleen gevuld zodra de status ACTIVE is. Deze mag je wél opslaan en delen.

  • Name
    test
    Type
    Boolean!
    Description

    Aangemaakt met een testsleutel.

  • Name
    createdAt / updatedAt
    Type
    DateTime!
    Description

    ISO 8601 met tijdzone.

De statussen

  • Name
    DRAFT
    Type
    cardUrl is null
    Description

    In bewerking. De openbare pagina bestaat nog niet.

  • Name
    ORDERED
    Type
    cardUrl is null
    Description

    De familie heeft besteld.

  • Name
    ACTIVE
    Type
    cardUrl is gevuld
    Description

    De openbare kaart staat online en kan gedeeld worden.


MUTATIONcardCreate

Kaart aanmaken

Alleen externalDossierId is verplicht. Alles wat je nog niet weet, stuur je later met cardUpdate.

CardCreateInput

  • Name
    externalDossierId
    Type
    String!
    Description

    Jouw dossiernummer. Uniek binnen je account; een tweede kaart op hetzelfde nummer geeft TAKEN.

  • Name
    themeId
    Type
    ID
    Description

    Weglaten betekent: de familie kiest zelf in de customiser, via een korte wizard voor thema, opzet en zichtbaarheid.

  • Name
    externalFuneralDirectorId
    Type
    String
    Description

    Vrij tekstveld, maximaal 200 tekens.

  • Name
    deceased
    Type
    DeceasedInput
    Description

    firstName, lastName, dateOfBirth (JJJJ-MM-DD), dateOfDeath (JJJJ-MM-DD) en photoUrl.

  • Name
    livestreamUrl
    Type
    URL
    Description

    Http of https.

  • Name
    familyContact
    Type
    FamilyContactInput
    Description

    name en email.

Verzoek

MUTATION
cardCreate
mutation CreateCard($input: CardCreateInput!) {
  cardCreate(input: $input) {
    card {
      id
      status
      externalDossierId
      deceased {
        firstName
        lastName
        photoUrl
      }
      test
      createdAt
    }
    userErrors {
      field
      message
      code
    }
  }
}

Antwoord

{
  "data": {
    "cardCreate": {
      "card": {
        "id": "gid://rouwkaart/Card/069a4543-62ed-442a-b69f-489b3182431a",
        "status": "DRAFT",
        "externalDossierId": "HS-2026-0042",
        "deceased": {
          "firstName": "Jan",
          "lastName": "Jansen",
          "photoUrl": "https://media.rouwkaart-online.nl/memoriam/069a…/portret.jpg"
        },
        "test": true,
        "createdAt": "2026-09-25T10:00:00.000Z"
      },
      "userErrors": []
    }
  }
}

Over de portretfoto

deceased.photoUrl is bij het aanmaken het adres waar wíj de foto ophalen. Wij slaan hem daarna in onze eigen opslag op, en in het antwoord staat onze kopie.

Dat heeft twee redenen: de kaart moet jaren blijven werken, ook als jouw systeem er niet meer is, en jouw server krijgt geen bezoekersverkeer van iedereen die de kaart bekijkt.

  • Name
    Formaten
    Type
    jpeg, png, webp, gif, heic
    Description
  • Name
    Grootte
    Type
    maximaal 10 MB
    Description
  • Name
    Bereikbaar
    Type
    op het moment van aanmaken
    Description

    Het adres moet openbaar zijn; wij sturen geen inloggegevens mee.

Foto niet op te halen

{
  "data": {
    "cardCreate": {
      "card": null,
      "userErrors": [
        {
          "field": ["input", "deceased", "photoUrl"],
          "message": "kon niet worden opgehaald (ophalen gaf status 404)",
          "code": "UNPROCESSABLE"
        }
      ]
    }
  }
}

Idempotency

Weet je niet zeker of je verzoek is aangekomen (netwerk viel weg, timeout, herstart), stuur het dan opnieuw met dezelfde Idempotency-Key. Je krijgt het antwoord van de eerste keer terug en er komt geen tweede kaart.

  • Name
    Idempotency-Key
    Type
    header, max 255 tekens
    Description

    Een eigen unieke waarde per verzoek. Je dossiernummer plus een handeling werkt goed: HS-2026-0042-create.

  • Name
    X-Rouwkaart-Idempotent-Replay
    Type
    antwoordheader
    Description

    true wanneer dit het onthouden antwoord is.

Dezelfde sleutel op een ánder verzoek wordt afgewezen. Dat is bijna altijd een sleutel die per ongeluk hergebruikt wordt. Een verzoek dat een fout opleverde wordt niet onthouden: corrigeren en met dezelfde sleutel opnieuw sturen mag.

Twee keer hetzelfde verzoek

curl -X POST https://memoriam.rouwkaart-online.nl/partner/api/2026-10/graphql \
  -H "Content-Type: application/json" \
  -H "X-Rouwkaart-Access-Token: {access_token}" \
  -H "Idempotency-Key: HS-2026-0042-create" \
  -d @kaart.json

# Nog een keer, met dezelfde sleutel:
#   X-Rouwkaart-Idempotent-Replay: true
#   ... en exact hetzelfde antwoord.

QUERYcard

Kaart ophalen

Op het globale id. Een kaart van een andere partner geeft null, hetzelfde als een kaart die niet bestaat. Zou dat verschillen, dan verraadt het antwoord dát die kaart er is.

Er is bewust geen "al mijn kaarten"-query: je kent je eigen dossiers, en wij zijn niet de plek om jouw administratie te doorzoeken.

Verzoek

QUERY
card
query Card($id: ID!) {
  card(id: $id) {
    id
    status
    cardUrl
    updatedAt
    deceased {
      firstName
      lastName
      dateOfDeath
    }
    familyContact {
      email
    }
    livestreamUrl
  }
}

Antwoord, live

{
  "data": {
    "card": {
      "id": "gid://rouwkaart/Card/069a4543-62ed-442a-b69f-489b3182431a",
      "status": "ACTIVE",
      "cardUrl": "https://memoriam.rouwkaart-online.nl/memoriam/jan-jansen-1940-05-01",
      "updatedAt": "2026-09-26T09:14:03.000Z",
      "deceased": {
        "firstName": "Jan",
        "lastName": "Jansen",
        "dateOfDeath": "2026-09-18"
      },
      "familyContact": { "email": "marieke@voorbeeld.nl" },
      "livestreamUrl": "https://kerkdienstgemist.nl/jan"
    }
  }
}

Elk object is ook op te halen met node(id:):

query Node {
  node(id: "gid://rouwkaart/Card/069a4543-62ed-442a-b69f-489b3182431a") {
    __typename
    ... on Card {
      status
      cardUrl
    }
  }
}

MUTATIONcardUpdate

Kaart bijwerken

Alleen de velden die je meestuurt veranderen. Stuur expliciet null om een veld te wissen.

Wat vastligt

  • Name
    externalDossierId
    Type
    na het aanmaken
    Description

    Staat niet in CardUpdateInput. Een kaart hoort bij één dossier, en dat verband loskoppelen kan alleen aan jouw kant.

  • Name
    themeId
    Type
    na het bestellen
    Description

    De bestelling hangt aan dat product. Probeer je het toch, dan krijg je IMMUTABLE.

De rest blijft open, ook na het bestellen, de livestreamlink voorop.

Verzoek

MUTATION
cardUpdate
mutation UpdateCard($id: ID!, $input: CardUpdateInput!) {
  cardUpdate(id: $id, input: $input) {
    card {
      id
      livestreamUrl
      updatedAt
    }
    userErrors {
      field
      message
      code
    }
  }
}

Thema wijzigen na bestellen

{
  "data": {
    "cardUpdate": {
      "card": null,
      "userErrors": [
        {
          "field": ["input", "themeId"],
          "message": "kan na het bestellen niet meer worden gewijzigd",
          "code": "IMMUTABLE"
        }
      ]
    }
  }
}

Veelgestelde vragen

  • Name
    Kan ik een kaart verwijderen?
    Type
    niet via de API
    Description

    Een rouwkaart die gedeeld is, moet blijven werken. Moet er echt iets weg, bijvoorbeeld een testkaart of een dossier dat niet doorgaat, mail ons.

  • Name
    Kan ik zelf bestellen via de API?
    Type
    nee
    Description

    Bestellen gebeurt door de familie in de customiser, na het invullen. Dat is ook het moment waarop zij de prijs ziet en akkoord geeft.

  • Name
    Wat als de familie niets doet?
    Type
    de kaart blijft DRAFT
    Description

    Er verloopt niets en er gebeurt niets. Je kunt later gewoon een nieuwe sessielink opvragen.

Had je hier iets aan?