Katalog & ID Keşfi

Ürün Oluşturma isteğinde kullanılan kategori ve özellik (attribute) ID'lerini döndüren salt-okunur uçlarıdır. Marka listesi için Markalar sayfasına bakın.

Gerekli yetki: product:read
ID'ler kalıcıdır; entegrasyonunuzda isimleri değil ID'leri saklayın. İsimler Milagron panelinde güncellenebilir, ID'ler değişmez.

1. Kategori Ağacı

GET /integration/product/sellers/{sellerId}/categories

Üç seviyeli kategori ağacını döndürür: ana kategori → alt kategori → yaprak kategori. Ürün her zaman bir yaprak kategoriye ("leaf": true) açılır.

Yanıt (200)

{
  "categories": [
    {
      "id": 7,
      "name": "Giyim",
      "leaf": false,
      "subCategories": [
        {
          "id": 37,
          "name": "Tişört",
          "leaf": false,
          "subCategories": [
            { "id": 12, "name": "Basic Tişört", "leaf": true,
              "taxRates": [8, 18], "variantless": false },
            { "id": 13, "name": "Polo Yaka", "leaf": true,
              "taxRates": [8], "variantless": false }
          ]
        }
      ]
    }
  ]
}

Ürün oluşturmada kullanımı

SeviyeAlanAçıklama
1. Ana kategorimainCategoryIdAğacın kökü.
2. Alt kategorisubCategoryIdSeçilen ana kategorinin altından.
3. Yaprak kategoricategoryId"leaf": true olan seviye. Ürünün özellikleri ve KDV oranları buna bağlıdır.
Yaprak kategori ID'leri üst seviyelerden ayrı bir ID uzayındadır; aynı sayı hem bir alt kategoriye hem bir yaprak kategoriye ait olabilir. ID'yi her zaman ait olduğu seviyeyle birlikte kullanın (subCategoryId ↔ 2. seviye, categoryId ↔ 3. seviye).
Yaprak kategoriye atanmış özellikler için: Kategori Özellikleri (GET .../categories/{categoryId}/attributes).
curl -u "API_KEY:API_SECRET" \
  -X GET "https://api.milagron.com/integration/product/sellers/123/categories"
<?php

$ch = curl_init('https://api.milagron.com/integration/product/sellers/123/categories');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'API_KEY:API_SECRET',
    CURLOPT_CUSTOMREQUEST  => 'GET',
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
const auth = Buffer.from('API_KEY:API_SECRET').toString('base64');

const res = await fetch('https://api.milagron.com/integration/product/sellers/123/categories', {
    method: 'GET',
    headers: {
        'Authorization': `Basic ${auth}`
    }
});

const data = await res.json();
import requests

response = requests.get(
    'https://api.milagron.com/integration/product/sellers/123/categories',
    auth=('API_KEY', 'API_SECRET')
)

response.raise_for_status()
data = response.json()
package main

import (
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://api.milagron.com/integration/product/sellers/123/categories", nil)
    req.SetBasicAuth("API_KEY", "API_SECRET")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
}
import java.net.URI;
import java.net.http.*;
import java.util.Base64;

HttpClient client = HttpClient.newHttpClient();

String auth = Base64.getEncoder()
    .encodeToString("API_KEY:API_SECRET".getBytes());

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.milagron.com/integration/product/sellers/123/categories"))
    .header("Authorization", "Basic " + auth)
    .GET()
    .build();

HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.milagron.com/integration/product/sellers/123/categories')

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth('API_KEY', 'API_SECRET')

response = http.request(request)
data = JSON.parse(response.body)
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();

var auth = Convert.ToBase64String(
    Encoding.UTF8.GetBytes("API_KEY:API_SECRET"));
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Basic", auth);

var response = await client.GetAsync("https://api.milagron.com/integration/product/sellers/123/categories");
var data = await response.Content.ReadAsStringAsync();

2. Yaprak Kategorilerin Düz Listesi

GET /integration/product/sellers/{sellerId}/product-types

Yaprak kategorileri ağaç yerine düz liste hâlinde döndürür. Alan adları geriye dönük uyumluluk için productTypes / subCategoryId olarak korunmuştur; dönen id değerleri ürün oluşturmadaki categoryId ile aynıdır.

Sorgu Parametreleri

ParametreTipAçıklama
subCategoryIdintegerOpsiyonel. Verilirse yalnızca o alt kategoriye ait yaprak kategoriler döner.

Yanıt (200)

{
  "productTypes": [
    { "id": 12, "name": "Tişört", "subCategoryId": 37, "taxRates": [8, 18] },
    { "id": 13, "name": "Polo Yaka", "subCategoryId": 37, "taxRates": [8] }
  ]
}
curl -u "API_KEY:API_SECRET" \
  -X GET "https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37"
<?php

$ch = curl_init('https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'API_KEY:API_SECRET',
    CURLOPT_CUSTOMREQUEST  => 'GET',
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
const auth = Buffer.from('API_KEY:API_SECRET').toString('base64');

const res = await fetch('https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37', {
    method: 'GET',
    headers: {
        'Authorization': `Basic ${auth}`
    }
});

const data = await res.json();
import requests

response = requests.get(
    'https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37',
    auth=('API_KEY', 'API_SECRET')
)

response.raise_for_status()
data = response.json()
package main

import (
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37", nil)
    req.SetBasicAuth("API_KEY", "API_SECRET")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
}
import java.net.URI;
import java.net.http.*;
import java.util.Base64;

HttpClient client = HttpClient.newHttpClient();

String auth = Base64.getEncoder()
    .encodeToString("API_KEY:API_SECRET".getBytes());

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37"))
    .header("Authorization", "Basic " + auth)
    .GET()
    .build();

HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37')

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth('API_KEY', 'API_SECRET')

response = http.request(request)
data = JSON.parse(response.body)
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();

var auth = Convert.ToBase64String(
    Encoding.UTF8.GetBytes("API_KEY:API_SECRET"));
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Basic", auth);

var response = await client.GetAsync("https://api.milagron.com/integration/product/sellers/123/product-types?subCategoryId=37");
var data = await response.Content.ReadAsStringAsync();

3. Özellikler (Attributes)

GET /integration/product/sellers/{sellerId}/attributes

Sistemdeki tüm özellikleri (Renk, Beden vb.) ve seçilebilir değerlerini döndürür. Genel katalog görünümüdür.

Ürün oluştururken bu listenin tamamı kullanılamaz. Bir üründe hangi özelliklerin kullanılabileceğini yaprak kategori belirler: Kategori Özellikleri (GET .../categories/{categoryId}/attributes) ucunu kullanın. Kategoriye atanmamış bir attributeId gönderilirse istek reddedilir.

Yanıt (200)

{
  "attributes": [
    {
      "id": 3,
      "name": "Renk",
      "required": true,
      "multiple": false,
      "values": [
        { "id": 15, "value": "Siyah" },
        { "id": 16, "value": "Beyaz" }
      ]
    },
    {
      "id": 7,
      "name": "Beden",
      "required": true,
      "multiple": false,
      "values": [
        { "id": 41, "value": "S" },
        { "id": 42, "value": "M" },
        { "id": 43, "value": "L" }
      ]
    }
  ]
}
curl -u "API_KEY:API_SECRET" \
  -X GET "https://api.milagron.com/integration/product/sellers/123/attributes"
<?php

$ch = curl_init('https://api.milagron.com/integration/product/sellers/123/attributes');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERPWD        => 'API_KEY:API_SECRET',
    CURLOPT_CUSTOMREQUEST  => 'GET',
]);

$response = curl_exec($ch);
$data = json_decode($response, true);
curl_close($ch);
const auth = Buffer.from('API_KEY:API_SECRET').toString('base64');

const res = await fetch('https://api.milagron.com/integration/product/sellers/123/attributes', {
    method: 'GET',
    headers: {
        'Authorization': `Basic ${auth}`
    }
});

const data = await res.json();
import requests

response = requests.get(
    'https://api.milagron.com/integration/product/sellers/123/attributes',
    auth=('API_KEY', 'API_SECRET')
)

response.raise_for_status()
data = response.json()
package main

import (
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://api.milagron.com/integration/product/sellers/123/attributes", nil)
    req.SetBasicAuth("API_KEY", "API_SECRET")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
}
import java.net.URI;
import java.net.http.*;
import java.util.Base64;

HttpClient client = HttpClient.newHttpClient();

String auth = Base64.getEncoder()
    .encodeToString("API_KEY:API_SECRET".getBytes());

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.milagron.com/integration/product/sellers/123/attributes"))
    .header("Authorization", "Basic " + auth)
    .GET()
    .build();

HttpResponse<String> response = client.send(request,
    HttpResponse.BodyHandlers.ofString());
require 'net/http'
require 'uri'
require 'json'

uri = URI('https://api.milagron.com/integration/product/sellers/123/attributes')

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri.request_uri)
request.basic_auth('API_KEY', 'API_SECRET')

response = http.request(request)
data = JSON.parse(response.body)
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;

var client = new HttpClient();

var auth = Convert.ToBase64String(
    Encoding.UTF8.GetBytes("API_KEY:API_SECRET"));
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Basic", auth);

var response = await client.GetAsync("https://api.milagron.com/integration/product/sellers/123/attributes");
var data = await response.Content.ReadAsStringAsync();

Notlar

  • Bu uçlar salt-okunurdur; stage ortamında dahi gerçek veri döner.
  • Yanıtlar gün içinde nadiren değişir; istemci tarafında makul süreyle (ör. 1 saat) önbelleklenebilir.
  • Önerilen akış: categories (yaprak kategoriyi seç) → categories/{categoryId}/attributesmarkalarürün oluşturma.
  • Marka listesi ayrı sayfada: Markalar (GET .../brands).