{"openapi":"3.1.0","info":{"title":"Pixamake API","version":"1.0.0","summary":"Frame by frame AI cleaning for video ads.","description":"Remove captions, hooks and text overlays from video ads. Upload a video (or give a public URL), create a job, then download the clean MP4. 150 credits per minute of video, billed per started second. Guides: https://pixamake.ai/docs · For AI agents: https://pixamake.ai/llms.txt · MCP server: https://pixamake.ai/mcp","contact":{"name":"Pixamake","url":"https://pixamake.ai"}},"servers":[{"url":"https://pixamake.ai"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Account","description":"Plan, credits and limits"},{"name":"Uploads","description":"Direct uploads with presigned URLs"},{"name":"Jobs","description":"Cleaning jobs"}],"paths":{"/v1/account":{"get":{"tags":["Account"],"operationId":"getAccount","summary":"Get the account","description":"Plan, credit balance and limits of the workspace that owns the API key.","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/estimate":{"get":{"tags":["Account"],"operationId":"estimateCredits","summary":"Estimate credits","parameters":[{"name":"duration_seconds","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"example":30}}],"responses":{"200":{"description":"Estimate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Estimate"}}}},"400":{"description":"Invalid duration","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/uploads":{"post":{"tags":["Uploads"],"operationId":"createUpload","summary":"Create an upload","description":"Returns a presigned URL. Send the file with HTTP PUT, the same Content-Type and the exact declared size, within one hour.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Retry safely: the same key and body return the original response for 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCreate"}}}},"responses":{"201":{"description":"Upload slot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"Unsupported format or invalid size","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Plan without API access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"File larger than 2 GB","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs":{"post":{"tags":["Jobs"],"operationId":"createJob","summary":"Create a job","description":"Starts cleaning a video. Credits are reserved immediately and returned if the job fails or is canceled.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Retry safely: the same key and body return the original response for 24 hours.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"201":{"description":"Job created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Plan without API access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Upload not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Upload already used, or idempotency conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Unsupported, unreadable, too long or too large video, or URL not allowed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"tags":["Jobs"],"operationId":"listJobs","summary":"List jobs","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"status","in":"query","schema":{"$ref":"#/components/schemas/JobStatus"}},{"name":"starting_after","in":"query","description":"Cursor: id of the last job of the previous page","schema":{"type":"string"}}],"responses":{"200":{"description":"Page of jobs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}}}}},"/v1/jobs/{id}":{"get":{"tags":["Jobs"],"operationId":"getJob","summary":"Retrieve a job","description":"Status, stage, progress and, once succeeded, a download URL valid for one hour.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"job_3kT9xQ2vLm8RfZp1Wq7a"}}],"responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/jobs/{id}/cancel":{"post":{"tags":["Jobs"],"operationId":"cancelJob","summary":"Cancel a job","description":"Stops a queued or running job and returns its credits.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","example":"job_3kT9xQ2vLm8RfZp1Wq7a"}}],"responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"jobEvent":{"post":{"summary":"Job event","description":"Sent to the workspace endpoint for job.succeeded, job.failed and job.canceled. Header Pixamake-Signature: t=<unix>,v1=<hex HMAC SHA-256 of \"<t>.<raw body>\" with the signing secret>.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"pxm_live_...","description":"API key from the dashboard (Growth and Scale plans)."}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id"],"properties":{"type":{"type":"string","example":"invalid_request_error"},"code":{"type":"string","example":"video_too_long"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string","example":"req_Fq8Kx2LmT9vN3pQa"}}}}},"Account":{"type":"object","properties":{"object":{"const":"account"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}}},"plan":{"oneOf":[{"type":"null"},{"type":"object","properties":{"id":{"enum":["starter","growth","scale"]},"name":{"type":"string"},"monthly_credits":{"type":"integer"}}}]},"subscription_status":{"type":"string","example":"active"},"current_period_end":{"type":["string","null"],"format":"date-time"},"cancel_at_period_end":{"type":"boolean"},"credits":{"type":"object","properties":{"plan":{"type":"integer"},"pack":{"type":"integer"},"total":{"type":"integer"}}},"minutes_available":{"type":"number"},"limits":{"type":"object","properties":{"concurrent_jobs":{"type":"integer"},"active_jobs":{"type":"integer"},"api_access":{"type":"boolean"},"webhooks":{"type":"boolean"},"retention_days":{"type":"integer"}}},"pricing":{"type":"object","properties":{"credits_per_minute":{"type":"integer","example":150},"minimum_credits_per_video":{"type":"integer","example":25}}}}},"Estimate":{"type":"object","properties":{"object":{"const":"estimate"},"duration_seconds":{"type":"number"},"credits":{"type":"integer","example":75},"label":{"type":"string","example":"0 min 30 s"},"plans":{"type":"array","items":{"type":"object","properties":{"plan":{"type":"string"},"videos_per_month":{"type":"integer"}}}}}},"UploadCreate":{"type":"object","required":["filename","content_type","size_bytes"],"properties":{"filename":{"type":"string","maxLength":200,"example":"ad.mp4"},"content_type":{"enum":["video/mp4","video/quicktime","video/x-m4v"]},"size_bytes":{"type":"integer","minimum":1,"maximum":2000000000,"example":4821331}}},"Upload":{"type":"object","properties":{"id":{"type":"string","example":"up_7Qm2rT9vXk3LpZ8aWn4c"},"object":{"const":"upload"},"upload_url":{"type":"string","format":"uri"},"method":{"const":"PUT"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expires_at":{"type":"string","format":"date-time"}}},"JobCreate":{"type":"object","description":"Exactly one of upload_id or video_url.","properties":{"upload_id":{"type":"string","example":"up_7Qm2rT9vXk3LpZ8aWn4c"},"video_url":{"type":"string","format":"uri","description":"Public http(s) URL that accepts range requests (MP4 or MOV, 2 GB max)"},"filename":{"type":"string","maxLength":200},"texts":{"type":"array","maxItems":500,"items":{"type":"string","maxLength":500},"description":"Exact on-screen texts to erase. Skips the automatic reading step."},"metadata":{"type":"object","maxProperties":20,"additionalProperties":{"type":"string","maxLength":500}}}},"JobStatus":{"enum":["queued","analyzing","processing","succeeded","failed","canceled"]},"Job":{"type":"object","properties":{"id":{"type":"string","example":"job_3kT9xQ2vLm8RfZp1Wq7a"},"object":{"const":"job"},"status":{"$ref":"#/components/schemas/JobStatus"},"stage":{"type":["string","null"],"enum":["queued","preparing","reading_text","downloading","masking","cleaning","verifying","assembling","finalizing","retrying",null]},"progress":{"type":"number","minimum":0,"maximum":1},"source":{"enum":["web","api","mcp"]},"input":{"type":"object","properties":{"filename":{"type":"string"},"duration_seconds":{"type":"number"},"width":{"type":["integer","null"]},"height":{"type":["integer","null"]},"size_bytes":{"type":["integer","null"]}}},"credits":{"type":"integer"},"credits_refunded":{"type":"boolean"},"result":{"oneOf":[{"type":"null"},{"type":"object","properties":{"url":{"type":"string","format":"uri"},"expires_at":{"type":"string","format":"date-time"},"size_bytes":{"type":["integer","null"]}}}]},"error":{"oneOf":[{"type":"null"},{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}}}]},"metadata":{"type":"object","additionalProperties":{"type":"string"}},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}}},"JobList":{"type":"object","properties":{"object":{"const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"]}}},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","example":"evt_9sKq2mT4nVb7Lx3Rp8Wc"},"object":{"const":"event"},"type":{"enum":["job.succeeded","job.failed","job.canceled","webhook.test"]},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","properties":{"object":{"$ref":"#/components/schemas/Job"}}}}}}}}