Every successful call earns experience for the account that made it, weighted by what the call was. The intent is to recognise how deeply you have integrated rather than how much traffic you send, so the calls you only make once you have built something are worth several times a page of a list.
What a call is worth
Read from the table the API writes from, so this page cannot fall behind it. 20 operations are worth more than the floor; everything else earns 1.
Operation
What it is
Worth
GET/v1/attachments/{id}/firearms
List firearms an attachment fits
8
GET/v1/firearms/{id}/attachments
List attachments that fit a firearm
8
GET/v1/firearms/{id}/interfaces
Get a firearm's mount interfaces
8
GET/v1/firearms/head-to-head
Compare two firearms head to head
8
GET/v1/firearms/resolve
Resolve a name to one firearm
8
POST/v1/firearms/resolve
Resolve many names at once
8
GET/v1/ammunition/{id}/ballistics
Compute a ballistic table
5
GET/v1/calibers/{id}/firearms
List firearms in a caliber
5
GET/v1/calibers/ballistics
Get a caliber ballistic profile
5
GET/v1/calibers/compare
Compare calibers
5
GET/v1/firearms/{id}/calculate
Calculate ballistics for a firearm
5
GET/v1/firearms/{id}/similar
Find similar firearms
5
GET/v1/firearms/{id}/variants
List variants
5
GET/v1/firearms/compare
Compare firearms
5
GET/v1/firearms/search
Full-text search
3
GET/v1/ammunition/{id}
Get an ammunition load
2
GET/v1/attachments/{id}
Get an attachment
2
GET/v1/calibers/{id}
Get a caliber
2
GET/v1/firearms/{id}
Get a firearm
2
GET/v1/manufacturers/{id}
Get a manufacturer
2
Every other operation
A page of a list included. Paging is how a mirror is built, which is fine, and not a demonstration of anything.
1
Who earns
Experience recognises something you built, so it is earned by the clients that do the building. The kind is read from your User-Agent, the same way the request log records it.
Client
Earns
What it is
sdk-typescript
yes
The TypeScript SDK.
sdk-python
yes
The Python SDK.
mcp
yes
The hosted MCP server.
http-tool
yes
curl, Postman, HTTPie and the like: somebody trying it for real.
http-library
yes
An HTTP client inside your own code.
unknown
yes
A runtime that sends no agent. Far likelier to be your integration than a browser.
browser
no
A browser earns nothing.
Two other calls earn nothing. A 304 Not Modified earns nothing, on the same reasoning that it spends none of your allowance: the polite integration must not be the expensive one, and caching is what we would rather you did. A call that failed earns nothing either, so guessing at ids pays nothing.
The curve
Your level follows from your total and nothing else. Each level costs a little more than the last, so the early ones come quickly and the later ones are earned. The days column is what it would take at the ceiling of 500 a day, which a real integration never meets.
Level
Starts at
Costs
Days at the cap
1
0
0
0
2
50
50
1
3
200
150
1
4
450
250
1
5
800
350
2
6
1,250
450
3
7
1,800
550
4
8
2,450
650
5
9
3,200
750
7
10
4,050
850
9
Breadth and the streak
Two figures beside the level, both counted rather than earned. There are 145 documented operations to meet.
Breadth
operationsUsed is how many you have called at least once, against operationsAvailable. Counted by a nightly job from the request log, so an operation you call for the first time today appears tomorrow. It costs nothing on the request path, which is the point.
The streak
streakDays is consecutive days you have called at all, and daysActive is the total. Yesterday still counts as unbroken, so a timezone does not cost you a streak. Neither pays experience: a bonus for showing up rewards the calendar rather than the integration.
Reading your standing
GET /v1/me/usage returns a progress block beside the usage counters: xp, xpToday, dailyXpCap, level, levelStartsAt, nextLevelAt, and the breadth and streak figures above. The two level bounds are there so a client can draw the bar without knowing the formula.
Field
What it means
xp
Experience earned across every key on the account, for its whole life.
xpToday
Experience earned today (UTC).
dailyXpCap
The most one key can earn in a UTC day. A ceiling rather than a target: reaching it every day is not how the levels are meant to be climbed.
level
Your level, derived from xp alone. Nothing else moves it.
levelStartsAt
The experience this level began at.
nextLevelAt
The experience the next level begins at.
streakDays
Consecutive days you have called the API, counting today. A day you did not call breaks it, though yesterday still counts as unbroken so a timezone does not cost you a streak. Reported, never rewarded: no experience is paid for showing up.
daysActive
Days you have called the API at all, over the last two years.
operationsUsed
Documented operations you have called at least once. Counted from the request log by the nightly job, so an operation you called for the first time today appears tomorrow.
operationsAvailable
Documented operations there are to call, counted from this document rather than written down, so it cannot fall behind a route added today.