Skip to content

Tamga Verify API ​

Web sitenizden ya da servisinizden kişiden belge isteyin, doğrulanmış sonucu alın.

Gerçek ağ
https://verify.tamga.network
Sandbox (deneme ağı)
https://verify.sandbox.tamga.network
Kimlik doğrulama
Bearer (tamga-rp+jwt) ya da X-Tamga-Status-Token başlık

Tamga Verify, Tamga Network'ün barındırılan doğrulayıcısıdır (ADR-0017). Tarayıcı tarafı @tamga-network/verifier/web; barındırılan doğrulayıcı olmadan sunucuda doğrulama @tamga-network/verifier.

Akış. Sunucunuz bir politika (hangi belge, hangi alanlar) için sunum açar → sayfanız QR kodu ya da "Cüzdanında aç" bağlantısını gösterir ve status_token ile durumu sorar → durum DONE olunca sunucunuz sonucu ve bir kez onaylanan değerleri okur.

Gizlilik. Sonuç ve değerler yalnızca sunumu açan doğrulayıcıya gider. Değerler bir kez okunabilir ve en geç sonuçtan 5 dakika sonra silinir. Tarayıcı yalnızca durumu görür, değerleri hiç görmez.

Sonuçlar. ACCEPTED, REJECTED (başarısız adımla) ya da INDETERMINATE ("şu an denetlenemedi" — asla geçersiz sayılmaz).

Uç noktalar ​

Uç noktaAçıklama
POST /presentationsSunum isteği aç
GET /presentations/{id}Durumu ya da doğrulama sonucunu al
GET /presentations/{id}/claimsOnaylanan değerleri oku (bir kez)
GET /presentations/{id}/qr.pngQR kodu görüntüsünü al
GET /policiesPolitikaları listele
GET /tamga-verifier.jsSayfa kitini yükle

Kimlik doğrulama ​

Bearer (tamga-rp+jwt)

Authorization: Bearer <RP beyanı> — Tamga güven listesinde kayıtlı erişim sertifikanızın özel anahtarıyla imzalanmış kısa ömürlü bir JWS (typ: tamga-rp+jwt, ES256). x5c başlığı sertifikayı taşır; içerik { iss: <client_id'niz>, aud: "https://verify.tamga.network", iat, exp ≤ iat + 60, jti }. Paylaşılan gizli anahtar yoktur; jti tek kullanımlıktır. Yardımcı: @tamga-network/verifier içindeki createRpAssertion().

X-Tamga-Status-Token başlık

Tarayıcı için yalnız durum jetonu (?st= olarak da kabul edilir). Durumu gösterir, değerleri asla.

Sunumlar ​

Belge isteyin ve sonucu okuyun.

Sunum isteği aç ​

POST/presentations

Politika için imzalı bir OpenID4VP isteği oluşturur. Politika kayıtlı kapsamınızın içinde olmalıdır (değilse 400 policy_exceeds_scope). JSON almak için Accept: application/json gönderin; göndermezseniz doğrulayıcı kendi bekleme sayfasına yönlendirir.

Kimlik doğrulama Bearer (tamga-rp+jwt)

Parametreler ​

AdYerTürAçıklama
Accept zorunlubaşlıkstringJSON yanıt isteyin. Her zaman application/json

İstek gövdesi ​

application/json

AlanTürAçıklama
policy_id zorunlustringGET /policies listesinden bir politika, ör. site-signup, age-over-18-mdoc.
dc_api_originstring (uri)İsteğe bağlı. Sunum tarayıcının Digital Credentials API'siyle yanıtlanacaksa sayfanın kökeni (https://…, yol yok). İstek bu kökene bağlanır (expected_origins).

Yanıtlar ​

DurumAçıklama
200Sunum açıldı. Döner: StartedPresentation
400unknown_policy, policy_exceeds_scope (politika kayıtlı kapsamınızdan fazlasını istiyor; detail neyi olduğunu listeler) ya da invalid_request (geçersiz dc_api_origin). Döner: Error
401invalid_rp_assertion — RP beyanının süresi dolmuş, tekrar kullanılmış ya da kayıtlı ve etkin bir doğrulayıcı tarafından imzalanmamış. Döner: Error
429rate_limited — çok fazla istek. Retry-After başlığındaki saniye kadar bekleyip yeniden deneyin. İstemci adresi saklanmaz ve günlüğe yazılmaz; cüzdanın çağırdığı /vp/response ve kapıların /terminal/verify uçlarında da aynı koruma vardır. Döner: Error Başlıklar: Retry-After

Örnek ​

bash
curl -X POST "https://verify.tamga.network/presentations" \
  -H "Authorization: Bearer $RP_ASSERTION" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"policy_id":"site-signup"}'
json
{
  "presentation_id": "prs_Q2x0dVJmNkp3",
  "request_uri": "https://verify.tamga.network/vp/req/prs_Q2x0dVJmNkp3",
  "qr_payload": "openid4vp://?client_id=x509_hash%3A…&request_uri=https%3A%2F%2Fverify.tamga.network%2Fvp%2Freq%2Fprs_Q2x0dVJmNkp3",
  "expires_at": "2026-10-09T12:05:00Z",
  "status_token": "9VdB0qXr7mYk2LwPq1sZ3A"
}

Durumu ya da doğrulama sonucunu al ​

GET/presentations/{id}

RP beyanınızla: doğrulama sonucunun tamamı (cüzdan yanıtlayana kadar {"state": "PENDING"}). Yalnız durum jetonuyla (?st= ya da X-Tamga-Status-Token, Authorization yok): tarayıcı için durum; değer ve ad içermez.

Kimlik doğrulama Bearer (tamga-rp+jwt) ya da X-Tamga-Status-Token başlık

Parametreler ​

AdYerTürAçıklama
id zorunluyolstringcreatePresentation yanıtındaki presentation_id.
stsorgustringcreatePresentation yanıtındaki durum jetonu; tarayıcı için.

Yanıtlar ​

DurumAçıklama
200Durum (PENDING), tarayıcı durumu ya da sonucun tamamı. Döner: VerificationResult ya da BrowserStatus ya da Pending
401invalid_rp_assertion. Döner: Error
404not_found — bilinmeyen sunum ya da sizin değil (varlığı açığa vurulmaz). Döner: Error

Örnek ​

bash
curl "https://verify.tamga.network/presentations/prs_Q2x0dVJmNkp3" \
  -H "Authorization: Bearer $RP_ASSERTION"
json
{
  "verification_id": "vrf_Q2x0dVJmNkp3",
  "outcome": "ACCEPTED",
  "failed_step": "…",
  "failed_reason": "…",
  "indeterminate_reason": "SCHEMA_UNREACHABLE",
  "spec_version": "…",
  "sdk_version": "…",
  "checks_performed": [
    "T0",
    "A1",
    "A2",
    "B1",
    "C1",
    "D1",
    "E1"
  ],
  "checks_skipped": [],
  "issuer": {
    "issuer_id": "…",
    "state_code": "TR",
    "legal_name": "…",
    "category": "…",
    "assurance": "…",
    "class": "PUB"
  },
  "schema": {
    "schema_id": "…",
    "vct": "urn:tamga:id:IdentityAttestation:1",
    "status": "…"
  },
  "disclosed_claims": [
    "given_name",
    "family_name"
  ],
  "status": {
    "value": "VALID",
    "list_version": 0,
    "token_age_sec": 0,
    "reason": "…"
  },
  "freshness": {
    "trust_source": "list",
    "trust_version": 0,
    "trust_age_sec": 0
  },
  "evaluated_at": "2026-10-09T12:00:00Z"
}

Onaylanan değerleri oku (bir kez) ​

GET/presentations/{id}/claims

Kişinin onayladığı değerleri döndürür. Bir kez ve en geç sonuçtan 5 dakika sonrasına kadar okunabilir.

Kimlik doğrulama Bearer (tamga-rp+jwt)

Parametreler ​

AdYerTürAçıklama
id zorunluyolstringcreatePresentation yanıtındaki presentation_id.

Yanıtlar ​

DurumAçıklama
200Değerler; sunum beklerken null.
404not_found — bilinmeyen sunum ya da sizin değil.
410claims_gone — değerler zaten okundu ya da süresi doldu.

Örnek ​

bash
curl "https://verify.tamga.network/presentations/prs_Q2x0dVJmNkp3/claims" \
  -H "Authorization: Bearer $RP_ASSERTION"
json
{
  "claims": {
    "given_name": "Ayşe",
    "family_name": "Yılmaz",
    "pseudonym": "ps_7Qm…"
  }
}

QR kodu görüntüsünü al ​

GET/presentations/{id}/qr.png

qr_payload bağlantısının PNG'si (440 px); doğrudan <img> içine konabilir.

Kimlik doğrulama Yok — herkese açık

Parametreler ​

AdYerTürAçıklama
id zorunluyolstringcreatePresentation yanıtındaki presentation_id.

Yanıtlar ​

DurumAçıklama
200PNG görüntü.
404Bilinmeyen sunum.

Örnek ​

bash
curl "https://verify.tamga.network/presentations/prs_Q2x0dVJmNkp3/qr.png"

Politikalar ​

Neler istenebilir.

Politikaları listele ​

GET/policies

Bu doğrulayıcının isteyebildiği politikalar. Kişisel veri içermez.

Kimlik doğrulama Yok — herkese açık

Yanıtlar ​

DurumAçıklama
200Politika özetleri. Döner: PolicySummary

Örnek ​

bash
curl "https://verify.tamga.network/policies"
json
[
  {
    "policy_id": "age-over-18-zk",
    "purpose": "Over-18 check with a zero-knowledge proof — yes/no only, nothing else",
    "purpose_localized": {
      "en-US": "Over-18 check with a zero-knowledge proof — yes/no only, nothing else",
      "tr-TR": "Sıfır bilgi ispatıyla 18 yaş üstü doğrulaması — yalnızca evet/hayır, başka hiçbir şey"
    },
    "vct_values": [
      "urn:tamga:id:IdentityAttestation:1"
    ],
    "claims": [
      "age_over_18"
    ],
    "proximity": false,
    "format": "mso_mdoc_zk"
  }
]

Sayfa kiti ​

Tarayıcı tarafı dosyaları.

Sayfa kitini yükle ​

GET/tamga-verifier.js

@tamga-network/verifier/web paketinin tarayıcı dosyası (QR kod, "Cüzdanında aç" düğmesi, durum sorgusu, Digital Credentials API). 5 dakika önbellekte tutulur.

Kimlik doğrulama Yok — herkese açık

Yanıtlar ​

DurumAçıklama
200JavaScript.

Örnek ​

bash
curl "https://verify.tamga.network/tamga-verifier.js"

Nesneler ​

StartedPresentation ​

AlanTürAçıklama
presentation_id zorunlustring
request_uri zorunlustring (uri)Cüzdanın imzalı isteği aldığı adres.
qr_payload zorunlustringopenid4vp://… bağlantısı — masaüstünde QR kod, telefonda düğme olarak gösterin.
expires_at zorunlustring (date-time)
status_token zorunlustringTarayıcıya yalnız bunu verin.
dc_api_requestobjectdc_api_origin gönderildiyse gelir — navigator.credentials.get({ digital }) girdisi.
dc_api_request.protocolstringHer zaman openid4vp-v1-signed
dc_api_request.dataobject
dc_api_request.data.requeststringİmzalı istek nesnesi (JWS).

Pending ​

Cüzdan henüz yanıtlamadı.

AlanTürAçıklama
statestringHer zaman PENDING

BrowserStatus ​

Tarayıcının durum jetonuyla gördüğü — değer yok, ad yok.

AlanTürAçıklama
statestringDeğerler: PENDING · DONE
outcomestringDeğerler: ACCEPTED · REJECTED · INDETERMINATE
failed_reasonstring | null
indeterminate_reasonstring | null

VerificationResult ​

Sonucun tamamı; yalnız sunumu açan doğrulayıcıya.

AlanTürAçıklama
verification_idstring
outcomestringINDETERMINATE "şu an denetlenemedi" demektir — asla geçersiz saymayın. Değerler: ACCEPTED · REJECTED · INDETERMINATE
failed_stepstring | nullREJECTED ise doğrulama hattında ilk başarısız adım (T0, A1…E3, P1).
failed_reasonstring | null
indeterminate_reasonstring | nullDeğerler: SCHEMA_UNREACHABLE · STATUS_UNREACHABLE · STATUS_STALE · CHAIN_UNREACHABLE · INDEXER_STALE · SDK_VERSION_MISMATCH
spec_versionstringDoğrulama şartnamesi sürümü.
sdk_versionstringDoğrulayıcı paket sürümü.
checks_performedarray<string>
checks_skippedarray<string>
issuerobject | nullBelgeyi veren kurum (güven listesinden).
issuer.issuer_idstring
issuer.state_codestring
issuer.legal_namestring
issuer.categorystring
issuer.assurancestring
issuer.classstringDeğerler: PUB · QUALIFIED · EAA
schemaobject | null
schema.schema_idstring
schema.vctstring
schema.statusstring
disclosed_claimsarray<string>Açılan alanların adları (değerler /claims ile).
statusobjectBelgenin iptal durumu.
status.valuestringDeğerler: VALID · INVALID · SUSPENDED · NOT_APPLICABLE · UNKNOWN
status.list_versioninteger | null
status.token_age_secinteger | null
status.reasonstring | nullDurumun bu değeri neden aldığı (kendiliğinden anlaşılmıyorsa) — ör. sıfır bilgi ispatlı sunumda NOT_APPLICABLE; bu sunum iptal indeksini açmaz (ADR-0032; belge kısa ömürlüdür). Kabul edilip edilmeyeceğine politika karar verir; edilmezse sonuç INDETERMINATE olur. Kişisel veri içermez.
freshnessobjectKullanılan güven verisinin tazeliği.
freshness.trust_sourcestringDeğerler: list · chain
freshness.trust_versioninteger
freshness.trust_age_secinteger
evaluated_atstring (date-time)

PolicySummary ​

AlanTürAçıklama
policy_idstring
purposestringAmaç (İngilizce).
purpose_localizedobjectDil etiketine göre amaç (en-US, tr-TR).
vct_valuesarray<string>
claimsarray<string>İstenen alanlar.
proximitybooleanPolitika ayrıca geçiş kartı verir.
formatstringmso_mdoc_zk = mdoc üzerinde sıfır bilgi ispatı (ADR-0032). İspatı üretemeyen cüzdan klasik mso_mdoc politikasını kullanır (ör. age-over-18-mdoc). Değerler: dc+sd-jwt · mso_mdoc · mso_mdoc_zk

Error ​

AlanTürAçıklama
errorstring
error_descriptionstring
detailarray<string>policy_exceeds_scope ile birlikte: kapsamınızı aşan kısımlar.

Makine okur tanımı herhangi bir OpenAPI aracına aktararak istemci üretebilir ya da deneme isteği gönderebilirsiniz: hosted-verifier-api.openapi.yaml.