openapi: 3.1.0 info: title: CLAN Consent Adapter API version: 1.0.0 description: API for Consent Events and Testimony Drafts for CLAN/ZHOS flow. servers: - url: http://clan-consent-adapter:8111 security: - BearerAuth: [] tags: - name: health - name: consent - name: testimony paths: /health: get: tags: [health] summary: Service health check security: [] responses: "200": description: OK content: application/json: schema: $ref: "#/components/schemas/HealthResponse" /consent/events: post: tags: [consent] summary: Create consent event requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/ConsentCreate" responses: "200": description: Consent event created content: application/json: schema: $ref: "#/components/schemas/ConsentCreateResponse" "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" /consent/events/{event_id}: get: tags: [consent] summary: Get consent event by id parameters: - name: event_id in: path required: true schema: type: string responses: "200": description: Consent event content: application/json: schema: $ref: "#/components/schemas/ConsentEvent" "401": $ref: "#/components/responses/Unauthorized" "404": description: Not found content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" /testimony/drafts: post: tags: [testimony] summary: Create testimony draft requestBody: required: true content: application/json: schema: $ref: "#/components/schemas/TestimonyDraftCreate" responses: "200": description: Testimony draft created content: application/json: schema: $ref: "#/components/schemas/TestimonyCreateResponse" "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" /testimony/drafts/{testimony_id}: get: tags: [testimony] summary: Get testimony draft by id parameters: - name: testimony_id in: path required: true schema: type: string responses: "200": description: Testimony draft content: application/json: schema: $ref: "#/components/schemas/TestimonyDraft" "401": $ref: "#/components/responses/Unauthorized" "404": description: Not found content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: API key responses: BadRequest: description: Invalid input content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" Unauthorized: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/ErrorResponse" schemas: VisibilityLevel: type: string enum: [public, interclan, incircle, soulsafe, sacred] HealthResponse: type: object required: [status, service] properties: status: type: string example: ok service: type: string example: clan-consent-adapter ErrorResponse: type: object required: [detail] properties: detail: oneOf: - type: string - type: object ConsentCreate: type: object required: [circle, subject] properties: circle: type: string subject: type: string description: decision/testimony/bridge/rights method: type: string default: live_presence signers: type: array items: type: string default: [] caveats: type: string nullable: true visibility_level: $ref: "#/components/schemas/VisibilityLevel" provenance: type: object additionalProperties: true ConsentCreateResponse: type: object required: [consent_event_id, status, visibility_level] properties: consent_event_id: type: string format: uuid status: type: string example: confirmed visibility_level: $ref: "#/components/schemas/VisibilityLevel" ConsentEvent: type: object required: - id - circle - subject - method - signers - visibility_level - provenance - created_at properties: id: type: string format: uuid circle: type: string subject: type: string method: type: string signers: type: array items: type: string caveats: type: string nullable: true visibility_level: $ref: "#/components/schemas/VisibilityLevel" provenance: type: object additionalProperties: true created_at: type: string format: date-time TestimonyDraftCreate: type: object required: [title, circle] properties: title: type: string circle: type: string visibility_level: $ref: "#/components/schemas/VisibilityLevel" content: type: object additionalProperties: true status: type: string enum: [draft, needs_confirmation, confirmed] default: draft provenance: type: object additionalProperties: true consent_event_id: type: string nullable: true TestimonyCreateResponse: type: object required: [testimony_id, status, visibility_level] properties: testimony_id: type: string format: uuid status: type: string enum: [draft, needs_confirmation, confirmed] visibility_level: $ref: "#/components/schemas/VisibilityLevel" TestimonyDraft: type: object required: - id - title - circle - visibility_level - content - status - provenance - created_at - updated_at properties: id: type: string format: uuid title: type: string circle: type: string visibility_level: $ref: "#/components/schemas/VisibilityLevel" content: type: object additionalProperties: true status: type: string enum: [draft, needs_confirmation, confirmed] provenance: type: object additionalProperties: true consent_event_id: type: string nullable: true created_at: type: string format: date-time updated_at: type: string format: date-time