Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
minLevel1
maxLevel7

Over deze documentatie

In deze documentatie vindt u aan welke API-specificaties uw bron moet voldoen om attesten en vergunningen beschikbaar te maken in Mijn Burgerprofiel.

Waarom API-specificaties

Het is relatief eenvoudig om nieuwe bronnen voor attesten en vergunningen toe te voegen op Mijn Burgerprofiel. Als aansluitende partij/partner is voldoen aan deze API-specificaties de voorwaarde om na een korte configuratie attesten en vergunningen beschikbaar te maken in Mijn Burgerprofiel.

Aansluiten kan via dit aanvraagformulier.

OpenAPI-specificaties

Swagger integration
{
  "openapi": "3.0.0",
  "info": {
    "title": "Certificates Endpoint",
    "version": "1.0",
    "description": "# Certificates API\n\nThis documentation contains the API description that is expected from a source of certificates that is supplying certificates to the Burgerprofiel platform of the Flemish Government."
  },
  "servers": [
    {
      "url": "https://burgerprofiel.vlaanderen.be/v1",
      "description": "Burgerprofiel"
    }
  ],
  "paths": {
    "/certificates/{ssn}": {
      "get": {
        "tags": [
          "Certificates"
        ],
        "summary": "Certificates List",
        "parameters": [
          {
            "name": "ssn",
            "in": "path",
            "description": "Social security number",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/hal+json": {
                "schema": {
                  "$ref": "#/components/schemas/List-Certificates"
                },
                "examples": {
                  "Full Example": {
                    "value": {
                      "certificates": [
                        {
                          "id": "85144567-7043-4469-9e79-279f4eb31e27",
                          "language": "nl",
                          "name": "Dienstencheques 2019",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
                            }
                          ]
                        },
                        {
                          "id": "85144567-7043-4469-9e79-279f4eb31e27",
                          "language": "en",
                          "name": "Dienstencheques 2019",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/en"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/en/download"
                            }
                          ]
                        },
                        {
                          "id": "8a4faf91-300e-46f0-8dad-0e1e572dbca1",
                          "language": "nl",
                          "name": "Sportkamp Tennis",
                          "community": 23088,
                          "year": 2018,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1/download"
                            }
                          ]
                        },
                        {
                          "id": "25da5b3c-4de4-457c-a803-cea5cafbfff5",
                          "language": "nl",
                          "name": "Dienstencheques 2018",
                          "year": 2018,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/25da5b3c-4de4-457c-a803-cea5cafbfff5"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/25da5b3c-4de4-457c-a803-cea5cafbfff5/download"
                            }
                          ]
                        },
                        {
                          "id": "8e3405ea-ef23-4d8a-b5b4-9cb645ac312b",
                          "language": "nl",
                          "name": "Deelname opleiding recreatiemedewerker",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8e3405ea-ef23-4d8a-b5b4-9cb645ac312b"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8e3405ea-ef23-4d8a-b5b4-9cb645ac312b/download"
                            }
                          ]
                        },
                        {
                          "id": "8df1a0b0-1278-46a7-a3dc-cce7f593d02c",
                          "language": "nl",
                          "name": "Sportkamp tennis",
                          "community": 11002,
                          "year": 2012,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8df1a0b0-1278-46a7-a3dc-cce7f593d02c"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8df1a0b0-1278-46a7-a3dc-cce7f593d02c/download"
                            }
                          ]
                        },
                        {
                          "id": "34492c86-7bf8-4d96-9e61-e3c2f51d172a",
                          "language": "nl",
                          "name": "Dienstencheques 2015",
                          "year": 2015,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/34492c86-7bf8-4d96-9e61-e3c2f51d172a"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/34492c86-7bf8-4d96-9e61-e3c2f51d172a/download"
                            }
                          ]
                        },
                        {
                          "id": "a681c382-8e99-4757-9fdb-487b9b6aeb78",
                          "language": "nl",
                          "name": "Trainersopleiding voetbal",
                          "community": 71053,
                          "year": 2013,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/a681c382-8e99-4757-9fdb-487b9b6aeb78"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/a681c382-8e99-4757-9fdb-487b9b6aeb78/download"
                            }
                          ]
                        },
                        {
                          "id": "6973ab14-15c6-4ee7-944c-9d1162d9de71",
                          "language": "nl",
                          "name": "Dienstencheques 2014",
                          "year": 2014,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/6973ab14-15c6-4ee7-944c-9d1162d9de71"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/6973ab14-15c6-4ee7-944c-9d1162d9de71/download"
                            }
                          ]
                        },
                        {
                          "id": "d61fdf2e-8099-4757-93d9-2709f1ce1ae2",
                          "language": "nl",
                          "name": "Vlaamse kinderbijslag",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/d61fdf2e-8099-4757-93d9-2709f1ce1ae2"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/d61fdf2e-8099-4757-93d9-2709f1ce1ae2/download"
                            }
                          ]
                        }
                      ],
                      "pageMetadata": {
                        "number": 1,
                        "size": 10,
                        "totalElements": 40,
                        "totalPages": 4
                      },
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        },
                        {
                          "rel": "next",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=1"
                        },
                        {
                          "rel": "start",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        },
                        {
                          "rel": "last",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=3"
                        }
                      ]
                    }
                  },
                  "Last page, no more next page": {
                    "value": {
                      "certificates": [
                        {
                          "id": "85144567-7043-4469-9e79-279f4eb31e27",
                          "language": "nl",
                          "name": "Dienstencheques 2019",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/download"
                            }
                          ]
                        },
                        {
                          "id": "57faeea1-ff3b-4c65-989c-e2175610c2b0",
                          "language": "nl",
                          "name": "Sportkamp Volleybal",
                          "community": 21004,
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/57faeea1-ff3b-4c65-989c-e2175610c2b0"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/57faeea1-ff3b-4c65-989c-e2175610c2b0/download"
                            }
                          ]
                        },
                        {
                          "id": "8a4faf91-300e-46f0-8dad-0e1e572dbca1",
                          "language": "nl",
                          "name": "Sportkamp Tennis",
                          "community": 23088,
                          "year": 2018,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1/download"
                            }
                          ]
                        }
                      ],
                      "pageMetadata": {
                        "number": 3,
                        "size": 10,
                        "totalElements": 23,
                        "totalPages": 3
                      },
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=2"
                        },
                        {
                          "rel": "start",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        },
                        {
                          "rel": "last",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=2"
                        }
                      ]
                    }
                  },
                  "First page is last page": {
                    "value": {
                      "certificates": [
                        {
                          "id": "85144567-7043-4469-9e79-279f4eb31e27",
                          "language": "nl",
                          "name": "Dienstencheques 2019",
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/download"
                            }
                          ]
                        },
                        {
                          "id": "57faeea1-ff3b-4c65-989c-e2175610c2b0",
                          "language": "nl",
                          "name": "Sportkamp Volleybal",
                          "community": 21004,
                          "year": 2019,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/57faeea1-ff3b-4c65-989c-e2175610c2b0"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/57faeea1-ff3b-4c65-989c-e2175610c2b0/download"
                            }
                          ]
                        },
                        {
                          "id": "8a4faf91-300e-46f0-8dad-0e1e572dbca1",
                          "language": "nl",
                          "name": "Sportkamp Tennis",
                          "community": 23088,
                          "year": 2018,
                          "links": [
                            {
                              "rel": "self",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1"
                            },
                            {
                              "rel": "download",
                              "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/8a4faf91-300e-46f0-8dad-0e1e572dbca1/download"
                            }
                          ]
                        }
                      ],
                      "pageMetadata": {
                        "number": 1,
                        "size": 10,
                        "totalElements": 3,
                        "totalPages": 1
                      },
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        },
                        {
                          "rel": "start",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        },
                        {
                          "rel": "last",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Access Denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "Access Denied",
                      "status": 403
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "Could not find the certificate you are looking for.",
                      "status": 404
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "<description of the internal server error>",
                      "status": 500
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/certificates/{ssn}/{certificateId}/{language}": {
      "get": {
        "tags": [
          "Certificates"
        ],
        "summary": "Certificate Details",
        "description": "",
        "parameters": [
          {
            "name": "ssn",
            "in": "path",
            "description": "Social security number",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "certificateId",
            "in": "path",
            "description": "ID of the certificate, defined as path parameter here (can be query parameter too)",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "language",
            "in": "path",
            "description": "Language of the certificate, defined as path parameter here (can be query parameter too)",
            "required": true,
            "style": "simple",
            "explode": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/hal+json": {
                "schema": {
                  "$ref": "#/components/schemas/Item-Certificate"
                },
                "examples": {
                  "only-required": {
                    "value": {
                      "id": "85144567-7043-4469-9e79-279f4eb31e27",
                      "language": "nl",
                      "name": "certificate-1234",
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
                        },
                        {
                          "rel": "download",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
                        }
                      ]
                    }
                  },
                  "only-year": {
                    "value": {
                      "id": "85144567-7043-4469-9e79-279f4eb31e27",
                      "language": "nl",
                      "name": "certificate-1234",
                      "year": 2019,
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
                        },
                        {
                          "rel": "download",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
                        }
                      ]
                    }
                  },
                  "only-community": {
                    "value": {
                      "id": "85144567-7043-4469-9e79-279f4eb31e27",
                      "language": "nl",
                      "name": "certificate-1234",
                      "community": 21004,
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
                        },
                        {
                          "rel": "download",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
                        }
                      ]
                    }
                  },
                  "full-certificate": {
                    "value": {
                      "id": "85144567-7043-4469-9e79-279f4eb31e27",
                      "language": "nl",
                      "name": "certificate-1234",
                      "community": 21004,
                      "year": 2019,
                      "links": [
                        {
                          "rel": "self",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
                        },
                        {
                          "rel": "download",
                          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "403": {
            "description": "Access Denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "Access Denied",
                      "status": 403
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "Could not find the certificate you are looking for.",
                      "status": 404
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                },
                "examples": {
                  "Example": {
                    "value": {
                      "title": "An error occurred!",
                      "detail": "<description of the internal server error>",
                      "status": 500
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "ProblemDetails": {
        "title": "Problem details",
        "required": [
          "type",
          "title",
          "detail",
          "status"
        ],
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          },
          "status": {
            "format": "int32",
            "type": "integer"
          }
        },
        "example": {
          "title": "Er heeft zich een fout voorgedaan!",
          "detail": "",
          "status": 400
        }
      },
      "Item-Certificate": {
        "title": "Certificate",
        "required": [
          "id",
          "links",
          "name"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "year": {
            "type": "integer"
          },
          "community": {
            "type": "integer"
          },
          "links": {
            "$ref": "#/components/schemas/Common-Item-Links"
          }
        }
      },
      "Common-General-Link": {
        "title": "Link",
        "required": [
          "href",
          "rel"
        ],
        "type": "object",
        "properties": {
          "rel": {
            "type": "string"
          },
          "href": {
            "type": "string"
          }
        }
      },
      "Common-Item-Links": {
        "title": "Links For Item",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Common-General-Link"
        }
      },
      "Common-List-Links": {
        "title": "Links For List",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Common-General-Link"
        }
      },
      "Common-List-PageMetadata": {
        "title": "PageMetadata",
        "required": [
          "number",
          "size",
          "totalElements",
          "totalPages"
        ],
        "type": "object",
        "properties": {
          "size": {
            "type": "integer"
          },
          "totalElements": {
            "type": "integer"
          },
          "totalPages": {
            "type": "number"
          },
          "number": {
            "type": "number"
          }
        }
      },
      "List-Certificates": {
        "required": [
          "certificates",
          "links",
          "pageMetaData"
        ],
        "type": "object",
        "properties": {
          "certificates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Item-Certificate"
            }
          },
          "links": {
            "$ref": "#/components/schemas/Common-List-Links"
          },
          "pageMetaData": {
            "$ref": "#/components/schemas/Common-List-PageMetadata"
          }
        }
      }
    }
  }
}

JSON

We gebruiken application/hal+json als standaard. Deze specifieke JSON geeft aan dat de payload voldoet aan de HATEOAS-standaard.

Layout

URL's en versiebeheer

Voeg altijd een versienummer toe aan de URL. Het versienummer is altijd een cijfer, bijv. v1v2, … Er kunnen nooit breaking changes bestaan binnen een bepaalde versie. Zijn er toch breaking changes nodig, zorg dan voor een nieuwe versie.

Een URL voor uw endpoint kan er als volgt uitzien:
https://<hostname>/v1/certificates/<ssn>?limit=10&page=0

Verplichte velden

In de de OpenAPI-specificaties vindt u een overzicht van de verplichte en de optionele velden. Indien nodig kunt u extra velden toevoegen.

Note

Digitaal Vlaanderen vertaalt alleen de velden in de OpenAPI-specificaties.

Lijst met attesten/vergunningen

De lijst met attesten is het belangrijkste endpoint om te voorzien. Het zorgt voor een lijst met attesten en vergunningen die bij de aangemelde gebruiker horen, inclusief de details over die attesten en vergunningen. De gebruiker wordt geïdentificeerd op basis van zijn/haar INSZ-nummer.

Zie ook de OpenAPI-specificaties voor meer informatie.

Er moeten links worden voorzien zodat de client door de verschillende pagina’s met attesten en vergunningen kan navigeren. Zie ook HATEOAS voor meer informatie en voorbeelden.

De respons moet altijd een paginering hebben. De metadata bij de pagina’s moet deel uitmaken van de payload zodat de client weet hoeveel attesten en vergunningen er zijn, op welke pagina’s die staan, enz. Zie ook de codevoorbeelden hieronder.

  • DE URL heeft een page-parameter, die 0-based moet zijn. Zodra 0 is gepasseerd, moet de eerste pagina worden meegegeven.

  • In de metadata van de pagina is er echter niets 0-based, alleen 1-based. Bijv. de number-parameter moet op de eerste pagina de waarde 1 hebben.

Model-specifieke informatie

  • certificates (verplicht): lijst met attesten inclusief de detailinformatie over de attesten en vergunningen (zie hieronder).

Note

Worden er geen attesten of vergunningen gevonden voor het INSZ-nummer, dan moet de lijst leeg zijn.

Request (voorbeeld)

  • Header: Authorization: Bearer XyZAbCd1234

  • Method: GET

  • URL: https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0

respons (voorbeeld)

Code Block
{
  "certificates": [
    {
      "id": "85144567-7043-4469-9e79-279f4eb31e27",
      "language" : "nl",
      "name": "Dienstencheques 2019",
      "year": 2019,
      "links": [
        {
          "rel": "self",
          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
        },
        {
          "rel": "download",
          "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
        }
      ]
    }
  ],
  "pageMetadata": {
    "number": 1,
    "size": 10,
    "totalElements": 40,
    "totalPages": 4
  },
  "links": [
    {
      "rel": "self",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
    },
    {
      "rel": "next",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=1"
    },
    {
      "rel": "start",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
    },
    {
      "rel": "last",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=3"
    }
  ]
}

Paginering en maximumwaarden

Paginering verplicht

De respons moet gepagineerd zijn voor elke collectie die wordt meegegeven. De volgende 2 parameters in de URL’s moeten hiervoor aanwezig zijn:

  • page: het paginanummer (0-based)

  • limit: het aantal items op 1 pagina (1-based)

Gepagineerde resultaten zijn natuurlijk alleen nodig wanneer het resultaat een collectie is. Voor 1 attest/vergunning + details is er geen paginering nodig.

Info

Worden er geen attesten of vergunningen gevonden voor het INSZ-nummer, dan moet de lijst leeg zijn.

De API-client kan de maximumwaarde kiezen

De parameters voor de paginering en de maximumwaarden maken deel uit van de URL: https://<hostname>/v1/certificates/<ssn>?limit=10&page=0. T

De API-client kan de parameter met de grenswaarde bepalen. Als de client 10 items vraagt, dan moeten er 10 worden gegeven. Vraagt de client er 50, dan moeten er 50 worden gegeven.

Er kan natuurlijk een maximumwaarde worden bepaald. Werk bij voorkeur met een maximumwaarde van 100 items. Vraagt de client om meer resultaten dan die in de maximumwaarde, dan wordt de default maximumwaarde getoond.

Er werden geen default-waarden gedefinieerd

Bij gebrek aan defaults voor de paginering (page) en maximumwaarde (limit) moet de API terugvallen op redelijke defaults.

  • https://<hostname>/v1/certificates/<ssn>?limit=10&page=0

  • https://<hostname>/v1/certificates/<ssn>?limit=10

  • https://<hostname>/v1/certificates/<ssn>?page=0

Worden er geen defaultwaarden gedefinieerd, gebruik dan deze logische defaultwaarden:

  • page: de eerste pagina

  • limit: 10

Metadata voor paginering

Metadata voor paginering zijn verplicht in het pageMetadata-object van de respons:

Code Block
"pageMetadata": {
    "number": 1,
    "size": 10,
    "totalElements": 40,
    "totalPages": 4
}

De volgende 4 parameters zijn verplicht (allemaal 1-based)

  • number: het paginanummer

  • size: het paginanummer in het totaal aantal pagina’s

  • totalElements: het totale aantal items in de collectie

  • totalPages: het totale aantal pagina’s in de collectie

Er werden geen attesten of vergunningen gevonden

Wanneer er voor een bepaald INSZ-nummer geen attesten of vergunningen worden gevonden, verwachten we een lege collectie als antwoord, geen error 404.

Detail attest/vergunning

Dit is de link waarachter meer details over een attest/vergunning beschikbaar zijn. Deze link zorgt ervoor dat de klant bepaalde functionaliteiten kan vinden, zoals bijv. het attest/de vergunning downloaden.

Zie ook HATEOS.

Note

Er kunnen extra velden worden toegevoegd in de respons, maar ze zullen niet meegenomen worden.

Primary key

Dit zijn de parameters die het attest/de vergunning definiëren. Voor een attest is de primary key: ID + taal. Beide moeten dus in de URL staan. Afhankelijk van de opzet zijn dit path parameters of query parameters.

In de voorbeelden zijn het path parameters. Omdat we een HATEOAS-design verwachten, vinden we de URL via uw API.

Model-specifieke informatie

Request (voorbeeld)

  • Header: Authorization: Bearer XyZAbCd1234

  • Method: GET

  • URL: https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl

respons (voorbeeld)

Code Block
{
  "id": "85144567-7043-4469-9e79-279f4eb31e27",
  "language" : "nl",
  "name": "certificate-1234",
  "links": [
    {
      "rel": "self",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
    },
    {
      "rel": "download",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
    }
  ]
}

HATEOAS

Over HATEOAS

Als de specificaties worden gevolgd, zijn alle API’s conform HATEOAS (Hypermedia As The Engine Of Application State). Deze architecturale component zorgt ervoor dat een REST-client de API altijd volledig leest, zonder veronderstelde kennis. Hiervoor is alleen het entrypoint van de API nodig. Dan endpoint is het startpunt van waar de client door de API kan ‘crawlen’ door relaties (rels) en referenties (hrefs) te gebruiken.

Bij Digitaal Vlaanderen kunnen we dankzij HATEOAS uw API volledig uitlezen zonder een client te schrijven met specifieke kennis over uw API.

Hoe implementeren?

Volg de onderstaande voorbeelden. Voeg HATEOAS toe aan uw API door de links-sectie toe te voegen. De links-sectie moet beschikbaar zijn voor de lijst met attesten/vergunningen en bij de details van een specifiek attest/vergunning.

Een links-sectie voor een lijst attesten/vergunningen ziet er gewoonlijk als volgt uit:

Code Block
"links": [
    {
      "rel": "self",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
    },
    {
      "rel": "next",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=1"
    }
    {
      "rel": "start",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=0"
    },
    {
      "rel": "last",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302?limit=10&page=1"
    }
]

De volgende 4 verschillende relaties zijn verplicht:

  • self: de href-verwijzingen naar de huidige pagina

  • next: (verplicht op voorwaarde dat er meerdere pagina’s zijn) de href-verwijzingen naar de volgende pagina in de gepagineerde collectie, alleen nodig als er effectief een volgende pagina is om naar te verwijzen

  • start: de href-verwijzing naar de eerste pagina van de collectie

  • last: de href-verwijzing naar de laatste pagina van de collectie

Een links-sectie voor de detailinformatie bij de attesten/vergunningen ziet er gewoonlijk als volgt uit:

Code Block
"links": [
    {
      "rel": "self",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl"
    },
    {
      "rel": "download",
      "href": "https://burgerprofiel.vlaanderen.be/v1/certificates/90061638302/85144567-7043-4469-9e79-279f4eb31e27/nl/download"
    }
]

De volgende 2 verschillende relaties zijn verplicht:

  • self (verplicht) de href-verwijzing naar de detailinformatie bij het attest/vergunning

  • download (verplicht) de href-verwijzing naar de downloadlink bij het attest/vergunning. Dit moet een directe link zijn, die gestreamd kan worden naar de gebruiker.

Security

De security-vereisten, zoals opgesteld in de Algemene REST API-specificaties - Security, gelden ook voor de Attesten en vergunningen-API.

Performantie en loadtesten

De API dient te voldoen aan de vereisten zoals opgesteld in de Algemene REST API specificaties - Performantie en loadtesten.