Skip to content
Get your keyGet a key

Get started

Pictures, clips, sounds and products

Every place a call takes a file takes a link to it: a reference picture, a start frame, a product’s pictures, a presenter, a video to look like, a recording. Products are yours to add and change.

Add a product · freePOST/products
curl -X POST https://vessero.com/api/v1/products \
  -H "Authorization: Bearer $VESSERO_API_KEY" \
  -H "Idempotency-Key: 47f8f6f5-ea00-4fb1-925f-76aac956a0ec" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Glow serum",
    "description": "A vitamin C serum for dull skin, light enough to wear under make-up.",
    "price": 34,
    "currency": "USD",
    "benefits": [
      "Brighter skin in two weeks"
    ],
    "sellingPoints": [
      "15% vitamin C",
      "Fragrance free"
    ],
    "pictures": [
      "https://example.com/products/glow-serum.jpg"
    ]
  }'
Make an ad from itPOST/ugc-ads
curl -X POST https://vessero.com/api/v1/ugc-ads \
  -H "Authorization: Bearer $VESSERO_API_KEY" \
  -H "Idempotency-Key: 47f8f6f5-ea00-4fb1-925f-76aac956a0ec" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "@Presenter1 holds @Product1 up to the camera in @Image1 and says: “This serum has fifteen percent vitamin C, and it is light enough to wear under make-up.”",
    "videoModel": "seedance-2.5",
    "presenters": [
      {
        "kind": "pictures",
        "pictureKeys": [
          "https://example.com/people/zola.jpg"
        ],
        "whoIsIn": {
          "kind": "no-person"
        },
        "name": "Zola"
      }
    ],
    "productId": "5e4d3c2b-1a0f-4e9d-8c7b-6a5f4e3d2c1b",
    "pictureKeys": [
      "https://example.com/sets/sunny-kitchen.jpg"
    ],
    "aspect": "9:16",
    "captionStyle": "word-pop",
    "confirmCredits": 194,
    "webhookUrl": "https://example.com/hooks/vessero"
  }'

Wherever a field takes a file — referenceKeys, firstKey, pictureKeys, productPictureKeys, lookLike.key, a voice’s key, an edit’s source.key, a mask — send either a public https link to the file or a storage key. A link is brought into your Uploads before the call runs, held to the same types, sizes and content check as a file sent to POST /files, and the call goes on with its key.

  • Once an hour. The same link in the same slot is brought in once an hour, so a quote and the run that confirms it use one upload.
  • A link that cannot be brought in — one that needs a sign-in, a page instead of the file, a file of another kind — refuses the call with 400 refused, naming the field. Nothing is priced or charged.
  • A file on your disk goes to POST /files first, as a form; its key goes where the file does.
  • A clip’s or a recording’s length is read from the file when you leave its durationSec out.

Your products

POST /products adds a product by hand — its name, what it is, its price, benefits, selling points, audience and up to 8 pictures, by link or by key — and PATCH /products/{productId} changes one: words, price, pictures added or taken off, another made the main one. POST /products/import reads one from its shop page instead. A product’s id is the productId a UGC ad, the board and the Creative Director take, with its name, facts and pictures.

Everything an ad is made from

A UGC ad takes what the UGC Ads page takes: presenters (a cast member, or a character you bring as pictures), the product (productId, and more pictures of it), other pictures, a video to look like, and a voice for each presenter. Name each in the words by its tag — @Presenter1, @Product1, @Image1, @Video1 — as on the page.