For developers
A model call isn't an ad.
A skill call is.
A skill is a pipeline you deploy once — it researches, scripts, renders, and cuts server-side, then hands back finished files. You write a typed manifest and a prompt; you call it from anywhere.
$10 free credit, no card, no subscription.
Build · ship · call
Write it once.
Call it anywhere.
A skill is a tiny skill.yaml manifest plus a SKILL.md prompt — or a Python function. Deploy it with the puras CLI and call it from any app with import puras — Python or TypeScript.
Call it from your stack
Two SDKs, one job.
Official clients for Python and JavaScript/TypeScript start the same server-side job and hand back the same typed result — run it in one await, fire-and-check-back, or stream every step live from the JS client.
Python — pip install puras
The full toolkit: the client, the in-skill runtime, and the deploy CLI in one package.
import puras
client = puras.Client() # PURAS_API_KEY from env
job = client.submit(
"acme/ugc-ads/ugc-ad",
{"product": product_url, "duration": 15},
)
# ...do other work while it runs...
job = client.wait(job["id"])
print(job["result"]["video"])TypeScript / JavaScript — npm install puras
Zero-dependency client for Node, React, and React Native / Expo — anywhere fetch runs.
import { Puras } from "puras";
// Publishable key — safe to ship in a web or mobile app
const puras = new Puras({ apiKey: "puras_pub_…" });
const job = await puras.submit("acme/ugc-ads/ugc-ad", {
product: photoUrl,
});
for await (const ev of puras.events(job.id)) {
console.log(ev.type, ev.payload); // feed your progress UI
}
const done = await puras.get(job.id);
console.log(done.result);MCP
Or just tell your coding agent.
puras lives where you already work — Claude Code, Cursor, VS Code, and any MCP-capable client. Connect once; OAuth runs in the browser on the first call, so there's no key to paste. Your agent can scaffold a skillpack, deploy it, run skills, and tail jobs through the same server.
claude mcp add --transport http puras https://mcp.puras.co/mcpAny MCP client works — point it at https://mcp.puras.co/mcp (HTTP transport).
What you get
The backend around the job.
One job, the whole pipeline
A skill runs server-side as a single long-running job — it researches, generates media, and assembles the deliverable. Your app sends one request and gets the result: async, sync (wait=true), or streamed over SSE.
Versioned deploys & rollback
Every puras deploy is an immutable version. Activating one is a rolling switch — in-flight jobs finish on the version they started on — and rolling back is activating the previous version.
Live logs
Tail a job while it runs: every step, tool call, and model call as it happens — from the dashboard, the CLI, or the SSE stream.
Secrets
Per-skillpack secrets are injected into your skill's environment at run time, so keys for the services your skill calls never live in the bundle.
An exact cost receipt, every run
Each job returns a line-item breakdown — which models ran, how many tokens, what each media call cost — billed to the cent from a prepaid balance.
Models pinned in skill.yaml
The text, image, video, and audio models a skill uses are listed and pinned in its manifest. You see exactly what runs and what it costs — and you can override per run.
Publishable keys for client apps
puras_pub_ keys are built to ship in a web or mobile bundle: they can only submit jobs and read the jobs they submitted — and can be fenced to a skill allowlist and a daily spend cap when you mint them.
A drive for the outputs
Every run's files land in your workspace drive under a per-run folder and are served by stable signed URLs — download them, or hand them straight to your app.
Ship your first skill
today.
$10 free credit, no card, no subscription.