{"openapi":"3.1.0","info":{"title":"Kodari API","version":"1","description":"Kortingscodes voor Nederlandse webshops, met voorwaarden en de datum van controle, het kortingsritme per shop, lopende acties en de goedkoopste route voor een bestelling. Alleen lezen, zonder commissiegegevens. Uitleg: https://kodari.nl/ontwikkelaars"},"externalDocs":{"description":"Documentatie voor ontwikkelaars","url":"https://kodari.nl/ontwikkelaars"},"servers":[{"url":"https://kodari.nl"}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"apiKey":{"type":"apiKey","in":"header","name":"X-Api-Key"}}},"security":[{},{"bearer":[]},{"apiKey":[]}],"paths":{"/api/v1/merchants":{"get":{"operationId":"api.v1.merchants.index","summary":"Shops zoeken op naam of domein. Zonder zoekterm de shops met de hoogste score, per pagina.","parameters":[{"name":"q","in":"query","required":false,"description":"Zoekterm, optioneel.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Paginanummer, optioneel.","schema":{"type":"string"}}],"x-kodari-scope":"merchants:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/merchants/{slug}":{"get":{"operationId":"api.v1.merchants.show","summary":"Eén shop met profiel, actieve codes en deals, en het kortingsritme onder `rhythm` (of null bij te weinig historie).","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"x-kodari-scope":"merchants:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/merchants/{slug}/coupons":{"get":{"operationId":"api.v1.merchants.coupons","summary":"Actieve codes en deals van één shop, in de volgorde van de shoppagina.","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"x-kodari-scope":"coupons:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/merchants/{slug}/code-checks":{"post":{"operationId":"api.v1.merchants.code-checks","summary":"Werkt deze code? Of Kodari hem kent, of hij actief, verlopen of weggehaald is, de laatste controle en de pogingen van de afgelopen week, met een zin onder `answer`. De code gaat niet terug.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"description":"De code om na te kijken, in de body."}}}}}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"x-kodari-scope":"coupons:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/coupons":{"get":{"operationId":"api.v1.coupons.index","summary":"Codes zoeken, of de nieuwste publieke codes, per pagina.","parameters":[{"name":"q","in":"query","required":false,"description":"Zoekterm, optioneel.","schema":{"type":"string"}},{"name":"exclusive","in":"query","required":false,"description":"Met 1 alleen codes die je alleen via ons krijgt.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Paginanummer, optioneel.","schema":{"type":"string"}}],"x-kodari-scope":"coupons:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/coupons/{id}":{"get":{"operationId":"api.v1.coupons.show","summary":"Eén code met de nieuwste controles onder `verification_history`. Met een sleutel staat de code zelf erin, behalve bij codes die we alleen per mail geven.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-kodari-scope":"coupons:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/events":{"get":{"operationId":"api.v1.events.index","summary":"Lopende en komende acties, zoals Black Friday, de eerstvolgende eerst.","x-kodari-scope":"coupons:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/pools":{"get":{"operationId":"api.v1.pools.index","summary":"Open Samen kopen-groepen, alleen geteld en nooit per deelnemer.","parameters":[{"name":"merchant","in":"query","required":false,"description":"Slug van een shop, optioneel.","schema":{"type":"string"}}],"x-kodari-scope":"pools:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/routes":{"post":{"operationId":"api.v1.routes.store","summary":"De goedkoopste routes voor een shop en een orderbedrag: welke codes en voordelen samen gaan, en wat je dan betaalt.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"merchant":{"description":"Slug van de shop, verplicht."},"order_amount":{"description":"Orderbedrag in euro met een punt als decimaalteken, verplicht."},"context":{"description":"Optioneel: new_customer, prepurchase_ok, is_student, memberships, payment_methods."}},"required":["merchant","order_amount"]}}}},"x-kodari-scope":"routes:read","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/code-requests":{"post":{"operationId":"api.v1.code-requests.store","summary":"Een code aanvragen bij een shop. Alleen met de scope `code_requests:write`, die je op verzoek krijgt.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"merchant_domain":{"description":"Domein van de webshop, verplicht."},"email":{"description":"E-mailadres van wie de code wil, optioneel."}},"required":["merchant_domain"]}}}},"x-kodari-scope":"code_requests:write","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}},"/api/v1/code-requests/{id}":{"get":{"operationId":"api.v1.code-requests.show","summary":"Stand en tijdlijn van één aanvraag, zonder adressen en zonder de code.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-kodari-scope":"code_requests:write","responses":{"2XX":{"description":"Gelukt. Het antwoord is JSON."},"401":{"description":"De sleutel is onbekend of ingetrokken."},"403":{"description":"De sleutel heeft geen recht op dit endpoint."},"404":{"description":"De shop, code of aanvraag bestaat niet, of is niet publiek."},"422":{"description":"De invoer klopt niet. Onder `errors` staat per veld wat er mis is."},"429":{"description":"Te veel aanroepen. Wacht het aantal seconden uit `Retry-After`."}}}}}}