DojangScore API v1 · testnet Releases Get a key
Read the
trust layer.

One call returns a wallet's 0–1000 trust score, its tier, the provenance behind it, and the fee discounts it unlocks on GIWA. Cached, keyed, and ready for your launchpad, airdrop, or payment flow.

GIWA Sepolia · 91342 REST · JSON 45s cache OP Stack
proven@api — request
$ 

01Overview

The DojangScore API is a thin, authenticated read-layer over the DojangScoreV2 contract on GIWA. It converts on-chain attestations (Upbit KYC via Dojang, verified balance, account age, verified code) plus on-chain behaviour into a single 0–1000 trust score with a tier and a provenance ceiling.

Use it to gate, weight, or price anything off-chain: launchpad allocations, airdrop multipliers, trading fees, remittance limits, quest rewards. For settlement-critical logic, read the contract on-chain instead (see On-chain vs API).

Design principle: the API never invents trust. Every point it returns is traceable to a provenance class, and the score can never exceed the ceiling set by the strongest proof a wallet holds.

02Quickstart

Three steps to a live score.

1 · Get a key (instant)

Issue a free trial key instantly — no email, no wait:

curl -X POST https://giwa-defi-suite.vercel.app/api/keys/trial \
  -H "content-type: application/json" \
  -d '{"project":"my-launchpad"}'

Returns a key — 1,000 free testnet calls · 60 req/min · upgrade nudge at 900. Keep the key server-side. Subscribe for more at proven.defi@gmail.com.

2 · Make your first request

curl -H "x-proven-key: YOUR_KEY" \
  https://giwa-defi-suite.vercel.app/api/score/0xE5EFB15259292F5B60A1DB074B708712998dB147

3 · Read the response

score is the clamped 0–1000 value, tierName the band, ceilingProvenance the strongest proof class, and fees the on-chain discounts the tier unlocks. Full schema under GET /score.

WHY PROVEN?

The Trust Layer

Activity can be faked. Identity can't.
01

Identity, not just activity.

Volume is cheap — bots can fake a million swaps. Proven scores who you are, not just what you do: we read Dojang attestations (Upbit KYC, verified balance, account age, verified code) via EAS and compress them into one 0–1000 trust score. Activity can raise your score; it can never substitute for proof.

—Activity-only scorers (e.g. Hanok) reward wash-trading. Proven rewards being a provable human.
02

The Provenance Ceiling.

Our unique cryptographic guarantee: a score can never exceed the strength of its strongest underlying proof. Behavioral points grind you to Silver; consented proofs open Gold; only a regulated attester root unlocks Platinum. A farm with infinite volume still caps at Silver — the ceiling is enforced on-chain, not by policy.

—No other scoring system on GIWA — including Hanok — has a ceiling. Ours is math.
03

Regulatory ready.

Because Proven integrates with Dojang and Upbit KYC, the Platinum tier is compliant-ready for B2B and institutional flows. Remittance limits, tiered fees, gated allocations — every gate inherits a KYC-backed attestation, not a heuristic.

—Institutions don't buy heuristics. They buy attestations.

03Authentication

Every request requires the x-proven-key header. Missing or invalid keys return 401.

HeaderTypeDescription
x-proven-keystringYour issued API key. Keep it server-side; never ship it in client bundles.
Security: keys identify your project for quota + billing. If a key leaks, rotate it by requesting a re-issue; the old key is invalidated on next deploy.

Responses include rate-limit headers (X-RateLimit-Limit, -Remaining, -Reset) so you can throttle client-side. See Rate limits.

04Core concepts

The score is a sum of capped provenance contributions, clamped by a ceiling. Understanding both is the whole model.

TermRangeMeaning
score0–1000Final clamped trust score. The value to gate on.
tier / tierName0–3Band derived from score (see tiers).
rawSumintSum of capped contributions before the ceiling clamp.
ceilingintHard cap set by the strongest provenance class present.
ceilingProvenanceenumThe class that set the ceiling.

Tiers & on-chain fees

TierScoreGIWASwap feeWonVault entryTypical gate
Standard0–1990.30%2.00%unverified / bot-risk
Silver200–4990.20%1.50%behavioural proof
Gold500–7990.15%1.00%consented identity
Platinum800–10000.10%0.50%regulated attester

The same tier that the API reports is what the on-chain contracts charge — so an off-chain gate and the on-chain fee always agree.

Provenance & the ceiling

ClassSourceCeilingHow a wallet gets it
ATTESTERRegulated attester (Upbit / Dojang)1000KYC attestation on-chain
CONSENTEDSelf-submitted consented proofs799Wallet submits proofs (ENS, Passport, renewals)
BEHAVIORALReporter-attested on-chain activity499Swaps, LP, vault holds, votes
STATETrustless on-chain state499Currently holds LP / vault shares
NONE—0No signal
Why the ceiling matters: a wallet can earn points from behaviour, but it can never claim a higher ceiling than its strongest proof. A sybil farm can grind to Silver; it cannot buy its way to Platinum. That is the anti-fraud guarantee your gates inherit for free.
GET/api/score/{address}authcached 45s

Returns the full trust breakdown for a wallet.

Path parameters

ParamTypeDescription
addressstringrequired0x-prefixed, 40-hex EVM address. Returns 400 if malformed.

Response · 200

FieldTypeDescription
addressstringChecksummed address.
scoreintFinal clamped score 0–1000.
tierint0–3.
tierNamestringStandard / Silver / Gold / Platinum.
ceilingintProvenance ceiling.
ceilingProvenancestringNONE / BEHAVIORAL / CONSENTED / ATTESTER.
provenance.baseAttestationintCapped attester-rooted contribution (0–1000).
provenance.trustlessStateintCapped trustless state contribution (0–100).
provenance.reporterActivityintCapped behavioural contribution (0–250).
provenance.consentedProofsintCapped consented contribution (0–250).
rawSumintSum before clamp.
holdsLP / holdsVaultboolCurrent on-chain LP / vault position.
cachedboolTrue if served from the 45s cache.
cachedAtISO-8601When the cached value was read.
curl -H "x-proven-key: $PROVEN_KEY" \
  .../api/score/0xADDRESS
GET/api/tier/{address}authcached 45s

Lightweight tier + fee lookup when you don't need the full breakdown.

FieldTypeDescription
tier / tierNameint / stringBand.
scoreRange[int,int]Inclusive score band.
fees.swapstringOn-chain GIWASwap fee for this tier.
fees.vaultEntrystringOn-chain WonVault entry fee.
GET/api/healthno auth

Liveness + chain head. No key required.

FieldTypeDescription
okboolService up.
chain / chainIdstring / intGIWA Sepolia / 91342.
blockintLatest block seen.
contractstringDojangScoreV2 address.
POST/api/score/batchauthcached 45s

Score up to N addresses in one call for airdrop / allowlist sweeps.

FieldTypeDescription
addressesarrayArray of 0x-prefixed, 40-hex EVM addresses (max 500).

Returns { results, count, failed }. Malformed entries or lookup failures come back as { address, error } without failing the overall batch. Each valid address counts as one call toward your quota.

curl -X POST -H "x-proven-key: $PROVEN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"addresses":["0xADDRESS1","0xADDRESS2"]}' \
  .../api/score/batch

05Errors

CodeMeaningHandle by
400Malformed addressValidate 0x + 40 hex client-side first.
401Missing / invalid keyCheck header + key validity.
404Unknown routeFix path.
429Rate limitedBack off using Retry-After.
500Internal errorRetry with backoff; report if persistent.
503Upstream RPC unavailableRetry; fall back to on-chain read if critical.

Error bodies are { "error": "message", "code": "…" }.

06Rate limits & caching

Key tierBurstMonthlyNotes
Trial (instant)60 req/min1,000 calls/moFree on testnet. Instant via POST /api/keys/trial. Upgrade nudge at 900 calls. Subscribe via proven.defi@gmail.com.
Builder300 req/min50,000Paid.
ScalecustomcustomTalk to us.

Responses are cached for 45 seconds per address; cached:true tells you a value came from cache. For most gating use-cases 45s staleness is irrelevant; for settlement, read on-chain.

07Performance · measured on live deployment

Measured 2026-08-27 · GIWA Sepolia (chainId 91342) · 10–15 sequential requests each

Endpointp50p95max
/api/health484 ms761 ms761 ms
/api/score/:addr (cached)241 ms276 ms276 ms
/api/score/:addr (cold)511 ms1207 ms1207 ms

Cached reads return in under 300 ms. Cold reads include an RPC round-trip to GIWA Sepolia. Times measured from a single origin; your latency may vary by region.

08Playground · reads the chain live, no key needed

This reads DojangScoreV2 directly over public RPC — the same source the API caches — so you can verify any wallet right now.

Score
—
Tier
—
Ceiling
—
Provenance
—

08Playbooks

Drop-in gating patterns. Each is a few lines because the hard part (provenance) is already on-chain.

Launchpad · sybil-resistant allocation

// Only wallets with a real proof get an allocation; weight by tier.
const s = await score(addr);
if (s.ceilingProvenance === "NONE")        reject();          // no proof, no alloc
const mult = [0, 1, 1.5, 2][s.tier];       // Standard..Platinum
alloc = base * mult;

Airdrop · tier multipliers

const MULT = { Standard:1, Silver:1.25, Gold:1.5, Platinum:2 };
payout = base * MULT[s.tierName];

Payments / remittance · tiered limits

const DAILY = { Standard:500, Silver:2500, Gold:10000, Platinum:50000 };
limit = DAILY[s.tierName];

Quests · gate high-value tasks

if (s.tier >= 1) unlock("high-value quest");  // Silver+

09On-chain vs API

APIOn-chain
Latency~tens of ms, cachedRPC round-trip
Costquotayour RPC
Trusttrust Proven's cachetrustless — the contract is truth
Use foroff-chain gating, UI, sweepsfee charging, settlement, anything monetary

Contract: 0xDe9De6f3d4a50BF414927EF6D523aFa65355492a (DojangScoreV2). Minimal ABI:

["function score(address) view returns (uint16)",
 "function tierOfWallet(address) view returns (uint8)",
 "function scoreBreakdown(address) view returns (tuple(uint16,uint16,uint16,uint16,uint16,uint16,uint8,uint16,uint8,bool,bool))"]
Rule of thumb: if money moves based on the value, read it on-chain. If a human/UI/off-chain service consumes it, use the API.

10Roadmap

ItemStatus
score / tier / health + caching + pilot keyslive (testnet)
batch scoringlive (testnet)
webhooks on tier changeplanned
mainnet deploymentplanned
multi-attester quorum scoringplanned

11Get a key

Instant trial (recommended)

Issue yourself a key in seconds — no signup, no email. One command:

curl -X POST https://giwa-defi-suite.vercel.app/api/keys/trial \
  -H "content-type: application/json" \
  -d '{"project":"my-launchpad"}'

You'll receive:

FieldValue
cap1,000 calls / 30 days
burstPerMin60 req/min
nudgeNotice appended to responses after call 900
upgradeproven.defi@gmail.com

Check your usage at any time:

curl -H "x-proven-key: YOUR_KEY" \
  https://giwa-defi-suite.vercel.app/api/keys/usage
Why builders adopt it: one header replaces your own sybil heuristics, and the provenance ceiling means you inherit an anti-fraud guarantee you didn't have to design.