---
title: Görsel yükleme
description: Ürün, kategori ve marka görsellerini REST endpoint'i ile yükleyin.
full: true
---

Görsel yükleme bir GraphQL işlemi değil, ayrı bir REST endpoint'idir. Aynı endpoint ile varyant, kategori ve marka görselleri eklenir. Her istekte `productImage`, `categoryImage` ve `brandImage` alanlarından yalnızca biri gönderilmelidir.

| Sürüm | Endpoint |
| --- | --- |
| v2 | `POST https://api.myikas.com/api/v2/admin/upload/image` |
| v1 | `POST https://api.myikas.com/api/v1/admin/product/upload/image` |

İstek `Content-Type: application/json` ve `Authorization: Bearer <access_token>` başlıklarıyla gönderilir.

## Ürün görseli yükle [#productImage]

<Tabs items={['cURL', 'Node.js', 'Python', 'Go']} groupId="admin-api-rest-language" persist>
<Tab value="cURL">

```bash title="Terminal"
curl -X POST 'https://api.myikas.com/api/v2/admin/upload/image' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $IKAS_ACCESS_TOKEN" \
  --data '{
    "productImage": {
      "productId": "<product_id>",
      "variantIds": ["<variant_id>"],
      "url": "https://ornek.com/gorsel.jpg",
      "order": 1,
      "isMain": true
    }
  }'
```

</Tab>
<Tab value="Node.js">

```js title="request.mjs"
const response = await fetch('https://api.myikas.com/api/v2/admin/upload/image', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.IKAS_ACCESS_TOKEN}`,
  },
  body: JSON.stringify({
    productImage: {
      productId: '<product_id>',
      variantIds: ['<variant_id>'],
      url: 'https://ornek.com/gorsel.jpg',
      order: 1,
      isMain: true,
    },
  }),
});

if (!response.ok) throw new Error(`Görsel yüklenemedi: ${response.status}`);
```

</Tab>
<Tab value="Python">

```python title="request.py"
import os

import requests

response = requests.post(
    "https://api.myikas.com/api/v2/admin/upload/image",
    json={
        "productImage": {
            "productId": "<product_id>",
            "variantIds": ["<variant_id>"],
            "url": "https://ornek.com/gorsel.jpg",
            "order": 1,
            "isMain": True,
        }
    },
    headers={"Authorization": f"Bearer {os.environ['IKAS_ACCESS_TOKEN']}"},
)
response.raise_for_status()
```

</Tab>
<Tab value="Go">

```go title="main.go"
package main

import (
	"bytes"
	"log"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{
		"productImage": {
			"productId": "<product_id>",
			"variantIds": ["<variant_id>"],
			"url": "https://ornek.com/gorsel.jpg",
			"order": 1,
			"isMain": true
		}
	}`)

	req, err := http.NewRequest(http.MethodPost, "https://api.myikas.com/api/v2/admin/upload/image", bytes.NewReader(body))
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Authorization", "Bearer "+os.Getenv("IKAS_ACCESS_TOKEN"))

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	if res.StatusCode != http.StatusOK {
		log.Fatalf("görsel yüklenemedi: %s", res.Status)
	}
}
```

</Tab>
</Tabs>

| Alan | Tip | Açıklama |
| --- | --- | --- |
| `productId` (v2'de zorunlu) | `String` | Görselin ekleneceği ürünün ID değeri. |
| `variantIds` (zorunlu) | `[String!]!` | Görselin ekleneceği varyantların ID listesi; en az 1, en fazla 50 ID. v2'de varyantlar `productId` ile verilen ürüne ait olmalıdır. Birden fazla ID gönderilirse görsel tüm varyantlara eklenir. |
| `order` (zorunlu) | `Int` | Görselin sırası. v2'de 0 veya daha büyük bir tam sayı olmalıdır. |
| `isMain` | `Boolean` | Görselin ana görsel olup olmadığı. Varsayılan `false`. |
| `url` | `String` | Görselin adresi. `url` gönderilirse `base64` gerekmez. |
| `base64` | `String` | Görselin base64 içeriği. `base64` gönderilirse `url` gerekmez. |

`url` ve `base64` alanlarından tam olarak biri gönderilmelidir; ikisi birden gönderilirse istek `400` döner. Bir varyant en fazla 10 görsel alabilir; 10 görseli olan varyantlara görsel eklenmez.

## Kategori görseli yükle [#categoryImage]

```json
{
  "categoryImage": {
    "categoryIds": ["<category_id>"],
    "url": "https://ornek.com/kategori.jpg"
  }
}
```

| Alan | Tip | Açıklama |
| --- | --- | --- |
| `categoryIds` (zorunlu) | `[String!]!` | Görselin ekleneceği kategorilerin ID listesi. |
| `url` | `String` | Görselin adresi. `url` gönderilirse `base64` gerekmez. |
| `base64` | `String` | Görselin base64 içeriği. `base64` gönderilirse `url` gerekmez. |

## Marka görseli yükle [#brandImage]

```json
{
  "brandImage": {
    "brandIds": ["<brand_id>"],
    "url": "https://ornek.com/marka.jpg"
  }
}
```

| Alan | Tip | Açıklama |
| --- | --- | --- |
| `brandIds` (zorunlu) | `[String!]!` | Görselin ekleneceği markaların ID listesi. |
| `url` | `String` | Görselin adresi. `url` gönderilirse `base64` gerekmez. |
| `base64` | `String` | Görselin base64 içeriği. `base64` gönderilirse `url` gerekmez. |

<Callout type="info" title="Yükleme adresi almak (v1)">
v1 endpoint'inde görsel ve video için bir yükleme adresi (URL) döndüren `getImageUploadUrl` ve `getVideoUploadUrl` sorguları da bulunur.
</Callout>


## Görsel yükleme adresi al [#getImageUploadUrl]

**`getImageUploadUrl`** (query, v1)

Belirtilen görsel için yükleme URL'si.

Yalnızca v1 endpoint'inde: `https://api.myikas.com/api/v1/admin/graphql`.

Parametreler:

| Alan | Tip | Açıklama |
| --- | --- | --- |
| `contentType` | `String` | Yüklenecek dosyanın içerik tipi. Bir görsel tipi olmalıdır; belirtilirse URL'ye imzalanarak eklenir. |
| `imageDir` | `String` | Belirtilen görselin dizin yolu. |
| `imageId` (zorunlu) | `String!` | Görselin benzersiz tanımlayıcısı. |

Dönen değer: `String!`

Örnek istek - Görsel yükleme adresi alma (`POST https://api.myikas.com/api/v1/admin/graphql`):

Görseli doğrudan depolama alanına yüklemek için imzalı bir adres üretir. `imageId` sizin oluşturduğunuz bir UUID v4 değeridir; dönen adrese dosyayı `PUT` isteğiyle, verdiğiniz `contentType` ile gönderirsiniz.

```graphql
query GetImageUploadUrl($imageId: String!, $contentType: String) {
  getImageUploadUrl(imageId: $imageId, contentType: $contentType)
}
```

```json
{
  "imageId": "48a6b098-69ae-498a-8d60-75d2f88cbbb0",
  "contentType": "image/jpeg"
}
```

Örnek yanıt (temsili):

```json
{
  "data": {
    "getImageUploadUrl": "https://ornek.myikas.com"
  }
}
```

## Video yükleme adresi al [#getVideoUploadUrl]

**`getVideoUploadUrl`** (query, v1)

Yalnızca v1 endpoint'inde: `https://api.myikas.com/api/v1/admin/graphql`.

Parametreler:

| Alan | Tip | Açıklama |
| --- | --- | --- |
| `videoId` (zorunlu) | `String!` | Videonun benzersiz tanımlayıcısı. |

Dönen değer: `GetVideoUploadURLResponse!`

Örnek istek - Video yükleme adresi alma (`POST https://api.myikas.com/api/v1/admin/graphql`):

Ürün videosunu yüklemek için adres ve form alanlarını döndürür. Video dosyası, dönen `fields` değerleriyle birlikte `url` adresine multipart form-data olarak gönderilir.

```graphql
query GetVideoUploadUrl($videoId: String!) {
  getVideoUploadUrl(videoId: $videoId) {
    url
    fields
  }
}
```

```json
{
  "videoId": "cc3e3add-409f-4ade-ad37-613a7cccd752"
}
```

Örnek yanıt (temsili):

```json
{
  "data": {
    "getVideoUploadUrl": {
      "url": "https://ornek.myikas.com",
      "fields": {}
    }
  }
}
```
