Feeef Cloud
AI API

Image landing pages

One tall product poster image, written and rendered by Cloud in two billed steps.

An image landing page is a single long image (a mobile ad poster, usually 9:32) that sells one product. It is not an HTML page. Cloud owns the whole product: templates, prompts and the two-step job.

  1. Copy deck — a text model observes the reference photos and product context and writes product_facts and landing_copy.
  2. Poster — an image model renders the copy as art-directed typography around the real product.

Both steps are ordinary tasks on your project; the generation reports their combined charge.

Templates

A template is visual direction (prompt) plus optional questions (fields). Platform templates are visible to every tenant; tenants can add their own.

GET    /v1/ai/image-landing-pages/templates
POST   /v1/ai/image-landing-pages/templates
PATCH  /v1/ai/image-landing-pages/templates/{id}
DELETE /v1/ai/image-landing-pages/templates/{id}
{
  "name": "Gold Ramadan",
  "description": "Matte gold, white marble, soft light.",
  "prompt": "Palette: matte gold on white marble. Headline: {{headline}}.",
  "preview_image_url": "https://…/preview.jpg",
  "fields": [
    { "key": "headline", "type": "text", "label": "Headline" },
    { "key": "mood", "type": "select", "label": "Mood", "options": ["Calm", "Festive", "Luxury"] }
  ]
}

Field types: text, textarea, select, multiselect, toggle, color, number. Every answer is optional. {{key}} in the prompt is replaced by the answer; answers without a placeholder are passed to the model as labelled notes. Platform templates are read-only for tenants (404 template_not_found on update).

Questions

POST /v1/ai/image-landing-pages/questions (requires Idempotency-Key) asks a text model for 3–7 optional questions that would improve the poster, in ar, fr or en, without repeating the template's own fields. It is billed like any chat completion.

{ "brief": "Ramadan offer, free delivery", "context": "Product: …", "template_id": "ilpt_platform_003", "locale": "ar" }

The response contains summary, template_fields, fields and billing.charged_micros.

Generate

POST /v1/ai/image-landing-pages/generations
Idempotency-Key: 7f0c…
{
  "brief": "عرض رمضان، توصيل مجاني",
  "context": "Product name, price 2900 DZD, …",
  "images": [{ "mime_type": "image/jpeg", "data": "<base64>", "label": "front" }],
  "template_id": "ilpt_platform_003",
  "answers": { "headline": "رمضان كريم", "mood": "Luxury" },
  "image_model": "google/gemini-nano-banana-2.1",
  "aspect_ratio": "9:32",
  "image_size": "2K",
  "sections_count": 6
}
  • Provide at least one of brief, images or context. Up to 8 images, 14 MiB decoded in total; the first image is the product master.
  • image_model defaults to the first visible rung of the image-landing-page collection; text_model to image-landing-page-text.
  • aspect_ratio snaps to the closest ratio the image model supports; image_size is applied only where the model offers size tiers.
  • style is ad-hoc visual direction for callers without a stored template.
  • The response is 202 with the generation. A replay with the same key returns the same generation; a different body with the same key is 409 idempotency_conflict.

Poll GET /v1/ai/image-landing-pages/generations/{id}:

statusMeaning
queuedAccepted
copyCopy deck task running
imagePoster task running
succeededimage.data holds the poster (base64); copy holds the deck
failederror.code explains why; completed steps stay billed

billing.charged_micros is the total of both steps once the generation is final. Store the poster in your own storage; Cloud keeps it only as part of the job record.

On this page