{"openapi":"3.0.3","info":{"title":"TjMakeBot Developer API","version":"2026.06.11","description":"TjMakeBot public API surface covering annotation projects, AI training pipelines, 6D pose estimation, data flywheel analytics, collaborative workflows, webhooks, and enterprise management.\n\n## Authentication\n\nAll API requests require a request signature header (`Sign`). Browser-based BFF routes sign requests automatically. For direct service calls, compute the signature as:\n\n```\nMD5(App-Id + sorted_query_params + Salt + apiSecretKey)\n```\n\nUser-scoped endpoints additionally require `Access-Token` and `Team-Id` headers.\n\n## Response Format\n\nAll endpoints return a unified envelope:\n\n```json\n{ \"code\": 0, \"message\": \"success\", \"data\": { ... } }\n```\n\n- `code: 0` — Success\n- `code: non-zero` — Error (see message for details)\n\n## SDKs\n\n- **TypeScript**: `npm install @tjmakebot/api`\n- **Python**: `pip install tjmakebot`\n\n## Minimal 6D Pose Flow\n\n1. Call `GET /api/training/v1/prelabel/pose6d/models` to inspect available FoundationPose/MegaPose capabilities.\n2. Call `POST /api/training/v1/prelabel/pose6d/initialize` with image metadata, camera intrinsics, model asset key, and an optional bounding box prompt.\n3. Call `GET /api/storage/v1/data-flywheel/pose6d/team-summary` and `GET /api/storage/v1/data-flywheel/pose6d/team-trend` to consume team quality and training-readiness analytics.\n","contact":{"name":"TjMakeBot Developer Relations","url":"https://tjmakebot.com/developers","email":"dev@taojsh.com"}},"servers":[{"url":"https://tjmakebot.com","description":"Production"},{"url":"http://127.0.0.1:3110","description":"Local development"}],"tags":[{"name":"Projects","description":"Annotation project CRUD, snapshots, and storage operations."},{"name":"Training","description":"Model training tasks, YOLO/RT-DETR/3D detection, and AI prelabel pipelines (2D/3D/Pose6D)."},{"name":"Data Flywheel","description":"Pose6D quality statistics, team-level aggregation, and trend snapshots."},{"name":"Collaboration","description":"Collab projects, batches, assets, work units, submissions, reviews, dataset versions, releases, benchmarks, and evaluations."},{"name":"Enterprise","description":"API keys, inquiry operations, and developer health checks."},{"name":"Webhooks","description":"Webhook subscription, testing, deliveries, and replay."}],"paths":{"/api/storage/v1/projects/create":{"post":{"tags":["Projects"],"summary":"Create an annotation project","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","drawing_mode"],"properties":{"name":{"type":"string","description":"Project name"},"description":{"type":"string","description":"Optional description"},"drawing_mode":{"type":"string","enum":["2D","3D"],"description":"2D image or 3D point-cloud annotation mode"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects":{"get":{"tags":["Projects"],"summary":"List annotation projects","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects/{projectId}":{"get":{"tags":["Projects"],"summary":"Load full project data (images, labels, annotations)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Project ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects/{projectId}/save":{"post":{"tags":["Projects"],"summary":"Save project data (full snapshot with version check)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Project ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"JSON-stringified project payload with version, images, labels, annotations"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects/{projectId}/delete":{"post":{"tags":["Projects"],"summary":"Delete an annotation project","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Project ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects/{projectId}/snapshots/create":{"post":{"tags":["Projects"],"summary":"Create a project snapshot","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Project ID"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"snapshot_source":{"type":"string"},"created_by":{"type":"string"},"meta_text":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/projects/{projectId}/snapshots":{"get":{"tags":["Projects"],"summary":"List project snapshots","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"},"description":"Project ID"},{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/snapshots/{snapshotId}":{"get":{"tags":["Projects"],"summary":"Get snapshot detail","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"snapshotId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/create":{"post":{"tags":["Training"],"summary":"Create a model training task (YOLO / RT-DETR / 3D Detection)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"JSON-stringified CreateTaskParams (name, project_id, task_mode, model_type, epochs, batch_size, image_size, export_formats, annotation_data, etc.)"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks":{"get":{"tags":["Training"],"summary":"List training tasks","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}},{"name":"status","in":"query","schema":{"type":"string","enum":["PENDING","QUEUED","PREPARING","TRAINING","EXPORTING","COMPLETED","FAILED","CANCELLED"]}},{"name":"project_id","in":"query","schema":{"type":"string"}},{"name":"latest_only","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/by-status-group":{"get":{"tags":["Training"],"summary":"List tasks grouped by status (queued / training / completed)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"status_group","in":"query","required":true,"schema":{"type":"string","enum":["queued","training","completed"]}},{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}":{"get":{"tags":["Training"],"summary":"Get training task detail with metrics","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/cancel":{"post":{"tags":["Training"],"summary":"Cancel a training task","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/resubmit":{"post":{"tags":["Training"],"summary":"Resubmit a training task (creates new version)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/versions":{"get":{"tags":["Training"],"summary":"List task version history","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/rollback":{"post":{"tags":["Training"],"summary":"Rollback to a previous task version","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/download":{"get":{"tags":["Training"],"summary":"Get model download URL","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"},{"name":"format","in":"query","required":true,"schema":{"type":"string","enum":["pt","onnx","ncnn","coreml","tflite","openvino","engine"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/export":{"post":{"tags":["Training"],"summary":"Request on-demand model export","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["format"],"properties":{"format":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/annotation-data":{"get":{"tags":["Training"],"summary":"Get task annotation data (images, labels, annotations)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/annotation-meta":{"get":{"tags":["Training"],"summary":"Get task annotation metadata (lightweight)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/annotation-batch":{"get":{"tags":["Training"],"summary":"Get annotation data in batches","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"},{"name":"start","in":"query","required":true,"schema":{"type":"integer","minimum":0}},{"name":"count","in":"query","schema":{"type":"integer","default":10,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/compare":{"get":{"tags":["Training"],"summary":"Compare two training task metrics","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"task_id_1","in":"query","required":true,"schema":{"type":"string"}},{"name":"task_id_2","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/model-versions/set-default":{"post":{"tags":["Training"],"summary":"Set a task as the default model version for its project","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["task_id"],"properties":{"task_id":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/queue/status":{"get":{"tags":["Training"],"summary":"Get training queue status (pending, running, estimated wait)","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/tasks/{taskId}/queue-position":{"get":{"tags":["Training"],"summary":"Get a task position in the training queue","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"taskId","in":"path","required":true,"schema":{"type":"string"},"description":"Training task ID"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/dataset/download-url":{"get":{"tags":["Training"],"summary":"Get signed download URL for a dataset OSS key","security":[{"requestSignature":[]}],"parameters":[{"name":"oss_key","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/gpu-servers":{"get":{"tags":["Training"],"summary":"List GPU servers and their status","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/gpu-servers/installed-models":{"get":{"tags":["Training"],"summary":"List installed models across all online GPU servers","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/prelabel/2d":{"post":{"tags":["Training"],"summary":"Run interactive 2D prelabel assist (SAM-style segmentation)","description":"Send an image with optional box/point prompts and receive polygon segmentation candidates.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"JSON-stringified Run2DPrelabelParams"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/prelabel/2d/batch":{"post":{"tags":["Training"],"summary":"Run batch 2D prelabel pipeline","description":"Process multiple images with an AI model for automatic pre-annotation.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/prelabel/2d/models":{"get":{"tags":["Training"],"summary":"Read 2D prelabel model performance snapshot","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/prelabel/3d":{"post":{"tags":["Training"],"summary":"Run 3D point-cloud prelabel (OpenPCDet / MMDetection3D)","description":"Send point-cloud data and receive 3D bounding box predictions.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/training/v1/prelabel/pose6d/initialize":{"post":{"tags":["Training"],"summary":"Initialize 6D object pose from an image (FoundationPose / MegaPose)","description":"Send an image with camera intrinsics, model asset key, and optional bounding box prompt. Returns 6D pose candidates with translation, rotation, scale, and confidence scores.\n\n**Providers**: heuristic-pose6d-mvp (CPU fallback), gpu-websocket-provider (FoundationPose/MegaPose on GPU).","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"string","description":"JSON-stringified Pose6DInitializationParams"}}},"example":{"data":"{\"project_id\":\"proj_abc123\",\"model_type\":\"foundationpose\",\"image\":{\"image_id\":\"img_001\",\"oss_key\":\"projects/proj_abc123/images/img_001.jpg\",\"width\":1920,\"height\":1080},\"label_id\":1,\"model_asset_key\":\"mug_red_v2\",\"prompt_box\":{\"x\":400,\"y\":300,\"width\":200,\"height\":250},\"camera_intrinsics\":{\"fx\":1060,\"fy\":1060,\"cx\":960,\"cy\":540,\"width\":1920,\"height\":1080},\"score_threshold\":0.5}"}}}},"responses":{"200":{"description":"Pose6D initialization result","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}},"example":{"code":0,"message":"success","data":{"request_id":"req_uuid","provider":"gpu-websocket-provider","model_type":"foundationpose","project_id":"proj_abc123","results":[{"image_id":"img_001","type":"pose6d","label_id":1,"object_id":"obj_uuid","model_asset_key":"mug_red_v2","translation":{"x":0.15,"y":-0.08,"z":0.62},"rotation3d":{"x":0.12,"y":-0.05,"z":1.57},"scale":{"x":0.08,"y":0.08,"z":0.1},"camera_intrinsics":{"fx":1060,"fy":1060,"cx":960,"cy":540},"score":0.89,"source":"foundationpose"}],"warnings":[],"elapsed_ms":1240}}}}}}}},"/api/training/v1/prelabel/pose6d/models":{"get":{"tags":["Training"],"summary":"Get available 6D Pose model capabilities","description":"Returns model stats (accuracy, latency, supported prompts) for foundationpose and megapose providers.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"Pose6D model capability snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}},"example":{"code":0,"message":"success","data":{"provider":"gpu-websocket-provider","models":[{"provider":"gpu-websocket-provider","model_type":"foundationpose","task":"pose6d","accuracy_estimate":0.86,"latency_p50_ms":1200,"latency_p95_ms":2400,"processed_images":128,"accepted_poses":96,"supported_prompts":["box"],"fallback_available":true,"requires_gpu":true}],"warnings":[]}}}}}}}},"/api/storage/v1/data-flywheel/pose6d/team-summary":{"get":{"tags":["Data Flywheel"],"summary":"Get team-level Pose6D data flywheel aggregation summary","description":"Returns quality scores, training readiness, model asset usage, and export readiness for all Pose6D projects in the team.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"include_projects","in":"query","schema":{"type":"string","description":"Set to \"1\" to include per-project breakdown"}}],"responses":{"200":{"description":"Team-level Pose6D data flywheel summary","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}},"example":{"code":0,"message":"success","data":{"scope":"team","team_id":"team_abc123","total_projects":6,"total_annotations":2480,"total_images":720,"total_annotated_images":680,"total_objects":42,"total_model_assets":18,"average_quality_score":4.32,"average_training_ready_ratio":0.78,"total_errors":6,"total_warnings":24,"total_review_required":9,"export_ready_count":5,"total_training_ready":4,"total_projectable":6,"total_fully_visible":5,"project_summaries":[{"project_id":"proj_pose6d_001","project_name":"Factory Bin Picking","annotation_count":420,"quality_score":4.6,"training_ready_ratio":0.84,"export_ready":true,"updated_at":"2026-07-06T02:10:00Z"}],"generated_at":"2026-07-06T02:15:00Z"}}}}}}}},"/api/storage/v1/data-flywheel/pose6d/team-trend":{"get":{"tags":["Data Flywheel"],"summary":"Get team-level Pose6D data flywheel trend over time","description":"Returns daily snapshots of quality scores, training readiness, and annotation counts.","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","default":30,"minimum":1,"maximum":365}}],"responses":{"200":{"description":"Team-level Pose6D data flywheel trend","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}},"example":{"code":0,"message":"success","data":{"scope":"team","team_id":"team_abc123","snapshots":[{"snapshot_time":"2026-07-05T00:00:00Z","total_projects":5,"total_annotations":2100,"average_quality_score":4.12,"training_ready_ratio":0.72,"export_ready_count":4},{"snapshot_time":"2026-07-06T00:00:00Z","total_projects":6,"total_annotations":2480,"average_quality_score":4.32,"training_ready_ratio":0.78,"export_ready_count":5}],"generated_at":"2026-07-06T02:15:00Z"}}}}}}}},"/api/storage/v1/data-flywheel/pose6d/snapshot":{"post":{"tags":["Data Flywheel"],"summary":"Save current data flywheel state as a snapshot","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"Saved Pose6D data flywheel snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}},"example":{"code":0,"message":"success","data":{"scope":"team","team_id":"team_abc123","total_projects":6,"total_annotations":2480,"average_quality_score":4.32,"average_training_ready_ratio":0.78,"export_ready_count":5,"generated_at":"2026-07-06T02:15:00Z"}}}}}}}},"/api/storage/v1/data-flywheel/stats":{"get":{"tags":["Data Flywheel"],"summary":"Get general data flywheel statistics","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/data-flywheel/quality-overview":{"get":{"tags":["Data Flywheel"],"summary":"Get quality management overview","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/storage/v1/data-flywheel/project-quality":{"get":{"tags":["Data Flywheel"],"summary":"Get per-project quality scores","security":[{"accessToken":[],"teamId":[],"requestSignature":[]}],"parameters":[{"name":"project_id","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/health":{"get":{"tags":["Enterprise"],"summary":"Read enterprise developer service health","responses":{"200":{"description":"Service health","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/api-keys":{"get":{"tags":["Enterprise"],"summary":"List API keys for the current team","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}},"post":{"tags":["Enterprise"],"summary":"Create an API key","security":[{"accessToken":[],"teamId":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["label","scopes"],"properties":{"inquiry_id":{"type":"string"},"label":{"type":"string","description":"Human-readable label for this key"},"scopes":{"type":"array","items":{"type":"string"},"description":"Permission scopes. Examples: project.read, project.write, training.read, training.write, webhook.read, webhook.write, flywheel.read","example":["project.read","training.read","flywheel.read"]},"created_by":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/api-keys/{id}/revoke":{"post":{"tags":["Enterprise"],"summary":"Revoke an API key","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/api-keys/{id}/touch":{"post":{"tags":["Enterprise"],"summary":"Record API key usage (touch for usage tracking)","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/api-key-usage-events":{"get":{"tags":["Enterprise"],"summary":"List API key usage events","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/webhooks":{"get":{"tags":["Webhooks"],"summary":"List webhook subscriptions","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}},"post":{"tags":["Webhooks"],"summary":"Create a webhook subscription","security":[{"accessToken":[],"teamId":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["label","callback_url","event_types"],"properties":{"inquiry_id":{"type":"string"},"label":{"type":"string"},"callback_url":{"type":"string","format":"uri"},"event_types":{"type":"array","items":{"type":"string"},"description":"Event types to subscribe to.","example":["workflow.completed","delivery.failed","training.completed","project.saved"]}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/webhooks/{id}/status":{"post":{"tags":["Webhooks"],"summary":"Toggle webhook active/inactive status","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"summary":"Send a test webhook event","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"List webhook deliveries","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"page","in":"query","schema":{"type":"integer","default":1,"minimum":1}},{"name":"page_size","in":"query","schema":{"type":"integer","default":20,"minimum":1,"maximum":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}},"/api/enterprise/webhook-deliveries/{id}/replay":{"post":{"tags":["Webhooks"],"summary":"Replay a webhook delivery","security":[{"accessToken":[],"teamId":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"Response code. 0 = success."},"message":{"type":"string","description":"Human-readable message."},"data":{"type":"object","description":"Response payload."}}}}}}}}}},"components":{"securitySchemes":{"accessToken":{"type":"apiKey","in":"header","name":"Access-Token","description":"User access token from the account center session."},"teamId":{"type":"apiKey","in":"header","name":"Team-Id","description":"Team context for enterprise developer operations."},"requestSignature":{"type":"apiKey","in":"header","name":"Sign","description":"TjMakeBot request signature for direct service calls. Browser BFF routes sign requests automatically."}}}}