Directe REST API voor populaire SQL-databases — zonder inloggegevens te delen.
Zet elke opgeslagen SQL-query om in een partnerklare REST-endpoint met API-sleutels per ontvanger, maandelijkse bytequota en een volledig auditspoor. Statisch of streaming, JSON, NDJSON of CSV, LZ4-compressie tijdens verzending — allemaal zonder dat u infrastructuur hoeft te hosten en zonder dat de SQL-query aan de ontvanger wordt blootgesteld.
Vraag Nova, krijg SQL + grafieken
Ontmoet Nova Database REST APIEén sleutel per partner. Geen inloggegevens worden gedeeld.
Bouw een API AutomatiseringGeplande synchronisatie naar 6+ platformen
Verken API naar SQLAPI's bevragen met SQL, geen code
Verken AI-database MCPClaude, Cursor, ChatGPT en Grok communiceren met uw gegevens.
Connect AIQuery Streams is een veilig, realtime data-integratieplatform dat elke opgeslagen SQL-query omzet in een partnerklare REST API-endpoint, met sleutels per ontvanger, maandelijkse bytequota en een volledig auditspoor. Met het API-platform kunt u realtime databasegegevens delen met klanten, leveranciers en interne teams zonder ooit databasegegevens, SQL-code of uw netwerktopologie te hoeven prijsgeven. Meer informatie vindt u op QueryStreams.com en gratis aanmelden Maak binnen vijf minuten je eerste gedeelde API aan.
Deel live databasegegevens als een REST API — zonder inloggegevens te delen.
De meeste teams versturen CSV-exports, delen alleen-lezen databaseaccounts uit of zetten een aangepaste Express-service op wanneer een partner live data nodig heeft. Elke aanpak heeft hetzelfde probleem: de partner blijft zitten met iets wat hij niet zou moeten hebben — een inbox vol verouderde CSV's, een SQL-referentie die lang na het einde van de samenwerking blijft bestaan, of root-toegang tot een service die niemand actief onderhoudt. Het Query Streams API Platform stelt u in staat om de mogelijkheid om een opgeslagen query uit te voerenNiet de onderliggende inloggegevens. Elke ontvanger krijgt een eigen API-sleutel, elke oproep is beperkt in aantal en wordt gecontroleerd, en de toegang kan met één klik vanuit het portaal worden ingetrokken zonder dat er een databasewachtwoord hoeft te worden gewijzigd.
API-sleutels per ontvanger
Elke ontvanger krijgt zijn eigen exemplaar. qsapi_* sleutel. Trek er één in zonder de andere aan te raken. Draai zonder iets opnieuw te implementeren.
Uw inloggegevens verlaten uw netwerk nooit.
De netwerkagent maakt verbinding vanuit uw omgeving. De ontvanger ziet een REST-eindpunt, nooit uw databasehostnaam, wachtwoord of SQL-query.
Alleen-lezen, dat is de bedoeling
De alleen-lezen-handhaver van de agent weigert elke niet-SELECT-instructie voordat deze de database bereikt. Er is geen mogelijkheid tot "per ongeluk verwijderen".
Statische en streaming responsmodi
Kies voor één gebufferde dataset (standaard 8 MB / 100.000 rijen) of voor een overdracht in stukken, waarbij de rijen worden verzonden zodra de agent ze produceert (standaard 1 GB / 10 miljoen rijen).
LZ4-frame + gzip draadcompressie
Optionele LZ4-frame payloadmodus voor SDK-gebruikers (decomprimeren in één regel), plus standaard Accept-Encoding: gzip op de niet-gecomprimeerde paden.
Postbode-achtige zandbak ingebouwd
Test elk eindpunt binnen de portal voordat je het deelt. Pas de queryparameters aan, inspecteer de JSON, kopieer de krul — geen aparte Postman-werkruimte.
CORS + IP-toegangslijsten
Koppel de sleutel van een ontvanger aan specifieke IP-adressen of CIDR's, beperk de browserbronnen per eindpunt en stapel de standaard tweeledige snelheidslimieten daaronder.
OpenAPI 3.1-specificatie per eindpunt
Elk eindpunt biedt een machineleesbare openapi.json. Voer het in Postman, Swagger UI of een SDK-generator zoals openapi-typescript.
Populaire SQL-databases worden ondersteund.
Het API-platform werkt met de SQL-databases die de meeste teams al gebruiken. Zodra uw netwerkagent is verbonden, kan elke opgeslagen query voor een ondersteunde database worden omgezet naar een gedeeld REST-eindpunt — zonder configuratie per database en zonder SDK per database.
Databases die in de cloud worden gehost, werken op dezelfde manier.
De agent maakt even goed verbinding met on-premise databases als met beheerde services zoals AWS RDS, Azure SQL Database, Google Cloud SQL en Snowflake. Voor de beste latentie kunt u de agent in dezelfde regio als de database implementeren; één Query Streams-account kan meerdere agents in verschillende regio's en clouds uitvoeren.
Hoe het werkt in drie stappen
Zodra uw netwerkagent en een ondersteunde databaseconnector zijn ingesteld, duurt het ongeveer vijf minuten om een opgeslagen query naar een gedeelde API te promoveren:
Een SQL-query opslaan
Stel de query samen in de querybuilder van de portal voor elke gekoppelde database. Voeg filters, parameters en een naam toe. Alles wat u kunt selecteren, is via de API beschikbaar.
Promoot het naar een API
Open het tabblad Installeren. Kies een eindpunttype (permanent, verlopend of N-shot oproepbudget), een intern formaat (JSON, NDJSON of CSV), een responsmodus (statisch of streaming) en of LZ4-draadcompressie is toegestaan. Opslaan.
Nodig ontvangers uit via e-mail.
Voer het e-mailadres van een partner in; zij ontvangen een uitnodiging met een magische link om deel te nemen. Ontvangers zonder een Query Streams-account krijgen automatisch een gratis organisatie aangemaakt bij het indienen van de aanvraag — hun sleutel wordt verstrekt zodra ze deze accepteren.
Gebruik je Query Streams al voor Excel of Google Sheets?
Uw netwerkagent is dan al geïnstalleerd en uw database is al verbonden. Het promoveren van een bestaande opgeslagen query naar een REST-eindpunt duurt ongeveer een minuut — u slaat stap 1 en het grootste deel van stap 2 over. Dezelfde opgeslagen query kan bijvoorbeeld een Excel-verversing of een zijbalk in Google Sheets aansturen. en tegelijkertijd een REST-eindpunt beschikbaar stellen voor partners.
Kies een reactiemodus: statisch of streaming.
Elk eindpunt kiest bij het aanmaken ervan een van de twee antwoordmodi. De modus bepaalt hoe de gegevens onze servers verlaten; het verzendformaat (JSON, NDJSON, CSV of LZ4-frame) wordt per aanroep onafhankelijk door de ontvanger gekozen.
De standaardinstelling. We verzamelen elke rij in één gebufferde respons, ingesteld op... Inhoud-Lengteen één bericht verzenden. Fouten zijn normale HTTP-statuscodes (200, 400, 413 API_OUTPUT_TOO_LARGE, 503).
- Standaardcapsules: 8 MB / 100.000 rijen per oproep
- Platform max: 50 MB / 1.000.000 rijen per oproep
- Het meest geschikt voor: dashboards, zoekopdrachten op aanvraag, query's met minder dan 10.000 rijen, curl, AI-tools die één JSON-object vereisen
We keren terug 200 OK + Transfer-Encoding: chunked Zodra de eerste rij binnenkomt, worden de rijen doorgestuurd zodra de agent ze produceert. Het geheugen aan onze rand blijft beperkt, ongeacht de grootte van het resultaat.
- Standaardcapsules: 1 GB / 10.000.000 rijen per oproep
- Platform max: 50 GB / 100.000.000 rijen per oproep
- Het meest geschikt voor: n8n/Zapier-flows, analysepipelines, bulkexports, alles wat baat heeft bij een snelle eerste byte.
Fouten die zich halverwege een streaming-endpoint voordoen, kunnen niet worden weergegeven als een HTTP-statuscode (de status is al met het eerste datablok verzonden). We tonen ze als een marker voor het laatste record: {"_error...rows_returned":N} voor NDJSON, of # fout: ..., geretourneerde rijen: N Voor het streamen van CSV-bestanden moeten consumerbibliotheken het laatste record controleren voordat ze de stream als voltooid beschouwen.
Kies een gegevensformaat: JSON, NDJSON, CSV of LZ4-frame.
Binnen de gekozen responsmodus selecteren ontvangers per gesprek het draadformaat met behulp van standaard HTTP-headers (Accepteren voor de interne opmaak en Accept-Encoding (voor compressie). Eén eindpunt kan alle vier de formaten ondersteunen; de eigenaar kan het eindpunt ook vergrendelen voor één specifiek formaat via het tabblad Installeren.
Een enkele JSON-array. Standaard voor statische modus. Het universele formaat voor webclients, AI-tools en curl-gebruikers.
# Python data = requests.get(url, headers=h).json()
Regelgescheiden JSON, één regel per regel. Alleen voor streaming. Parsen tijdens het proces voor pipelines en ETL.
# Python voor lijn in resp.iter_lines(): rij = json.loads(lijn)
RFC 4180 CSV. Werkt statisch (één inhoud) of streaming (header in het eerste deel). Open het in Excel, pandas, R of elk ander programma dat CSV-bestanden kan lezen.
# pandas
df = pd.read_csv(url, storage_options=h)
Het aan de standaarden voldoende LZ4-frameformaat (magisch 04 22 4D 18). Eén frame voor statische weergave; samengevoegde frames via chunked transfer voor streaming. Facturering op basis van gecomprimeerde bytes.
# Python
data = lz4.frame.decompress(resp.content)
Voor gebruikers die maximale interoperabiliteit willen, is standaard JSON (of CSV) voldoende; al het andere is optioneel. Draadcompressie (gzip) wordt automatisch over de ongecomprimeerde paden heen toegepast via de standaard. Accept-Encoding header; we comprimeren nooit dubbel, dus LZ4-frame vervangt gzip in plaats van er bovenop te stapelen.
De vier draadcombinaties in één oogopslag
De responsmodus en payloadcompressie vormen samen vier paden. De eigenaar van het eindpunt kiest de standaardinstellingen in het tabblad 'Installeren'; de ontvanger kan deze per gesprek overschrijven (binnen de grenzen die de eigenaar toestaat). Draadcompressie (gzip) wordt onderhandeld via Accept-Encoding lagen worden automatisch bovenop de twee niet-gecomprimeerde rijen geplaatst.
Een enkele gebufferde applicatie/json (of tekst/csv) lichaam met Inhoud-LengteHet standaardpad. Draadcompressie (gzip) wordt automatisch onderhandeld.
Een enkele applicatie/x-lz4-frame Een body die één standaard LZ4-frame (multi-block) bevat. Decomprimeren in één regel consumentencode.
applicatie/x-ndjson (of streamen) tekst/csv) over Transfer-Encoding: chunked. Eén rij per blok. Draadcompressie (gzip) wordt automatisch overeengekomen.
applicatie/x-lz4-frame als een reeks aaneengesloten standaard LZ4-frames via chunked transfer. Geen door QS bedacht framingprotocol.
| Modus + compressie | Draad MIME-type | Lichaamsvorm | Standaard hoofdletters | Rekeningen over | Gebruiksvoorbeeld |
|---|---|---|---|---|---|
| statisch + geen | applicatie/json of tekst/csv |
Eén gebufferd lichaam, Inhoud-Lengte |
8 MB / 100.000 rijen | niet-gecomprimeerde bytes | Dashboards, curl, standaard |
| statisch + lz4 | applicatie/x-lz4-frame |
Enkel LZ4-frame (multi-block) | 8 MB gecomprimeerd | gecomprimeerde bytes | SDK-gebruikers, kostengeoptimaliseerde enkele respons |
| stream + geen | applicatie/x-ndjson of tekst/csv |
Gedeelde overdracht, NDJSON per rij | 1 GB / 10 miljoen rijen | niet-gecomprimeerde bytes | n8n, Zapier, analytics pipelines |
| stream + lz4 | applicatie/x-lz4-frame |
Chunked transfer, concatenated LZ4 frames | 1 GB gecomprimeerd (~5 GB onbewerkt) | gecomprimeerde bytes | Massa-export, SDK voor gevorderde gebruikers, de goedkoopste en snelste combinatie |
Filters doorgeven tijdens het gesprek
Elke opgeslagen queryparameter die de eigenaar beschikbaar stelt, kan door de ontvanger bij elk gesprek worden ingesteld. KRIJGEN Verzoeken maken gebruik van de queryreeks; NA Verzoeken gebruiken een JSON-body. De agent bindt parameters als correcte prepared-statement-waarden – nooit als stringconcatenatie – zodat een ontvanger niet uit een parameter kan breken om SQL te injecteren.
De eigenaar van het eindpunt bepaalt welke parameters worden weergegeven (in het subtabblad Parameters van het tabblad Installeren), welke parameters een vaste waarde hebben en wat de toegestane waarden zijn. Ontvangers kunnen alleen parameters instellen die de eigenaar heeft weergegeven; al het andere is vastgelegd. Parameters met meerdere waarden gebruiken herhaalde sleutels (?status=betaald&status=verzonden) bij GET en een standaard JSON-array bij POST.
Beveiligingsinstellingen: CORS, IP-toegangslijsten en snelheidslimieten.
Naast sleutels per ontvanger en alleen-lezen-bescherming biedt elk eindpunt vier extra vergrendelingen die u kunt aanscherpen voordat u het deelt.
IP-toegangslijst per sleutel
Koppel de sleutel van een ontvanger aan een enkel IP-adres, een CIDR-bereik of een lijst. Ondersteunt zowel IPv4 als IPv6. Een oproep van buiten de toegestane lijst retourneert 403 IP_NOT_ALLOWED voordat de SQL-code wordt aangeraakt.
CORS-toegangslijst per eindpunt
Vertel ons welke browsers het eindpunt vanuit JavaScript mogen aanroepen. Instellen ["https://app.acme.com"] Voor één enkele partner kunt u CORS uitschakelen (de standaardinstelling) of CORS volledig uitschakelen voor server-naar-server-verbindingen.
Tarieflimieten op twee niveaus
Een tokenbucket op de sleutel van de ontvanger (standaard 60 verzoeken/min) plus een tweede bucket op het eindpunt zelf (standaard 120/min). Een ontvanger die veel verzoeken verwerkt, kan het budget voor de goed functionerende ontvangers niet overschrijden.
Maandelijkse bytequota
Optionele limiet per eindpunt voor gefactureerde bytes per kalendermaand. Wanneer de limiet is bereikt, worden aanroepen geretourneerd. 429 EINDPUNT_QUOTA_UITGEPUT totdat de periode opnieuw begint. Een veilige limiet voor de impact bij nieuwe partners.
Elk eindpunt wordt geleverd met een OpenAPI 3.1-specificatie.
Elk eindpunt geeft een machineleesbare specificatie weer op GET /v1/endpoints/{id}/openapi.jsonHet beschrijft de URL, de methode, elke parameter (met type, toegestane waarden, standaardwaarde), elke responsvorm per formaat (JSON, NDJSON, CSV, LZ4-frame) en elke foutcode. Plak het in Postman of Insomnia voor een gegenereerde verzameling verzoeken, voer het in Swagger UI in voor interactieve documentatie, of gebruik het in een SDK-generator om een getypte client in de gewenste programmeertaal te verkrijgen.
Gebruik het vanuit Power BI, Tableau en elke andere JSON-tool.
Omdat elk eindpunt standaard retourneert JSON — met CSV en streaming NDJSON erbij — kan elke tool die een REST-feed kan lezen uw gegevens direct verwerken, zonder dat er iets aan de kant van de ontvanger geïnstalleerd hoeft te worden. Power Query is de eenvoudigste manier om toegang te krijgen tot de Microsoft BI-stack: in Power BI kiezen Gegevens ophalen → Van het web, plak de endpoint-URL, voeg de toe Autorisatie De header en Power Query parseert de JSON naar een vernieuwbare tabel die uw datamodel voedt. (Voor live data in een spreadsheet is de native methode geschikt.) Query Streams-add-ons voor Excel en Google Sheets (De eenvoudigere weg is er een — Power Query is er wanneer je de gegevens in het BI-model zelf wilt hebben.)
Het voedt ook n8n, Qlik, krul, Python (verzoeken of pandas.read_json), Insomnia, Hoppscotch — of elk script of workflow dat een HTTP-verzoek kan verzenden en JSON kan lezen.
Test eindpunten in je browser — op Postman-achtige wijze, zonder het portaal te verlaten.
Voordat u een sleutel aan een partner geeft, test u het eindpunt zelf. Het tabblad 'Installeren' bevat een ingebouwde aanvraagbuilder die hetzelfde is als wat uw ontvanger zal zien: kies de HTTP-methode, stel queryparameters in, selecteer een voorbeeld, verstuur de aanvraag en inspecteer het antwoord. De sandbox gebruikt intern een kortstondige, tijdelijke sleutel, waardoor de aanroep exact hetzelfde pad volgt als een aanvraag van de ontvanger: dezelfde authenticatie, dezelfde agentdispatch, dezelfde compressieonderhandeling en dezelfde byte-telling.
Facturering met compressie-attentie
Het aantal bytes in uw activiteitenlogboek is gemeten bij de uitgang van onze API-server en volg een eenvoudige, voorspelbare regel: als de ontvanger zich heeft aangemeld LZ4-frame laadvermogencompressie (Accept-Encoding: lz4), de gesprekskosten worden berekend op basis van de gecomprimeerde bytes die daadwerkelijk over de lijn zijn gegaan; zo niet, dan worden de gesprekskosten berekend op basis van de ongecomprimeerde bytes. Standaard HTTP-draadcompressie (gzip) is puur transportoptimalisatie en heeft geen invloed op de facturering — die compressie vindt plaats nadat we de bytes hebben gemeten die de consument te zien krijgt.
Opmerking over bytes die via de kabel worden verzonden
Als een gesprek kiest voor LZ4-framecompressie, wordt dezelfde JSON-payload doorgaans gefactureerd voor ongeveer 25-40% van de ongecomprimeerde grootte voor transactionele rijen en 10-20% voor analytische workloads met herhaalde kolommen — omdat dat de hoeveelheid data is die het netwerk van uw partner daadwerkelijk heeft verwerkt. De sandbox in de browser toont beide cijfers.X-QS-Bytes-Wire en X-QS-Bytes-Raw) zodat u de besparingen kunt zien voordat u een eindpunt deelt. We hebben ervoor gekozen om te factureren op basis van het aantal bytes (wanneer LZ4 is ingeschakeld), omdat dat getal overeenkomt met zowel uw kosten voor uitgaande data als het bandbreedteverbruik van de ontvanger. Standaard HTTP-compressie (gzipDit betreft puur transportoptimalisatie en heeft geen invloed op de facturering. Gesprekken waarbij geen LZ4 wordt aangevraagd, blijven gefactureerd worden op basis van ongecomprimeerde bytes., overeenkomend met de huidige facturering van Excel, Sheets en de MCP-server.
De decompressie aan de kant van de gebruiker bestaat uit één regel code per taal. Hieronder vindt u de standaard integratiecode voor elke omgeving waarvoor we voorbeelden leveren:
Ontworpen voor het delen van gegevens met partners, niet voor API's op internetschaal.
Het Query Streams API-platform is ontworpen voor gebruiksscenario's waarbij u uw ontvangers kent: klanten, leveranciers, interne teams, toezichthouders, auditors en bestuursleden. Endpointquota, maandelijkse bytelimieten en limieten voor het aantal aanvragen per ontvanger gaan ervan uit dat er tientallen tot duizenden aanvragen per dag per ontvanger zijn. Als uw gebruiksscenario een openbare marketing-API betreft die miljoenen anonieme aanvragen per seconde moet verwerken, wilt u waarschijnlijk een API-gateway zoals Kong, Apigee of AWS API Gateway gebruiken vóór een service die u zelf bouwt. Het API-platform vult dit patroon aan; het vervangt het niet.
Veelgestelde vragen
Moet ik inkomende firewallpoorten openen om mijn database als API beschikbaar te stellen? +
Kan de ontvanger mijn SQL-query of mijn databasegegevens zien? +
Hoe kan ik de API-toegang van een partner intrekken? +
401 SLEUTEL INGETROKKENAndere ontvangers van hetzelfde eindpunt blijven met hun eigen sleutels werken en u hoeft het databasewachtwoord niet te wijzigen.Wat is het verschil tussen statische en streaming-responsmodi? +
Inhoud-Lengteen genereert één HTTP-body. De standaardlimieten zijn 8 MB / 100.000 rijen; het platformmaximum is 50 MB / 1 miljoen rijen. Het meest geschikt voor dashboards, query's met minder dan 10.000 rijen en curl-gebruikers. Streaming modus zendt uit Transfer-Encoding: chunked en verstuurt rijen via de netwerkverbinding zodra de agent ze genereert. De standaardlimieten zijn 1 GB / 10 miljoen rijen; het platformmaximum is 50 GB / 100 miljoen rijen. Het meest geschikt voor n8n/Zapier-flows, analysepipelines en bulkexporten. U kiest de modus per eindpunt; de ontvanger kiest het netwerkformaat (JSON, NDJSON, CSV of LZ4-frame) per gesprek.Hoe kan ik LZ4-frame responsen decomprimeren in mijn code? +
04 22 4D 18), dus elke gangbare LZ4-bibliotheek ondersteunt dit standaard. In Python: lz4.frame.decompress(resp.content)In Node.js met lz4js: LZ4.decompressFrame(buffer)In Go met github.com/pierrec/lz4/v4: lz4.NewReader(body). Op de CLI: curl ... | lz4 -d -Voor streaming-eindpunten is de responsbody een reeks aaneengesloten LZ4-frames. Transfer-Encoding: chunked — Dezelfde framedecoder verwerkt invoer van één frame en van samengevoegde frames identiek wanneer deze in een streaminglus wordt aangeroepen.Kan ik een eindpunt vergrendelen voor specifieke IP-adressen of browserbronnen? +
403 IP_NOT_ALLOWED voordat er SQL-query's worden uitgevoerd. Elk eindpunt heeft afzonderlijk een optionele functie. CORS-oorsprong-whitelist — stel het in op ["https://app.acme.com"] Als het eindpunt bedoeld is om te worden aangeroepen vanuit de frontend van een specifieke partner, kunt u dit uitschakelen (standaard) voor eindpunten die alleen server-naar-servercommunicatie mogelijk maken. Beide instellingen worden bewerkt via het tabblad Installeren en worden direct van kracht.Hoe worden de kosten voor het gebruik van het API-platform berekend? +
Accept-Encoding: lz4), wordt er gefactureerd op basis van de gecomprimeerde bytes; zo niet, dan wordt er gefactureerd op basis van de ongecomprimeerde bytes. Dezelfde JSON-payload via LZ4 wordt doorgaans gefactureerd tegen 25-40% van de ongecomprimeerde grootte voor transactionele rijen en 10-20% voor analytische workloads, omdat dat de hoeveelheid data is die het netwerk van uw partner daadwerkelijk heeft verplaatst. De sandbox in de browser toont beide getallen naast elkaar. Standaard HTTP-draadcompressie (gzipDit betreft puur transportoptimalisatie en heeft geen invloed op de facturering.Wat gebeurt er als een query probeert gegevens te schrijven of te verwijderen? +
ALLEEN-LEZEN_SCHENDING Voordat de gegevens uw database bereiken, voert de alleen-lezen validator van de agent een test uit in uw netwerk, waarbij alleen SELECT-instructies zijn toegestaan. Waarom elk eindpunt per ontwerp alleen-lezen is →Welke SQL-databases worden door het API-platform ondersteund? +
Kan ik zien wat elke ontvanger precies heeft aangevraagd? +
Hoe verhoudt dit zich tot het zelf bouwen van een API met Express, FastAPI of PostgREST? +
Heeft het API-platform een apart abonnement nodig bovenop Query Streams? +
Aan de slag
Maak binnen vijf minuten je eerste gedeelde API aan.
Meld u gratis aan, installeer de Network Agent naast uw database, sla een SQL-query op en verstuur een ontvanger een uitnodiging voor een claim via een magische link. Sleutels per ontvanger, een auditlogboek en compressiebewuste facturering zijn vanaf het eerste moment beschikbaar.
Gerelateerde handleidingen: Deel live databasegegevens zonder inloggegevens te delen. | Deel zoekresultaten veilig | Handleidingen voor het instellen van connectoren | Alle MCP Server-handleidingen
Categorie: API-platform
Tags: api-platform, rest-api, live-data delen, partner-api, sleutels per ontvanger, sql-naar-api, instant-api, streaming-api, ndjson, lz4-compressie, openapi, postgres, mysql, sql-server, snowflake
Meta-omschrijving: Directe REST API voor populaire SQL-databases — statisch of streaming, JSON/NDJSON/CSV/LZ4-frame, sleutels per ontvanger, OpenAPI 3.1, geen gedeelde inloggegevens.

