{"openapi":"3.1.0","info":{"title":"pump.fun Data API","version":"1.0.0","description":"Read on a data key on plan builder or above, the allowance and errors of the FOMO Data API."},"servers":[{"url":"https://api.hansem.io","description":"The API host"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"A data key on plan builder or above, issued by the operator. Never put it in a URL."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-Api-Key","description":"The same data key, for a client that sends it as a header of its own rather than as a bearer."}},"schemas":{"PumpUser":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"wallet":{"type":"string","description":"The account's wallet, Solana base58: on pump.fun the wallet is the account."},"chain":{"type":"string","const":"solana"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"pump.fun's username for the account; null when it published none."},"x_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The X username the account's pump.fun profile declares, lower-cased, without @. Declared by the user; pump.fun does not verify it."},"profile_image":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The picture pump.fun published for the account."},"followers":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The follower count pump.fun published beside the declared X."},"calls_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Calls the account made on pump.fun inside the 30 days before figures_at, as pump.fun lists them."},"ran_2x_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Of those, the calls whose coin reached twice its called market cap, by pump.fun's own peak figure."},"above_entry_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Of those, the calls still at or above their called market cap at figures_at."},"best_peak_multiple_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"The highest peak multiple among those calls, pump.fun's figure."},"calls_complete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"false when the read stopped before the window's end, so calls_30d is a floor."},"last_called_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"The account's newest call pump.fun lists."},"figures_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"When the call figures were read from pump.fun."},"seen_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When the identity words above last changed in this store."}},"required":["wallet","chain","username","x_handle","profile_image","followers","calls_30d","ran_2x_30d","above_entry_30d","best_peak_multiple_30d","calls_complete","last_called_at","figures_at","seen_at"],"additionalProperties":false},"PumpUserPage":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"wallet":{"type":"string","description":"The account's wallet, Solana base58: on pump.fun the wallet is the account."},"chain":{"type":"string","const":"solana"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"pump.fun's username for the account; null when it published none."},"x_handle":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The X username the account's pump.fun profile declares, lower-cased, without @. Declared by the user; pump.fun does not verify it."},"profile_image":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The picture pump.fun published for the account."},"followers":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The follower count pump.fun published beside the declared X."},"calls_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Calls the account made on pump.fun inside the 30 days before figures_at, as pump.fun lists them."},"ran_2x_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Of those, the calls whose coin reached twice its called market cap, by pump.fun's own peak figure."},"above_entry_30d":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Of those, the calls still at or above their called market cap at figures_at."},"best_peak_multiple_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"The highest peak multiple among those calls, pump.fun's figure."},"calls_complete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"false when the read stopped before the window's end, so calls_30d is a floor."},"last_called_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"The account's newest call pump.fun lists."},"figures_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"When the call figures were read from pump.fun."},"seen_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"When the identity words above last changed in this store."}},"required":["wallet","chain","username","x_handle","profile_image","followers","calls_30d","ran_2x_30d","above_entry_30d","best_peak_multiple_30d","calls_complete","last_called_at","figures_at","seen_at"],"additionalProperties":false}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Hand it back as cursor for the next page; null when this page was the last."},"filters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]}},"coverage":{"type":"object","properties":{"wallets":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Wallets this store holds for the platform."},"with_x":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Of those, the wallets carrying an X username."},"newest_seen_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}],"description":"The newest change to any of them."}},"required":["wallets","with_x","newest_seen_at"],"additionalProperties":false},"read_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["records","next_cursor","filters","coverage","read_at"],"additionalProperties":false}}},"paths":{"/v1/pump/users":{"get":{"operationId":"pump-users","summary":"pump.fun accounts: the wallet, its username and declared X, its calls","description":"Every pump.fun account this store holds, newest change first: the wallet (on pump.fun the wallet is the account), the username, the X the profile declares, and the account's calls over 30 days where the caller ledger read them. Filter by wallet, username or X username.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Records per page, 1..100; 50 when absent.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"The previous page's next_cursor, verbatim. Bound to the filters it was minted under: any other filter set is a 400 naming cursor.","schema":{"type":"string","minLength":1,"maxLength":1024}},{"name":"wallet","in":"query","required":false,"description":"A wallet, Solana base58 exactly: on pump.fun the wallet is the account.","schema":{"type":"string","pattern":"^[1-9A-HJ-NP-Za-km-z]{32,44}$"}},{"name":"username","in":"query","required":false,"description":"A pump.fun username, any case.","schema":{"type":"string","minLength":1,"maxLength":64}},{"name":"x_handle","in":"query","required":false,"description":"An X username, with or without @, any case: the accounts whose pump.fun profile declares it.","schema":{"type":"string","pattern":"^@?[A-Za-z0-9_]{1,15}$"}}],"responses":{"200":{"description":"pump.fun accounts: the wallet, its username and declared X, its calls","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PumpUserPage"}}}},"400":{"description":"A parameter was refused; the message names it, never its value. A cursor minted under other filters or the other order lands here."},"401":{"description":"No key, a key this system never issued, or one that was revoked."},"403":{"description":"The key is not a data key on plan builder or above; required_plan names the plan."},"404":{"description":"No route answers the path — an unknown route, never missing data: a token, author or person nobody stored answers 200."},"405":{"description":"The allow header names the verb the door takes: GET on every read, POST on the resolve."},"429":{"description":"The key's per-minute window, or its daily ceiling. Retry-After says when."},"503":{"description":"The store or the usage ledger could not be read or written; nothing was served, and nothing was counted against you."}}}}}}