Dan Osterman— AI Product Engineer & Creative Technologist

For AI agents

Products your agent can buy by itself. Failed calls cost nothing.

Images, product photos, site audits and motion clips, on call.

The same tools I use on client sites, sold per call to AI agents. Pick the way in that fits your agent; the products and prices are the same everywhere.

For the agentRead skill.md (an Agent Skill: when to use each product and which options to pick), or fetchapi.danosterman.com/ for the catalog as JSON.

Products and prices

Price options change the price; everything else is a plain input.

Six products. Prices up front.

Website image

$0.10 per image ($0.25 HD), 1–4 per call

A hero, section, background, link-preview (Open Graph) card or icon for a website, made for a business type, palette and style. Optional logo, and an optional photo of a person to feature (signed-in doors, with consent).

MCP tool
make_site_images
x402
POST /x402/site-images
Price options
n 1–4size standard ($0.10) or hd ($0.25)
Inputs
description required The business or page, in a sentence.kind hero, section, background, og_card or icon (default hero).style photographic, illustrated, minimal, bold, warm or editorial.palette Brand colors, e.g. "#1f3a5f navy, cream, brass".business, title Name and headline, drawn on og_card and icon only.aspect 16:9, 4:3, 1:1, 4:5 or 9:16 (sensible default per kind).logo_url Optional logo to work in: https or data: URL.photo_url Optional photo of a person to feature, e.g. the owner. Signed-in doors only, with people_consent.

Website image kit

$0.50 per kit ($1.50 HD)

A matched set of 6 images for a small-business site: a hero, three section images, a link-preview card with the title, and a 512px square icon.

MCP tool
make_site_image_kit
x402
POST /x402/site-image-kit
Price options
size standard ($0.50) or hd ($1.50)
Inputs
business required Business name.description required The business, in a sentence.sections Up to 3 topics for the section images.style, palette, title, logo_url As for a single image.

Product photo

$0.12 per photo, 1–4 per call

Puts a product from your photo into a styled scene (studio, lifestyle, flat lay, seasonal). A photo with a person wearing or holding it works on the signed-in doors, with consent.

MCP tool
make_product_photos
x402
POST /x402/product-photos
Price options
n 1–4 ($0.12 each)
Inputs
image_url required A photo of the product, or someone wearing or holding it (people: signed-in doors, with people_consent).scene studio, lifestyle, flat_lay, outdoor, seasonal or custom.prompt Details for the scene; required for custom.aspect 16:9, 4:3, 1:1 (default), 4:5 or 9:16.

Site audit

$0.50 per URL

Checks one URL for speed, search and AI-search readiness (titles, descriptions, structured data, robots, sitemap, llms.txt, link previews, alt text) and returns a prioritized fix list.

MCP tool
audit_site
x402
POST /x402/site-audit
Inputs
url required The page to audit (http or https).

Motion clip

5s: Kling $2 (720p) / $3 (1080p); Seedance $5 / $12. 10s is double

A 5 or 10 second clip: a logo animation, looping background or b-roll, from a prompt or a logo/product image. Kling 4.0 (default) or Seedance 2.5 (premium, with generated sound).

MCP tool
start_motion_clip
x402
POST /x402/motion-clips
Price options
model kling (Kling 4.0) or seedance (Seedance 2.5, with sound)resolution 720p or 1080pduration 5 or 10 (seconds; 10 is double)
Inputs
prompt required What happens in the clip.kind logo_animation, loop (seamless) or broll (default).image_url Optional first frame: a logo, product, place or person (people: signed-in doors, with people_consent).aspect 16:9, 9:16 or 1:1 (text-to-video only).

Hand-picked AI headshots

AI Headshots $29 · AI Photo Shoot $59 · Photos + Video $99

Professional AI headshots of the user from 4–12 of their own photos, made and picked by hand by Dan, back within 24 hours (12 with rush). The same product as danosterman.com/photos, paid from credits.

MCP tool
order_headshots Connector and API-key doors only. Not on x402, because a likeness needs a signed-in account behind it.
Plans
ai-headshots AI Headshots, $29: 15 photos, 2 looks, 1 revisionai-photo-shoot AI Photo Shoot, $59: 40 photos, 5 looks, 3 revisionsai-photo-video Photos + Video, $99: 40 photos, 5 looks, 3 revisions, 3 motion portraits and an intro video
How it works
1. The person agrees once on their account page that the photos they send are of them and that they are 18 or older. An agent can’t do this for them.2. The agent calls order_headshots with a plan, looks and notes, and the photos as links if it has them. Otherwise it gets an upload link to hand the person.3. Credits are taken when the photos are in, and the 24 hours start. get_job shows the due time.4. The finished photos come back through get_job and by email. If Dan can’t deliver, he cancels and the credits come back.If they don’t look like you, I redo them free. Still not right? Your money back.

Free toolslist_products Products, prices and your credits. estimate The exact price of a call with given options, before making it. get_job Status and results of a job; finishes a motion clip once it is ready. account_usage Credits left and the last 10 jobs.

Every result
{
  "job_id": "job_...",
  "product": "site_image",
  "status": "succeeded",          // or "running" (video) or "failed"
  "label": "2 site images",
  "price": "$0.20",
  "charged": "$0.20",             // credits: "$0" when it failed. x402: what was paid
  "payment_tx": null,             // x402: the Base transaction that paid for it
  "refund": null,                 // x402: { amount, to, status } if a paid call failed
  "outputs": [{ "role": "hero", "type": "image", "url": "https://api.danosterman.com/o/..." }],
  "report": null,                 // the site audit's findings
  "error": null,                  // { "code", "message" } when it failed
  "check_again": null             // where to fetch a clip that is still running
}

Connect

Sign in once, buy credits, and every product is a tool your assistant can call.

Set it up in a minute.

  1. Claude.ai, Claude Desktop or ChatGPT

    Add a custom connector with this URL. You'll sign in with your email (no password) and approve the connection; then buy credits on your account page.

    https://api.danosterman.com/connector/mcp

    Claude: Settings → Connectors → Add custom connector. ChatGPT: Settings → Apps → add a custom connector (developer mode).

  2. Claude Code

    Sign in at api.danosterman.com/account, create an API key and buy credits. Then:

    claude mcp add --transport http danosterman https://api.danosterman.com/mcp \
      --header "Authorization: Bearer dok_..."
  3. Cursor, Windsurf and other MCP clients

    Any client that speaks MCP over HTTP with a header:

    {
      "mcpServers": {
        "danosterman": {
          "url": "https://api.danosterman.com/mcp",
          "headers": {
            "Authorization": "Bearer dok_..."
          }
        }
      }
    }
  4. The skill

    Teaches your agent when each product fits and which options to pick. For Claude Code:

    mkdir -p ~/.claude/skills/danosterman
    curl -s https://danosterman.com/skill.md -o ~/.claude/skills/danosterman/SKILL.md

Pay per call · x402

No account, no key: USDC on Base, collected only once your inputs pass every check.

Pay with a wallet, call by call.

How it works

  1. POST https://api.danosterman.com/x402/<product> with the inputs as JSON. Price options go in the query string (?n=2&size=hd).
  2. Without payment you get 402 Payment Required with the exact price, and the body says whether your inputs would pass (inputs.ok), so you can fix them before paying.
  3. Your x402 client signs a USDC payment and sends the request again.
  4. The inputs are checked, then the payment is collected, then the product runs. A refused or invalid input is never charged; if the work fails after payment, the full amount goes back to your wallet.
  5. Sending the same payment again returns the same job. It is never charged twice.
curl -i -X POST "https://api.danosterman.com/x402/site-audit" \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com"}'
# 402 Payment Required: the price, network (Base) and pay-to
# address are in the PAYMENT-REQUIRED header

With @x402/fetch

import { wrapFetchWithPaymentFromConfig } from '@x402/fetch';
import { ExactEvmScheme } from '@x402/evm';
import { privateKeyToAccount } from 'viem/accounts';

const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: 'eip155:8453', client: new ExactEvmScheme(privateKeyToAccount(process.env.WALLET_KEY)) }],
  // x402 clients refuse payments over $1 by default; clips cost more.
  spendControls: { maxAmountPerPayment: '$25' },
});

const res = await pay('https://api.danosterman.com/x402/site-images?n=2', {
  method: 'POST',
  headers: { 'content-type': 'application/json' },
  body: JSON.stringify({"kind":"hero","description":"family-owned bakery known for sourdough and morning buns","style":"warm","palette":"cream, deep green, brass"}),
});
const job = await res.json(); // job.outputs[].url
Motion clips

Clips take one to three minutes. The clip is paid when it starts and the call answers 202 with a job_id; check the job for free until it's done, and the clip is in outputs. If it fails, the full price is refunded. x402 clients refuse payments over $1 by default, so raise maxAmountPerPayment as above.

POST https://api.danosterman.com/x402/motion-clips?model=seedance   ->  202, job_id, paid $5
GET  https://api.danosterman.com/x402/jobs/<job_id>             ->  "running" ... "succeeded" (free)
                                                     the clip is in outputs

DiscoveryEach route describes its inputs and output in the 402 response (the Bazaar discovery extension), so x402 directories and agents can find and call them without these docs. https://api.danosterman.com/x402 lists every product, price and input schema, and/.well-known/x402 lists the paid routes.

Rules and fit

What it's good for, what it isn't, and the limits.

Good to know.

Best fit

  • An agent building or refreshing a small-business website that needs a hero, section images, a link-preview card and an icon in one go.
  • Product shots for a shop listing, from one plain photo of the product.
  • A quick, plain-English check of a page before launch: speed, search, link previews and AI-search readiness.
  • A short logo animation, looping background or b-roll for a landing page or social post.
  • The owner in their own shop for a hero image, or the user wearing the product: on the signed-in doors, with their consent.

Poor fit

  • Someone else’s likeness without their permission, anyone under 18, or public figures (all refused).
  • A full professional headshot set: danosterman.com/photos does that, with every photo picked by hand.
  • Full brand identity, logo design or a whole website: those are people work. See danosterman.com/services.
  • Clips longer than 10 seconds, or exact frame-by-frame control.
  • Audits of pages behind a login.
Limits
  • Failed calls cost nothing. Credits are set aside when a job starts and given back if it fails. x402 collects the payment only after the inputs pass every check (a refusal or a bad input is never charged), and a paid call that then fails is refunded in full to the paying wallet.
  • People: a reference image with a person (you in your shop, someone wearing the product, a first frame) works on the signed-in doors (the connector or MCP with an API key) when the caller sets people_consent: true, meaning the person is them, or agreed, and is 18 or older. Same price on every door. x402 is anonymous, so it refuses people and says how to do it on a signed-in door instead. Never allowed: anyone who may be under 18, public figures, or sexual content.
  • Every reference image is checked before anything is made; a refused image costs nothing.
  • Output links last 7 days (get_job, or GET /x402/jobs/<job_id>, gives fresh ones). Files are deleted after 30 days.
  • Up to 60 paid calls a minute per API key, account or paying wallet.
  • The site audit only fetches public web addresses, up to 2 MB, within 20 seconds.
  • Credits come in $10, $25, $50 or $100 packs, paid with Stripe, and never expire.

Want this work done by a person instead? See services