Ajan Anahtarı ile Kimlik Doğrulama
Ajan Anahtarı ile Kimlik Doğrulama, Evobulut ön muhasebe / ERP yazılımının Yapay Zeka Ajanları modülüne ait bir REST API servisidir. POST yöntemiyle https://ws.evobulut.com/api/doviz/base/ adresine JSON gönderilerek çağrılır; kimlik doğrulama Authorization: Bearer başlığındaki ajan anahtarı ile yapılır (Login ve UID gerekmez).
Yapay zeka ajanları (Claude vb.) ve sunucudan sunucuya entegrasyonlar evobulut servislerini kullanıcı kodu / şifre ile oturum açmadan, ajan anahtarı ile çağırabilir. Ajan, anahtarın bağlı olduğu kullanıcının yetkileriyle çalışır ve o kullanıcının web veya mobil oturumunu kapatmaz.
Anahtar nasıl alınır?
evobulut'ta firma yöneticisi: Ayarlar › Büro Tanımları › Yapay Zeka Ajanları › Yeni Anahtar. Anahtarın bağlanacağı kullanıcı, geçerlilik süresi (30 / 90 / 365 gün) ve dakikalık istek sınırı seçilir. Anahtar yalnız bir kez gösterilir; kaybedilirse iptal edilip yenisi üretilir. Aynı ekrandan anahtarın son kullanımı ve son 100 isteği izlenebilir.
Anahtar yalnız aktif API kullanıcılarına verilir. Ajan için Kullanıcı Tanımları'nda ayrı bir kullanıcı açıp "Hesap API Kullanıcısı" olarak işaretleyin ve ona yalnız gereken yetkileri verin; ajanın yaptığı kayıtlar da böylece belgelerde bu kullanıcının adıyla ayrı görünür. Pasif ya da API kullanıcısı olmayan hesaplara anahtar üretilemez.
Kullanım
Her isteğe Authorization: Bearer <anahtar> başlığı eklenir. Login (euas) çağrılmaz, UID gönderilmez
(gönderilirse yok sayılır). Bu dokümantasyondaki diğer tüm servisler aynı adres ve gövdeyle çağrılır; bu sayfadaki örnek döviz listesidir.
Kurallar
| Kullanıcı | Anahtar yalnız aktif bir API kullanıcısına bağlanabilir. Kullanıcı sonradan pasifleşir ya da API kullanıcılığı kaldırılırsa anahtar en geç 5 dakika içinde reddedilmeye başlar. |
| Yetki | Anahtarın bağlı olduğu kullanıcının yetkileri ve yetenek kısıtları aynen uygulanır. |
| Çalışma saatleri | Kullanıcıya çalışma saati tanımlıysa ajan da yalnız bu saatlerde işlem yapabilir. |
| İstek sınırı | Anahtar başına dakikalık sınır (varsayılan 60). Aşılırsa HTTP 429. |
| İptal / süre | İptal edilen ya da süresi dolan anahtar en geç 5 dakika içinde reddedilmeye başlar. |
| Kapsam | Anahtar bir firmaya bağlıdır; giriş, çıkış, token ve alt firma seçimi servisleri anahtarla çağrılamaz. |
| Kayıt | Anahtarla yapılan her istek zamanı, servisi, komutu ve IP adresiyle kaydedilir. |
Hata kodları
| HTTP | Anlamı |
| 401 | Anahtar geçersiz, iptal edilmiş ya da süresi dolmuş. |
| 403 | Kullanıcı ya da firma pasif, kullanıcı artık API kullanıcısı değil, kullanıcı çalışma saatleri dışında ya da istenen işlem ajan anahtarıyla yapılamaz (giriş/çıkış servisleri). |
| 429 | Anahtarın dakikalık istek sınırı aşıldı. Retry-After başlığındaki saniye kadar bekleyip tekrar deneyin. |
| 503 | Anahtar o an doğrulanamadı; kısa süre sonra tekrar deneyin. |
Hata gövdesi: {"status":"ERR_000","veri":[{"mesaj":"Geçersiz ajan anahtarı."}]}. Servislerin kendi iş kuralı hataları (eksik alan vb.) diğer servislerdeki gibi HTTP 200 + status: ERR ile döner.
| Authorization | Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
{
"cmd": "doviz_listesi"
}curl -X POST "https://ws.evobulut.com/api/doviz/base/" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-d '{
"cmd": "doviz_listesi"
}'const response = await fetch("https://ws.evobulut.com/api/doviz/base/", {
method: "POST",
headers: { "Content-Type": "application/json", "Authorization": "Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" },
body: JSON.stringify({
"cmd": "doviz_listesi"
})
});
const veri = await response.json();
console.log(veri);using System.Text;
using System.Text.Json;
using var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
var json = """
{
"cmd": "doviz_listesi"
}
""";
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://ws.evobulut.com/api/doviz/base/", content);
var veri = await response.Content.ReadAsStringAsync();
Console.WriteLine(veri);import requests
url = "https://ws.evobulut.com/api/doviz/base/"
headers = {"Authorization": "Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
payload = {
"cmd": "doviz_listesi"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$url = "https://ws.evobulut.com/api/doviz/base/";
$payload = '{
"cmd": "doviz_listesi"
}';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json", "Authorization: Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;import java.net.URI;
import java.net.http.*;
HttpClient client = HttpClient.newHttpClient();
String json = """
{
"cmd": "doviz_listesi"
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://ws.evobulut.com/api/doviz/base/"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
.method("POST", HttpRequest.BodyPublishers.ofString(json))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());import 'dart:convert';
import 'package:http/http.dart' as http;
final response = await http.post(
Uri.parse('https://ws.evobulut.com/api/doviz/base/'),
headers: {'Content-Type': 'application/json', 'Authorization': 'Bearer evo_ak_xxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'},
body: jsonEncode({
"cmd": "doviz_listesi"
}),
);
print(response.body);{
"status": "OK",
"veri": [
{
"ID": "0",
"Kod": "₺",
"Adi": "Türk Lirası",
"KodAdi": "TL"
},
{
"ID": "1",
"Kod": "$",
"Adi": "ABD Doları",
"KodAdi": "USD"
},
{
"ID": "2",
"Kod": "€",
"Adi": "Euro",
"KodAdi": "EUR"
}
]
}