Üretim vs Sandbox
Adresler
| Üretim | Sandbox | |
|---|---|---|
| API | https://api.finansfatura.com | https://sandbox-api.finansfatura.com |
| OAuth onay ekranı (mükellefin tarayıcısı) | https://app.finansfatura.com/oauth/authorize | https://sandbox-app.finansfatura.com/oauth/authorize |
| Token | POST {API}/v1/oauth/token/ | aynı yol |
| Revoke | POST {API}/v1/oauth/revoke/ | aynı yol |
Birbirine taşınmayanlar
- Anahtarlar. Sandbox API anahtarı üretimde çalışmaz, üretim anahtarı sandbox'ta çalışmaz.
- OAuth istemcisi.
client_id/client_secretortam başınadır. Sandbox istemcinizi üretimde kullanamazsınız — her ortam için ayrı istemci kaydı gerekir. - Mükellef bağlantısı. Bir mükellefin sandbox'taki OAuth onayı, üretimdeki bağlantısını kurmaz. Her ortamda ayrı yetkilendirme akışı gerekir.
- Veri. Sandbox'taki satış/fatura/mükellef kayıtları üretime kopyalanmaz.
Üretime geçiş
- OAuth kullanıyorsanız üretim
redirect_uri'nizi [email protected] adresine bildirin; üretim istemci kaydını açıpclient_id/client_secret'ı tek seferlik paylaşırız.client_secretyalnız o an görünür — kaybederseniz rotasyon gerekir, güvenli saklayın. redirect_uritam eşleşir — query/fragment dahil. Sandbox'ta kullandığınız adresle üretimdeki birebir aynı olmak zorunda değildir, ama kayıtlı adresle birebir eşleşmelidir.- Mükellefleri üretim onay ekranına yönlendirin; sandbox'taki onayları taşımaz, her mükellef üretimde ayrıca "Bağlan" demelidir.
- İlk fatura kesiminden önce mükellefin e-belge kurulumu tamamlanmış
olmalı — tamamlanmamışsa
412ile döner. Bunu beklemeden görmek için Hesap Durumu ucunu önden sorgulayın.
412 yanıtının gövdesi ONBOARDING_NOT_STARTED, CONTRACT_PENDING ya da
ONBOARDING_FAILED taşır — ayrıntı için
Hata Kodları.
OAuth akışı hem PKCE (code_challenge + code_challenge_method=S256,
takasta code_verifier) hem confidential client (takasta client_id +
client_secret) ister — ikisi birbirinin yerine geçmez, ikisi de gerekir.
Ayrıntı için Kimlik Doğrulama.
Refresh token rotasyonu
Her yenilemede eski refresh token düşer, yenisi döner. (istemci, mükellef)
başına tek aktif refresh token tutulur — sakladığınız eski token bir
sonraki yenilemeden sonra artık geçersizdir, her yenilemede döneni üzerine
yazın.
Bağlantıyı kaldırma
POST {API}/v1/oauth/revoke/
Content-Type: application/json
{"token": "<refresh_token>"}
- Kimlik doğrulaması gerekmez, her zaman 200 döner — tekrarlı çağrı hatasızdır, zaten iptal edilmiş bir token'ı tekrar göndermek sorun değildir.
- Yalnız refresh token'ı düşürür. Elinizdeki erişim (access) token'ı kendi TTL'i dolana kadar geçerli kalır; iptal anında anlık kesinti beklemeyin, kısa bir kuyruk süresi vardır. Kendi tarafınızda da jetonları silin.
- Panel karşılığı Bağlı Uygulamalar'dır
(
DELETE /v1/oauth/grants/{client_id}): o istemcinin tüm refresh token'larını iptal eder, ek bir adım gerekmez.
Değişmez mükellef kimliği
GET /v1/companies/
OAuth erişim jetonuyla çağrılır, şirket id'si (tamsayı) ve VKN'yi döner —
ikisi de değişmez. Bir mükellef bağlantıyı kesip tekrar kurduğunda, aynı
mükellef mi bağlandı diye bunları karşılaştırın; onay ekranı metadata'sı da
aynı bilgiyi taşır (GET /v1/oauth/authorize?client_id=… →
company_id, company_title).
Farklı bir mükellef seçilirse devralma olmaz: tüm uçlar fk_company_id ile
sınırlıdır, yeni jeton eski mükellefin belgelerini göremez (404).