Geliştiriciler
REST API
Konuşmaları, kişileri ve olayları kendi sistemlerinizden okuyun ve güncelleyin.
REST API, kendi sistemlerinizin çalışma alanınızla çalışmasını sağlar: kişileri bir CRM ile eşitleyin, mağazanızdan olay gönderin, müşterilere başka bir araçtan cevap verin ya da konuşmaları otomatik kapatın.
- Temel adres:
https://app.shopxare.com/api/v1 - Biçim: JSON gönderilir, JSON döner. Zamanlar UTC, ISO 8601.
- Makine okunur referans:
/api/v1/openapi.json(OpenAPI 3.1; Postman, Insomnia ya da bir kod üreticisine aktarabilirsiniz).
Token'lar
Token'ı Ayarlar → API bölümünde oluşturun (sahipler ve yöneticiler ya da rolünde geliştirici izni olan herkes). Şifrenizi onaylar, bir ad, yetkiler ve geçerlilik süresi seçersiniz; token yalnızca bir kez gösterilir — o anda kopyalayın, biz sadece özetini (hash) saklarız.
Her istekte gönderin:
curl https://app.shopxare.com/api/v1/me \
-H "Authorization: Bearer sxa_…"
Token, onu oluşturan ekip arkadaşı adına çalışır. O kişinin rolünün izin verdiğinden fazlasını asla yapamaz; kişi çalışma alanından ayrılır ya da devre dışı bırakılırsa token çalışmayı bırakır. Token'ı aynı yerden istediğiniz an iptal edebilirsiniz.
| Yetki | İzin verdiği |
|---|---|
conversations:read |
konuşmaları listeleme, mesajları okuma |
conversations:write |
cevaplama, not ekleme, kapatma, erteleme, atama, öncelik, etiket |
contacts:read |
kişileri listeleme ve bulma, olaylarını okuma |
contacts:write |
kişi oluşturma, güncelleme, silme, olay kaydetme |
workspace:read |
ekip arkadaşlarını, ekipleri ve etiketleri listeleme |
Uç noktalar
| Metot | Yol | Yetki |
|---|---|---|
| GET | /me |
herhangi biri |
| GET | /conversations |
conversations:read |
| GET | /conversations/{id} |
conversations:read |
| PATCH | /conversations/{id} |
conversations:write |
| GET | /conversations/{id}/messages |
conversations:read |
| POST | /conversations/{id}/messages |
conversations:write |
| POST | /conversations/{id}/tags |
conversations:write |
| GET, POST | /contacts |
contacts:read / contacts:write |
| GET, PATCH, DELETE | /contacts/{id} |
contacts:read / contacts:write |
| GET, POST | /contacts/{id}/events |
contacts:read / contacts:write |
| GET | /teammates, /teams, /tags |
workspace:read |
Müşteriye cevap verme
curl -X POST https://app.shopxare.com/api/v1/conversations/01K7…/messages \
-H "Authorization: Bearer sxa_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: siparis-1042-kargoda" \
-d '{"body": "Siparişiniz kargoya verildi 📦"}'
Cevap müşteriye konuşmanın kanalından — Messenger, e-posta ya da Telegram — gelen kutusundan yazılmış gibi ulaşır. İç not için "type": "note" kullanın. Aynı Idempotency-Key ile tekrarlanan istek ikinci kez göndermez, ilk mesajı döner (201 yerine 200).
Kapatma veya atama
curl -X PATCH https://app.shopxare.com/api/v1/conversations/01K7… \
-H "Authorization: Bearer sxa_…" -H "Content-Type: application/json" \
-d '{"status": "closed"}'
assignee_id (/teammates'ten bir ekip arkadaşı kimliği ya da null), team_id, priority (normal, high) ve status (open, snoozed_until ile snoozed, closed) değiştirilebilir. Her değişiklik gelen kutusundaki gibi konuşmada görünür ve iş akışları normal çalışır.
Kişi oluşturma veya güncelleme
curl -X POST https://app.shopxare.com/api/v1/contacts \
-H "Authorization: Bearer sxa_…" -H "Content-Type: application/json" \
-d '{"email": "[email protected]", "name": "Lena", "external_id": "user-7", "attributes": {"plan": "pro"}}'
Birini GET /contacts?email=… ya da ?external_id=… ile bulun. PATCH isteğinde yalnızca gönderdiğiniz alanlar değişir; attributes birleştirilir, null verilen anahtar silinir. external_id, kimlik doğrulamada Messenger'a verdiğiniz kullanıcı kimliğiyle aynıdır; API ve Messenger aynı kişiyi görür.
Olay kaydetme
curl -X POST https://app.shopxare.com/api/v1/contacts/01K7…/events \
-H "Authorization: Bearer sxa_…" -H "Content-Type: application/json" \
-d '{"name": "order_placed", "meta": {"order_id": "A-1042", "total": 59.9}}'
JavaScript API'deki Shopxare('trackEvent', …) ile aynıdır, ama sunucunuzdan.
Sayfalama
Listeler en yeniden eskiye {"object": "list", "data": [...], "next_cursor": "…"} döner. next_cursor değerini null olana kadar cursor olarak geri gönderin. limit 1–100 arasıdır (varsayılan 25). Değişiklikleri eşitlemek için updated_since ile filtreleyin.
Mesajlar eskiden yeniye listelenir: has_more true olduğu sürece aldığınız son id değerini after_id olarak gönderin.
Hatalar
Hatalar hep aynı biçimdedir:
{ "error": { "code": "validation_failed", "message": "…", "fields": { "email": ["…"] } } }
| Durum | Kod | Anlamı |
|---|---|---|
| 401 | unauthorized |
token yok, yanlış, süresi dolmuş ya da iptal edilmiş |
| 402 | limit_reached |
bir paket sınırına ulaşıldı (ör. kişi sayısı) |
| 403 | insufficient_scope, forbidden, feature_unavailable |
token'da yetki, ekip arkadaşında izin ya da pakette API yok |
| 404 | not_found |
bu çalışma alanında böyle bir kayıt yok |
| 422 | validation_failed, invalid_request |
girdi hatalı; fields alanına bakın |
| 429 | rate_limited |
çok fazla istek; Retry-After saniye bekleyin |
İstek sınırları
İstekler token başına dakikalık sayılır; sınır paketinizden gelir ve Ayarlar → API bölümünde gösterilir. Her cevapta X-RateLimit-Limit ve X-RateLimit-Remaining başlıkları bulunur.
Değişikliklerden haberdar olma
API sormak ve değiştirmek içindir. Bir şey olduğunda — yeni konuşma, cevap, kapanan talep — haber almak için webhook'ları kullanın.
Hâlâ takıldınız mı? İletişim