{"openapi":"3.1.0","info":{"title":"Tennet NL (BYOK) API","version":"0.1.0","description":"Tennet NL (BYOK) lets an AI assistant read your own Tennet NL data through the Tennet NL API with a key you supply (TenneT API key). Read-only: 11 tools (get_settlement_prices, get_balance_delta_latest, get_balance_delta_history, get_frequency_restoration_reserve_activations, get_merit_order_list, get_metered_injections, get_reconciliation_control_data, get_reconciliation_prices,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tennetnl.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tennetnl/docs"},"termsOfService":"https://connectorbay.com/byok-tennetnl/terms"},"servers":[{"url":"https://byok-tennetnl.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tennetnl/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_settlement_prices":{"post":{"operationId":"get_settlement_prices","summary":"Get Dutch imbalance settlement prices per imbalance settlement period (15 min): shortage, surplus, dispatch up/down pric","description":"Get Dutch imbalance settlement prices per imbalance settlement period (15 min): shortage, surplus, dispatch up/down prices, regulation state. Range up to 1 month. Rate limits apply (production: 5 per minute, 25 per day). Use for \"What were the Dutch imbalance prices on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 month.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_settlement_pricesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_balance_delta_latest":{"post":{"operationId":"get_balance_delta_latest","summary":"Get the most recent roughly 30 minutes of high-resolution balance delta data (about 12-second steps): aFRR, mFRR, IGCC, ","description":"Get the most recent roughly 30 minutes of high-resolution balance delta data (about 12-second steps): aFRR, mFRR, IGCC, PICASSO and MARI in/out power and mid price. Rate limit 10 per minute. Use for \"What does the live Dutch balance delta look like right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_balance_delta_latestArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_balance_delta_history":{"post":{"operationId":"get_balance_delta_history","summary":"Get high-resolution balance delta data for a past window of up to 1 day (back-up method; the docs recommend the latest e","description":"Get high-resolution balance delta data for a past window of up to 1 day (back-up method; the docs recommend the latest endpoint for live use). Rate limits apply (production: 8 per day, 10 per minute). Use for \"What was the Dutch balance delta between 00:00 and 00:04 on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 day.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_balance_delta_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_frequency_restoration_reserve_activations":{"post":{"operationId":"get_frequency_restoration_reserve_activations","summary":"Get volumes of activated balancing energy (aFRR up/down, mFRRda up/down), total and absolute volume per period. Range up","description":"Get volumes of activated balancing energy (aFRR up/down, mFRRda up/down), total and absolute volume per period. Range up to 1 day. Rate limits apply (60 per minute, 1500 per day). Use for \"How much balancing energy was activated in the Netherlands on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 day.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_frequency_restoration_reserve_activationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_merit_order_list":{"post":{"operationId":"get_merit_order_list","summary":"Get the aFRR and mFRRsa merit order list: price up/down per capacity threshold for each period. Range up to 1 hour. Rate","description":"Get the aFRR and mFRRsa merit order list: price up/down per capacity threshold for each period. Range up to 1 hour. Rate limits apply (production: 10 per minute, 600 per day). Use for \"What did the Dutch aFRR merit order list look like on 13 January 2025 between 00:00 and 01:00\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 hour.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_merit_order_listArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_metered_injections":{"post":{"operationId":"get_metered_injections","summary":"Get metered injections (load visible on the Dutch transmission grid) and scheduled import/export per period. Range up to","description":"Get metered injections (load visible on the Dutch transmission grid) and scheduled import/export per period. Range up to 1 day. Rate limits apply (production: 5 per minute, 25 per day). Use for \"What was the metered injection on the Dutch grid on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 day.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_metered_injectionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_reconciliation_control_data":{"post":{"operationId":"get_reconciliation_control_data","summary":"Get reconciliation control data (aFRR and mFRRda up/down volumes and allocations) used to compute reconciliation prices.","description":"Get reconciliation control data (aFRR and mFRRda up/down volumes and allocations) used to compute reconciliation prices. Range up to 1 year. Rate limits apply (12 per minute, 1500 per day). Use for \"Show the reconciliation control data for 2024\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 year.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_reconciliation_control_dataArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_reconciliation_prices":{"post":{"operationId":"get_reconciliation_prices","summary":"Get reconciliation prices (weighted market price used to settle consumption differences): price, peak and off-peak price","description":"Get reconciliation prices (weighted market price used to settle consumption differences): price, peak and off-peak price. Range up to 1 year. Rate limits apply (production: 2 per minute, 5 per day). Use for \"What were the Dutch reconciliation prices in 2024\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 year.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_reconciliation_pricesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_settled_imbalance_volumes":{"post":{"operationId":"get_settled_imbalance_volumes","summary":"Get imbalance volumes settled by TenneT with balance responsible parties: surplus, shortage, absolute and net imbalance ","description":"Get imbalance volumes settled by TenneT with balance responsible parties: surplus, shortage, absolute and net imbalance per period. Range up to 1 hour. Rate limits apply (production: 5 per minute, 25 per day). Use for \"What were the settled imbalance volumes on 13 January 2025 between 00:00 and 01:00\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period as 'dd-mm-yyyy hh:mm:ss' (for example '13-01-2025 00:00:00').","maxLength":19,"title":"Date From","type":"string"},"date_to":{"description":"End of the period as 'dd-mm-yyyy hh:mm:ss', same time zone as the start; the longest allowed range is 1 hour.","maxLength":19,"title":"Date To","type":"string"}},"required":["date_from","date_to"],"title":"get_settled_imbalance_volumesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_available_border_capacity":{"post":{"operationId":"get_available_border_capacity","summary":"Get available border capacity per period: total import/export capacity, Belgian and German capacity and the aFRR profile","description":"Get available border capacity per period: total import/export capacity, Belgian and German capacity and the aFRR profile limits. Range up to 1 day; poll at most every 5 minutes. Use for \"What was the available border capacity of the Dutch grid on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period in UTC as RFC 3339 ending with Z, for example '2025-01-13T00:00:00Z'.","maxLength":25,"title":"Date From","type":"string"},"date_to":{"description":"End of the period in UTC ending with Z; the longest allowed range is 1 day.","maxLength":25,"title":"Date To","type":"string"},"conversation_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":"connectorbay","description":"Free-text request id sent for tracing (the API requires one).","title":"Conversation Id"}},"required":["date_from","date_to"],"title":"get_available_border_capacityArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_merit_order_list_incident_reserve":{"post":{"operationId":"get_merit_order_list_incident_reserve","summary":"Get the incident reserve (mFRRda) merit order list: up and down prices per capacity threshold for each period. Range up ","description":"Get the incident reserve (mFRRda) merit order list: up and down prices per capacity threshold for each period. Range up to 1 day. Use for \"What were the Dutch incident reserve bid prices on 13 January 2025\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"description":"Start of the period in UTC as RFC 3339 ending with Z, for example '2025-01-13T00:00:00Z'.","maxLength":25,"title":"Date From","type":"string"},"date_to":{"description":"End of the period in UTC ending with Z; the longest allowed range is 1 day.","maxLength":25,"title":"Date To","type":"string"},"conversation_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":"connectorbay","description":"Free-text request id sent for tracing (the API requires one).","title":"Conversation Id"}},"required":["date_from","date_to"],"title":"get_merit_order_list_incident_reserveArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}