DEV Community

Cover image for Etsy API Kullanımı: Kapsamlı Entegrasyon Rehberi (2026)
Tobias Hoffmann
Tobias Hoffmann

Posted on • Originally published at apidog.com

Etsy API Kullanımı: Kapsamlı Entegrasyon Rehberi (2026)

KISA BİLGİ

Etsy API, geliştiricilerin Etsy pazar yeriyle entegre, otomasyon odaklı uygulamalar geliştirmelerine olanak tanır. OAuth 2.0 kimlik doğrulaması, mağaza/listeleme/sipariş/envanter yönetimi için RESTful uç noktalar ve uygulama başına saniyede 10 çağrı limitleriyle çalışır. Bu rehberde, kimlik doğrulama kurulumundan temel uç noktaların kullanımına, webhook entegrasyonundan üretim dağıtım stratejilerine kadar uçtan uca bir entegrasyon sürecini bulacaksınız.

Apidog'u hemen deneyin

💡 Apidog, Etsy API entegrasyon testini hızlandırır: OAuth akışlarını doğrulayın, uç noktaları test edin, webhook yüklerini izleyin ve kimlik doğrulama sorunlarını tek bir çalışma alanında ayıklayın. API spesifikasyonlarını içe aktarın, yanıtları taklit edin ve test senaryolarını ekibinizle paylaşın.


Etsy API Nedir?

Etsy, geliştiricilere mağaza yönetimi, listeleme, sipariş işleme, müşteri ve işlem verilerine erişim gibi işlevler için RESTful API sunar.

Temel Özellikler

Özellik Açıklama
RESTful Tasarım JSON yanıtlarıyla standart HTTP yöntemleri
OAuth 2.0 Erişim belirteci yenileme ile güvenli kimlik doğrulama
Web Kancaları Sipariş ve listeleme olaylarında gerçek zamanlı bildirim
Hız Sınırlandırma Uygulama başına saniyede 10 istek (anlık izinlerle)
Sandbox Desteği Canlı veriler olmadan geliştirme/test ortamı

API Mimarisinin Genel Görünümü

Etsy API uç noktası yapısı:

https://openapi.etsy.com/v3/application/
Enter fullscreen mode Exit fullscreen mode

V3 sürümü, güncel OAuth 2.0 desteği ve sadeleştirilmiş yollar sunar.

API Sürümlerinin Karşılaştırması

Sürüm Durum Kimlik Doğrulama Kullanım Durumu
V3 Mevcut OAuth 2.0 Tüm yeni entegrasyonlar
V2 Kullanımdan Kaldırıldı OAuth 1.0a Sadece eski uygulamalar
V1 Kullanımdan Çekildi Yok Kullanmayın

Not: Entegrasyonunuz V2'deyse, 2026 sonuna kadar V3'e geçiş planınızı başlatın.


Başlarken: Kimlik Doğrulama Kurulumu

1. Etsy Geliştirici Hesabı Oluşturun

  1. Etsy Geliştirici Portalı’na gidin.
  2. Etsy hesabınızla oturum açın veya yeni hesap oluşturun.
  3. Uygulamalarınız’a tıklayın.
  4. Yeni bir uygulama oluştur seçeneğini kullanın.

2. Uygulamanızı Kaydedin

Formu doldurun:

  • Uygulama Adı: Net ve açıklayıcı seçin (kullanıcıya görünecek).
  • Açıklama: Uygulamanın işlevini belirtin.
  • Yönlendirme URI’si: OAuth sonrası dönüş adresi (HTTPS zorunlu).
  • Mod: Önce geliştirme (test) ile başlayın.

Kayıttan sonra şunları alın:

  • Anahtar Dizini (Key String)
  • Paylaşılan Gizli Anahtar (Shared Secret)

Güvenlik: Kimlik bilgilerini kodda değil, .env dosyasında saklayın:

# .env örneği
ETSY_KEY_STRING="..."
ETSY_SHARED_SECRET="..."
ETSY_ACCESS_TOKEN="..."
ETSY_REFRESH_TOKEN="..."
Enter fullscreen mode Exit fullscreen mode

3. OAuth 2.0 Akışını Anlayın

Etsy, OAuth 2.0 kullanır. Akış şeması:

1. Kullanıcı "Etsy ile Bağlan" butonuna tıklar
2. Uygulamanız Etsy yetkilendirme URL'sine yönlendirir
3. Kullanıcı giriş yapar ve izin verir
4. Etsy, yetkilendirme koduyla geri döner
5. Uygulamanız kodu erişim belirteciyle değiştirir
6. Erişim belirteciyle API'ye erişim yapılır
7. Belirteç süresi dolunca yenileme belirteciyle yenilenir
Enter fullscreen mode Exit fullscreen mode

4. OAuth Yetkilendirme URL'si Oluşturun

const generateAuthUrl = (clientId, redirectUri, state) => {
  const baseUrl = 'https://www.etsy.com/oauth/connect';
  const params = new URLSearchParams({
    client_id: clientId,
    redirect_uri: redirectUri,
    scope: 'listings_r listings_w orders_r orders_w shops_r',
    state: state,
    response_type: 'code'
  });
  return `${baseUrl}?${params.toString()}`;
};

const authUrl = generateAuthUrl(
  process.env.ETSY_KEY_STRING,
  'https://uygulamaniz.com/geri_donus',
  crypto.randomBytes(16).toString('hex')
);
console.log(`Kullanıcıyı şuraya yönlendir: ${authUrl}`);
Enter fullscreen mode Exit fullscreen mode

Gerekli Kapsamlar (Scopes)

Kapsam Açıklama Kullanım
listings_r Listelemeleri oku Ürünleri göster
listings_w Listelemeleri yaz Ürün oluştur/güncelle
orders_r Siparişleri oku Sipariş yönetimi
orders_w Siparişleri yaz Sipariş durumu güncelle
shops_r Mağaza bilgilerini oku Profil/analiz
transactions_r İşlemleri oku Finansal rapor
email Alıcı e-postasına eriş Sipariş iletişimi

Yalnızca ihtiyaç duyduğunuz izinleri isteyin.

5. Yetkilendirme Kodunu Erişim Belirteciyle Değiştirin

const exchangeCodeForToken = async (code, redirectUri) => {
  const response = await fetch('https://api.etsy.com/v3/public/oauth/token', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'authorization_code',
      client_id: process.env.ETSY_KEY_STRING,
      client_secret: process.env.ETSY_SHARED_SECRET,
      redirect_uri: redirectUri,
      code: code
    })
  });
  const data = await response.json();
  return {
    access_token: data.access_token,
    refresh_token: data.refresh_token,
    expires_in: data.expires_in,
    user_id: data.user_id,
    scope: data.scope
  };
};

// Callback örneği:
app.get('/geri_donus', async (req, res) => {
  const { code, state } = req.query;
  if (state !== req.session.oauthState) {
    return res.status(400).send('Geçersiz state parametresi');
  }
  try {
    const tokens = await exchangeCodeForToken(code, 'https://uygulamaniz.com/geri_donus');
    await db.users.update(req.session.userId, {
      etsy_access_token: tokens.access_token,
      etsy_refresh_token: tokens.refresh_token,
      etsy_token_expires: Date.now() + (tokens.expires_in * 1000),
      etsy_user_id: tokens.user_id
    });
    res.redirect('/kontrol_paneli');
  } catch (error) {
    console.error('Belirteç değişimi başarısız oldu:', error);
    res.status(500).send('Kimlik doğrulama başarısız oldu');
  }
});
Enter fullscreen mode Exit fullscreen mode

6. Belirteç Yenilemeyi Uygulayın

const refreshAccessToken = async (refreshToken) => {
  const response = await fetch('https://api.etsy.com/v3/public/oauth/token', {
    method: 'POST',
    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({
      grant_type: 'refresh_token',
      client_id: process.env.ETSY_KEY_STRING,
      client_secret: process.env.ETSY_SHARED_SECRET,
      refresh_token: refreshToken
    })
  });
  const data = await response.json();
  return {
    access_token: data.access_token,
    refresh_token: data.refresh_token,
    expires_in: data.expires_in
  };
};

const ensureValidToken = async (userId) => {
  const user = await db.users.findById(userId);
  if (user.etsy_token_expires < Date.now() + 300000) {
    const newTokens = await refreshAccessToken(user.etsy_refresh_token);
    await db.users.update(userId, {
      etsy_access_token: newTokens.access_token,
      etsy_refresh_token: newTokens.refresh_token,
      etsy_token_expires: Date.now() + (newTokens.expires_in * 1000)
    });
    return newTokens.access_token;
  }
  return user.etsy_access_token;
};
Enter fullscreen mode Exit fullscreen mode

7. Kimliği Doğrulanmış API Çağrısı

const makeEtsyRequest = async (endpoint, options = {}) => {
  const accessToken = await ensureValidToken(options.userId);
  const response = await fetch(`https://openapi.etsy.com/v3/application${endpoint}`, {
    ...options,
    headers: {
      'Authorization': `Bearer ${accessToken}`,
      'x-api-key': process.env.ETSY_KEY_STRING,
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      ...options.headers
    }
  });
  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Etsy API Hatası: ${error.message}`);
  }
  return response.json();
};
Enter fullscreen mode Exit fullscreen mode

Mağaza Yönetimi Uç Noktaları

Mağaza Bilgilerini Alma

const getShopInfo = async (shopId) => {
  const response = await makeEtsyRequest(`/shops/${shopId}`, { method: 'GET' });
  return response;
};

const shop = await getShopInfo(12345678);
console.log(`Mağaza: ${shop.title}`);
console.log(`Para Birimi: ${shop.currency_code}`);
console.log(`Listeleme sayısı: ${shop.num_listings_active}`);
Enter fullscreen mode Exit fullscreen mode

Beklenen yanıt örneği:

{
  "shop_id": 12345678,
  "shop_name": "ElYapımıDükkanım",
  "title": "El Yapımı Takı ve Aksesuarlar",
  ...
}
Enter fullscreen mode Exit fullscreen mode

Mağaza Bölümlerini Alma

const getShopSections = async (shopId) => {
  const response = await makeEtsyRequest(`/shops/${shopId}/sections`, { method: 'GET' });
  return response;
};

// Örnek yanıt:
{
  "count": 5,
  "results": [
    {"shop_section_id": 12345, "title": "Kolyeler", ...},
    {"shop_section_id": 12346, "title": "Küpe", ...}
  ]
}
Enter fullscreen mode Exit fullscreen mode

Listeleme Yönetimi

Yeni Bir Listeleme Oluşturma

const createListing = async (shopId, listingData) => {
  const payload = {
    title: listingData.title,
    description: listingData.description,
    price: listingData.price.toString(),
    quantity: listingData.quantity,
    sku: listingData.sku || [],
    tags: listingData.tags.slice(0, 13),
    category_id: listingData.categoryId,
    shop_section_id: listingData.sectionId,
    state: listingData.state || 'active',
    who_made: listingData.whoMade,
    when_made: listingData.whenMade,
    is_supply: listingData.isSupply,
    item_weight: listingData.weight || null,
    item_weight_unit: listingData.weightUnit || 'g',
    item_length: listingData.length || null,
    item_width: listingData.width || null,
    item_height: listingData.height || null,
    item_dimensions_unit: listingData.dimensionsUnit || 'mm',
    is_private: listingData.isPrivate || false,
    recipient: listingData.recipient || null,
    occasion: listingData.occasion || null,
    style: listingData.style || []
  };
  const response = await makeEtsyRequest(`/shops/${shopId}/listings`, {
    method: 'POST',
    body: JSON.stringify(payload)
  });
  return response;
};

// Kullanım:
const listing = await createListing(12345678, {
  title: 'Ay Fazı Kolye Gümüş',
  description: 'El yapımı gümüş ay fazı kolye...',
  price: 89.99,
  quantity: 15,
  sku: ['AY-KOLYE-001'],
  tags: ['ay kolye', 'gümüş', 'ay fazı', 'göksel takı'],
  categoryId: 10623,
  sectionId: 12345,
  state: 'active',
  whoMade: 'i_did',
  whenMade: 'made_to_order',
  isSupply: false,
  weight: 25,
  weightUnit: 'g'
});
Enter fullscreen mode Exit fullscreen mode

Listeleme Görsellerini Yükleme

Görseller, listeleme oluşturulduktan sonra yüklenir:

const uploadListingImage = async (listingId, imagePath, imagePosition = 1) => {
  const fs = require('fs');
  const imageBuffer = fs.readFileSync(imagePath);
  const base64Image = imageBuffer.toString('base64');
  const payload = {
    image: base64Image,
    listing_image_id: null,
    position: imagePosition,
    is_watermarked: false,
    alt_text: 'El yapımı gümüş ay fazı kolye'
  };
  const response = await makeEtsyRequest(`/listings/${listingId}/images`, {
    method: 'POST',
    body: JSON.stringify(payload)
  });
  return response;
};

const uploadListingImages = async (listingId, imagePaths) => {
  const results = [];
  for (let i = 0; i < imagePaths.length; i++) {
    const result = await uploadListingImage(listingId, imagePaths[i], i + 1);
    results.push(result);
  }
  return results;
};
Enter fullscreen mode Exit fullscreen mode

Listeleme Envanterini Güncelleme

const updateListingInventory = async (shopId, listingId, inventory) => {
  const payload = {
    products: inventory.products.map(product => ({
      sku: product.sku,
      quantity: product.quantity
    })),
    is_over_selling: inventory.isOverSelling || false,
    on_property: inventory.onProperty || []
  };
  const response = await makeEtsyRequest(
    `/shops/${shopId}/listings/${listingId}/inventory`, {
      method: 'PUT',
      body: JSON.stringify(payload)
    }
  );
  return response;
};

// Kullanım:
await updateListingInventory(12345678, 987654321, {
  products: [
    { sku: 'AY-KOLYE-001', quantity: 10 },
    { sku: 'AY-KOLYE-002', quantity: 5 }
  ],
  isOverSelling: false
});
Enter fullscreen mode Exit fullscreen mode

Listelemeleri Alma

const getListings = async (shopId, options = {}) => {
  const params = new URLSearchParams({
    limit: options.limit || 25,
    offset: options.offset || 0
  });
  if (options.state) params.append('state', options.state);
  const response = await makeEtsyRequest(
    `/shops/${shopId}/listings?${params.toString()}`,
    { method: 'GET' }
  );
  return response;
};

const getListing = async (listingId) => {
  const response = await makeEtsyRequest(`/listings/${listingId}`, { method: 'GET' });
  return response;
};
Enter fullscreen mode Exit fullscreen mode

Bir Listelemeyi Silme

const deleteListing = async (listingId) => {
  const response = await makeEtsyRequest(`/listings/${listingId}`, { method: 'DELETE' });
  return response;
};
Enter fullscreen mode Exit fullscreen mode

Sipariş Yönetimi

Siparişleri Alma

const getOrders = async (shopId, options = {}) => {
  const params = new URLSearchParams({
    limit: options.limit || 25,
    offset: options.offset || 0
  });
  if (options.status) params.append('status', options.status);
  if (options.minLastModified) params.append('min_last_modified', options.minLastModified);
  const response = await makeEtsyRequest(
    `/shops/${shopId}/orders?${params.toString()}`,
    { method: 'GET' }
  );
  return response;
};

const getOrder = async (shopId, orderId) => {
  const response = await makeEtsyRequest(`/shops/${shopId}/orders/${orderId}`, { method: 'GET' });
  return response;
};
Enter fullscreen mode Exit fullscreen mode

Yanıt yapısı örneği:

{
  "order_id": 1234567890,
  "user_id": 98765432,
  ...
}
Enter fullscreen mode Exit fullscreen mode

Sipariş Durumunu Güncelleme

const updateOrderStatus = async (shopId, orderId, trackingData) => {
  const payload = {
    carrier_id: trackingData.carrierId,
    tracking_code: trackingData.trackingCode,
    should_send_bcc_to_buyer: trackingData.notifyBuyer || true
  };
  const response = await makeEtsyRequest(
    `/shops/${shopId}/orders/${orderId}/shipping`, {
      method: 'POST',
      body: JSON.stringify(payload)
    }
  );
  return response;
};

// Kullanım:
await updateOrderStatus(12345678, 1234567890, {
  carrierId: 'ptt',
  trackingCode: '9400111899223456789012',
  notifyBuyer: true
});
Enter fullscreen mode Exit fullscreen mode

Yaygın Taşıyıcı Kimlikleri

Taşıyıcı Kimlik
USPS usps
FedEx fedex
UPS ups
DHL dhl_express
Kanada Postası canada_post
Royal Mail royal_mail
Avustralya Postası australia_post

Hız Sınırlandırma ve Kotalar

Hız Sınırlarını Anlamak

  • Standart Sınır: Saniyede 10 istek
  • Anlık İzin: Kısa süreyle 50 isteğe kadar/saniye
  • Saatlik Kota: 10.000 çağrı/saat

Aşım durumunda HTTP 429 yanıtı alırsınız.

Hız Sınırı İşlemesi: Üstel Geri Çekilme

const makeRateLimitedRequest = async (endpoint, options = {}, maxRetries = 3) => {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await makeEtsyRequest(endpoint, options);
      const remaining = response.headers.get('x-etsy-quota-remaining');
      const resetTime = response.headers.get('x-etsy-quota-reset');
      if (remaining < 100) {
        console.warn(`Kalan kota düşük: ${remaining}, ${resetTime} tarihinde sıfırlanır`);
      }
      return response;
    } catch (error) {
      if (error.message.includes('429') && attempt < maxRetries) {
        const delay = Math.pow(2, attempt) * 1000;
        console.log(`Hız limiti aşıldı. ${delay}ms sonra tekrar deniyor...`);
        await new Promise(resolve => setTimeout(resolve, delay));
      } else {
        throw error;
      }
    }
  }
};
Enter fullscreen mode Exit fullscreen mode

Hız Sınırı Başlıkları

Başlık Açıklama
x-etsy-quota-remaining Kalan saatlik çağrı
x-etsy-quota-reset Saatlik kotanın sıfırlandığı zaman
x-etsy-limit-remaining Kalan saniyelik çağrı
x-etsy-limit-reset Saniyelik limitin sıfırlandığı zaman

API yanıtlarındaki bu başlıkları izleyin ve loglayın.


Webhook Entegrasyonu

Web Kancası (Webhook) Kurulumu

  1. Geliştirici panosunda Uygulamanız’ı seçin
  2. Web Kancası Ekle’ye tıklayın
  3. HTTPS uç nokta URL’nizi girin
  4. Abone olunacak olayları seçin

Olay Türleri

Olay Tetikleyici Kullanım Durumu
v3/shops/{shop_id}/orders/create Yeni sipariş Onay/gönderim başlat
v3/shops/{shop_id}/orders/update Sipariş durumu Senkronizasyon
v3/shops/{shop_id}/listings/create Yeni listeleme Envanter güncelle
v3/shops/{shop_id}/listings/update Listeleme değişikliği Verileri senkronize
v3/shops/{shop_id}/listings/delete Listeleme silindi Harici sistemden sil

Web Kancası İşleyici

const express = require('express');
const crypto = require('crypto');
const app = express();

app.post('/webhooks/etsy', express.raw({ type: 'application/json' }), async (req, res) => {
  const signature = req.headers['x-etsy-signature'];
  const payload = req.body;
  const isValid = verifyWebhookSignature(payload, signature, process.env.ETSY_WEBHOOK_SECRET);
  if (!isValid) {
    console.error('Geçersiz web kancası imzası');
    return res.status(401).send('Yetkisiz');
  }
  const event = JSON.parse(payload.toString());
  switch (event.type) {
    case 'v3/shops/*/orders/create':
      await handleNewOrder(event.data); break;
    case 'v3/shops/*/orders/update':
      await handleOrderUpdate(event.data); break;
    case 'v3/shops/*/listings/create':
      await handleListingCreated(event.data); break;
    case 'v3/shops/*/listings/update':
      await handleListingUpdated(event.data); break;
    case 'v3/shops/*/listings/delete':
      await handleListingDeleted(event.data); break;
    default:
      console.log('İşlenmeyen olay türü:', event.type);
  }
  res.status(200).send('Tamam');
});

function verifyWebhookSignature(payload, signature, secret) {
  const expectedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expectedSignature, 'hex')
  );
}
Enter fullscreen mode Exit fullscreen mode

En İyi Uygulamalar

  1. İmzaları doğrulayın (sahte web kancası önler)
  2. Hızlıca 200 OK döndürün (Etsy 5 saniyede tekrar dener)
  3. Asenkron işleyin (olayları kuyruğa alın)
  4. İdempotensi uygulayın (tekrarlanan çağrılara karşı)
  5. Olay loglamasını unutmayın

Yaygın Sorun Giderme

Sorun: OAuth Belirteç Değişimi Başarısız

Belirti: 401/403 hatası.

Adımlar:

  • Yönlendirme URI’sini tam eşleştirin (https:// ve / dahil)
  • client_id ve client_secret doğru mu kontrol edin
  • Yetkilendirme kodunun süresinin dolmadığından emin olun (5dk)
  • Uygulamanın modunu kontrol edin (test ise sadece test hesapları)

Sorun: Hız Limiti Aşıldı

Belirti: HTTP 429

Çözüm:

  • Hız sınırlama ile istek kuyruklayın
  • Üstel geri çekilme uygulayın
  • İstekleri topluca yapın
  • Kota başlıklarını izleyin
class RateLimiter {
  constructor(requestsPerSecond = 9) {
    this.queue = [];
    this.interval = 1000 / requestsPerSecond;
    this.processing = false;
  }
  async add(requestFn) {
    return new Promise((resolve, reject) => {
      this.queue.push({ requestFn, resolve, reject });
      this.process();
    });
  }
  async process() {
    if (this.processing || this.queue.length === 0) return;
    this.processing = true;
    while (this.queue.length > 0) {
      const { requestFn, resolve, reject } = this.queue.shift();
      try {
        const result = await requestFn();
        resolve(result);
      } catch (error) {
        reject(error);
      }
      if (this.queue.length > 0) {
        await new Promise(r => setTimeout(r, this.interval));
      }
    }
    this.processing = false;
  }
}

// Kullanım
const etsyRateLimiter = new RateLimiter(9);
const result = await etsyRateLimiter.add(() => makeEtsyRequest('/shops/12345/listings'));
Enter fullscreen mode Exit fullscreen mode

Sorun: Listeleme Oluşturma Doğrulama Hataları

Belirti: 400 Hatalı İstek

Kontrol Edin:

  • category_id geçerli mi? (Kategori API’sinden alınmalı)
  • price dize mi?
  • En fazla 13 etiket kullanın
  • Zorunlu alanlar tam mı? (title, description, price, quantity, who_made, when_made)
const validateListing = (data) => {
  const errors = [];
  if (!data.title || data.title.length < 5) errors.push('Başlık en az 5 karakter olmalıdır');
  if (typeof data.price !== 'string') errors.push('Fiyat dize olmalıdır');
  if (data.tags && data.tags.length > 13) errors.push('Maksimum 13 etiket izin verilir');
  if (!['i_did', 'someone_else', 'collective'].includes(data.whoMade)) errors.push('Geçersiz who_made değeri');
  return errors;
};
Enter fullscreen mode Exit fullscreen mode

Sorun: Web Kancaları Gelmiyor

Kontrol Listesi:

  • Web kancası teslimat günlüklerini kontrol edin
  • 5 saniyede 200 OK dönüyor musunuz?
  • Uç noktayı manuel test edin (curl)
  • HTTPS ve geçerli SSL zorunlu
  • Etsy IP’leri firewall’da açık mı?
  • İmza doğrulama mantığı doğru mu?
  • Geliştirme/test araçları kullanın

Sorun: Görsel Yüklenemiyor

  • Görsel formatı: JPEG/PNG/GIF
  • Dosya boyutu: max 20MB
  • Base64 kodlaması doğru mu?
  • Görselleri sıralı yükleyin

Üretim Dağıtım Kontrol Listesi

  • [ ] Geliştirmeden üretim moduna geçin
  • [ ] Yönlendirme URI’lerini güncelleyin
  • [ ] Belirteç saklamayı güvenli uygulayın
  • [ ] Otomatik belirteç yenileme ekleyin
  • [ ] Hız sınırlama ve istek kuyruklama yapılandırın
  • [ ] Web kancası uç noktasını HTTPS ile ayarlayın
  • [ ] Hata loglaması ve izleme ekleyin
  • [ ] Kota kullanımı takibini başlatın
  • [ ] Runbook hazırlayın
  • [ ] Çoklu mağaza testi yapın
  • [ ] Kullanıcı OAuth akışını belgeleyin

İzleme ve Uyarı

const metrics = {
  apiCalls: { total: 0, successful: 0, failed: 0, rateLimited: 0 },
  quotaUsage: { current: 0, limit: 10000, resetTime: null },
  oauthTokens: { active: 0, expiring_soon: 0, refresh_failures: 0 },
  webhooks: { received: 0, processed: 0, failed: 0 }
};

const failureRate = metrics.apiCalls.failed / metrics.apiCalls.total;
if (failureRate > 0.05) sendAlert('Etsy API hata oranı %5 üzerinde');
if (metrics.quotaUsage.current < 500) sendAlert('Etsy API kotası 500 çağrıdan daha az kaldı');
Enter fullscreen mode Exit fullscreen mode

Gerçek Dünya Kullanım Durumları

Çok Kanallı Envanter Senkronizasyonu

Akış:

  1. Etsy web kancası sipariş oluşturma üzerinde tetiklenir
  2. Merkezi sistem envanteri azaltır
  3. Shopify ve Amazon API’leriyle miktarlar güncellenir
  4. Onay kaydedilir

Sonuç: Sıfır aşırı satış, haftada 12 saat tasarruf.

Otomatik Sipariş Karşılama

  • orders/create web kancası tetiklenir
  • Sipariş detayları üretim API’sine gönderilir
  • Takip numarası Etsy’ye güncellenir, müşteri bilgilendirilir

Analiz Kontrol Paneli

  • OAuth ile çoklu mağaza verileri toplanır
  • Gerçek zamanlı satış/trafik/dönüşüm metrikleri sunulur

Sonuç

  • Etsy API ile otomasyon ve çoklu kanal entegrasyonu mümkün.
  • OAuth 2.0 ile güvenli kimlik doğrulama ve otomatik belirteç yönetimi gereklidir.
  • Hız sınırlarını ve kotaları izleyin, kuyruklama ve yeniden deneme mekanizmasını uygulayın.
  • Web kancaları ile gerçek zamanlı sipariş ve envanter yönetimini kurun.
  • Apidog ile entegrasyon testlerini hızlandırın ve ekip işbirliğini artırın.

SSS Bölümü

Etsy API ne için kullanılır?

Etsy API, geliştiricilerin Etsy pazar yeriyle entegre uygulamalar oluşturmasına olanak tanır. Envanter yönetimi, otomatik sipariş karşılama, analiz panelleri, listeleme araçları ve CRM sistemleri gibi farklı kullanım alanları vardır.

Etsy API anahtarını nasıl alabilirim?

Etsy Geliştirici Portalı’nda hesap oluşturun, Uygulamalarınız’a gidin ve Yeni bir uygulama oluştur’a tıklayın. Anahtar Dizini ve Paylaşılan Gizli Anahtar’ı ortam değişkenlerinde saklayın.

Etsy API’si ücretsiz mi?

Evet. Hız limiti vardır: 10 istek/saniye ve 10.000 çağrı/saat. Daha yüksek limitler için Etsy’den onay gerekir.

Etsy API hangi kimlik doğrulamasını kullanır?

OAuth 2.0. Kullanıcılar Etsy yetkilendirme sayfasından izin verir, uygulamanız erişim ve yenileme belirteci alır.

Etsy API hız limitlerini nasıl yönetirim?

Saniyede 10 isteğin altında kalmak için istekleri kuyruklayın. Saatlik kullanımı x-etsy-quota-remaining ile izleyin. 429 yanıtında üstel geri çekilme kullanın.

Canlı mağaza olmadan Etsy API’sini test edebilir miyim?

Evet. Geliştirme modu uygulamaları test mağazalarına bağlanabilir.

Etsy API ile web kancaları nasıl çalışır?

Olaylar oluştuğunda (sipariş, listeleme) HTTPS uç noktanıza POST istekleri gönderir. Panodan yapılandırılır, imza doğrulaması uygulanır ve 5 saniyede 200 OK dönülmelidir.

Etsy OAuth belirtecinin süresi dolduğunda ne olur?

1 saat sonra süresi dolar. Yenileme belirteci ile yeni erişim belirteci alınmalıdır. Otomatik yenileme şarttır.

API ile listeleme görselleri yükleyebilir miyim?

Evet. Görseller, Base64 kodlu dizeler olarak ayrı bir API çağrısıyla yüklenir. Maksimum 20MB, JPEG/PNG/GIF biçimi olmalı.

Etsy API V2’den V3’e nasıl geçiş yaparım?

OAuth 1.0a yerine OAuth 2.0'a geçin, uç nokta yollarını /v2/'den /v3/application/'a güncelleyin. 2026 sonuna kadar geçişinizi tamamlayın.

Top comments (0)