# Pixelcut Product Photo API

> مصنوعات کی تصویر کا کمپوزیٹر: آئٹم کو الگ کرکے پس منظر، حاشیوں اور سائے کے ساتھ نئے کینوس پر رکھتا ہے

پروڈکٹ کی تصویر کو کیٹلاگ اسٹائل کی تصویر میں پروسیس کرتا ہے۔ آپ `image_size` پری سیٹس یا کسٹم ڈائمینشنز کے ساتھ کینوس سیٹ کر سکتے ہیں، ٹھوس، شفاف یا تصویر والا `background` منتخب کر سکتے ہیں، اور `margin` کو ایڈجسٹ کر سکتے ہیں۔ ایک جنریٹو یا ڈراپ `shadow` اور ایک اختیاری `watermark` اوورلے دستیاب ہیں۔ آؤٹ پٹ png یا jpeg ہے، اور jpeg کو شفاف بیک گراؤنڈ کے ساتھ استعمال نہیں کیا جا سکتا۔

- Model id: `pixelcut/product-photo`
- Made by: Pixelcut
- Category: Image Editing
- Output: image
- Price: $0.024 / image (cheapest run $0.024 (24 API credits))
- Run: `POST https://api.doitong.com/v1/run/pixelcut/product-photo`
- Quote: `POST https://api.doitong.com/v1/quote/pixelcut/product-photo`
- Docs page: https://doitong.com/ur/developers/models/pixelcut/product-photo

## Pricing

Price: **$0.024 / image**. Billed per generated image.

The full example input below costs $0.024 = 24 API credits (1 image × 24 API credits).

Prices are the upstream price in USD, paid from the API balance in API credits (1000 API credits = 1 USD). `POST https://api.doitong.com/v1/quote/pixelcut/product-photo` with the same JSON body returns the exact price for that input; the quote is exactly what a run charges. Invalid input is never charged and failed or canceled requests are refunded automatically.

## Input parameters

Send either the canonical name or the native field name (not both). Canonical names are the same across models.

| Parameter | Canonical name | Type | Required | Default | Allowed values / range | Description |
|---|---|---|---|---|---|---|
| `image_url` | `image` | string (image URL) | yes |  |  | پروسیسنگ کے لیے پروڈکٹ تصویر کا URL۔ |
| `image_size` |  | object {width, height} \| enum (string) \| null | no | `square_hd` | `square_hd`, `square`, `portrait_4_3`, `portrait_16_9`, `landscape_4_3`, `landscape_16_9` | آؤٹ پٹ canvas کے ابعاد، custom {width, height} یا preset کی صورت میں: square_hd، square، portrait_4_3، portrait_16_9، landscape_4_3، landscape_16_9۔ ڈیفالٹ square_hd (1024x1024) ہے۔ |
| `background` |  | object {mode, color, image_url, image_fit} | no |  |  | آؤٹ پٹ کا پس منظر: تصویر، شفافیت، یا ٹھوس رنگ جو ڈیفالٹ طور پر سفید ہوتا ہے۔ |
| `background.mode` |  | enum (string) | no | `Color` | `Transparent`, `Color`, `Image` | پس منظر کا موڈ: 'Color' `color` استعمال کرتا ہے اور ڈیفالٹ سفید ہے؛ 'Transparent' شفافیت پیدا کرتا ہے اور ہمیشہ PNG استعمال کرتا ہے؛ 'Image' نتیجے کو `image_url` پر composite کرتا ہے۔ |
| `background.color` |  | object {r, g, b} | no | `{"b":255,"g":255,"r":255}` |  | 'Color' موڈ کے لیے ٹھوس پس منظر fill، ڈیفالٹ طور پر سفید، R/G/B اجزا کے ذریعے 0 سے 255 تک متعین۔ |
| `background.color.r` |  | integer | yes |  | 0 – 255 |  |
| `background.color.g` |  | integer | yes |  | 0 – 255 |  |
| `background.color.b` |  | integer | yes |  | 0 – 255 |  |
| `background.image_url` |  | string (image URL) \| null | no |  |  | پس منظر کی تصویر کا URL؛ 'Image' موڈ میں لازمی۔ |
| `background.image_fit` |  | enum (string) | no | `Cover` | `Cover`, `Contain`, `Stretch` | پس منظر کی تصویر کو canvas پر فٹ کرنے کا طریقہ منتخب کریں۔ 'Contain' `color` پر letterboxing کے ساتھ fitted تصویر برقرار رکھتا ہے، جبکہ 'Stretch' فٹ کرنے کے لیے distortion استعمال کرتا ہے؛ 'Cover' crop کر کے canvas بھر دیتا ہے۔ |
| `margin` |  | object {all, left, right, top, bottom} | no |  |  | پروڈکٹ اور canvas کے کناروں کے درمیان جگہ۔ تمام margins مقرر کرنے کے لیے `all` استعمال کریں، انفرادی sides کے لیے اختیاری overrides کے ساتھ؛ ڈیفالٹ ہر side پر 20% ہے۔ |
| `margin.all` |  | string | no | `20%` |  | ہر side پر یکساں margin، canvas dimension کے '%' کے طور پر 0 سے 49% تک، یا 'px' میں کم از کم 0px کے ساتھ۔ |
| `margin.left` |  | string \| null | no |  |  | اس side پر `all` کی جگہ لینے والا left margin۔ '%' میں 0 سے 49%، یا 'px' میں 0px یا اس سے زیادہ قبول کرتا ہے۔ |
| `margin.right` |  | string \| null | no |  |  | اس side پر `all` کی جگہ لینے والا right margin۔ '%' میں 0 سے 49%، یا 'px' میں 0px یا اس سے زیادہ قبول کرتا ہے۔ |
| `margin.top` |  | string \| null | no |  |  | اس side پر `all` کی جگہ لینے والا top margin۔ '%' میں 0 سے 49%، یا 'px' میں 0px یا اس سے زیادہ قبول کرتا ہے۔ |
| `margin.bottom` |  | string \| null | no |  |  | اس side پر `all` کی جگہ لینے والا bottom margin۔ '%' میں 0 سے 49%، یا 'px' میں 0px یا اس سے زیادہ قبول کرتا ہے۔ |
| `shadow` |  | object {type, generative, drop} | no |  |  | سائے کی ترتیب: 'Generative' یا 'Drop' منتخب کریں اور اس کی settings تشکیل دیں۔ unset چھوڑنے سے کوئی سایہ لاگو نہیں ہوتا۔ |
| `shadow.type` |  | enum (string) \| null | no |  | `Generative`, `Drop` | اختیاری shadow style؛ unset ہونے پر کوئی سایہ نہیں۔ AI synthesis کے لیے 'Generative' یا deterministic drop shadow کے لیے 'Drop' منتخب کریں۔ |
| `shadow.generative` |  | object {opacity, light_source} | no |  |  | AI سے تیار کردہ سائے کی settings، 'Generative' type پر لاگو ہوتی ہیں۔ |
| `shadow.generative.opacity` |  | number | no | `0.2` | 0 – 1 | مکمل composite کیے گئے سائے کی opacity، 0 سے 1 تک۔ |
| `shadow.generative.light_source` |  | object {size, position} \| null | no |  |  | سایہ synthesis کے لیے واضح virtual light source؛ فراہم ہونے پر تصویر سے روشنی کی سمت کے خودکار تخمینے کی جگہ لے لیتا ہے۔ |
| `shadow.drop` |  | object {color, horizontal, vertical, blur, opacity} | no |  |  | Drop shadow کی settings، 'Drop' type پر لاگو ہوتی ہیں۔ |
| `shadow.drop.color` |  | object {r, g, b} | no | `{"b":0,"g":0,"r":0}` |  | سائے کا RGB رنگ؛ ڈیفالٹ سیاہ ہے۔ |
| `shadow.drop.horizontal` |  | number | no | `50` | -100 – 100 | افقی سائے کی منتقلی؛ 100 کی زیادہ سے زیادہ setting canvas width کے 10% کی نمائندگی کرتی ہے۔ قدریں -100 سے 100 تک، منفی settings بائیں اور مثبت settings دائیں منتقل کرتی ہیں۔ |
| `shadow.drop.vertical` |  | number | no | `8` | -100 – 100 | عمودی سائے کی منتقلی؛ 100 کی زیادہ سے زیادہ setting canvas height کے 10% کی نمائندگی کرتی ہے۔ قدریں -100 سے 100 تک، منفی settings اوپر اور مثبت settings نیچے منتقل کرتی ہیں۔ |
| `shadow.drop.blur` |  | number | no | `24` | 0 – 100 | سائے کی blur setting؛ 100 پر زیادہ سے زیادہ نرمی canvas کے مختصر dimension کے 5% کے radius کے برابر ہے۔ range 0 سے شروع ہوتی ہے، جس پر کنارے سخت رہتے ہیں۔ |
| `shadow.drop.opacity` |  | number | no | `0.25` | 0 – 1 | سائے کی opacity، 0 سے 1 تک۔ |
| `watermark` |  | object {image_url, remove_background, position, scale, opacity, margin} \| null | no |  |  | تصویر فراہم کر کے logo یا watermark overlay فعال کریں؛ اسے چھوڑنے سے آؤٹ پٹ غیر watermarked رہتا ہے، جیسا کہ ڈیفالٹ ہے۔ |
| `watermark.image_url` |  | string (image URL) \| null | no |  |  | لوگو یا watermark تصویر کا URL۔ خالی value آؤٹ پٹ کو watermark کے بغیر رکھتی ہے۔ |
| `watermark.remove_background` |  | boolean | no | `false` |  | پس منظر ہٹا کر watermark کا background صاف کرنا ہے یا نہیں، تاکہ overlay میں یہ شامل نہ ہو۔ |
| `watermark.position` |  | enum (string) | no | `bottom_right` | `top_left`, `top_right`, `bottom_left`, `bottom_right`, `center` | Watermark کی جگہ۔ |
| `watermark.scale` |  | number | no | `0.1` | 0.01 – 1 | Watermark کی چوڑائی، canvas width کے fraction کے طور پر۔ |
| `watermark.opacity` |  | number | no | `1` | 0 – 1 | Watermark کی opacity، 0 سے 1 تک۔ |
| `watermark.margin` |  | string | no | `3%` |  | Canvas edge سے اندر کی طرف فاصلہ، canvas کے '%' کے طور پر (0–49%) یا 'px' میں۔ |
| `output_format` |  | enum (string) \| null | no |  | `png`, `jpeg` | آؤٹ پٹ تصویر کی انکوڈنگ، PNG یا JPEG میں سے منتخب کی جاتی ہے؛ شفاف پس منظر کے لیے JPEG دستیاب نہیں ہے۔ انتخاب چھوڑ دینے سے ان پٹ کا فارمیٹ برقرار رہتا ہے۔ |

File parameters (`image`) take a public `https://` URL, a `data:` URI up to 10 MB, or the `file_url` of an upload from `POST /files`.

## Example input

Required parameters only:

```json
{
  "image": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

A fuller example:

```json
{
  "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
}
```

## Run it

Set `DOITONG_API_KEY` to a key from https://doitong.com/developers/dashboard#keys. `?wait=20` returns the finished request in the same call when it is ready within 20 seconds; otherwise poll `GET /requests/{id}` (it also accepts `?wait=`), or pass `webhook_url`.

### curl

```bash
# Run the model; wait up to 20 s for the finished result in the same call
curl -X POST "https://api.doitong.com/v1/run/pixelcut/product-photo?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }'

# Still "queued" or "running"? Poll with the id from the response:
curl "https://api.doitong.com/v1/requests/REQUEST_ID?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

### JavaScript

```javascript
const API = "https://api.doitong.com/v1";
const headers = {
  "Authorization": "Bearer " + process.env.DOITONG_API_KEY,
  "Content-Type": "application/json",
};

// Run the model; wait up to 20 s for the finished result in the same call
let res = await fetch(API + "/run/pixelcut/product-photo?wait=20", {
  method: "POST",
  headers,
  body: JSON.stringify({
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  }),
});
let request = await res.json();
if (!res.ok) throw new Error(request.error.code + ": " + request.error.message);

// Not finished yet: long-poll until it is
while (request.status === "queued" || request.status === "running") {
  res = await fetch(API + "/requests/" + request.id + "?wait=20", { headers });
  request = await res.json();
}
if (request.status !== "succeeded") throw new Error(JSON.stringify(request.error));
console.log(request.outputs.map((o) => o.url), request.cost.credits + " API credits ($" + request.cost.usd + ")");
```

### Python

```python
import os
import requests

API = "https://api.doitong.com/v1"
headers = {"Authorization": "Bearer " + os.environ["DOITONG_API_KEY"]}

payload = {
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg",
}

# Run the model; wait up to 20 s for the finished result in the same call
r = requests.post(API + "/run/pixelcut/product-photo", params={"wait": 20}, json=payload, headers=headers)
request = r.json()
if not r.ok:
    raise RuntimeError(request["error"]["code"] + ": " + request["error"]["message"])

# Not finished yet: long-poll until it is
while request["status"] in ("queued", "running"):
    request = requests.get(API + "/requests/" + request["id"], params={"wait": 20}, headers=headers).json()
if request["status"] != "succeeded":
    raise RuntimeError(request["error"])
print([o["url"] for o in request["outputs"]], request["cost"]["credits"], "API credits", "$" + request["cost"]["usd"])
```

### MCP

The MCP server at `https://api.doitong.com/v1/mcp` exposes the tools `search_models`, `get_model`, `quote`, `run`, `get_request`, `cancel_request`, `list_requests`, `create_upload` and `get_account`. A `run` call for this model:

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "run",
    "arguments": {
      "model_id": "pixelcut/product-photo",
      "input": {
        "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
      },
      "wait_seconds": 20
    }
  }
}
```

## Response

Every call returns a request object. `status` is one of `queued`, `running`, `succeeded`, `failed`, `canceled`. `outputs` lists the generated files with URLs on our storage (kept forever, or 7 days with `?storage=temporary`; `storage` says which); `output` is the model's own result object with the same URLs.

```json
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "pixelcut/product-photo",
  "status": "succeeded",
  "created_at": "2026-10-20T12:00:00Z",
  "started_at": "2026-10-20T12:00:02Z",
  "completed_at": "2026-10-20T12:00:09Z",
  "queue_position": null,
  "cost": {
    "credits": 24,
    "usd": "0.024",
    "charged": 24,
    "refunded": 0
  },
  "input": {
    "image_url": "https://content.doitong.com/images/showcase/v3/gen_fox_cartoon.jpg"
  },
  "output": {
    "image": {
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_name": "0-output.jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768
    }
  },
  "outputs": [
    {
      "type": "image",
      "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg",
      "file_size": 1843200,
      "width": 1024,
      "height": 768,
      "stored": true
    }
  ],
  "error": null,
  "metrics": {
    "inference_seconds": 6.8
  },
  "urls": {
    "self": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t",
    "cancel": "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel"
  }
}
```

### Output fields (`output`)

| Field | Type | Description |
|---|---|---|
| `image` | object {url, content_type, file_name, file_size, width, height} \| null | کیٹلاگ میں استعمال کے لیے تیار کردہ پروڈکٹ تصویر۔ |

## Related models

- [Pixelcut Looping Video](https://doitong.com/developers/models/pixelcut/looping-video.md) (`pixelcut/looping-video`): from $0.08 / second
- [Pixelcut Background Remover](https://doitong.com/developers/models/pixelcut/background-removal.md) (`pixelcut/background-removal`): $0.016 / image
- [Pixelcut Video Background Removal](https://doitong.com/developers/models/pixelcut/video-background-removal.md) (`pixelcut/video-background-removal`): $0.022 / 30 frames of input video
- [FLUX.1 Kontext \[pro\]](https://doitong.com/developers/models/flux-pro/kontext.md) (`flux-pro/kontext`): $0.04 / image
- [GPT Image 2.5 Edit](https://doitong.com/developers/models/openai/gpt-image-2.5/flare/edit.md) (`openai/gpt-image-2.5/flare/edit`): from $0.12 / image
- [Nano Banana 2 Edit](https://doitong.com/developers/models/nano-banana-2/edit.md) (`nano-banana-2/edit`): from $0.06 / image
- [Nano Banana Pro Edit](https://doitong.com/developers/models/nano-banana-pro/edit.md) (`nano-banana-pro/edit`): from $0.15 / image
- [Qwen Image 3 Edit](https://doitong.com/developers/models/alibaba/qwen-image-3/edit.md) (`alibaba/qwen-image-3/edit`): from $0.04 / image

## Links

- HTML page: https://doitong.com/developers/models/pixelcut/product-photo
- All models and guides for AI agents: https://doitong.com/developers/llms.txt
- OpenAPI 3.1 with this model's typed request body: https://doitong.com/developers/openapi.json?model=pixelcut/product-photo
- Errors: https://doitong.com/developers/docs/errors
- Model details as JSON: https://api.doitong.com/v1/models/pixelcut/product-photo
