---
name: danosterman
description: Make website images (hero, section, link-preview card, icon, or a matched kit), product photos from a product shot, short motion clips (logo animations, loops, b-roll) and plain-English site audits, paid per call. Use when a user or task needs these for a website, shop listing or landing page, including the user themselves in a photo or clip (with their consent).
---

# Dan Osterman: products for AI agents

Paid tools on https://api.danosterman.com, made by Dan Osterman (https://danosterman.com). Docs for people: https://danosterman.com/agents. Failed calls cost nothing.

## Pick the way to call

1. **MCP tools already connected** (tool names like `make_site_images`): use them. They spend the user's prepaid credits; every result says what it charged and `credits_left`.
2. **An x402 wallet** (USDC on Base): `POST` the product's x402 route. The first answer is `402` with the price, and its body says whether your inputs would pass (`inputs.ok`), so fix them before paying. Your x402 client signs and repeats the request. The payment is collected only after the inputs pass every check, right before the work starts; if the work then fails it is refunded in full. Sending the same payment header again returns the same job and never charges twice. x402 clients cap each payment at $1 by default: raise `spendControls.maxAmountPerPayment` for anything over $1 (every motion clip).
3. **Neither**: tell the user how to connect, and stop. Claude.ai or ChatGPT: add a custom connector with `https://api.danosterman.com/connector/mcp`. Claude Code and other MCP clients: create a key at https://api.danosterman.com/account, then `claude mcp add --transport http danosterman https://api.danosterman.com/mcp --header "Authorization: Bearer dok_..."`. Credits come in $10, $25, $50 or $100 packs.

Before a call over $1, or when the user hasn't set a budget, say the price first (`estimate` gives it exactly).

## Products

### Website image: `make_site_images` / `POST /x402/site-images`

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).

- Price: $0.10 per image ($0.25 HD), 1–4 per call.
- Price options: `n` 1–4 (default 1); `size` standard ($0.10) or hd ($0.25) (default standard).
- 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.
- Example (x402): `POST https://api.danosterman.com/x402/site-images?n=2` with `{"kind":"hero","description":"family-owned bakery known for sourdough and morning buns","style":"warm","palette":"cream, deep green, brass"}`

### Website image kit: `make_site_image_kit` / `POST /x402/site-image-kit`

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.

- Price: $0.50 per kit ($1.50 HD).
- Price options: `size` standard ($0.50) or hd ($1.50) (default standard).
- 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.
- Example (x402): `POST https://api.danosterman.com/x402/site-image-kit` with `{"business":"Riverside Bakery","description":"family-owned bakery known for sourdough","sections":["bread","the shop","catering"]}`

### Product photo: `make_product_photos` / `POST /x402/product-photos`

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.

- Price: $0.12 per photo, 1–4 per call.
- Price options: `n` 1–4 ($0.12 each) (default 1).
- 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.
- Example (x402): `POST https://api.danosterman.com/x402/product-photos?n=2` with `{"image_url":"https://example.com/mug.jpg","scene":"lifestyle","prompt":"morning light on a kitchen counter"}`

### Site audit: `audit_site` / `POST /x402/site-audit`

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.

- Price: $0.50 per URL.
- Inputs: `url` (required): The page to audit (http or https).
- Example (x402): `POST https://api.danosterman.com/x402/site-audit` with `{"url":"https://example.com"}`

### Motion clip: `start_motion_clip` / `POST /x402/motion-clips`

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).

- Price: 5s: Kling $2 (720p) / $3 (1080p); Seedance $5 / $12. 10s is double.
- Price options: `model` kling (Kling 4.0) or seedance (Seedance 2.5, with sound) (default kling); `resolution` 720p or 1080p (default 720p); `duration` 5 or 10 (seconds; 10 is double) (default 5).
- 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).
- Example (x402): `POST https://api.danosterman.com/x402/motion-clips?model=kling&resolution=1080p` with `{"kind":"logo_animation","prompt":"the logo draws itself in ink, then settles","image_url":"https://example.com/logo.png"}`

## Hand-picked AI headshots: `order_headshots` (signed-in doors only)

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.

- `ai-headshots`: AI Headshots, $29. 15 photos, 2 looks, 1 revision.
- `ai-photo-shoot`: AI Photo Shoot, $59. 40 photos, 5 looks, 3 revisions.
- `ai-photo-video`: Photos + Video, $99. 40 photos, 5 looks, 3 revisions, 3 motion portraits and an intro video.

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.

- Only order when the user asks for photos of themselves. If the result says `needs_photo_consent`, give them the link in the message and wait; don't try to agree for them.
- Ask which looks and what the photos are for; leave `looks` out to let Dan choose.
- Pass photos you already have as `photos.you` (4–12, face clearly visible, different angles, no sunglasses). Otherwise hand the person `upload_url`.
- If they don’t look like you, I redo them free. Still not right? Your money back. Revisions: reply to the delivery email.
- Not on x402: a likeness needs a signed-in account behind it.

## Free tools (MCP)

- `list_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.

## Choosing well

- One image for one spot: `make_site_images`. A new site or a full refresh: `make_site_image_kit` (six matched images, one look, cheaper than six singles).
- Write `description` as one concrete sentence about the business (what it sells, where, what it's known for). Pass the brand colors in `palette` when you know them.
- `og_card` images carry a headline (`title`); keep it under 60 characters. Other kinds have no text.
- Product photos need a clean photo of the product alone. Lifestyle scenes sell; studio suits catalogs.
- Motion clips: Kling 4.0 at 720p is the default and fine for most web use. Choose Seedance 2.5 only when the user wants generated sound or the most polished motion; it costs 2.5x to 4x more. Use `kind: "loop"` for backgrounds, and pass the logo as `image_url` for a logo animation.
- Site audit: pass the page the user cares about (often the home page). Read `report.fixes` in priority order and offer to make the fixes.

## People in reference images

- Allowed on the signed-in doors (connector, MCP with a key) when you pass `people_consent: true`. Only set it after the user confirms the person is them, or gave permission, and is 18 or older. Never set it on your own.
- To feature someone in a website image, pass their photo as `photo_url`. For product photos and clips, the person can be in `image_url`.
- x402 calls refuse people (`needs_account`): x402 is anonymous, so there'd be no record of consent. Same price on the signed-in doors.
- Never: anyone who may be under 18, public figures, or sexual content.

## Motion clips take 1 to 3 minutes

- MCP: `start_motion_clip` waits about 40 seconds. If the result says `"running"`, call `get_job` with its `job_id` every 20 to 30 seconds until it's `"succeeded"`. Credits were reserved at the start and are returned if it fails.
- x402: the clip is paid when it starts, and the call answers `202` with a `job_id`. Poll `GET https://api.danosterman.com/x402/jobs/<job_id>` (free) every 20 to 30 seconds until `"status": "succeeded"`; the clip is in `outputs`. Don't start a new clip instead: that renders and charges it again. If the clip fails, the full price is refunded to the paying wallet.

## Results

Every call returns `job_id`, `status`, `price`, `charged`, and `outputs` (`[{ role, type, url }]`) or, for audits, `report`. Download or hand over the output links soon: they last 7 days (`get_job` gives fresh ones), and files are deleted after 30 days.

On `status: "failed"` read `error.code`: `invalid_input` (fix the inputs), `refused` (a minor, a public figure, sexual content, or a prompt the model won't make; don't retry unchanged), `needs_consent` (a person is in a reference image: ask the user whether it's them or they have permission and they're 18+, then retry with `people_consent: true`), `needs_account` (x402 call with a person in it: the message says how to do it on a signed-in door, same price), `insufficient_credits` (send the user to https://api.danosterman.com/account), `rate_limited` (wait a minute), `payment_failed` (x402: the payment didn't go through; sign a new one), `payment_unconfirmed` (x402: the payment service didn't answer; don't pay again, check the wallet, and if it was taken it is refunded), `timeout` or `failed` (try once more). None of these is charged, except on x402 after the payment was collected: then the result shows `refund` with the amount and wallet, and it is refunded in full.

## Rules

- 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.

## 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.
