{"openapi":"3.1.0","info":{"title":"viqma-sds-worker API","version":"1.0.0","description":"API for SDS extraction from PDF files."},"servers":[{"url":"https://viqma-api.structurify.ai"}],"tags":[{"name":"System"},{"name":"SDS"}],"paths":{"/healthz":{"get":{"tags":["System"],"summary":"Health check","description":"Public liveness endpoint.","responses":{"200":{"description":"Service is healthy.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","examples":["ok"]},"request_id":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}},"required":["status","request_id","timestamp"]}}}}}}},"/docs":{"get":{"tags":["System"],"summary":"Human-readable docs page","responses":{"200":{"description":"HTML docs page.","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/docs.json":{"get":{"tags":["System"],"summary":"JSON docs payload","responses":{"200":{"description":"Simple route and auth documentation.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/docs/openapi.json":{"get":{"tags":["System"],"summary":"OpenAPI schema","description":"Machine-readable OpenAPI definition for this worker.","responses":{"200":{"description":"OpenAPI JSON document.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/openapi.json":{"get":{"tags":["System"],"summary":"OpenAPI schema (alias)","description":"Alias of /docs/openapi.json.","responses":{"200":{"description":"OpenAPI JSON document."}}}},"/v1/sds/extract":{"post":{"tags":["SDS"],"summary":"Extract structured SDS data from PDF files","description":"Accepts multipart/form-data with one or more PDF files. Any form file field name is accepted; `files` is recommended.","security":[{"ApiKeyAuth":[]},{"BearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string","format":"binary"},"description":"Recommended field for uploading one or more PDFs. Other file field names are also accepted."}}}}}},"responses":{"200":{"description":"At least one file succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string"},"summary":{"type":"object","properties":{"total_files":{"type":"integer"},"succeeded":{"type":"integer"},"failed":{"type":"integer"},"duration_ms":{"type":"integer"},"total_upstream_retry_count":{"type":"integer"}},"required":["total_files","succeeded","failed","duration_ms","total_upstream_retry_count"]}},"required":["request_id","summary"]}}}},"400":{"description":"Validation failure for request/files."},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","properties":{"request_id":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string","examples":["UNAUTHORIZED"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["request_id","error"]}}}},"413":{"description":"Uploaded file exceeded configured size limit."},"415":{"description":"Unsupported media type or unsupported file type."},"500":{"description":"Server configuration/internal error."},"502":{"description":"All files failed due to upstream processing errors."}}},"options":{"tags":["SDS"],"summary":"CORS preflight for extraction endpoint","responses":{"204":{"description":"Preflight accepted."},"403":{"description":"Origin not allowed by CORS policy."}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key"},"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key"}}}}