{
    "openapi": "3.1.0",
    "info": {
        "title": "GetApi",
        "version": "0.0.1",
        "description": "## Authenticatie\n\nAlle API-endpoints vereisen authenticatie. Stuur je API-sleutel mee met **\u00e9\u00e9n** van deze methoden:\n\n**Optie 1 \u2014 X-Api-Key-header (aanbevolen)**\n```\nX-Api-Key: ga_live_xxxxxxxxxxxxxxxxxxxx\n```\n\n**Optie 2 \u2014 Bearer-token**\n```\nAuthorization: Bearer ga_live_xxxxxxxxxxxxxxxxxxxx\n```\n\nJe API-sleutels beheer je in je [dashboard](https://getapi.nl/dashboard).\n\n## AI- en agentbetalingen (x402)\n\nSommige endpoints ondersteunen directe betalingen voor AI-agents via het **x402**-protocol (https://www.x402.org).\nEen API-sleutel of account is niet nodig. Stuur een normaal verzoek zonder sleutel;\nde server antwoordt met **HTTP 402** en een `PAYMENT-REQUIRED`-header:\n\n```\nPAYMENT-REQUIRED: <base64 JSON PaymentRequirements>\n```\n\nDeze base64-string bevat onder andere `network`, `asset`, `amount` en `payTo`.\nJe agent ondertekent een EIP-3009 *transferWithAuthorization* voor het opgegeven `amount` in USDC naar dat `payTo`-adres,\ncodeert de handtekening als base64 en verstuurt het verzoek opnieuw met:\n\n```\nPAYMENT-SIGNATURE: <base64 SignedAuthorization>\n```\n\nDe server verifieert de handtekening via een facilitator, levert de data en settle de betaling on-chain.\nDe succesresponse bevat een `PAYMENT-RESPONSE`-header met de transactiegegevens.\nEen eenmalige `nonce` voorkomt replay-aanvallen. Betalingen gaan in USDC op **Base**;\nde prijs wordt bepaald door de `credit_cost` van het endpoint.",
        "contact": {
            "email": "info@wdnoord.nl"
        },
        "x-guidance": "GetAPI.nl is een Nederlandse API-platform voor lookups en validaties (postcode,\nadres, kenteken, BTW, e-mail, KVK, IBAN, energiemaatwerk, overheidsdata). Elke\nendpoint accepteert een API key via de X-Api-Key header of Authorization:\nBearer <key>.\n\nSommige endpoints zijn ook direct betaalbaar voor AI-agents via het x402-protocol\n(https://www.x402.org) zonder account of API key: stuur een verzoek zonder key,\nde server antwoordt met HTTP 402 en een PAYMENT-REQUIRED header (base64 JSON met\nnetwork, asset, amount, payTo). Teken daarna een EIP-3009 transferWithAuthorization\nvoor het gevraagde bedrag in USDC op Base en hertrail met een PAYMENT-SIGNATURE\nheader. De server verifieert, levert de data en settleert on-chain.\n\nTips voor agents:\n- Lees eerst de PAYMENT-REQUIRED header van een 402-antwoord; die is leidend.\n- Geef altijd de exact door de server gevraagde parameters mee.\n- Een endpoint met een \"x-payment-info\" blok vereist betaling voor gebruik."
    },
    "servers": [
        {
            "url": "https://api.getapi.nl",
            "description": "GetAPI"
        }
    ],
    "security": [
        {
            "ApiKeyAuth": []
        },
        {
            "BearerAuth": []
        },
        {
            "ApiKeyAuth": []
        },
        {
            "BearerAuth": []
        }
    ],
    "paths": {
        "/v1/property/energy-label": {
            "get": {
                "operationId": "property.energy-label",
                "description": "Retourneert de geregistreerde energielabels voor een Nederlands adres uit EP-Online (RVO). Elk label bevat het volledige EP-Online-record (veldnamen zijn naar het Engels vertaald. Velden die EP-Online voor dat label niet levert, zijn `null`). \n\nResultaten worden 24 uur gecachet. ",
                "summary": "Energielabel opzoeken voor een Nederlands adres",
                "tags": [
                    "RVO",
                    "EnergyLabel"
                ],
                "parameters": [
                    {
                        "name": "zipcode",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "pattern": "^[1-9][0-9]{3}\\s?[A-Za-z]{2}$"
                        }
                    },
                    {
                        "name": "house_number",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 99999
                        }
                    },
                    {
                        "name": "house_letter",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "pattern": "^[a-zA-Z]{1}$"
                        }
                    },
                    {
                        "name": "house_number_addition",
                        "in": "query",
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ],
                            "pattern": "^[a-zA-Z0-9]{1,4}$",
                            "maxLength": 4
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Energy label found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "examples": [
                                        {
                                            "found": true,
                                            "labels": [
                                                {
                                                    "registration_date": "2024-08-30T22:25:14.623",
                                                    "recording_date": "2024-08-26T00:00:00",
                                                    "valid_until": "2034-08-26T00:00:00",
                                                    "certificate_holder": "Prosperos B.V.",
                                                    "recording_type": "Basisopname",
                                                    "status": "Bestaand",
                                                    "calculation_type": "NTA 8800:2024 (basisopname utiliteitsbouw)",
                                                    "is_simplified_label": null,
                                                    "based_on_reference_building": false,
                                                    "building_class": "Utiliteitsbouw",
                                                    "building_type": null,
                                                    "building_subtype": null,
                                                    "sbi_code": null,
                                                    "zipcode": "1012LG",
                                                    "house_number": 1,
                                                    "house_letter": null,
                                                    "house_number_addition": null,
                                                    "detail_description": null,
                                                    "bag_residence_id": "0363010012111931",
                                                    "bag_mooring_id": null,
                                                    "bag_stand_id": null,
                                                    "bag_building_ids": [
                                                        "0363100012185508"
                                                    ],
                                                    "construction_year": 1890,
                                                    "usable_area_thermal_zone": 16131.58,
                                                    "compactness": 0.51,
                                                    "energy_class": "A+",
                                                    "energy_index": null,
                                                    "energy_index_emg_forfeit": null,
                                                    "energy_demand": 112.77,
                                                    "primary_fossil_energy": 177.25,
                                                    "primary_fossil_energy_emg_forfeit": null,
                                                    "renewable_energy_share": 19.4,
                                                    "renewable_energy_share_emg_forfeit": null,
                                                    "temperature_overrun": null,
                                                    "heat_demand": 74.62,
                                                    "requirement_energy_demand": null,
                                                    "requirement_primary_fossil_energy": null,
                                                    "requirement_renewable_energy_share": null,
                                                    "requirement_temperature_overrun": null,
                                                    "calculated_co2_emission": 36.99,
                                                    "calculated_energy_consumption": 177.24
                                                }
                                            ]
                                        }
                                    ],
                                    "properties": {
                                        "found": {
                                            "type": "boolean"
                                        },
                                        "labels": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "additionalProperties": []
                                            }
                                        }
                                    },
                                    "required": [
                                        "found",
                                        "labels"
                                    ]
                                }
                            }
                        }
                    },
                    "422": {
                        "$ref": "#/components/responses/ValidationException"
                    },
                    "404": {
                        "description": "Not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "examples": [
                                        {
                                            "found": false,
                                            "labels": [],
                                            "error": "not_found",
                                            "message": "Niet gevonden."
                                        }
                                    ],
                                    "properties": {
                                        "found": {
                                            "type": "boolean"
                                        },
                                        "labels": {
                                            "type": "array",
                                            "items": []
                                        },
                                        "error": {
                                            "type": "string"
                                        },
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "found",
                                        "labels",
                                        "error",
                                        "message"
                                    ]
                                }
                            }
                        }
                    },
                    "402": {
                        "description": "Payment Required"
                    }
                },
                "x-payment-info": {
                    "price": {
                        "mode": "fixed",
                        "currency": "USD",
                        "amount": "0.010000"
                    },
                    "protocols": [
                        {
                            "x402": {}
                        }
                    ]
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "ApiKeyAuth": {
                "type": "apiKey",
                "in": "header",
                "name": "X-Api-Key"
            },
            "BearerAuth": {
                "type": "http",
                "scheme": "bearer"
            }
        },
        "responses": {
            "ValidationException": {
                "description": "Unprocessable content",
                "content": {
                    "application/json": {
                        "schema": {
                            "type": "object",
                            "properties": {
                                "error": {
                                    "type": "string",
                                    "description": "Machine-readable error code."
                                },
                                "message": {
                                    "type": "string",
                                    "description": "Human-readable error message."
                                },
                                "errors": {
                                    "type": "object",
                                    "description": "A detailed description of each field that failed validation.",
                                    "additionalProperties": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                }
                            },
                            "required": [
                                "error",
                                "message",
                                "errors"
                            ]
                        }
                    }
                }
            }
        }
    }
}