ZAGIS Offerte API

Voor gebruikers van PharmaPortal is het mogelijk om via een API vanuit een eigen systeem offertes in te sturen naar ZAGIS.

Deze Offerte API is een REST api met 1 endpoint en 1 mogelijke actie

Test API endpoint:
https://demo.zagis.nl/api/zagis/offerte

Productie API endpoint:
https://www.zagis.nl/api/zagis/offerte

Authenticatie

Deze API maakt gebruik van:

  • IP-whitelisting voor beveiliging
  • Een API key voor authenticatie & rate-limiting
  • HMAC voor integriteitscontrole
Headers

x-zagis-offerte-key De aan uw organisatie uitgereikte API key

x-zagis-offerte-hmac Hexadecimaal geëncodeerde SHA-512 HMAC van het request body

Request

Requests zijn POST requests met een JSON payload. Voorbeeld:

{
  "offerteCode": "04eba051",		# Unieke offertecode die in de offerte-aanvraag vermeld staat
  "readOnly": true,			# Bij true controleert ZAGIS de offerte wel maar slaat deze niet op
  "bijlage": {  # Optioneel wanneer er een PDF bijlage wordt meegestuurd. Max 5MB
    "filename" : "Begeleidend Schrijven.pdf", # Optioneel, standaard 'bijlage.pdf',
    "contents": "JVBERi0xLjMKJcTl8uXrp/Og0MTGCj(...)==" # BASE64 Encoded PDF
  },
  "antwoorden": [ // Indien in offerteaanvraag vragen zijn opgenomen
    { // Algemene vraag
        "vraagId": "29b7cb44-d116-4878-8ce7-a94a756cd1fd",
        "antwoord": "Ja",
    },{ // Algemene vraag
        "vraagId": "29b7cb44-d116-4878-8ce7-a94a756dd1fd",
        "antwoord": "2025-01-01", // Datum type, altijd YYYY-MM-DD
    },{ // Product specifieke vraag, product 1
        "vraagId": "29b7cb44-d116-4878-8ce7-a94a756cd1fe",
        "zindexNummer": 16070666,
        "antwoord": "Optie 1",
    },{ // Product specifieke vraag, product 2
        "vraagId": "29b7cb44-d116-4878-8ce7-a94a756cd1fe",
        "zindexNummer": 16070667,
        "antwoord": "Optie 2",
    }
  ],
  "artikelen": [
    {
      "zindexNummer": 16070666,
      "opmerking": "Betreft nieuwe verpakking", # Max 255 karakters
      "referentie": "offerte-groep-2018-0004",	# Max 255 karakters
      "barcodeOpKae": false,		# Barcode op kleinste afgifte eenheid, boolean
      "vastOfPercentage": "vast",	# "vast" of "percentage"
      "volume": 1000,               # Afwijkend beschikbaar jaarvolume in stuks (counting-units). Optioneel, alleen gebruiken bij een afwijkend jaarvolume
      "toeslag": 1.23               # Alleen indien in offerteaanvraag is aangegeven dat toeslag geoffreerd mag worden, default 0
      "prijzen": [
        {
          "looptijdMaanden": 12,	# De toegestane looptijden zijn aangegeven in de offerte-aanvraag
          "route": "groothandel",	# "groothandel" of "direct"
          "prijs": 4200,		# als vastOfPercentage = vast, verplicht > 0
          "percentage": 0		# als vastOfPercentage = percentage, verplicht > 0
        },
        {
          "looptijdMaanden": 24,
          "route": "groothandel",
          "prijs": 4100,
          "percentage": 0
        },
        {
          "looptijdMaanden": 36,
          "route": "groothandel",
          "prijs": 4000,
          "percentage": 0
        }
      ]
    },
    {
      "zindexNummer": 15825663,
      "opmerking": "Relatieve korting tov AIP",
      "referentie": "offerte-groep-2018-0008",
      "barcodeOpKae": true,
      "vastOfPercentage": "percentage",
      "prijzen": [
        {
          "looptijdMaanden": 12,
          "route": "groothandel",
          "prijs": 0,
          "percentage": 5
        },
        {
          "looptijdMaanden": 24,
          "route": "groothandel",
          "prijs": 0,
          "percentage": 10
        },
        {
          "looptijdMaanden": 36,
          "route": "groothandel",
          "prijs": 0,
          "percentage": 15
        }
      ]
    },
    {
      "zindexNummer": 17010102,
      "opmerking": "Staffel",
      "referentie": "offerte-groep-2018-0009",
      "barcodeOpKae": true,
      "isStaffel": true, // Alleen indien staffel is toegestaan door inkopende apotheken in dit traject
      "staffelPer": "verpakking", // ['verpakking', 'verpakkingOpStof', 'patienten', 'starters', 'eenheden']
      "gemetenPer": "kalenderjaar", // ['kalenderjaar', 'jaar', 'contractperiode', 'kwartaal']
      "verrekeningPer": "kalenderjaar", // ['kalenderjaar', 'jaar', 'contractperiode', 'kwartaal']
      "vastOfPercentage": "percentage",
      "staffels": [
        {
          "van": 1,
          "tot": 10,
          "prijzen": [
            {
              "looptijdMaanden": 36,
              "route": "groothandel",
              "prijs": 0,
              "percentage": 15
            }
          ]
        },{
          "van": 11,
          "tot": 99999999,
          "prijzen": [
            {
              "looptijdMaanden": 36,
              "route": "groothandel",
              "prijs": 0,
              "percentage": 25
            }
          ]
        }
      ]
    }
  ]
}
      	
Response

Deze API retourneert de volgende HTTP status codes:

  • 400 Bij een gebrek aan payload
  • 401 Bij foutieve authenticatie of HMAC
  • 409 Bij een inhoudelijke fout van het request (bijvoorbeeld ongeldig ZI-Nummer)
  • 200 Bij een correct request

Voorbeeld van een response bij een succesvol & correct request zonder bijlage:

{
  "result":		"success",
  "readOnly":		true,		# Overgenomen van veld readOnly van request
  "totalRows":		6,		# Totaal aantal combinaties van artikel & prijzen
  "uniqueProducts":	2,		# Totaal aantal verwerkte unieke ZI-nummers
  "bijlage": {
    "available": false,
    "correct": false,
    "filename": "bijlage.pdf"
  }
}

Voorbeeld van een response bij een succesvol & correct request met bijlage:

{
  "result":		"success",
  "readOnly":		true,		# Overgenomen van veld readOnly van request
  "totalRows":		6,		# Totaal aantal combinaties van artikel & prijzen
  "uniqueProducts":	2,		# Totaal aantal verwerkte unieke ZI-nummers
  "bijlage": {
    "available": true,
    "correct": true,
    "filename": "Begeleidend schrijven.pdf"
  }
}

Voorbeeld van een response bij een inhoudelijk foutief request:

{
	"result":	"error",
	"message":	"Artikel met index 0 heeft een ongeldig ZI#: 160706669"
}
Aandachtspunten

Na het succesvol aanleveren van een offerte met de vlag readOnly op false wordt deze code ongeldig gemaakt in ZAGIS, u kunt maar 1x per offerte-code een offerte indienen. Indien u wilt testen of uw offerte correct is gebruikt u readOnly = true

Indien u uw integratie wilt testen neemt u tijdig contact met ons op via info@zagis.nl. Wij zetten dan testdata voor u klaar en voorzien u van API-Key, API-Secret & offerte-codes