Skip to content

Kimlik Doğrulama

Korumalı tüm endpoint'ler için iki request header gereklidir:

HeaderAçıklama
X-API-KEYHesabınıza ait kalıcı API anahtarı
X-SIGNATUREHer istek için ayrı hesaplanan, request body'sine dayalı imza

API key ve API secret, TradeAtlas portalındaki Profil sekmesinden alınır. Secret hiçbir zaman header olarak gönderilmez — yalnızca X-SIGNATURE üretmek için kullanılır.


1. API Key ve Secret Edinme

API key ve secret'ınızı TradeAtlas portalında Profil sekmesinden alabilirsiniz. Her ikisi de kalıcı değerlerdir; secret'ı güvenli şekilde saklayın ve asla istemci tarafında (tarayıcı, mobil uygulama) ifşa etmeyin.

TradeAtlas Profil → API sekmesi

TradeAtlas portalında üst menüden API sekmesine geçin. API Anahtarı (API Key) ve API Parolası (API Secret) alanlarını buradan Oluştur butonuyla üretebilirsiniz. Parola yalnızca bir kez gösterilir — güvenli bir yerde saklayın.


2. X-API-KEY

API key, TradeAtlas portalındaki Profil sekmesinden bir kez oluşturulur. Kalıcı bir değerdir — her istekte aynı key kullanılır.

X-API-KEY: api-keyiniz

3. X-SIGNATURE

Signature isteğe özgüdür ve her request için yeniden hesaplanmalıdır. Request payload'ının, API secret ile HMAC-SHA256 imzalanıp Base64 encode edilmesiyle elde edilir.

signature = Base64( HMACSHA256( requestPayload, apiSecret ) )
  • requestPayload — request body olarak gönderilen ham JSON string. Body'siz isteklerde (örn. GET) boş string "" kullanılır.
  • apiSecret — TradeAtlas portalındaki Profil sekmesinden alınan değer.

ÖNEMLİ

İmza, gönderdiğiniz body'nin birebir aynısı üzerinden hesaplanmalıdır. JSON'ı imzaladıktan sonra yeniden serialize eder (boşluk, alan sırası değişir) veya farklı bir gövde gönderirseniz imza geçersiz olur ve 401 alırsınız.

İmza Hesaplama

js
import crypto from 'crypto'

const payload = '{"page":1,"search_type":"importer"}'
const apiSecret = 'api-secretiniz'

const signature = crypto
  .createHmac('sha256', apiSecret)
  .update(payload)
  .digest('base64')
bash
PAYLOAD='{"page":1,"search_type":"importer"}'

SIGNATURE=$(echo -n "$PAYLOAD" \
  | openssl dgst -sha256 -hmac "api-secretiniz" -binary \
  | base64)
java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;

String payload   = "{\"page\":1,\"search_type\":\"importer\"}";
String apiSecret = "api-secretiniz";

Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(apiSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] hash = mac.doFinal(payload.getBytes(StandardCharsets.UTF_8));
String signature = Base64.getEncoder().encodeToString(hash);
python
import hmac, hashlib, base64

payload    = '{"page":1,"search_type":"importer"}'
api_secret = "api-secretiniz"

signature = base64.b64encode(
    hmac.new(api_secret.encode(), payload.encode(), hashlib.sha256).digest()
).decode()

4. Tam İstek Örneği

Aşağıdaki örnekler payload'ı imzalayıp X-API-KEY ve X-SIGNATURE header'larıyla birlikte gönderir.

js
import crypto from 'crypto'

const payload = JSON.stringify({
  page: 1,
  search_type: 'importer',
  importer_countries: ['US'],
  hs_codes: ['847130']
})

const signature = crypto
  .createHmac('sha256', 'api-secretiniz')
  .update(payload)
  .digest('base64')

const res = await fetch('https://apiv2.tradeatlas.com/api/v1/firms/search', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-KEY': 'api-keyiniz',
    'X-SIGNATURE': signature
  },
  body: payload
})

const data = await res.json()
bash
PAYLOAD='{"page":1,"search_type":"importer","importer_countries":["US"],"hs_codes":["847130"]}'

SIGNATURE=$(echo -n "$PAYLOAD" \
  | openssl dgst -sha256 -hmac "api-secretiniz" -binary \
  | base64)

curl -X POST https://apiv2.tradeatlas.com/api/v1/firms/search \
  -H "Content-Type: application/json" \
  -H "X-API-KEY: api-keyiniz" \
  -H "X-SIGNATURE: $SIGNATURE" \
  -d "$PAYLOAD"
java
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

String payload = "{\"page\":1,\"search_type\":\"importer\",\"importer_countries\":[\"US\"],\"hs_codes\":[\"847130\"]}";

Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec("api-secretiniz".getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
String signature = Base64.getEncoder()
    .encodeToString(mac.doFinal(payload.getBytes(StandardCharsets.UTF_8)));

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://apiv2.tradeatlas.com/api/v1/firms/search"))
    .header("Content-Type", "application/json")
    .header("X-API-KEY", "api-keyiniz")
    .header("X-SIGNATURE", signature)
    .POST(HttpRequest.BodyPublishers.ofString(payload))
    .build();

HttpResponse<String> response = HttpClient.newHttpClient()
    .send(request, HttpResponse.BodyHandlers.ofString());
python
import hmac, hashlib, base64, requests

payload = '{"page":1,"search_type":"importer","importer_countries":["US"],"hs_codes":["847130"]}'

signature = base64.b64encode(
    hmac.new("api-secretiniz".encode(), payload.encode(), hashlib.sha256).digest()
).decode()

response = requests.post(
    "https://apiv2.tradeatlas.com/api/v1/firms/search",
    headers={
        "Content-Type": "application/json",
        "X-API-KEY": "api-keyiniz",
        "X-SIGNATURE": signature,
    },
    data=payload,
)
data = response.json()

Sık Karşılaşılan Hatalar

DurumOlası NedenÇözüm
401 UnauthorizedX-API-KEY veya X-SIGNATURE eksik/hatalıHeader'ların gönderildiğini ve key'in doğru olduğunu kontrol edin
401 (imza uyuşmuyor)İmza, gönderilen body'den farklı bir string üzerinden hesaplanmışİmzayı birebir gönderdiğiniz body üzerinden hesaplayın; JSON'ı tekrar serialize etmeyin
401 (secret yanlış)Yanlış veya süresi dolmuş API secretProfil sekmesindeki güncel secret'ı kullanın

Detaylı hata kodları için Hatalar sayfasına bakın.

Nexus Backend API Dokümantasyonu