Verify API
Verify API, KYC doğrulamasını destekler. Organizasyonlar kaydolur, doğrulama oturumları oluşturur ve webhook’lar veya yoklama yoluyla sonuçları alır. Son kullanıcılar, barındırılan bir akış veya doğrudan API çağrıları aracılığıyla doğrulamayı tamamlar.
Temel URL: https://verify.solidus.network/v1
Kimlik Doğrulama
Kayıt
Yeni bir organizasyon hesabı oluşturun.
POST /auth/register
Kimlik doğrulama: Yok
// Request body
{
"email": "[email protected]",
"password": "secureP@ssw0rd!",
"name": "Acme Corp"
}// Response 201
{
"token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "usr_8Kj2mNpQxR",
"email": "[email protected]",
"name": "Acme Corp",
"organizationId": "org_3Vn9wLkDfT",
"createdAt": "2026-05-07T10:30:00Z"
}
}Giriş
E-posta ve parola ile kimlik doğrulaması yapın. TOTP etkinse, bir totpCode gereklidir.
POST /auth/login
Kimlik doğrulama: Yok
// Request body
{
"email": "[email protected]",
"password": "secureP@ssw0rd!"
}// Response 200 — success
{
"token": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "usr_8Kj2mNpQxR",
"email": "[email protected]",
"name": "Acme Corp",
"organizationId": "org_3Vn9wLkDfT"
}
}// Response 200 — TOTP required
{
"totpRequired": true
}totpRequired, true olduğunda, giriş isteğini totpCode alanıyla yeniden gönderin.
// Request body with TOTP
{
"email": "[email protected]",
"password": "secureP@ssw0rd!",
"totpCode": "482901"
}Geçerli Kullanıcıyı Al
Kimlik doğrulaması yapılmış kullanıcı ve organizasyon ayrıntılarını alın.
GET /auth/me
Kimlik doğrulama: JWT Bearer
curl https://verify.solidus.network/v1/auth/me \
-H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."// Response 200
{
"organization": {
"id": "org_3Vn9wLkDfT",
"name": "Acme Corp",
"email": "[email protected]",
"plan": "starter",
"totpEnabled": false,
"createdAt": "2026-05-07T10:30:00Z"
}
}TOTP Kurulumu
İki faktörlü kimlik doğrulama için bir TOTP sırrı ve QR kodu üretin.
POST /auth/totp/setup
Kimlik doğrulama: JWT Bearer
// Response 200
{
"secret": "JBSWY3DPEHPK3PXP",
"qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."
}TOTP’yi Etkinleştir
Sırrı ve kimlik doğrulayıcı uygulamasından geçerli bir kodu sağlayarak TOTP kurulumunu onaylayın.
POST /auth/totp/enable
Kimlik doğrulama: JWT Bearer
// Request body
{
"secret": "JBSWY3DPEHPK3PXP",
"totpCode": "482901"
}// Response 200
{
"message": "TOTP enabled successfully"
}Parolamı Unuttum
Bir parola sıfırlama e-postası gönderin.
POST /auth/forgot-password
Kimlik doğrulama: Yok
// Request body
{
"email": "[email protected]"
}// Response 200
{
"message": "If an account with that email exists, a reset link has been sent"
}Parolayı Sıfırla
Sıfırlama e-postasındaki token’ı kullanarak yeni bir parola belirleyin.
POST /auth/reset-password
Kimlik doğrulama: Yok
// Request body
{
"token": "rst_7Hk3mRtQZvXp2...",
"password": "newSecureP@ssw0rd!"
}// Response 200
{
"message": "Password reset successfully"
}OAuth ile Giriş
Kullanıcıyı OAuth kimlik doğrulaması için Google veya GitHub’a yönlendirin. Yetkilendirmeden sonra, kullanıcı bir JWT ile geri yönlendirilir.
GET /auth/google — Google OAuth’a yönlendirir
GET /auth/github — GitHub OAuth’a yönlendirir
Doğrulama Oturumları
Bir Oturum Oluşturun
Yeni bir doğrulama oturumu oluşturun. Yanıt, barındırılan doğrulama akışı için kullanıcıları
yönlendirebileceğiniz bir sessionUrl içerir.
POST /verifications
Kimlik doğrulama: API Anahtarı (x-api-key)
// Request body
{
"level": 2,
"sandbox": false,
"redirectUrl": "https://acme.com/onboarding/complete",
"subjectDid": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K",
"metadata": {
"userId": "usr_acme_12345",
"plan": "premium"
}
}| Field | Type | Required | Description |
|---|---|---|---|
level | 1 | 2 | 3 | Evet | Doğrulama seviyesi. 1 = yalnızca belge, 2 = belge + canlılık, 3 = belge + canlılık + adres kanıtı |
sandbox | boolean | Hayır | true ise, gerçek doğrulama olmadan sandbox modunda çalışır |
sandboxOutcome | string | Hayır | Bir sandbox sonucunu zorla: "pass", "fail", "timeout", "document_rejected" |
subjectDid | string | Hayır | Oturumu belirli bir DID ile ilişkilendir |
redirectUrl | string | Hayır | Tamamlandıktan sonra kullanıcının yönlendirileceği URL |
metadata | object | Hayır | Oturumla birlikte saklanan keyfi anahtar-değer çiftleri |
// Response 201
{
"session": {
"id": "ver_9Xm4pLkWnR",
"organizationId": "org_3Vn9wLkDfT",
"status": "pending",
"level": 2,
"sandbox": false,
"subjectDid": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K",
"redirectUrl": "https://acme.com/onboarding/complete",
"metadata": {
"userId": "usr_acme_12345",
"plan": "premium"
},
"sessionToken": "sess_tok_7Hk3mRtQZv...",
"createdAt": "2026-05-07T14:20:00Z",
"expiresAt": "2026-05-07T15:20:00Z"
},
"sessionUrl": "https://verify.solidus.network/v/s/sess_tok_7Hk3mRtQZv..."
}Oturumları Listele
Organizasyonunuz için tüm doğrulama oturumlarını alın.
GET /verifications
Kimlik doğrulama: API Anahtarı (x-api-key)
| Query Param | Type | Description |
|---|---|---|
status | string | Duruma göre filtrele: pending, processing, completed, failed, expired |
limit | number | Sayfa başına sonuç (varsayılan: 20, maksimum: 100) |
offset | number | Sayfalama için ofset |
curl "https://verify.solidus.network/v1/verifications?status=approved&limit=10" \
-H "x-api-key: sk_live_abc123def456..."// Response 200
{
"sessions": [
{
"id": "ver_9Xm4pLkWnR",
"status": "completed",
"level": 2,
"subjectDid": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K",
"credentialId": "vc_3Kn8rTpXm2",
"createdAt": "2026-05-07T14:20:00Z",
"completedAt": "2026-05-07T14:25:30Z"
}
],
"total": 1
}Oturumu Al
Kimliğe göre tek bir doğrulama oturumunu alın.
GET /verifications/:id
Kimlik doğrulama: API Anahtarı (x-api-key)
curl https://verify.solidus.network/v1/verifications/ver_9Xm4pLkWnR \
-H "x-api-key: sk_live_abc123def456..."// Response 200
{
"session": {
"id": "ver_9Xm4pLkWnR",
"organizationId": "org_3Vn9wLkDfT",
"status": "completed",
"level": 2,
"sandbox": false,
"subjectDid": "did:solidus:testnet:7Hk3mRtQZvXp2nBw9Lj4K",
"redirectUrl": "https://acme.com/onboarding/complete",
"metadata": {
"userId": "usr_acme_12345",
"plan": "premium"
},
"documents": [
{
"type": "passport",
"side": "front",
"status": "verified",
"extractedData": {
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1990-03-15",
"documentNumber": "AB1234567",
"expiryDate": "2030-06-20",
"nationality": "US"
}
}
],
"liveness": {
"status": "passed",
"score": 0.97,
"completedAt": "2026-05-07T14:24:10Z"
},
"credentialId": "vc_3Kn8rTpXm2",
"createdAt": "2026-05-07T14:20:00Z",
"completedAt": "2026-05-07T14:25:30Z"
}
}Barındırılan Akış
Bu uç noktalar, barındırılan doğrulama arayüzü tarafından kullanılır. Bir API anahtarı yerine URL yoluna gömülü oturum token’ıyla kimlik doğrulaması yaparlar.
Token’a Göre Oturumu Al
Barındırılan akış için oturumu alın.
GET /verifications/s/:sessionToken
Kimlik doğrulama: Oturum token’ı (URL’de)
// Response 200
{
"session": {
"id": "ver_9Xm4pLkWnR",
"status": "pending",
"level": 2,
"organizationName": "Acme Corp",
"steps": ["document", "liveness"],
"currentStep": "document",
"expiresAt": "2026-05-07T15:20:00Z"
}
}Belge Yükle (Barındırılan)
Geçerli oturum için bir kimlik belgesi yükleyin.
POST /verifications/s/:sessionToken/documents
Kimlik doğrulama: Oturum token’ı (URL’de)
İçerik Türü: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
file | File | Evet | Belge görüntüsü (JPEG veya PNG, maksimum 10 MB) |
side | string | Evet | front veya back |
type | string | Evet | passport, driving_license, national_id veya residence_permit |
final | boolean | Hayır | true ise, belge adımını tamamlanmış olarak işaretler |
curl -X POST "https://verify.solidus.network/v1/verifications/s/sess_tok_7Hk3mRtQZv.../documents" \
-F "file=@passport_front.jpg" \
-F "side=front" \
-F "type=passport" \
-F "final=true"// Response 201
{
"document": {
"id": "doc_5Wn2kLpMxR",
"type": "passport",
"side": "front",
"status": "uploaded",
"createdAt": "2026-05-07T14:22:00Z"
}
}Canlılık Meydan Okumasını Al (Barındırılan)
Oturum için bir canlılık meydan okuması isteyin.
GET /verifications/s/:sessionToken/liveness-challenge
Kimlik doğrulama: Oturum token’ı (URL’de)
// Response 200
{
"challenge": {
"id": "chl_8Rn3mKpWxT",
"type": "head_turn",
"instructions": "Please turn your head slowly to the left",
"expiresAt": "2026-05-07T14:30:00Z"
}
}Canlılığı Gönder (Barındırılan)
Meydan okuma için canlılık karelerini gönderin.
POST /verifications/s/:sessionToken/liveness
Kimlik doğrulama: Oturum token’ı (URL’de)
İçerik Türü: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
frames | File[] | Evet | Canlılık meydan okuması sırasında yakalanan video kareleri |
// Response 200
{
"liveness": {
"status": "passed",
"score": 0.97
}
}Belge Yükleme (API Anahtarı)
Barındırılan akış yerine API anahtarınızı kullanarak belge yükleyin ve canlılık kontrollerini tamamlayın.
Belge Yükle
POST /verifications/:id/documents
Kimlik doğrulama: API Anahtarı (x-api-key)
İçerik Türü: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
file | File | Evet | Belge görüntüsü (JPEG veya PNG, maksimum 10 MB) |
side | string | Evet | front veya back |
type | string | Evet | passport, driving_license, national_id veya residence_permit |
final | boolean | Hayır | true ise, belge adımını tamamlanmış olarak işaretler ve işlemeyi tetikler |
curl -X POST "https://verify.solidus.network/v1/verifications/ver_9Xm4pLkWnR/documents" \
-H "x-api-key: sk_live_abc123def456..." \
-F "file=@passport_front.jpg" \
-F "side=front" \
-F "type=passport" \
-F "final=true"// Response 201
{
"document": {
"id": "doc_5Wn2kLpMxR",
"type": "passport",
"side": "front",
"status": "uploaded",
"createdAt": "2026-05-07T14:22:00Z"
}
}Canlılık Meydan Okumasını Al
GET /verifications/:id/liveness-challenge
Kimlik doğrulama: API Anahtarı (x-api-key)
// Response 200
{
"challenge": {
"id": "chl_8Rn3mKpWxT",
"type": "head_turn",
"instructions": "Please turn your head slowly to the left",
"expiresAt": "2026-05-07T14:30:00Z"
}
}Canlılığı Gönder
POST /verifications/:id/liveness
Kimlik doğrulama: API Anahtarı (x-api-key)
İçerik Türü: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
frames | File[] | Evet | Canlılık meydan okuması sırasında yakalanan video kareleri |
// Response 200
{
"liveness": {
"status": "passed",
"score": 0.97
}
}API Anahtarları
Organizasyonunuz için API anahtarlarını yönetin. Her anahtar live veya sandbox moduna
kapsamlanmıştır.
API Anahtarı Oluştur
POST /api-keys
Kimlik doğrulama: JWT Bearer
// Request body
{
"name": "Production Key",
"mode": "live"
}// Response 201
{
"key": "sk_live_abc123def456ghi789jkl012mno345pqr678",
"id": "key_4Tn7mLkPxR"
}Tam anahtar yalnızca oluşturma sırasında bir kez döndürülür. Güvenli bir şekilde saklayın.
API Anahtarlarını Listele
GET /api-keys
Kimlik doğrulama: JWT Bearer
// Response 200
{
"keys": [
{
"id": "key_4Tn7mLkPxR",
"name": "Production Key",
"mode": "live",
"prefix": "sk_live_abc123...",
"lastUsedAt": "2026-05-07T14:00:00Z",
"createdAt": "2026-05-01T09:00:00Z"
},
{
"id": "key_6Wn9pMkRxT",
"name": "Test Key",
"mode": "sandbox",
"prefix": "sk_sandbox_xyz789...",
"lastUsedAt": null,
"createdAt": "2026-05-03T11:00:00Z"
}
]
}API Anahtarını Sil
DELETE /api-keys/:keyId
Kimlik doğrulama: JWT Bearer
curl -X DELETE https://verify.solidus.network/v1/api-keys/key_4Tn7mLkPxR \
-H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."// Response 200
{
"message": "API key deleted"
}Webhook’lar
Doğrulama olayları meydana geldiğinde gerçek zamanlı bildirimler alın. Webhook yükleri, doğrulama için HMAC-SHA256 ile imzalanır.
Webhook Uç Noktası Oluştur
POST /webhooks
Kimlik doğrulama: JWT Bearer
// Request body
{
"url": "https://acme.com/webhooks/solidus",
"events": [
"verification.completed",
"verification.failed",
"verification.expired"
],
"description": "Production webhook for verification results"
}Mevcut olaylar: verification.completed, verification.failed, verification.expired,
credential.issued, credential.revoked. Varsayılan (events atlanırsa): verification.completed,
credential.issued.
// Response 201
{
"endpoint": {
"id": "wh_2Kn5mTpLxR",
"url": "https://acme.com/webhooks/solidus",
"events": [
"verification.completed",
"verification.failed",
"verification.expired"
],
"description": "Production webhook for verification results",
"secret": "whsec_7Hk3mRtQZvXp2nBw9Lj4K...",
"enabled": true,
"createdAt": "2026-05-07T10:00:00Z"
}
}Sır (secret) yalnızca bir kez döndürülür. Webhook imzalarını doğrulamak için onu kullanın.
Webhook Uç Noktalarını Listele
GET /webhooks
Kimlik doğrulama: JWT Bearer
// Response 200
{
"endpoints": [
{
"id": "wh_2Kn5mTpLxR",
"url": "https://acme.com/webhooks/solidus",
"events": ["verification.completed", "verification.failed", "verification.expired"],
"description": "Production webhook for verification results",
"enabled": true,
"createdAt": "2026-05-07T10:00:00Z"
}
]
}Webhook Uç Noktasını Güncelle
PATCH /webhooks/:endpointId
Kimlik doğrulama: JWT Bearer
// Request body
{
"url": "https://acme.com/webhooks/solidus-v2",
"events": ["verification.completed", "verification.failed"],
"enabled": true
}Tüm alanlar isteğe bağlıdır. Yalnızca sağlanan alanlar güncellenir.
// Response 200
{
"endpoint": {
"id": "wh_2Kn5mTpLxR",
"url": "https://acme.com/webhooks/solidus-v2",
"events": ["verification.completed", "verification.failed"],
"description": "Production webhook for verification results",
"enabled": true,
"createdAt": "2026-05-07T10:00:00Z"
}
}Webhook Uç Noktasını Sil
DELETE /webhooks/:endpointId
Kimlik doğrulama: JWT Bearer
curl -X DELETE https://verify.solidus.network/v1/webhooks/wh_2Kn5mTpLxR \
-H "Authorization: Bearer eyJhbGciOiJFZERTQSIs..."// Response 200
{
"message": "Webhook endpoint deleted"
}Webhook Teslimatlarını Listele
Belirli bir uç nokta için teslimat geçmişini görüntüleyin.
GET /webhooks/:endpointId/deliveries
Kimlik doğrulama: JWT Bearer
| Query Param | Type | Description |
|---|---|---|
status | string | Duruma göre filtrele: success, failed, pending |
limit | number | Sayfa başına sonuç (varsayılan: 20, maksimum: 100) |
offset | number | Sayfalama için ofset |
// Response 200
{
"deliveries": [
{
"id": "dlv_9Xm4pLkWnR",
"event": "verification.completed",
"status": "success",
"statusCode": 200,
"payload": {
"event": "verification.completed",
"data": {
"sessionId": "ver_9Xm4pLkWnR",
"status": "completed",
"credentialId": "vc_3Kn8rTpXm2"
},
"timestamp": "2026-05-07T14:25:30Z"
},
"attemptCount": 1,
"deliveredAt": "2026-05-07T14:25:31Z"
}
],
"total": 1
}