API v1Barqaror

Temur AI API bilan ko'proq imkoniyat yarating

Xavfsizlik tekshiruvlari, TM balans nazorati va parchalovchi paketlarni bitta korporativ API standartida ulang.

01

Overview

Tez kirish

Barcha biznes so'rovlari POST metodi, JSON javobi va yagona autentifikatsiya usulidan foydalanadi.
Junior dasturchilar uchun asosiy qoidaHar bir so'rovda API key va Project ID headerlarda yuboriladi. Endpointga POST so'rovi beriladi va JSON javobi o'qiladi.
02

Xavfsiz ulanish

Autentifikatsiya

Temur AI public API hozir Bearer API key va Project ID juftligidan foydalanadi.
1Project IDLoyihani topadi
2Bearer keyKalitni tasdiqlaydi
3HMAC tekshiruvConstant-time solishtirish
4RuxsatSo'rov bajariladi
HeaderTalabQiymatIzoh
AuthorizationMajburiyBearer tm_live_...Secret API key. Faqat serverda saqlang.
X-Project-IDMajburiyTMPRJ-...Loyihaning public identifikatori.
Content-TypeScan uchunapplication/jsonJSON body yuborilganda talab qilinadi.
AcceptIxtiyoriyapplication/jsonJSON javob kutilishini bildiradi.
API keyni brauzer, mobil ilova yoki Git repozitori ichiga yozmangKalit serverdagi muhit o'zgaruvchisi yoki maxfiy ma'lumotlar boshqaruvchisida saqlanishi kerak. Kalit oshkor bo'lsa, Loyihalar bo'limida uni darhol qayta yarating.
Bearer TokenQo'llab-quvvatlanadi
API KeyBearer orqali
HMACIchki verifikatsiya
OAuth / JWTOchiq API uchun yo'q
03

Birinchi integratsiya

Tezkor boshlash

Project ID va API keyni muhit o'zgaruvchisi sifatida kiriting, keyin balans endpointini chaqiring.
1Loyihalar bo'limida loyiha yarating.
2Bir marta ko'rsatiladigan API keyni xavfsiz saqlang.
3Quyidagi so'rov bilan integratsiyani tekshiring.
Terminal
curl -X POST https://api.temurai.uz/v1/balance \
  -H "Authorization: Bearer $TEMURAI_API_KEY" \
  -H "X-Project-ID: $TEMURAI_PROJECT_ID"
Node.js 18+
const javob = await fetch("https://api.temurai.uz/v1/balance", {
  method: "POST",
  headers: {
	    Authorization: "Bearer " + process.env.TEMURAI_API_KEY,
    "X-Project-ID": process.env.TEMURAI_PROJECT_ID
  }
});
const natija = await javob.json();
Python 3
import os, requests

javob = requests.post(
    "https://api.temurai.uz/v1/balance",
    headers={
        "Authorization": f"Bearer {os.environ['TEMURAI_API_KEY']}",
        "X-Project-ID": os.environ["TEMURAI_PROJECT_ID"]
    },
    timeout=15
)
natija = javob.json()
Go 1.22+
req, err := http.NewRequest(http.MethodPost,
    "https://api.temurai.uz/v1/balance", nil)
if err != nil { log.Fatal(err) }
req.Header.Set("Authorization", "Bearer "+os.Getenv("TEMURAI_API_KEY"))
req.Header.Set("X-Project-ID", os.Getenv("TEMURAI_PROJECT_ID"))

javob, err := http.DefaultClient.Do(req)
04

API ma'lumotnomasi

Endpointlar

Har bir endpoint uchun auth, parametr, javob, xato va limit qoidalari shu yerda berilgan.
POST/v1/balance
TM balansini olishLoyiha egasining joriy balansini qaytaradi.
60/min
AutentifikatsiyaBearer + Project ID
RuxsatLoyiha egasi
So'rov tanasiTalab qilinmaydi
Narx0 TM

So'rov headerlari

NomiTuriTalabIzoh
AuthorizationstringMajburiyBearer API key.
X-Project-IDstringMajburiyPublic loyiha ID.

Muvaffaqiyatli javob

200 OK< 100 ms
{
  "object": "balance",
  "project_id": "TMPRJ-ABCD-EF12-3456-GHJK",
  "balance": { "available": 100, "currency": "TM" },
  "updated_at": "2026-06-19T09:00:00Z",
  "request_id": "req_01J..."
}
balance.availableHisobdagi TM miqdori. Butun son.
balance.currencyPlatforma valyutasi, har doim TM.
updated_atBalans yangilangan ISO 8601 UTC vaqti.
request_idDiagnostika va yordam xizmati uchun noyob identifikator.
POST/v1/scan
AI xavfsizlik tekshiruvini bajarishBitta endpointda IP yoki .zstd fayl tahlili.
20/min
AutentifikatsiyaBearer + Project ID
Content-TypeJSON yoki multipart
So'rov tanasiModelga bog'liq
NarxModel va hajm bo'yicha
Billing tahlildan oldin tekshiriladiBalans yetmasa tahlil boshlanmaydi. Ichki xizmat xatosida rezerv qilingan TM avtomatik qaytariladi.
Fayl rejimiMirzoUlugbek / AmirTemurmultipart/form-data

model va file maydonlarini yuboring.

IP / Host rejimiAlXorazmiy / Manguberdiapplication/json

model va ip maydonlarini yuboring.

Fayl tekshiruvi — multipart

MaydonTuriTalabIzoh
modelstringMajburiyMirzoUlugbek yoki AmirTemur.
filebinaryMajburiyHaqiqiy Zstandard frame bo'lgan .zstd fayl. Maksimal siqilgan hajm 10240 KB.
Content-Type'ni qo'lda yozmangcURL, FormData yoki multipart kutubxonasi boundary qiymatini avtomatik yaratadi. Faqat auth headerlarini o'zingiz kiriting.
Mirzo Ulug'bekMirzoUlugbek
Baza10 TM0-1024 KB
Ustama 1+2 TM1025-5120 KB oralig'idagi har boshlangan 512 KB
Ustama 2+3 TM5121-10240 KB oralig'idagi har boshlangan 512 KB
Amir TemurAmirTemur
Baza30 TM0-1024 KB
Ustama 1+5 TM1025-5120 KB oralig'idagi har boshlangan 512 KB
Ustama 2+8 TM5121-10240 KB oralig'idagi har boshlangan 512 KB
7 MB Mirzo namunasi: 38 TMBaza 10 TM + 8 ta blok × 2 TM + 4 ta blok × 3 TM. Faqat chegaradan oshgan qismga ustama qo'llanadi.

Fayl yuborish namunalari

cURL
curl -X POST https://api.temurai.uz/v1/scan \
  -H "Authorization: Bearer $TEMURAI_API_KEY" \
  -H "X-Project-ID: $TEMURAI_PROJECT_ID" \
  -F "model=MirzoUlugbek" \
  -F "file=@sample.zstd;type=application/zstd"
JavaScript / Node.js
import fs from "node:fs/promises";

const form = new FormData();
form.append("model", "MirzoUlugbek");
form.append("file", new Blob([await fs.readFile("sample.zstd")]), "sample.zstd");

const javob = await fetch("https://api.temurai.uz/v1/scan", {
  method: "POST",
  headers: { Authorization: "Bearer " + apiKey, "X-Project-ID": projectId },
  body: form
});
Python / requests
with open("sample.zstd", "rb") as fayl:
    javob = requests.post("https://api.temurai.uz/v1/scan",
        headers={"Authorization": f"Bearer {api_key}", "X-Project-ID": project_id},
        data={"model": "MirzoUlugbek"},
        files={"file": ("sample.zstd", fayl, "application/zstd")}, timeout=45)
PHP / cURL
$fayl = new CURLFile("sample.zstd", "application/zstd", "sample.zstd");
$curl = curl_init("https://api.temurai.uz/v1/scan");
curl_setopt_array($curl, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer ".$apiKey, "X-Project-ID: ".$projectId],
  CURLOPT_POSTFIELDS => ["model" => "MirzoUlugbek", "file" => $fayl]]);
$javob = curl_exec($curl);
Go / multipart
var body bytes.Buffer
writer := multipart.NewWriter(&body)
_ = writer.WriteField("model", "MirzoUlugbek")
part, _ := writer.CreateFormFile("file", "sample.zstd")
fayl, _ := os.Open("sample.zstd")
defer fayl.Close()
_, _ = io.Copy(part, fayl)
_ = writer.Close()

req, _ := http.NewRequest(http.MethodPost, "https://api.temurai.uz/v1/scan", &body)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("X-Project-ID", projectID)
req.Header.Set("Content-Type", writer.FormDataContentType())
javob, err := http.DefaultClient.Do(req)
if err != nil { panic(err) }
defer javob.Body.Close()

Mirzo javobi

200 OK
{
  "model": "MirzoUlugbek",
  "input": { "type": "zstd", "compressed_bytes": 7340032 },
  "billing": {
    "charged_tm": 38,
    "base_tm": 10,
    "tier_1_units": 8,
    "tier_1_tm": 16,
    "tier_2_units": 4,
    "tier_2_tm": 12,
    "balance_remaining": 162
  },
  "result": { "verdict": "clean", "label": "Toza" }
}

Model javobi farqi

Natija siyosati
MirzoUlugbek

Faqat zararli, shubhali yoki toza hukmini qaytaradi.

AmirTemur

Hukm, xavf dalillari, signallar va chuqur xulosani qaytaradi. Ichki model yo'li, versiya, threshold, ensemble va trust yadrosi berilmaydi.

IP / Host tekshiruvi — JSON

MaydonTuriTalabIzoh
modelstringMajburiyAlXorazmiy yoki Manguberdi.
ipstringMajburiyToza public IPv4 yoki IPv6. URL, CIDR va port qabul qilinmaydi.
Al-XorazmiyAlXorazmiy
Narx10 TM1 muvaffaqiyatli IP profiling
RejimIP profilePublic IP bo'yicha standart xavfsizlik profili
ManguberdiManguberdi
Narx50 TM1 muvaffaqiyatli full host tahlil
RejimHost fullCache ma'lumotlari olib tashlangan kengaytirilgan host profili

So'rov JSON

application/json
{
  "model": "AlXorazmiy",
  "ip": "13.140.150.247"
}

Billing javobi

200 OK
{
  "model": "AlXorazmiy",
  "billing": {
    "charged_tm": 10,
    "balance_remaining": 90
  }
}

Manguberdi so'rovi

application/json
{
  "model": "Manguberdi",
  "ip": "152.53.225.172"
}

Manguberdi javobi

200 OK
{
  "model": "Manguberdi",
  "billing": {
    "charged_tm": 50,
    "balance_remaining": 150
  },
  "result": {
    "host": "152.53.225.172",
    "profile_type": "full",
    "risk": "medium"
  }
}

IP rejimi uchun kod namunalari

cURL
curl -X POST https://api.temurai.uz/v1/scan \
  -H "Authorization: Bearer $TEMURAI_API_KEY" \
  -H "X-Project-ID: $TEMURAI_PROJECT_ID" \
  -H "Content-Type: application/json" \
  -d '{"model":"AlXorazmiy","ip":"13.140.150.247"}'
JavaScript / Node.js
const javob = await fetch("https://api.temurai.uz/v1/scan", {
  method: "POST",
	  headers: { Authorization: "Bearer " + process.env.TEMURAI_API_KEY,
    "X-Project-ID": process.env.TEMURAI_PROJECT_ID,
    "Content-Type": "application/json" },
  body: JSON.stringify({ model: "AlXorazmiy", ip: "13.140.150.247" })
});
Python / requests
javob = requests.post("https://api.temurai.uz/v1/scan",
  headers={"Authorization": f"Bearer {api_key}", "X-Project-ID": project_id},
  json={"model": "AlXorazmiy", "ip": "13.140.150.247"}, timeout=15)
PHP / cURL
$curl = curl_init("https://api.temurai.uz/v1/scan");
curl_setopt_array($curl, [CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => ["Authorization: Bearer ".$apiKey,
    "X-Project-ID: ".$projectId, "Content-Type: application/json"],
  CURLOPT_POSTFIELDS => json_encode(["model" => "AlXorazmiy", "ip" => "13.140.150.247"])]);
Java 11+
HttpRequest sorov = HttpRequest.newBuilder(URI.create("https://api.temurai.uz/v1/scan"))
  .header("Authorization", "Bearer " + apiKey).header("X-Project-ID", projectId)
  .header("Content-Type", "application/json")
  .POST(HttpRequest.BodyPublishers.ofString("{\"model\":\"AlXorazmiy\",\"ip\":\"13.140.150.247\"}"))
  .build();
Go / net/http
body := strings.NewReader(`{"model":"AlXorazmiy","ip":"13.140.150.247"}`)
req, _ := http.NewRequest(http.MethodPost, "https://api.temurai.uz/v1/scan", body)
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("X-Project-ID", projectID)
req.Header.Set("Content-Type", "application/json")
Rust / reqwest
let javob = reqwest::Client::new().post("https://api.temurai.uz/v1/scan")
  .bearer_auth(api_key).header("X-Project-ID", project_id)
  .json(&serde_json::json!({"model":"AlXorazmiy", "ip":"13.140.150.247"}))
  .send().await?;
C# / HttpClient
client.DefaultRequestHeaders.Authorization = new("Bearer", apiKey);
client.DefaultRequestHeaders.Add("X-Project-ID", projectId);
var body = JsonContent.Create(new { model = "AlXorazmiy", ip = "13.140.150.247" });
var javob = await client.PostAsync("https://api.temurai.uz/v1/scan", body);
Kotlin / OkHttp
val sorov = Request.Builder().url("https://api.temurai.uz/v1/scan")
  .addHeader("Authorization", "Bearer $apiKey").addHeader("X-Project-ID", projectId)
  .post("{\"model\":\"AlXorazmiy\",\"ip\":\"13.140.150.247\"}"
    .toRequestBody("application/json".toMediaType())).build()
Swift / URLSession
var sorov = URLRequest(url: URL(string: "https://api.temurai.uz/v1/scan")!)
sorov.httpMethod = "POST"
sorov.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
sorov.setValue(projectId, forHTTPHeaderField: "X-Project-ID")
sorov.httpBody = try JSONEncoder().encode(["model":"AlXorazmiy", "ip":"13.140.150.247"])
Dart / http
final javob = await http.post(Uri.parse('https://api.temurai.uz/v1/scan'),
  headers: {'Authorization': 'Bearer $apiKey', 'X-Project-ID': projectId,
    'Content-Type': 'application/json'},
  body: jsonEncode({'model':'AlXorazmiy', 'ip':'13.140.150.247'}));

Umumiy javob tuzilishi

objectObyekt turi: scan.
request_idHar bir so'rovning noyob diagnostika IDsi.
modelTekshiruvni bajargan AI modeli.
inputFayl rejimida compressed bytes va SHA-256; IP rejimida natija ichida IP profili.
billing.charged_tmMuvaffaqiyatli tekshiruv uchun yechilgan TM.
resultTanlangan modelga mos, ichki yadro ma'lumotlaridan tozalangan natija.
05

Muammolarni boshqarish

Xatolar ma'lumotnomasi

Xato javobi har doim HTTP status, ichki code, tushunarli message va request_id qaytaradi.
401 Unauthorized
{
  "error": {
    "code": "unauthorized",
    "message": "X-Project-ID yoki API key noto'g'ri.",
    "request_id": "req_01J..."
  }
}
StatusIchki kodSababYechimQayta urinish
400invalid_requestJSON yoki majburiy maydon noto'g'ri.Body va Content-Type'ni tekshiring.Yo'q
400invalid_zstdFayl Zstandard frame emas yoki ichida JSON obyekt yo'q.To'g'ri yaratilgan .zstd fayl yuboring.Yo'q
401unauthorizedProject ID yoki API key mos emas.Headerlar va kalit holatini tekshiring.Yo'q
402insufficient_balanceModel narxi uchun TM yetmaydi.Balansni to'ldiring.To'ldirgach
405method_not_allowedPOST o'rniga boshqa metod yuborilgan.POST metodidan foydalaning.Yo'q
413payload_too_largeSiqilgan .zstd fayl 10240 KB dan katta.Faylni limit ichida tayyorlang.Yo'q
422unsupported_ipXususiy, mahalliy yoki ajratilmagan IP.Ochiq IPv4 yoki IPv6 yuboring.Yo'q
429rate_limit_exceededDaqiqalik IP limiti tugagan.Retry-After vaqtini kuting.Ha
500internal_errorVaqtinchalik ichki xatolik.request_id bilan yordam xizmatiga murojaat qiling.Ha
502scan_service_unavailableTanlangan tahlil xizmati javob bermadi.Qisqa kutib qayta yuboring; TM qaytariladi.Ha
503model_unavailableModel vaqtincha faol emas.Status tiklanishini kuting.Ha
06

Trafik nazorati

So'rov limitlari

Limitlar client IP bo'yicha qo'llanadi va har bir javobda holat headerlari qaytariladi.
Balans60so'rov / daqiqa / IP
AI tekshiruvi20so'rov / daqiqa / IP
Noto'g'ri auth10urinish / 10 daqiqa / IP
429 strategiyasiRetry-Afterheader vaqtini kuting
HeaderMisolMa'nosiAmal
RateLimit-Limit20Joriy oynadagi umumiy limit.Monitoringga yozing.
RateLimit-Remaining17Qolgan so'rovlar soni.0 ga yaqinlashsa sekinlashtiring.
RateLimit-Reset1781878725Limit tiklanadigan Unix vaqt.Scheduler uchun ishlating.
Retry-After42429 dan keyingi kutish soniyasi.Exponential backoff qo'llang.
07

Parchalovchi paketlar

SDK va parchalovchi yadro

Operatsion tizimingizga mos paketni yuklab oling. Har bir zip ichida ishlatish bo'yicha yo'riqnoma, asosiy parchalovchi yadro va integratsiya namunalari bo'ladi.
Platform package center

Kerakli parchalovchini tanlang

Linux, Windows va Android uchun paketlar alohida beriladi. Fayl nomidagi platforma, protsessor turi va versiya sizga mos buildni tez tanlashga yordam beradi.

PHPPythonNode.jsGoRustC++FlutterJavaKotlinReact Native
WINDOWSWindows parchalovchi

Kerakli parchalovchi paketni yuklab oling. Paket ichida ishlatish yo'riqnomasi, asosiy parchalovchi yadro va integratsiya namunalarini topasiz.

Hozircha paket joylanmaganBu platforma uchun zip qo'shilgach, shu yerda avtomatik ko'rinadi.
01README va ishga tushirish yo'riqnomasi

Paket ichida qaysi buyruq bilan parchalash, qanday konfiguratsiya berish va natijani qanday APIga yuborish izohlanadi.

02Asosiy parchalovchi yadro

Platformaga mos binary/yadro fayli .zstd tayyorlash jarayonining markaziy qismi sifatida beriladi.

03Til bo'yicha namunalar

PHP, Python, Node.js, Go, Rust, C++, Flutter, Java, Kotlin va React Native uchun minimal integratsiya parchalari paket ichida joylashadi.

Zip ichidagi READMEdan boshlangParchalovchi faylni to'g'ridan-to'g'ri ishga tushirishdan oldin paket ichidagi yo'riqnomani o'qing. API keyni parchalovchi paket ichiga yozmang; uni doim server muhit o'zgaruvchisidan bering.
08

Real ish muhiti standarti

Xavfsizlik va eng yaxshi amaliyotlar

API integratsiyasi faqat ishlashi emas, kalitlar, qayta urinish va audit jihatidan ham boshqarilishi kerak.
01

Maxfiy kalitni serverda saqlang

Muhit o'zgaruvchisi yoki maxfiy ma'lumotlar boshqaruvchisidan foydalaning. Jurnallarda kalitni niqoblang.

02

Kutish muddatini belgilang

Balans uchun 10 soniya, tekshiruv uchun kamida 15 soniyalik mijoz kutish muddati tavsiya etiladi.

03

Faqat xavfsiz qayta urinish

429, 500, 502 va 503 holatlarida kutish oralig'ini bosqichma-bosqich oshiring. 4xx tekshiruv xatolarini qayta yubormang.

04

Request IDni saqlang

Har bir API xatosidagi request_id yordam va audit jarayonini tezlashtiradi.

05

Kalitni almashtiring

Kalit oshkor bo'lsa yoki xodim almashsa, uni darhol qayta yarating.

06

Balansni kuzating

Tekshiruvdan oldin balansni tekshirib, insufficient_balance holatiga tayyor bo'ling.

09

Hodisalar

Webhooklar

Public webhook endpointlari hozircha mavjud emas.
Rejada

Asinxron hodisalar keyingi versiyada

Webhooklar e'lon qilinganda imzo verifikatsiyasi, qayta ijrodan himoya, hodisalar katalogi va qayta urinish siyosati shu bo'limda hujjatlashtiriladi.

10

Yordam

Ko'p so'raladigan savollar

Integratsiyada eng ko'p uchraydigan savollarga qisqa javoblar.
API keyni qayta ko'rish mumkinmi?

Yo'q. Maxfiy kalit faqat yaratilgan yoki qayta yaratilgan paytda bir marta ko'rsatiladi.

Tekshiruv xato tugasa TM yechiladimi?

Ichki tahlil xatosida rezerv qilingan TM avtomatik qaytariladi. Hisobni tiklash xatosida request_id bilan yordam xizmatiga murojaat qiling.

Xususiy IP yuborish mumkinmi?

Yo'q. Faqat ochiq IPv4 va IPv6 manzillar qabul qilinadi.

API key qayerda saqlanishi kerak?

Faqat serverdagi muhit o'zgaruvchisi yoki maxfiy ma'lumotlar boshqaruvchisida.

11

Atamalar

Lug'at

TMTemur AI ichki hisob birligi.
Project IDLoyihaning public identifikatori.
API keySo'rovni imzolovchi maxfiy Bearer token.
Request IDHar bir API so'roviga beriladigan diagnostika identifikatori.
ModelTekshiruvni bajaradigan Temur AI turi.
Rate limitBelgilangan vaqt ichidagi maksimal so'rovlar soni.
12

Versiya tarixi

O'zgarishlar jurnali

v1

Manguberdi host full profiling

POST /v1/scan orqali 50 TM billing, full host tahlil va cache diagnostikasidan tozalangan javob qo'shildi.

v1

AlXorazmiy IP profiling

POST /v1/scan, 10 TM billing, audit loglari va natijalarni saqlash qo'shildi.

v1

Balans API

POST /v1/balance, Bearer + Project ID auth va IP rate limit ishga tushirildi.

Yordam markazi

Integratsiyada to'siq bormi?

Muammo tavsifi, endpoint, HTTP status va request_id bilan murojaat qiling. API keyni hech qachon yubormang.
Qo'llab-quvvatlash