Face swap puts a reference face onto a catalog template. Two production rails. Don't mix them.
Credits (humans). Sign in at /login, buy a pack at /pricing, generate at /tools/face-swap-meme or POST /api/ai/face-swap. Verified email. 10 credits. Consent checkbox (consentAttested: true). Idempotency key on HTTP.
Agentic (MPP). MCP face_swap_meme with settlement=agentic returns paymentLink → POST /api/agentic/face-swap. First response is HTTP 402 (Machine Payments Protocol). Retry the same POST with a Shared Payment Token plus JSON consentAttested and the face image. $0.50 (face_swap_1). Stripe profile id is networkId when STRIPE_PROFILE_ID is set.
Local stdio is a third rail for developers: omit settlement and pass referenceImageBase64. That spends the process OPENROUTER_API_KEY. Never that for a customer agent.
What you will see (agent)
- Call
face_swap_memewith a real catalog slug andsettlement=agentic. - POST
paymentLink. Expect 402, not pixels. - Obtain a Shared Payment Token for the returned
networkId(Link CLI--testin sandbox). - Retry the POST with the token,
consentAttested: true, and the face in the JSON body. - We generate (primary
openai/gpt-image-2, fallbackx-ai/grok-imagine-image-quality) and returnimageBase64.
If you stop after 402, nothing was generated and nothing should have been charged.
Browsers opening the link (Accept: text/html) go to /pricing. Stripe ACS hooks (order approval, live SKU price, no shipping): POST /api/agentic/hooks.
What you will see (human)
- Email OTP at /login.
- Buy credits at /pricing.
- Open /tools/face-swap-meme, pick a template, upload a face, attest consent, generate.
Face/reference outputs cannot be published via POST /api/shares.
Catalog SKUs
pack_50: $5pack_150: $12pack_500: $35face_swap_1: $0.50 (agent per-swap)
The product feed sets disable_checkout=true on the Stripe catalog. Humans check out on-site. Agents use MPP.
What to explore next
- face_swap_meme for the MCP arguments
- Credits for packs
- Policies for terms, privacy, refunds