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, 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/
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
- Etsy Geliştirici Portalı’na gidin.
- Etsy hesabınızla oturum açın veya yeni hesap oluşturun.
- Uygulamalarınız’a tıklayın.
- 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,
.envdosyasında saklayın:
# .env örneği
ETSY_KEY_STRING="..."
ETSY_SHARED_SECRET="..."
ETSY_ACCESS_TOKEN="..."
ETSY_REFRESH_TOKEN="..."
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
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}`);
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');
}
});
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;
};
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();
};
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}`);
Beklenen yanıt örneği:
{
"shop_id": 12345678,
"shop_name": "ElYapımıDükkanım",
"title": "El Yapımı Takı ve Aksesuarlar",
...
}
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", ...}
]
}
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'
});
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;
};
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
});
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;
};
Bir Listelemeyi Silme
const deleteListing = async (listingId) => {
const response = await makeEtsyRequest(`/listings/${listingId}`, { method: 'DELETE' });
return response;
};
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;
};
Yanıt yapısı örneği:
{
"order_id": 1234567890,
"user_id": 98765432,
...
}
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
});
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;
}
}
}
};
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
- Geliştirici panosunda Uygulamanız’ı seçin
- Web Kancası Ekle’ye tıklayın
- HTTPS uç nokta URL’nizi girin
- 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')
);
}
En İyi Uygulamalar
- İmzaları doğrulayın (sahte web kancası önler)
- Hızlıca 200 OK döndürün (Etsy 5 saniyede tekrar dener)
- Asenkron işleyin (olayları kuyruğa alın)
- İdempotensi uygulayın (tekrarlanan çağrılara karşı)
- 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_idveclient_secretdoğ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'));
Sorun: Listeleme Oluşturma Doğrulama Hataları
Belirti: 400 Hatalı İstek
Kontrol Edin:
-
category_idgeçerli mi? (Kategori API’sinden alınmalı) -
pricedize 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;
};
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ı');
Gerçek Dünya Kullanım Durumları
Çok Kanallı Envanter Senkronizasyonu
Akış:
- Etsy web kancası sipariş oluşturma üzerinde tetiklenir
- Merkezi sistem envanteri azaltır
- Shopify ve Amazon API’leriyle miktarlar güncellenir
- 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)