> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getqr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Toplu QR oluşturma

> Tek seferde en fazla 100 QR kodu oluşturun ve bunları ZIP arşivi olarak indirin.

> [!NOTE]
>
> GetQR API'si beta aşamasındadır ve seçili çalışma alanlarında kullanılabilir. Ayrıntılar genel sürümden önce değişebilir.

Toplu oluşturma, bir ad ve URL listesini ortak tek bir tasarıma sahip website QR kodlarına dönüştürür. Arka planda çalışır: başlatın, ilerlemesini sorgulayın, ardından ZIP arşivini indirin.

| Yöntem | Yol | Açıklama |
| - | - | - |
| `GET` | `/api/v1/bulk-qr-creations` | [Geçerli toplu oluşturmayı alma](#geçerli-toplu-oluşturmayı-alma) |
| `POST` | `/api/v1/bulk-qr-creations` | [JSON'dan oluşturma](#json-dan-oluşturma) |
| `POST` | `/api/v1/bulk-qr-creations/csv` | [CSV dosyasından oluşturma](#csv-dosyasından-oluşturma) |
| `GET` | `/api/v1/bulk-qr-creations/{id}` | [Toplu oluşturmayı alma](#toplu-oluşturmayı-alma) |
| `DELETE` | `/api/v1/bulk-qr-creations/{id}` | [Toplu oluşturmayı iptal etme](#toplu-oluşturmayı-iptal-etme) |
| `GET` | `/api/v1/bulk-qr-creations/{id}/download` | [Arşivi indirme](#arşivi-indirme) |

## Nasıl çalışır

**1. Toplu oluşturmayı başlatın**

Satırlarınızı [JSON'dan oluşturma](#json-dan-oluşturma) veya [CSV dosyasından oluşturma](#csv-dosyasından-oluşturma) ile gönderin. API, toplu oluşturma ve onun `id` değeriyle birlikte `202` yanıtı verir.

**2. İlerlemesini sorgulayın**

`status` değeri `completed` veya `failed` olana kadar birkaç saniyede bir [Toplu oluşturmayı alma](#toplu-oluşturmayı-alma) uç noktasını çağırın.

**3. Arşivi indirin**

`status` değeri `completed` olduğunda, QR kodu görsellerinin ZIP dosyasını almak için [Arşivi indirme](#arşivi-indirme) uç noktasını çağırın.

* **Sınır.** Toplu oluşturma başına en fazla 100 satır.
* **Tek seferde bir tane.** Çalışma alanı başına yalnızca bir toplu oluşturma çalışır. Biri çalışırken başka birini başlatmak, çalışan toplu oluşturmayı döndürür.
* **Idempotency.** Her istek bir `idempotencyKey` gerektirir. Bir isteği aynı anahtar ve aynı gövdeyle tekrarlamak, önceden başlatılmış toplu oluşturmayı döndürür. Aynı anahtar farklı bir gövdeyle `422` döndürür.
* **Satırlar.** Her satırın bir `name` ve bir `url` değeri olmalıdır. Bkz. [Satırlar](#satırlar).
* **Plan.** Toplu oluşturma Single QR planında kullanılamaz: istek `403 exceeded_limit` döndürür.

## Satırlar

* **Ad.** QR kodunun başlığı olur. Baştaki ve sondaki boşluklar kırpılır ve 40 karaktere kısaltılır. Tekrarlanan adlara (büyük/küçük harf fark etmeksizin) bir numara eklenir: `Menu`, `Menu 2`, `Menu 3`.
* **URL.** Hedef olur. `example.com/menu` gibi gerçek bir alan adına sahip bir `http` veya `https` adresi olmalı ve boşluk içermemelidir. Şeması olmayan bir URL'ye `https://` eklenir.
* **Boş satırlar.** Ne adı ne de URL'si olan satırlar atlanır. Bunlardan yalnızca birini içeren satır reddedilir.

Her QR kodu, kısa bağlantı üzerinde çalışan bir `website` QR kodudur. Bkz. [QR türleri](https://docs.getqr.com/tr/api/guides/qr-types.md).

## Başlıklar

**Authorization** `string` *required*

`Bearer` ve ardından API anahtarınız. Bkz. [Kimlik doğrulama](https://docs.getqr.com/tr/api/authentication.md).

**Content-Type** `string`

[JSON'dan oluşturma](#json-dan-oluşturma) için `application/json`, [CSV dosyasından oluşturma](#csv-dosyasından-oluşturma) için `multipart/form-data`.

## Toplu oluşturma nesnesi

**id** `string`

Toplu oluşturmanın kimliği; örneğin `cm2k7x9qb0003ax8eb4f6gh2t`.

**status** `string`

`queued`, `processing`, `packaging` veya `completed`. Başarısız olan veya iptal edilen bir toplu oluşturma `rollingBack` üzerinden `failed` durumuna geçer.

**sourceFilename** `string`

Kaynak dosyanın adı.

**totalCount** `integer`

Satır sayısı.

**createdCount** `integer`

Şu ana kadar oluşturulan QR kodları.

**renderedCount** `integer`

Şu ana kadar oluşturulan QR kodu görselleri.

**percent** `integer`

Genel ilerleme, 0 ile 100 arası. Oluşturma en fazla 40'a, görsel oluşturma en fazla 90'a kadar sürer, paketleme 95'tir ve `completed` 100'dür.

**stalled** `boolean`

Çalışan bir toplu oluşturma 2 dakika boyunca ilerleme kaydetmediğinde `true`. Sorgulamaya devam edin: [Toplu oluşturmayı alma](#toplu-oluşturmayı-alma), takılan bir toplu oluşturmayı yeniden başlatır.

**error** `object | null`

`status` değeri `failed` olduğunda: `code` ve `message`. İptal edilen bir toplu oluşturmanın kodu `cancelled_by_user` olur. Başarısız bir toplu oluşturma geri alınır, bu nedenle QR kodlarının hiçbiri saklanmaz.

**downloadUrl** `string | null`

`status` değeri `completed` olduğunda [Arşivi indirme](#arşivi-indirme) yolu.

**createdAt** `string`

Başlangıç tarihi, ISO 8601.

**updatedAt** `string`

Son güncelleme tarihi, ISO 8601.

**completedAt** `string | null`

Tamamlanma tarihi, ISO 8601.

**failedAt** `string | null`

Başarısız olma tarihi, ISO 8601.

## Geçerli toplu oluşturmayı alma

`GET /api/v1/bulk-qr-creations`

Çalışma alanınızda hâlâ çalışan toplu oluşturmayı döndürür. Çalışan yoksa, kapatılana kadar en son tamamlanan toplu oluşturmayı (`completed` veya `failed`) döndürür: arşivini indirmek veya panelde kapatmak bunu sağlar. Aksi hâlde `null` döndürür. Yeniden başlatmanın ardından takibe devam etmek için kullanın.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "processing",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 18,
  "renderedCount": 12,
  "percent": 26,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:20.000Z",
  "completedAt": null,
  "failedAt": null
}
```

```json 200 (nothing to resume) theme={null}
null
```

## JSON'dan oluşturma

`POST /api/v1/bulk-qr-creations`

Bir satır listesinden toplu oluşturma başlatır. `202 Accepted` ile yanıt verir. Toplu oluşturma arka planda çalışır.

**rows** `object[]` *required*

Oluşturulacak QR kodları; en fazla 100. Her satır `{ "name": "...", "url": "..." }` biçimindedir ve başka alan almaz. Bkz. [Satırlar](#satırlar).

**design** `object` *required*

Her QR koduna uygulanan tasarım: `styles`, `frameOptions` ve `logoOptions`; hepsi isteğe bağlıdır. Varsayılan tasarım için `{}` gönderin. Diğer alanlar reddedilir. Bkz. [Özelleştirme](https://docs.getqr.com/tr/api/guides/customization.md).

**sourceFilename** `string` *required*

Panelde gösterilen ve arşiv için kullanılan ad; 1 ile 255 karakter arası.

**idempotencyKey** `string` *required*

Bu toplu oluşturma için kendi anahtarınız; 8 ile 100 karakter arası.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/bulk-qr-creations" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "rows": [
      { "name": "Menu", "url": "https://example.com/menu" },
      { "name": "Wine list", "url": "example.com/wine" }
    ],
    "design": { "styles": { "dotsOptions": { "type": "rounded" } } },
    "sourceFilename": "campaign-links.csv",
    "idempotencyKey": "campaign-2026-08-14"
  }'
```

```json 202 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "queued",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 2,
  "createdCount": 0,
  "renderedCount": 0,
  "percent": 0,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:00.000Z",
  "completedAt": null,
  "failedAt": null
}
```

## CSV dosyasından oluşturma

`POST /api/v1/bulk-qr-creations/csv`

[JSON'dan oluşturma](#json-dan-oluşturma) ile aynıdır, ancak satırları `multipart/form-data` olarak gönderilen bir CSV dosyası olarak alır. `202 Accepted` ile yanıt verir.

Dosya en fazla 1.000.000 baytlık bir `.csv` olmalıdır. Başlık satırı tam olarak `name,url` olmalı, ardından en fazla 100 veri satırı gelmelidir. Bkz. [CSV biçimi](https://docs.getqr.com/tr/bulk/csv-format.md).

**file** `file` *required*

CSV dosyası.

**design** `string` *required*

JSON olarak serileştirilmiş tasarım nesnesi; örneğin `{"styles":{"dotsOptions":{"type":"rounded"}}}`. Varsayılan tasarım için `{}` gönderin.

**idempotencyKey** `string` *required*

Bu toplu oluşturma için kendi anahtarınız; 8 ile 100 karakter arası.

**sourceFilename** `string`

Panelde gösterilen ve arşiv için kullanılan ad; en fazla 255 karakter. Varsayılanı yüklenen dosyanın adıdır.

```bash cURL theme={null}
curl -X POST "https://getqr.com/api/v1/bulk-qr-creations/csv" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  -F "file=@campaign-links.csv" \
  -F 'design={"styles":{"dotsOptions":{"type":"rounded"}}}' \
  -F "idempotencyKey=campaign-2026-08-14"
```

```csv campaign-links.csv theme={null}
name,url
Menu,https://example.com/menu
Wine list,example.com/wine
```

```json 202 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "queued",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 2,
  "createdCount": 0,
  "renderedCount": 0,
  "percent": 0,
  "stalled": false,
  "error": null,
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:00.000Z",
  "completedAt": null,
  "failedAt": null
}
```

## Toplu oluşturmayı alma

`GET /api/v1/bulk-qr-creations/{id}`

Bir toplu oluşturmanın durumunu ve ilerlemesini döndürür. `status` değeri `queued`, `processing` veya `packaging` olduğu sürece sorgulayın. Arşiv hazır olduğunda `downloadUrl` görünür.

**id** `string` *required*

Toplu oluşturmanın kimliği. Oluşturma veya geçerli toplu oluşturma yanıtından alın.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "completed",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 50,
  "renderedCount": 50,
  "percent": 100,
  "stalled": false,
  "error": null,
  "downloadUrl": "/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t/download",
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:02:10.000Z",
  "completedAt": "2026-08-14T08:02:10.000Z",
  "failedAt": null
}
```

## Toplu oluşturmayı iptal etme

`DELETE /api/v1/bulk-qr-creations/{id}`

Çalışan bir toplu oluşturmayı durdurur ve önceden oluşturduğu QR kodlarını siler. Geri alma işlemi istek sırasında çalışır; bu nedenle yanıtta normalde `status` değeri `failed`, `error.code` değeri `cancelled_by_user` olur. Zaten başarısız olmuş bir toplu oluşturmayı iptal etmek onu değiştirmeden döndürür.

> [!WARNING]
>
> Tamamlanmış bir toplu oluşturma iptal edilemez: istek `400` döndürür. Bunun yerine QR kodlarını [QR kodları](https://docs.getqr.com/tr/api/endpoints/qr-codes.md) uç noktalarıyla tek tek silin.

**id** `string` *required*

Toplu oluşturmanın kimliği.

```bash cURL theme={null}
curl -X DELETE "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t" \
  -H "Authorization: Bearer $GETQR_API_KEY"
```

```json 200 theme={null}
{
  "id": "cm2k7x9qb0003ax8eb4f6gh2t",
  "status": "failed",
  "sourceFilename": "campaign-links.csv",
  "totalCount": 50,
  "createdCount": 18,
  "renderedCount": 12,
  "percent": 26,
  "stalled": false,
  "error": {
    "code": "cancelled_by_user",
    "message": "Bulk QR creation was cancelled."
  },
  "downloadUrl": null,
  "createdAt": "2026-08-14T08:00:00.000Z",
  "updatedAt": "2026-08-14T08:00:40.000Z",
  "completedAt": null,
  "failedAt": "2026-08-14T08:00:40.000Z"
}
```

## Arşivi indirme

`GET /api/v1/bulk-qr-creations/{id}/download`

QR kodu başına bir adet 1024 px JPEG içeren, dosyaları satırlarına göre adlandırılmış bir ZIP arşivi döndürür: `001-Menu.jpg`, `002-Wine list.jpg` ve devamı. Arşiv `sourceFilename` değerine göre adlandırılır. `status` değeri `completed` olduğunda kullanılabilir. İndirme işlemi toplu oluşturmayı kapatır; böylece [Geçerli toplu oluşturmayı alma](#geçerli-toplu-oluşturmayı-alma) onu döndürmeyi bırakır.

**id** `string` *required*

Toplu oluşturmanın kimliği.

```bash cURL theme={null}
curl "https://getqr.com/api/v1/bulk-qr-creations/cm2k7x9qb0003ax8eb4f6gh2t/download" \
  -H "Authorization: Bearer $GETQR_API_KEY" \
  --output qr-codes.zip
```

```http 200 theme={null}
HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="campaign-links-qr-codes.zip"

<binary archive data>
```

## Sık karşılaşılan sorunlar

> [accordion] "contains an invalid HTTP(S) URL" ile 422
>
> Mesaj satırı belirtir. Her URL, `example.com/menu` gibi gerçek bir alan adına sahip bir `http` veya `https` adresi olmalıdır. Satırı düzeltin ve isteği yeniden gönderin.

> [accordion] 422 "CSV headers must be exactly: name,url."
>
> CSV'nin ilk satırı bu sırayla ve küçük harflerle, başka sütun olmadan `name,url` olmalıdır.

> [accordion] 422 "This idempotencyKey was already used with a different request body."
>
> Anahtarlar farklı bir toplu iş için yeniden kullanılamaz. Yeni bir `idempotencyKey` gönderin.

> [accordion] 409 "The bulk QR archive is not ready for download."
>
> Toplu oluşturma henüz tamamlanmadı. `status` değeri `completed` olana kadar sorgulamaya devam edin.

> [accordion] 400 "Cannot cancel a finished bulk QR creation."
>
> Toplu oluşturma zaten tamamlandı, bu nedenle geri alınamaz.

> [accordion] 403 exceeded\_limit
>
> Çalışma alanınız, toplu oluşturmayı içermeyen Single QR planında. Planı yükseltin.

> [accordion] Yeni bir toplu oluşturma yerine eski bir tanesi döndü
>
> Çalışma alanınızda başka bir toplu oluşturma hâlâ çalışıyor veya bir `idempotencyKey` değerini yeniden kullandınız. Bitmesini bekleyin veya yeni bir anahtar kullanın.

## Sırada ne var

> [card] [Özelleştirme](https://docs.getqr.com/tr/api/guides/customization.md)

> [card] [QR kodları](https://docs.getqr.com/tr/api/endpoints/qr-codes.md)

> [card] [Uygulamada toplu oluşturma](https://docs.getqr.com/tr/bulk/overview.md)

> [card] [CSV biçimi](https://docs.getqr.com/tr/bulk/csv-format.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.