{"openapi":"3.1.2","info":{"title":"Indbakke","version":"1.0.0","description":"Den fælles protokol for begrundede henvendelser og signerede svar."},"servers":[{"url":"https://inbox.finch.dk"}],"paths":{"/guide/protocol.md":{"get":{"operationId":"read_protocol","summary":"Læs protokollen","description":"Læs det almindelige OKF-dokument, svarformen, signaturprofilen og svarkanalen.","parameters":[],"security":[],"responses":{"200":{"description":"Læs det almindelige OKF-dokument, svarformen, signaturprofilen og svarkanalen.","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/guide/index.md":{"get":{"operationId":"read_guide","summary":"Kom i gang som afsender","description":"Læs om nøgleoptagelse, svarkanal, correlationId, view-hints og verifikationsstyrke.","parameters":[],"security":[],"responses":{"200":{"description":"Læs om nøgleoptagelse, svarkanal, correlationId, view-hints og verifikationsstyrke.","content":{"text/markdown":{"schema":{"type":"string"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/.well-known/inbox-keys.json":{"get":{"operationId":"get_signing_keys","summary":"Læs indbakkens nøgler","description":"Hent indbakkens offentlige Ed25519-nøgler som JWKS til efterprøvning af svar.","parameters":[],"security":[],"responses":{"200":{"description":"Hent indbakkens offentlige Ed25519-nøgler som JWKS til efterprøvning af svar.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/requests":{"post":{"operationId":"send_request","summary":"Send en henvendelse","description":"Send et selvstændigt OKF-dokument som text/markdown. Gentag med samme id og parsede indhold. Kun operatøroptagne afsendere i I1.","parameters":[{"name":"organization","in":"query","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"httpMessageSignature":[]}],"requestBody":{"required":true,"content":{"text/markdown":{"schema":{"type":"string"}}}},"responses":{"200":{"description":"Send et selvstændigt OKF-dokument som text/markdown. Gentag med samme id og parsede indhold. Kun operatøroptagne afsendere i I1.","content":{"application/json":{"schema":{"type":"object"}}}},"201":{"description":"Send et selvstændigt OKF-dokument som text/markdown. Gentag med samme id og parsede indhold. Kun operatøroptagne afsendere i I1.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}},"get":{"operationId":"get_answers","summary":"Indhent svar","description":"Hent svar i commitrækkefølge; fortsæt med after som answeredAfter. GET-svaret er signeret.","parameters":[{"name":"organization","in":"query","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"answeredAfter","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"httpMessageSignature":[]}],"responses":{"200":{"description":"Hent svar i commitrækkefølge; fortsæt med after som answeredAfter. GET-svaret er signeret.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/requests/{requestId}/withdraw":{"post":{"operationId":"withdraw_request","summary":"Træk en henvendelse tilbage","description":"Træk egen henvendelse tilbage med begrundelse. Idet reserveres også før oprindelig levering.","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"organization","in":"query","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"httpMessageSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"reason":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},"required":["reason"]}}}},"responses":{"200":{"description":"Træk egen henvendelse tilbage med begrundelse. Idet reserveres også før oprindelig levering.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/requests/{requestId}/respond-by":{"post":{"operationId":"move_deadline","summary":"Flyt fristen","description":"Flyt respondBy mens henvendelsen er åben.","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"organization","in":"query","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"httpMessageSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"respondBy":{"type":"string","x-okf-format":"date-time","x-okf-length":{"unit":"utf16","min":0}}},"required":["respondBy"]}}}},"responses":{"200":{"description":"Flyt respondBy mens henvendelsen er åben.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/requests/{requestId}":{"get":{"operationId":"get_request","summary":"Læs henvendelsens tilstand og svar","description":"Hent egen henvendelse og alle signerede svar efter nedetid eller usikker levering.","parameters":[{"name":"requestId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"organization","in":"query","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"httpMessageSignature":[]}],"responses":{"200":{"description":"Hent egen henvendelse og alle signerede svar efter nedetid eller usikker levering.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/inbox":{"get":{"operationId":"list_inbox","summary":"Læs egen indbakke","description":"Egne henvendelser og antal åbne under personens adgang. Arbejdspladsen signerer også sin organisation. Markøren giver ingen adgang.","parameters":[{"name":"organization","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"sender","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"state","in":"query","required":false,"schema":{"enum":["open","answered","declined","unanswered"]}},{"name":"after","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"bearerAuth":[]},{"bearerAuth":[],"httpMessageSignature":[]}],"responses":{"200":{"description":"Egne henvendelser og antal åbne under personens adgang. Arbejdspladsen signerer også sin organisation. Markøren giver ingen adgang.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/inbox/{senderId}/{requestId}":{"get":{"operationId":"get_inbox_request","summary":"Læs egen henvendelse","description":"Hent dokumentet, egen modtagerrække og egne svar. Andre modtagere vises aldrig.","parameters":[{"name":"senderId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"requestId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"organization","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"bearerAuth":[]},{"bearerAuth":[],"httpMessageSignature":[]}],"responses":{"200":{"description":"Hent dokumentet, egen modtagerrække og egne svar. Andre modtagere vises aldrig.","content":{"application/json":{"schema":{"type":"object"}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}},"/v1/inbox/{senderId}/{requestId}/answers":{"post":{"operationId":"answer_request","summary":"Besvar en henvendelse","description":"Afgiv personens bekræftede svar eller kan ikke med begrundelse. Samme submissionId er idempotent. Nylig verifikation kræver tokenets auth_time; verification_required beder om nyt login med max_age.","parameters":[{"name":"senderId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"requestId","in":"path","required":true,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},{"name":"organization","in":"query","required":false,"schema":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}}],"security":[{"bearerAuth":[]},{"bearerAuth":[],"httpMessageSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"submissionId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"outcome":{"enum":["answered","cannot"]},"result":{"x-okf-json":"any"},"text":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"reason":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"shownView":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"ref":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"digest":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},"required":["format","ref"]},{"type":"null"}]}},"required":["submissionId","outcome"]}}}},"responses":{"200":{"description":"Afgiv personens bekræftede svar eller kan ikke med begrundelse. Samme submissionId er idempotent. Nylig verifikation kræver tokenets auth_time; verification_required beder om nyt login med max_age.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"assurance":{"type":"object","additionalProperties":false,"properties":{"level":{"enum":["session","recent"]},"acr":{"const":"0"},"verifiedAt":{"type":"string","x-okf-format":"date-time","x-okf-length":{"unit":"utf16","min":0}}},"required":["level","acr","verifiedAt"]},"answerId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"requestId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"recipient":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"actingVia":{"enum":["person","agent","inbox"]},"outcome":{"enum":["answered","cannot","none"]},"result":{"x-okf-json":"any"},"text":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"reason":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"shownView":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"ref":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"digest":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},"required":["format","ref"]},{"type":"null"}]},"requestState":{"enum":["open","answered","declined","unanswered"]},"correlationId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"answeredAt":{"type":"string","x-okf-format":"date-time","x-okf-length":{"unit":"utf16","min":0}}},"required":["answerId","requestId","recipient","actingVia","outcome","shownView","requestState","correlationId","answeredAt"]}}}},"201":{"description":"Afgiv personens bekræftede svar eller kan ikke med begrundelse. Samme submissionId er idempotent. Nylig verifikation kræver tokenets auth_time; verification_required beder om nyt login med max_age.","content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"assurance":{"type":"object","additionalProperties":false,"properties":{"level":{"enum":["session","recent"]},"acr":{"const":"0"},"verifiedAt":{"type":"string","x-okf-format":"date-time","x-okf-length":{"unit":"utf16","min":0}}},"required":["level","acr","verifiedAt"]},"answerId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"requestId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"recipient":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"actingVia":{"enum":["person","agent","inbox"]},"outcome":{"enum":["answered","cannot","none"]},"result":{"x-okf-json":"any"},"text":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"reason":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"shownView":{"anyOf":[{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"ref":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"digest":{"type":"string","x-okf-length":{"unit":"utf16","min":0}}},"required":["format","ref"]},{"type":"null"}]},"requestState":{"enum":["open","answered","declined","unanswered"]},"correlationId":{"type":"string","x-okf-length":{"unit":"utf16","min":0}},"answeredAt":{"type":"string","x-okf-format":"date-time","x-okf-length":{"unit":"utf16","min":0}}},"required":["answerId","requestId","recipient","actingVia","outcome","shownView","requestState","correlationId","answeredAt"]}}}},"default":{"description":"Typet afslag: error og eventuelle issues med JSON-pointer. 401 verification_required kræver login med max_age; 403 adgang; 409 lukket eller id-konflikt; 422 ugyldigt input eller assurance_unsupported; 503 optaget."}}}}},"externalDocs":{"url":"https://inbox.finch.dk/guide/index.md"},"components":{"securitySchemes":{"httpMessageSignature":{"type":"apiKey","in":"header","name":"Signature","description":"RFC 9421 Ed25519: @method, @target-uri, content-digest; created, keyid, alg. Signature-Input kræves også. organization er dækket af signaturen. På /mcp signeres det ydre kalds URL og JSON-RPC-bytes."},"bearerAuth":{"type":"http","scheme":"bearer","description":"OAuth resource er indbakkens origin, scope inbox. Verificeret email og auth_time fra IdP kræves."}}}}