{"openapi":"3.0.3","info":{"title":"Build73 Project API","version":"1.0.0","description":"Project-scoped automation API for agents (REST + MCP). Credentials never grant delete-project, member, or billing management."},"servers":[{"url":"https://api.build73.com"}],"tags":[{"name":"Project API","description":"Versioned REST under /api/v1/projects/{projectId}. Parity with MCP tools."}],"paths":{"/api/v1/projects/{projectId}/status":{"get":{"operationId":"project_status","x-mcp-tool":"project_status","x-scopes":["project:read"],"summary":"Project status, capabilities, credits","description":"Returns project summary, credential scopes, plan tier, credit balances, capabilities, and action prices. Call this first in every agent session.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}}},"/api/v1/projects/{projectId}/files":{"get":{"operationId":"files_list","x-mcp-tool":"files_list","x-scopes":["project:read"],"summary":"List project files","description":"Cursor-paginated file listing. Optional `path` filter and `limit`.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"path","in":"query","schema":{"type":"string"}},{"name":"q","in":"query","schema":{"type":"string"},"description":"Full-text search (≥2 chars)"},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}},"post":{"operationId":"files_create","x-mcp-tool":"files_create","x-scopes":["files:write"],"summary":"Create a file","description":"Creates a new project file. Body: `{ path, content }`.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"path":{"type":"string"},"content":{"type":"string"}},"required":["path","content"]}}}}}},"/api/v1/projects/{projectId}/files/{fileId}":{"get":{"operationId":"files_get","x-mcp-tool":"files_get","x-scopes":["project:read"],"summary":"Read a file","description":"Returns file metadata, content, and current `contentRevision`.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}},"put":{"operationId":"files_update","x-mcp-tool":"files_write","x-scopes":["files:write"],"summary":"Update file content","description":"Replaces file content. Body: `{ content, comment?, expectedRevision? }`. Returns 409 on revision conflict.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"},"comment":{"type":"string"},"expectedRevision":{"type":"integer","minimum":1}},"required":["content"]}}}}},"delete":{"operationId":"files_delete","x-mcp-tool":"files_delete","x-scopes":["files:write"],"summary":"Delete a file","description":"Deletes a project file. Prefer a checkpoint version before bulk deletes.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"fileId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}}},"/api/v1/projects/{projectId}/assets":{"get":{"operationId":"assets_list","x-mcp-tool":"assets_list","x-scopes":["project:read"],"summary":"List assets","description":"Cursor-paginated assets. Optional `type`: image | audio | video | model3d | font | other.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"type","in":"query","schema":{"type":"string","enum":["image","audio","video","model3d","font","other"]}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}}},"/api/v1/projects/{projectId}/assets/{assetId}/meta":{"put":{"operationId":"assets_replaceMeta","x-mcp-tool":"assets_update_meta","x-scopes":["assets:write"],"summary":"Replace asset metadata","description":"Updates asset name/metadata. Pipeline-owned keys (hasAlpha, format, optimized, …) are preserved.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"assetId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"metadata":{"type":"object","additionalProperties":true},"expectedRevision":{"type":"integer","minimum":1}}}}}}}},"/api/v1/projects/{projectId}/assets/upload-tickets":{"post":{"operationId":"assets_createUploadTicket","x-mcp-tool":"assets_create_upload_ticket","x-scopes":["assets:write"],"summary":"Create asset upload ticket","description":"Validates fileName/mimeType/sizeBytes and returns a single-use ticket (15 min TTL). Max size: image 15 MB, audio 20 MB, video 50 MB, other 10 MB.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string","description":"Bare file name with extension."},"mimeType":{"type":"string"},"sizeBytes":{"type":"integer","minimum":1},"mode":{"type":"string","enum":["replace","create"]},"assetId":{"type":"string","description":"Required when mode is `replace`."}},"required":["fileName","mimeType","sizeBytes"]}}}}}},"/api/v1/projects/{projectId}/assets/upload-tickets/{ticketId}":{"put":{"operationId":"assets_completeUpload","x-mcp-tool":"assets_complete_upload","x-scopes":["assets:write"],"summary":"Upload asset binary","description":"Consumes the ticket and writes the binary (`multipart/form-data`, field `file`). The MCP tool takes base64 instead, capped at 4 MB.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"ticketId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"}}}}}}}},"/api/v1/projects/{projectId}/ai/generate-image":{"post":{"operationId":"ai_generateImage","x-mcp-tool":"ai_generate_image","x-scopes":["ai:generate","assets:write"],"summary":"Generate image into the project","description":"Text-to-image (default model `nano-banana-2`), saved as a new asset or as a new variation of `replaceAssetId`. Consumes credits; counts against the heavy rate-limit bucket.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"model":{"type":"string","enum":["nano-banana-2","flux-pro","flux-2-flex","imagen4"],"default":"nano-banana-2"},"replaceAssetId":{"type":"string"},"fileName":{"type":"string"}},"required":["prompt"]}}}}}},"/api/v1/projects/{projectId}/ai/generate-audio":{"post":{"operationId":"ai_generateAudio","x-mcp-tool":"ai_generate_audio","x-scopes":["ai:generate","assets:write"],"summary":"Generate audio into the project","description":"Sound effect or music (WAV) saved into the project. Falls back to procedural synthesis with a partial refund when the provider is unavailable. Heavy rate-limit bucket.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"prompt":{"type":"string"},"type":{"type":"string","enum":["sound_effect","music"],"default":"sound_effect"},"duration":{"type":"number","minimum":1,"maximum":30,"default":3},"replaceAssetId":{"type":"string"},"fileName":{"type":"string"}},"required":["prompt"]}}}}}},"/api/v1/projects/{projectId}/versions":{"get":{"operationId":"versions_list","x-mcp-tool":"versions_list","x-scopes":["project:read"],"summary":"List versions","description":"Cursor-paginated project versions. Optional `search`.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer"}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}},"post":{"operationId":"versions_create","x-mcp-tool":"versions_create","x-scopes":["versions:write"],"summary":"Create checkpoint version","description":"Creates a named version snapshot. Body: `{ name, description? }`. Use before large edits.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name"]}}}}}},"/api/v1/projects/{projectId}/versions/{versionId}/restore":{"post":{"operationId":"versions_restore","x-mcp-tool":"versions_restore","x-scopes":["versions:write"],"summary":"Restore a version","description":"Restores a previous version. Body: `{ backupName? }`. Destructive — confirm intent in MCP.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"versionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"backupName":{"type":"string"}}}}}}}},"/api/v1/projects/{projectId}/export":{"post":{"operationId":"export_start","x-mcp-tool":"export_start","x-scopes":["build:run"],"summary":"Start export job","description":"Queues an export. Returns 202 + job object. Body: `{ format?, note? }`. Consumes credits.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"202":{"description":"Accepted — async job queued","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}},"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","default":"zip"},"note":{"type":"string"}}}}}}}},"/api/v1/projects/{projectId}/jobs/{jobId}":{"get":{"operationId":"jobs_get","x-mcp-tool":"jobs_get","x-scopes":["project:read"],"summary":"Get job status","description":"Polls an async job (export, etc.) including credit hold/charge/refund.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}}},"/api/v1/projects/{projectId}/jobs/{jobId}/cancel":{"post":{"operationId":"jobs_cancel","x-mcp-tool":"jobs_cancel","x-scopes":["build:run"],"summary":"Cancel a job","description":"Cancels a queued/running job. Returns 409 if already terminal.","tags":["Project API"],"security":[{"bearerApiKey":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Must match the project bound to the credential."},{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","maxLength":255},"description":"Client-generated key for at-most-once mutation semantics (24h TTL)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"403":{"description":"Forbidden / missing scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"409":{"description":"Conflict (revision / idempotency / job state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectApiError"}}}}}}}},"components":{"securitySchemes":{"bearerApiKey":{"type":"http","scheme":"bearer","bearerFormat":"API key or OAuth access token","description":"Project API key (`b73_proj_…`) or OAuth access token (`b73_pat_…`). Always send as `Authorization: Bearer <token>`."}},"schemas":{"ProjectApiError":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","status"],"properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","forbidden","not_found","conflict","payload_too_large","unprocessable_entity","rate_limited","internal_error","service_unavailable"]},"message":{"type":"string"},"status":{"type":"integer"},"requestId":{"type":"string"},"details":{}}}}},"ProjectApiScope":{"type":"string","enum":["project:read","files:write","assets:write","ai:generate","versions:write","build:run"]}}},"security":[{"bearerApiKey":[]}],"x-mcp":{"urlTemplate":"https://api.build73.com/api/mcp/projects/{projectId}","tools":["project_status","files_list","files_search","files_get","files_create","files_write","files_delete","assets_list","assets_update_meta","assets_create_upload_ticket","assets_complete_upload","ai_generate_image","ai_generate_audio","versions_list","versions_create","versions_restore","export_start","jobs_get","jobs_cancel"],"resources":["build73://project/status","build73://project/capabilities","build73://project/billing"],"forbiddenActions":["delete_project","manage_members","manage_share_links","manage_billing","manage_subscription","change_owner"]},"x-scopes":[{"scope":"project:read","description":"Чтение структуры проекта, файлов, ассетов и версий","write":false},{"scope":"files:write","description":"Создание, изменение и удаление файлов кода","write":true},{"scope":"assets:write","description":"Изменение метаданных ассетов","write":true},{"scope":"ai:generate","description":"Запуск AI-генерации (списывает кредиты)","write":true},{"scope":"versions:write","description":"Создание и восстановление версий проекта","write":true},{"scope":"build:run","description":"Запуск сборки и экспорта (списывает кредиты)","write":true}],"x-rate-limits":{"window":"60s","scope":"credential","buckets":{"read":120,"write":60,"heavy":15},"heavyScopes":["ai:generate","build:run"],"retryAfterHeader":"Retry-After"},"x-upload-limits":{"ticketTtl":"15m","maxBytes":{"image":15728640,"audio":20971520,"video":52428800,"other":10485760},"mcpInlineMaxBytes":4194304}}