openapi: 3.2.0 info: title: HiveMorph v0.1 Membrane API description: 'Polymorphic agent runtime — single shape (Merchant), single supermodel (W2 MERCHANT). Three gates: NEED + YIELD + CLEAN-MONEY.' version: 0.1.0 tags: - name: membrane paths: /v1/xcalibur/membrane/v2/classify: post: tags: - membrane summary: Classify description: 'Classify a text as SAFE or UNSAFE using the MEMBRANE v2 ensemble. Returns a signed receipt with: - verdict: SAFE | UNSAFE - candidate_scores: per-model score - final_score: weighted ensemble score - receipt_id, timestamp, input_hash, signature' operationId: classify_v1_xcalibur_membrane_v2_classify_post requestBody: content: application/json: schema: $ref: '#/components/schemas/hivemorph__xcalibur__membrane_v2_routes__ClassifyRequest' required: true responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Classify V1 Xcalibur Membrane V2 Classify Post '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /v1/xcalibur/membrane/v2/health: get: tags: - membrane summary: Health description: Health check — does not load models. operationId: health_v1_xcalibur_membrane_v2_health_get responses: '200': description: Successful Response content: application/json: schema: additionalProperties: true type: object title: Response Health V1 Xcalibur Membrane V2 Health Get components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError hivemorph__xcalibur__membrane_v2_routes__ClassifyRequest: properties: text: type: string minLength: 1 title: Text description: Text to classify for safety/injection threshold: type: number maximum: 1.0 minimum: 0.0 title: Threshold description: Decision threshold for unsafe classification (default 0.5) default: 0.5 weights: anyOf: - additionalProperties: type: number type: object - type: 'null' title: Weights description: 'Per-candidate weights (must sum to ~1.0). Keys: toxic_bert, deberta_pi, membrane_v1, keyword_heuristic. Uses calibrated defaults if omitted.' type: object required: - text title: ClassifyRequest