{"components":{"schemas":{"ErrorEnvelope":{"properties":{"error":{"properties":{"code":{"type":"string"},"details":{"additionalProperties":true,"type":"object"},"message":{"type":"string"},"request_id":{"type":"string"},"retryable":{"type":"boolean"}},"required":["code","message","retryable","details"],"type":"object"}},"required":["error"],"type":"object"},"PaymentRequiredEnvelope":{"properties":{"error":{"$ref":"#/components/schemas/ErrorEnvelope/properties/error"},"payment_context":{"additionalProperties":true,"type":"object"}},"required":["error","payment_context"],"type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"API Key","description":"Registered users pass Authorization: Bearer \u003capi_key\u003e.","scheme":"bearer","type":"http"}}},"info":{"description":"W-Agent public APIs for person identity recognition, emotion recognition, gait sequence parsing, human 2D/3D keypoints, and Object Search.\n\nBase URL:\n- Mainland China: https://www.w-agent.cn/api\n- Overseas entry: https://www.h-agent.ai/api. Redirects to w-agent.cn are expected.\n- Do not guess https://api.w-agent.cn unless it is explicitly documented.\n\nTask selection:\n- Same person or not: upload one tracked person sequence, call /v1/sequences/{task_id}/parse, then dot-product same-type gait_feature, face_feature, or reid_feature.\n- Video to identity features: run the local video-to-sequence demo first, then upload each generated sequence.\n- Video to each person's 2D/3D keypoints: run local video-to-sequence preprocessing, upload each generated sequence, then call /v1/sequences/{task_id}/gait-pose for each sequence.\n- Existing single-person sequence to keypoints: upload sequence frames, then call /v1/sequences/{task_id}/gait-pose.\n- Image text search: call /v1/object-search with raw image_base64 and prompt.\n\nImportant boundaries:\n- pose_2ds and pose_3ds are relative to uploaded sequence images, not original full video frames. If uploaded images are crops, use local crop metadata to map back to the original video.\n- Object Search boxes are original-image pixel coordinates. No match returns boxes: [] and is not an error.\n- Registered users use Authorization: Bearer \u003capi_key\u003e. Anonymous agents use public routes and x402 HTTP 402 payment_context flow.\n\nAgent discovery:\n- Agent guide: https://www.w-agent.cn/api/.well-known/w-agent.md\n- OpenAPI: https://www.w-agent.cn/api/openapi.json\n- GitHub examples: https://github.com/w-agent-ai/api-example\n- Task recipes: https://github.com/w-agent-ai/api-example/tree/main/recipes\n- MCP config example: https://github.com/w-agent-ai/api-example/blob/main/mcp-config.example.json\n- MCP endpoint: https://www.w-agent.cn/api/mcp","title":"W-Agent API","version":"1.0.0"},"openapi":"3.1.0","paths":{"/mcp":{"post":{"description":"MCP Streamable HTTP JSON-RPC endpoint. Supports initialize, tools/list, and tools/call.","operationId":"mcpJsonRPC","requestBody":{"content":{"application/json":{"schema":{"properties":{"id":{},"jsonrpc":{"example":"2.0","type":"string"},"method":{"example":"tools/list","type":"string"},"params":{"type":"object"}},"required":["jsonrpc","method"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"MCP Streamable HTTP JSON-RPC endpoint. Supports initialize, tools/list, and tools/call.","tags":["Agent"]}},"/v1/features/face":{"post":{"description":"Input should be one corrected/aligned face image encoded as image_base64. The API returns feature_dim=512 and feature as float32 values.","operationId":"extractFaceFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Extract a 512-dimensional face feature from one aligned face image.","tags":["Image Features"]}},"/v1/features/reid":{"post":{"description":"Input should be one person image encoded as image_base64. The API returns feature_dim=512 and feature as float32 values.","operationId":"extractReIDFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Extract a 512-dimensional ReID feature from one person image.","tags":["Image Features"]}},"/v1/object-search":{"post":{"description":"Find targets in one uploaded image from a text prompt. image_base64 should be raw base64 without a data:image/...;base64, prefix. JPEG and PNG are safest. boxes are original-image pixel coordinates: x1,y1 top-left and x2,y2 bottom-right. No match returns boxes: [] as a successful response. label is model-generated, not a fixed taxonomy.","operationId":"objectSearch","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"},"prompt":{"type":"string"}},"required":["image_base64","prompt"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Find targets in one image from a text prompt.","tags":["Object Search"]}},"/v1/payment-capabilities":{"get":{"description":"List supported payment capabilities including x402 routes.","operationId":"getPaymentCapabilities","responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"List supported payment capabilities including x402 routes.","tags":["Discovery"]}},"/v1/public/features/face":{"post":{"description":"Anonymous face feature extraction uses the public HTTP x402 flow: call once to receive HTTP 402 payment_context.challenge, sign the challenge, then retry the same request with PAYMENT-SIGNATURE.","operationId":"publicFaceFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Anonymous x402 paid face feature call.","tags":["Image Features"]}},"/v1/public/features/reid":{"post":{"description":"Anonymous ReID feature extraction uses the public HTTP x402 flow: call once to receive HTTP 402 payment_context.challenge, sign the challenge, then retry the same request with PAYMENT-SIGNATURE.","operationId":"publicReIDFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Anonymous x402 paid ReID feature call.","tags":["Image Features"]}},"/v1/public/features/trial/face":{"post":{"description":"No-registration trial face feature call.","operationId":"trialFaceFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"No-registration trial face feature call.","tags":["Trial"]}},"/v1/public/features/trial/reid":{"post":{"description":"No-registration trial ReID feature call.","operationId":"trialReIDFeature","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"description":"Optional client-generated key. Generate a new key for a new logical request; reuse it only when retrying that same request.","type":"string"},"image_base64":{"type":"string"}},"required":["image_base64"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"No-registration trial ReID feature call.","tags":["Trial"]}},"/v1/public/object-search":{"post":{"description":"Anonymous Object Search uses the public HTTP x402 flow: call once to receive HTTP 402 payment_context.challenge, sign the challenge, then retry the same request with PAYMENT-SIGNATURE.","operationId":"publicObjectSearch","requestBody":{"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"type":"string"},"image_base64":{"type":"string"},"prompt":{"type":"string"}},"required":["image_base64","prompt"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Anonymous x402 paid Object Search call.","tags":["Object Search"]}},"/v1/public/object-search/trial":{"post":{"description":"No-registration trial Object Search call.","operationId":"trialObjectSearch","requestBody":{"content":{"application/json":{"schema":{"properties":{"fingerprint":{"type":"string"},"image_base64":{"type":"string"},"prompt":{"type":"string"}},"required":["image_base64","prompt"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"No-registration trial Object Search call.","tags":["Trial"]}},"/v1/public/sequences":{"post":{"description":"Create an anonymous public sequence parsing task. Use upload.upload_token to batch-upload images to /v1/public/sequences/{task_id}/uploads/batch.","operationId":"createPublicSequenceTask","requestBody":{"content":{"application/json":{"schema":{"properties":{"frame_count":{"minimum":1,"type":"integer"}},"required":["frame_count"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Create an anonymous public sequence parsing task. Use upload.upload_token to batch-upload images to /v1/public/sequences/{task_id}/uploads/batch.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}":{"delete":{"description":"Mark an anonymous public sequence task for early cleanup.","operationId":"deletePublicSequenceTask","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Mark an anonymous public sequence task for early cleanup.","tags":["Anonymous Sequences"]},"get":{"description":"Get anonymous public sequence task status.","operationId":"getPublicSequenceStatus","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Get anonymous public sequence task status.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}/gait-pose":{"post":{"description":"Run anonymous standalone human 2D/3D keypoint extraction after batch upload. Send {}.","operationId":"getPublicSequenceHumanKeypoints","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Run anonymous standalone human 2D/3D keypoint extraction after batch upload. Send {}.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}/parse":{"post":{"description":"Parse an anonymous public sequence after batch upload. Send {}.","operationId":"parsePublicSequence","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Parse an anonymous public sequence after batch upload. Send {}.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}/result":{"get":{"description":"Fetch the stored anonymous sequence parse response.","operationId":"getPublicSequenceResult","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Fetch the stored anonymous sequence parse response.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}/settle":{"post":{"description":"Settle or request the anonymous sequence parse or gait-pose payment challenge.","operationId":"settlePublicSequence","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"settlement_ref":{"type":"string"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Settle or request the anonymous sequence parse or gait-pose payment challenge.","tags":["Anonymous Sequences"]}},"/v1/public/sequences/{task_id}/uploads/batch":{"post":{"description":"Send multipart/form-data with upload_token plus repeated frames file parts. The total request body, including multipart overhead, must not exceed 32 MB. Frames are mapped by multipart order and file names are ignored. After upload, /parse and /gait-pose use the uploaded task frames automatically.","operationId":"uploadPublicSequenceFramesBatch","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"frames":{"items":{"format":"binary","type":"string"},"type":"array"},"upload_token":{"type":"string"}},"required":["upload_token","frames"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"Upload all public sequence image frames in one multipart request.","tags":["Anonymous Sequences"]}},"/v1/public/trial/sequences/{task_id}/gait-pose":{"post":{"description":"No-registration trial human 2D/3D keypoint extraction for an already batch-uploaded public sequence task.","operationId":"getTrialUploadedSequenceHumanKeypoints","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"No-registration trial human 2D/3D keypoint extraction for an already batch-uploaded public sequence task.","tags":["Trial"]}},"/v1/public/trial/sequences/{task_id}/parse":{"post":{"description":"No-registration trial sequence parsing for an already batch-uploaded public sequence task.","operationId":"parseTrialUploadedSequence","parameters":[{"description":"Task token returned by the anonymous public create endpoint.","in":"header","name":"X-Task-Token","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[],"summary":"No-registration trial sequence parsing for an already batch-uploaded public sequence task.","tags":["Trial"]}},"/v1/sequences":{"post":{"description":"Create one batch upload target for an ordered tracked-person image sequence. Send frame_count here, then upload all frames to /v1/sequences/{task_id}/uploads/batch using upload.upload_token.","operationId":"createSequenceTask","requestBody":{"content":{"application/json":{"schema":{"properties":{"frame_count":{"minimum":1,"type":"integer"}},"required":["frame_count"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Create a gait sequence parsing task.","tags":["Sequences"]}},"/v1/sequences/{task_id}/gait-pose":{"post":{"description":"Use for 2D/3D keypoints from an uploaded sequence. pose_2ds[i] and pose_3ds[i] correspond to the same ordered sequence frame unless frames provides a more explicit mapping. Coordinates are relative to the uploaded sequence image; if the input is a crop, map back to original video coordinates with local crop metadata such as crop_x and crop_y.","operationId":"getSequenceHumanKeypoints","requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Run standalone human 2D/3D keypoint extraction for an uploaded sequence. pose_2ds and pose_3ds coordinates are relative to the uploaded sequence images, not the original full video frame. Send {} after batch upload.","tags":["Sequences"]}},"/v1/sequences/{task_id}/parse":{"post":{"description":"Use for identity features and attributes from an already detected/tracked person sequence. Input should be one ordered track, preferably person crops. The response is sequences[] because ReID may split one mixed track into multiple clean single-person outputs. Compare only same-type gait_feature, face_feature, or reid_feature by dot product. Do not expect pose_2ds or pose_3ds here; use /gait-pose for keypoints.","operationId":"parseSequence","requestBody":{"content":{"application/json":{"schema":{"properties":{"frames":{"description":"Optional. Uploaded task parse uses all batch-uploaded frames when omitted. Direct trial calls may pass content_base64 frames.","items":{"properties":{"content_base64":{"type":"string"},"index":{"minimum":0,"type":"integer"}},"required":["index"],"type":"object"},"type":"array"}},"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Parse an uploaded tracked person sequence and return sequences[] with gait/face/ReID identity features, attributes, and emotion outputs. A single input track may split into multiple output sequences when ReID detects an ID switch. Send {} after batch upload.","tags":["Sequences"]}},"/v1/sequences/{task_id}/result":{"get":{"description":"Fetch the stored gait sequence parsing response with all split sequence results.","operationId":"getSequenceResult","responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Fetch the stored gait sequence parsing response with all split sequence results.","tags":["Sequences"]}},"/v1/sequences/{task_id}/uploads/batch":{"post":{"description":"Send multipart/form-data with upload_token plus repeated frames file parts. The total request body, including multipart overhead, must not exceed 32 MB. Frames are mapped by multipart order: the first frames part is index 0, the second is index 1, and so on. File names are ignored by the API. After upload, /parse and /gait-pose use the uploaded task frames automatically.","operationId":"uploadSequenceFramesBatch","requestBody":{"content":{"multipart/form-data":{"schema":{"properties":{"frames":{"items":{"format":"binary","type":"string"},"type":"array"},"upload_token":{"type":"string"}},"required":["upload_token","frames"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Success"},"400":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Invalid request","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Invalid request"},"401":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Missing or invalid authentication","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Missing or invalid authentication"},"402":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequiredEnvelope"}}},"description":"Payment required for anonymous paid flows"},"409":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Task is not ready, balance is insufficient, or idempotency key was reused","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Task is not ready, balance is insufficient, or idempotency key was reused"},"429":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Rate limit or trial quota exceeded","request_id":"req_example","retryable":true}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Rate limit or trial quota exceeded"},"500":{"content":{"application/json":{"examples":{"error":{"value":{"error":{"code":"invalid_request","details":{},"message":"Internal server error","request_id":"req_example","retryable":false}}}},"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Internal server error"}},"security":[{"bearerAuth":[]}],"summary":"Upload all sequence image frames in one multipart request.","tags":["Sequences"]}}},"security":[{"bearerAuth":[]}],"servers":[{"description":"Mainland China","url":"https://www.w-agent.cn/api"},{"description":"Overseas entry","url":"https://www.h-agent.ai/api"},{"description":"Current request origin","url":"https://www.w-agent.cn/api"}],"x-w-agent":{"agent_markdown_url":"https://www.w-agent.cn/api/.well-known/w-agent.md","anonymous_payment":"Public endpoints may return HTTP 402 with x402 payment_context. Anonymous x402 payment is handled by public HTTP APIs, not by MCP JSON-RPC tools.","examples_url":"https://github.com/w-agent-ai/api-example","mcp_config_url":"https://github.com/w-agent-ai/api-example/blob/main/mcp-config.example.json","mcp_url":"https://www.w-agent.cn/api/mcp","pricing":{"anonymous_settlement_currency":"USD","cny_usd_exchange_rate":"7","currency":"CNY","estimated":{"face_per_k_frames":{"cny_minor":100,"estimated_cny":1,"estimated_usd":0.15,"estimated_usd_minor":15,"estimated_usd_text":"$0.15"},"gait_pose_per_sequence":{"cny_minor":1,"estimated_cny":0.01,"estimated_usd":0.01,"estimated_usd_minor":1,"estimated_usd_text":"$0.01"},"object_search_price_per_image":{"cny_minor":10,"estimated_cny":0.1,"estimated_usd":0.02,"estimated_usd_minor":2,"estimated_usd_text":"$0.02"},"reid_per_k_frames":{"cny_minor":100,"estimated_cny":1,"estimated_usd":0.15,"estimated_usd_minor":15,"estimated_usd_text":"$0.15"},"sequence_per_k_frames":{"cny_minor":0,"estimated_cny":0,"estimated_usd":0,"estimated_usd_minor":0,"estimated_usd_text":"$0.00"},"sequence_per_sequence":{"cny_minor":1,"estimated_cny":0.01,"estimated_usd":0.01,"estimated_usd_minor":1,"estimated_usd_text":"$0.01"},"video_per_k_frames":{"cny_minor":100,"estimated_cny":1,"estimated_usd":0.15,"estimated_usd_minor":15,"estimated_usd_text":"$0.15"}},"eurc_usd_exchange_rate":"1.15","face_per_k_frames":100,"gait_pose_per_k_frames":100,"gait_pose_per_sequence":1,"object_search_price_per_image":10,"reid_per_k_frames":100,"sequence_per_k_frames":0,"sequence_per_sequence":1,"video_per_k_frames":100},"recipes_url":"https://github.com/w-agent-ai/api-example/tree/main/recipes","similarity":"Use dot product between same-type gait_feature, face_feature, and reid_feature vectors."}}
