1. Temel Bilgiler
Tüm API uçları /api/v2 öneki altında sunulur:
Base URL: https://apolyont.com/api/v2
- Tüm istek ve yanıtlar
application/jsonformatındadır. - Etkileşimli API şeması (Swagger UI): apolyont.com/docs
- Makine okunabilir şema:
https://apolyont.com/openapi.json - Sağlık kontrolü:
GET /healthveGET /health/detailed(veritabanı + Redis durumu).
2. Kimlik Doğrulama
Korumalı uçlar JWT Bearer token ile doğrulanır. Token, HS256 ile imzalanır ve
Authorization başlığında gönderilir:
Authorization: Bearer <access_token>
2.1 Telefon + Şifre ile Giriş
POST /api/v2/auth/login
curl -X POST https://apolyont.com/api/v2/auth/login \
-H "Content-Type: application/json" \
-d '{"phone": "5XXXXXXXXX", "password": "sifreniz"}'
# Yanıt
{"access_token": "eyJhbGciOi..."}
2.2 SMS Kodu (OTP) ile Giriş
Önce telefon numarasına 4 haneli SMS kodu gönderilir:
POST /api/v2/auth/send-otp
curl -X POST https://apolyont.com/api/v2/auth/send-otp \
-H "Content-Type: application/json" \
-d '{"phone_number": "5XXXXXXXXX"}'
Ardından kod ile token alınır:
POST /api/v2/auth/login-with-otp
curl -X POST https://apolyont.com/api/v2/auth/login-with-otp \
-H "Content-Type: application/json" \
-d '{"phone_number": "5XXXXXXXXX", "otp_code": "1234"}'
- OTP kodları 5 dakika geçerlidir.
- OTP isteği hız sınırlıdır: telefon başına 5 dakikada en fazla 3 deneme (aşılırsa
429).
2.3 Çoklu Firma: X-Firm-ID Başlığı
Birden fazla firmaya erişimi olan kullanıcılar, /api/v2/* isteklerinde isteğe bağlı
X-Firm-ID: <firma_id> başlığı gönderebilir. Başlıktaki firma, token'daki
kullanıcıyla eşleşmezse istek 403 ile reddedilir. /auth, /webhook
ve /payment/webhook yolları bu doğrulamadan muaftır.
3. Herkese Açık Uçlar
Aşağıdaki uçlar kimlik doğrulama gerektirmez:
3.1 Sipariş Takibi
GET /api/v2/track/{takip_kodu}
Müşterilere iletilen takip kodu ile siparişin anlık durumunu döndürür.
curl https://apolyont.com/api/v2/track/ABC123
3.2 QR Menü
GET /api/v2/qr-menu/{firma_id}
Bir restoranın aktif kategori ve ürünlerini döndürür (fiyatlar kuruş cinsindendir).
curl https://apolyont.com/api/v2/qr-menu/1
4. Webhook'lar (Platform Entegrasyonları)
Sipariş platformları ve POS sistemleri, yeni siparişleri ve iptalleri Apolyont'a webhook ile iletir.
POST /api/v2/webhook/{platform}/new-order
POST /api/v2/webhook/{platform}/cancel-order
Desteklenen platformlar:
getir/getir-yemek,yemeksepeti,trendyol,migrosadisyo,sepettakip,poscube,roogo,whatsapp
- Başarılı alımlar
202 Accepteddöner ve kuyruğa alınarak asenkron işlenir. - Mükerrer siparişler
409+DUPLICATE_ORDER, iptal edilemeyen siparişler409+ORDER_NOT_CANCELLABLEdöner. - Sunucuda
WEBHOOK_SHARED_SECRETtanımlıysa, çağrılarX-Apolyont-Webhook-Secretbaşlığıyla aynı gizli değeri göndermelidir; aksi halde401döner.
4.1 Adisyo POS İmzası
POST /api/v2/webhook/adisyo
Adisyo webhook'ları, gövdenin HMAC (SHA-256/SHA-512) imzasını x-adisyo-signature
başlığında taşır. İmza doğrulanamayan istekler işlenmez.
5. WebSocket (Gerçek Zamanlı Olaylar)
WS /api/v2/ws/firm/{firma_id}?token=<jwt>
- JWT, header yerine
tokensorgu parametresiyle gönderilir. - Geçersiz token: bağlantı
4001koduyla, firmaya ait olmayan kullanıcı:4003koduyla kapatılır. - Bağlantıyı canlı tutmak için
{"type":"ping"}gönderin; sunucu{"type":"pong"}ile yanıtlar. - Sunucu, firma olaylarını
{"event": "...", "data": {...}}formatında iter.
const ws = new WebSocket(
`wss://apolyont.com/api/v2/ws/firm/1?token=${accessToken}`
);
ws.onmessage = (e) => console.log(JSON.parse(e.data));
6. MQTT (Telemetri / Konum)
Cihaz ve kurye telemetrisi için MQTT broker üzerinden bağlanabilirsiniz:
- MQTT (TCP):
1883portu - MQTT over WebSocket:
9001portu
7. Hata Formatı
Hatalar tutarlı bir JSON yapısıyla döner:
{
"message": "Geçersiz kimlik bilgileri",
"code": "INVALID_CREDENTIALS"
}
Doğrulama hataları 422 durum kodu ve alan bazlı detaylarla döner:
{
"message": "Validation failed",
"code": "VALIDATION_ERROR",
"errors": [ ... ]
}
8. Test ve Deneme
API'yi canlı olarak denemek için Test Bed sayfasındaki etkileşimli konsolu kullanabilirsiniz. Kimlik doğrulamalı uçlar için demo hesap talebinde bulunmak üzere başvuru formunu doldurun veya [email protected] adresine yazın.