openapi: 3.2.0 info: title: looot Provider Package Revisions 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: Provider Package Revisions paths: /v1/provider-package-revisions: get: summary: List immutable disabled provider-package mapping revisions responses: '200': description: Mapping revisions '403': description: provider-packages:read scope required tags: - Provider Package Revisions operationId: getV1ProviderPackageRevisions x-operation-id-source: derived post: summary: Create the next typed disabled mapping revision requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProviderPackageRevision' responses: '201': description: Immutable non-executable revision '400': description: Invalid mapping '403': description: provider-packages:write scope required '404': description: Package not found '409': description: Stale revision or contract drift tags: - Provider Package Revisions operationId: postV1ProviderPackageRevisions x-operation-id-source: derived /v1/provider-package-revisions/{revisionId}: get: summary: Get one immutable disabled provider-package mapping revision responses: '200': description: Revision with executable false '403': description: provider-packages:read scope required '404': description: Revision not found tags: - Provider Package Revisions operationId: getV1ProviderPackageRevisionsByRevisionId x-operation-id-source: derived /v1/provider-package-revisions/{revisionId}/review: post: summary: Independently approve or reject the exact current mapping revision requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DecideProviderMapping' responses: '200': description: Idempotent replay '201': description: Immutable digest-pinned review decision '400': description: Self-review or stale revision '403': description: provider-packages:review scope required '404': description: Revision not found '409': description: Conflicting decision tags: - Provider Package Revisions operationId: postV1ProviderPackageRevisionsByRevisionIdReview x-operation-id-source: derived components: schemas: DecideProviderMapping: type: object additionalProperties: false required: - decision - reason - evidenceRefs properties: decision: enum: - approved - rejected reason: type: string minLength: 1 maxLength: 2000 evidenceRefs: type: array minItems: 1 maxItems: 20 items: $ref: '#/components/schemas/CompatibilityEvidenceRef' CompatibilityEvidenceRef: type: object additionalProperties: false required: - url - digest - observedAt - kind properties: url: type: string format: uri pattern: ^https:// digest: type: string pattern: ^sha256:[a-f0-9]{64}$ observedAt: type: string format: date-time kind: enum: - official_docs - openapi - terms - pricing - authenticated_test - internal_review CreateProviderPackageRevision: type: object additionalProperties: false required: - packageId - expectedPreviousRevisionId - mapping properties: packageId: type: string minLength: 1 maxLength: 300 expectedPreviousRevisionId: type: - string - 'null' mapping: type: object description: Strict typed provider mapping; validated for identity, capability, auth, JSON Schemas, effect, price, retry, errors, limits, retention and a disabled fixed-host executor. securitySchemes: bearerAuth: type: http scheme: bearer