Overview
The ProductPolish API lets you programmatically create SEO-optimised product texts and AI-generated product images. Ideal for e-commerce teams who want to fill their product pages automatically or integrate their own software.
Base URL
https://www.productpolish.ai/api/v1API access is exclusively included in the Business plan.
Authentication
All API requests are authenticated via a personal API key.
- 1
Generate API key
Open the API Access section in the dashboard and generate your personal key. The key is shown only once — store it securely.
- 2
Send header with every request
Authorization: Bearer pp_live_...
Key format
Your API key always starts with pp_live_ followed by a random string.
🔒 Never share your API key publicly. It grants full access to your account.
POST /api/v1/generate
Starts a new product text generation and returns a generationId. The actual generation runs asynchronously.
Request Headers
| Header | Value | Required |
|---|---|---|
Authorization | Bearer pp_live_... | Yes |
Content-Type | application/json | Yes |
Request Body (JSON)
| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Product title (max. 500 characters) |
description | string | Yes | Product description (max. 5,000 characters) |
language | string | No | Target language, e.g. "de", "en", "fr". Default: "de" |
imageUrl | string | No | URL of a product photo for image generation |
Response (200 OK)
{
"generationId": "550e8400-e29b-41d4-a716-446655440000"
}The generation runs asynchronously. Retrieve the status with GET /api/generation/{generationId}.
GET /api/generation/{id}
Retrieves the current status and result of a generation. The same Bearer token as for the POST is required.
Status values
| Status | Meaning |
|---|---|
pending | Generation still running – please wait briefly and poll again |
delivered | Done – all fields are populated |
Response fields (when status: "delivered")
{
"status": "delivered",
"seo_title": "SEO-optimised product title",
"meta_description": "Short meta description for search engines...",
"long_description_html": "<p>Detailed product text in HTML...</p>",
"bulletpoints": [
"Ergonomic backrest with lumbar support",
"Height-adjustable from 42 to 52 cm"
],
"tags": ["office chair", "ergonomic", "height-adjustable"],
"faq": [
{
"question": "Is the chair suitable for long working hours?",
"answer": "Yes, the lumbar support..."
}
],
"generated_images": [
"https://...",
"https://...",
"https://..."
]
}Asynchronous Flow
Generation takes 2–10 seconds depending on load. The recommended flow:
- 1.
POST /api/v1/generate→ you receive agenerationId - 2.Wait 3 seconds
- 3.Call
GET /api/generation/{id} - 4.If
status === "pending"→ back to step 2 - 5.If
status === "delivered"→ done ✓
POST /generate → { generationId }
↓
wait (3 sec)
↓
GET /generation/{id} → status: "pending" → wait again
↓
GET /generation/{id} → status: "delivered" → done ✓Recommendation: poll every 3 sec, trigger timeout after 60 sec (20 attempts).
Code Examples
# Step 1: Start generation
curl -X POST https://www.productpolish.ai/api/v1/generate \
-H "Authorization: Bearer pp_live_..." \
-H "Content-Type: application/json" \
-d '{"title":"Ergonomic Office Chair","description":"Height-adjustable, lumbar support","language":"en","imageUrl":"https://example.com/image.jpg"}'
# Step 2: Retrieve result (poll)
curl https://www.productpolish.ai/api/generation/GENERATION_ID \
-H "Authorization: Bearer pp_live_..."Error Codes
| HTTP Code | Meaning |
|---|---|
401 | No or invalid API key |
403 | No active subscription / plan without API access / monthly limit reached |
400 | Required fields missing or too long (title >500, description >5,000 characters) |
404 | Generation not found |
500 | Internal server error |
Plans & Limits
API access is exclusively included in the Business plan.
| Feature | Business Plan |
|---|---|
API access | ✓ Included |
Generations/month | Unlimited |
Rate Limit | No hard limits (fair use) |