openapi: 3.2.0 info: title: looot Output Mappings API version: 0.1.0 description: Discover, inspect, run, and pay for real (or fixture) provider operations through one bearer token. servers: - url: https://api.looot.ai description: Public API (default) - url: https://coset-gateway.onrender.com description: Legacy host -- still live, for tokens issued before the public domain existed - url: http://127.0.0.1:8787 description: Local development security: - bearerAuth: [] tags: - name: Output Mappings paths: /v1/output-mappings: get: summary: List tenant-scoped output mappings responses: '200': description: Output mappings '403': description: mappings:read scope required '503': description: Control plane unavailable tags: - Output Mappings operationId: getV1OutputMappings x-operation-id-source: derived post: summary: Create an immutable output mapping requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateOutputMapping' responses: '201': description: Created output mapping '400': description: Invalid mapping '403': description: mappings:write scope required '409': description: Mapping already exists '503': description: Control plane unavailable tags: - Output Mappings operationId: postV1OutputMappings x-operation-id-source: derived /v1/output-mappings/{mappingId}: get: summary: Get a tenant-scoped output mapping and immutable versions responses: '200': description: Output mapping '403': description: mappings:read scope required '404': description: Mapping not found '503': description: Control plane unavailable tags: - Output Mappings operationId: getV1OutputMappingsByMappingId x-operation-id-source: derived /v1/output-mappings/{mappingId}/revisions: post: summary: Create the next immutable output mapping version requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ReviseOutputMapping' responses: '201': description: Revised output mapping '400': description: Invalid mapping '403': description: mappings:write scope required '404': description: Mapping not found '409': description: Revision conflict '503': description: Control plane unavailable tags: - Output Mappings operationId: postV1OutputMappingsByMappingIdRevisions x-operation-id-source: derived /v1/output-mappings/{mappingId}/preview: post: summary: Evaluate an output mapping without provider, ledger, or publication effects requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PreviewOutputMapping' responses: '200': description: Mapped output, structured issues, and field provenance '400': description: Invalid preview input '403': description: mappings:read scope required '404': description: Mapping or version not found '503': description: Control plane unavailable tags: - Output Mappings operationId: postV1OutputMappingsByMappingIdPreview x-operation-id-source: derived /v1/output-mappings/{mappingId}/publish: post: summary: Publish an immutable output mapping version requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeOutputMappingPublication' responses: '200': description: Published output mapping '400': description: Invalid publication '403': description: mappings:publish scope required '404': description: Mapping or version not found '409': description: Revision conflict '503': description: Control plane unavailable tags: - Output Mappings operationId: postV1OutputMappingsByMappingIdPublish x-operation-id-source: derived /v1/output-mappings/{mappingId}/rollback: post: summary: Roll back to a previously published output mapping version requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChangeOutputMappingPublication' responses: '200': description: Rolled-back output mapping '400': description: Invalid rollback target '403': description: mappings:publish scope required '404': description: Mapping or version not found '409': description: Revision conflict '503': description: Control plane unavailable tags: - Output Mappings operationId: postV1OutputMappingsByMappingIdRollback x-operation-id-source: derived components: schemas: ReviseOutputMapping: type: object additionalProperties: false required: - expectedRevision - definition properties: expectedRevision: type: integer minimum: 1 definition: $ref: '#/components/schemas/OutputMappingDefinition' targetSchema: {} ChangeOutputMappingPublication: type: object additionalProperties: false required: - expectedRevision - version properties: expectedRevision: type: integer minimum: 1 version: type: integer minimum: 1 CreateOutputMapping: type: object additionalProperties: false required: - mappingId - name - definition properties: mappingId: type: string pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$ name: type: string minLength: 1 maxLength: 200 definition: $ref: '#/components/schemas/OutputMappingDefinition' targetSchema: {} OutputMappingDefinition: type: object additionalProperties: false required: - mode properties: mode: enum: - raw - canonical - mapped expression: $ref: '#/components/schemas/OutputMappingExpression' PreviewOutputMapping: type: object additionalProperties: false required: - raw properties: version: type: integer minimum: 1 raw: {} canonical: {} OutputMappingExpression: oneOf: - type: object additionalProperties: false required: - kind - value properties: kind: const: literal value: {} - type: object additionalProperties: false required: - kind - source - path properties: kind: const: select source: enum: - raw - canonical path: type: array maxItems: 32 items: type: string minLength: 1 maxLength: 128 required: type: boolean default: true - type: object additionalProperties: false required: - kind - fields properties: kind: const: object fields: type: object additionalProperties: $ref: '#/components/schemas/OutputMappingExpression' - type: object additionalProperties: false required: - kind - items properties: kind: const: array items: type: array maxItems: 1000 items: $ref: '#/components/schemas/OutputMappingExpression' - type: object additionalProperties: false required: - kind - values properties: kind: const: coalesce values: type: array minItems: 1 maxItems: 64 items: $ref: '#/components/schemas/OutputMappingExpression' - type: object additionalProperties: false required: - kind - objects - policy properties: kind: const: merge objects: type: array minItems: 1 maxItems: 64 items: $ref: '#/components/schemas/OutputMappingExpression' policy: enum: - error - prefer_first - prefer_last securitySchemes: bearerAuth: type: http scheme: bearer