openapi: 3.2.0 info: title: looot Skill Uploads 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: Skill Uploads paths: /v1/skill-uploads: get: summary: List tenant-scoped atomic skill upload receipts responses: '200': description: Redacted receipts without environment digests, credential references, request digests, file paths, or contents '403': description: local-product:read scope required '503': description: Control plane unavailable tags: - Skill Uploads operationId: getV1SkillUploads x-operation-id-source: derived post: summary: Atomically quarantine skill metadata and owned tool drafts description: The server validates the bounded manifest, recomputes manifest and content-set digests, derives tenant and actor identity, and commits bundle, tools, and receipt in one transaction. This metadata-only route does not receive or distribute raw file contents. requestBody: required: true content: application/json: schema: type: object additionalProperties: false required: - bundleId - idempotencyKey - manifest - selectedEnvironmentKeyNames - tools properties: bundleId: type: string pattern: ^[a-z][a-z0-9_-]{2,127}$ idempotencyKey: type: string pattern: ^[A-Za-z0-9][A-Za-z0-9._:-]{7,127}$ manifest: type: object additionalProperties: false required: - name - description - entrypoint - files properties: name: type: string pattern: ^[a-z][a-z0-9_-]{2,127}$ description: type: string minLength: 1 maxLength: 1000 entrypoint: type: string minLength: 1 maxLength: 512 pattern: ^(?!/)(?!.*\\)(?!.*(?:^|/)\.{1,2}(?:/|$)).+(?