dApps Directory
A curated catalog of Starknet dApps, organized by category
A curated list of Starknet dApps, organized by category and tag. Wallets like Keon use it to power their in-app dApp browser, but anyone can hit it.
If you're building a wallet, an explorer, or a portal that needs a "discover apps" surface, this is the API for that.
Categories
GET /api/dapps/categories/ - list categories
Paginated list of all dApp categories (DeFi, NFTs, Gaming, Bridges, ...).
1curl 'https://api.tokenkithq.io/api/dapps/categories/' \2 -H 'api-key: YOUR_API_KEY'GET /api/dapps/categories/{slug}/ - one category
1curl 'https://api.tokenkithq.io/api/dapps/categories/defi/' \2 -H 'api-key: YOUR_API_KEY'dApps
GET /api/dapps/apps/ - list dApps
| Filter | Notes |
|---|---|
category | Slug of a category |
network | mainnet, sepolia, etc. |
tag | Filter by a tag |
featured | true to limit to featured apps |
verified | true for verified apps |
q | Search across name, description, tags |
1curl 'https://api.tokenkithq.io/api/dapps/apps/?category=defi&network=mainnet&verified=true' \2 -H 'api-key: YOUR_API_KEY'Response shape
The list, search, discover, and category endpoints all return dApp entries with the same field set as the single-dApp detail endpoint — wallets can render social links and full descriptions directly from list payloads without an extra round-trip per row. Empty social URLs come back as "", not null.
1{2 "links": { "next": null, "previous": null },3 "count": 20,4 "total_pages": 1,5 "results": [6 {7 "id": 21,8 "name": "Keon Wallet",9 "slug": "keon-wallet",10 "tagline": "The best, developer/user friendly wallet on Starknet",11 "description": "Full description body...",12 "url": "https://keonwallet.app",13 "website_url": "",14 "docs_url": "",15 "logo_url": "https://tokenkit.s3.amazonaws.com/keon-dark-icon....png",16 "banner_url": "",17 "category": { "id": 5, "name": "Wallets", "slug": "wallets", "icon": "👛" },18 "tags": ["swap"],19 "networks": ["mainnet", "sepolia"],20 "twitter_url": "",21 "discord_url": "",22 "telegram_url": "",23 "github_url": "",24 "tvl_usd": null,25 "daily_users": 0,26 "total_transactions": 0,27 "rating": "0.00",28 "review_count": 0,29 "is_featured": true,30 "is_verified": true,31 "is_active": true,32 "launched_at": null,33 "created_at": "2026-04-12T09:32:11Z",34 "updated_at": "2026-05-23T11:42:18Z"35 }36 ]37}category is null if a dApp hasn't been categorised yet (it's not required on the model).
GET /api/dapps/apps/{slug}/ - one dApp
Returns a single dApp with the same field set as the list rows above.
1curl 'https://api.tokenkithq.io/api/dapps/apps/jediswap/' \2 -H 'api-key: YOUR_API_KEY'GET /api/dapps/apps/search/ - search
| Parameter | Required | Notes |
|---|---|---|
q | yes | Min 2 chars |
1curl 'https://api.tokenkithq.io/api/dapps/apps/search/?q=swap' \2 -H 'api-key: YOUR_API_KEY'Discover
GET /api/dapps/discover/ - the homepage bundle
Featured + recent + popular, all in one response. Drop into a dApp browser landing page.
| Parameter | Notes |
|---|---|
network | Optional, filter by chain |
1curl 'https://api.tokenkithq.io/api/dapps/discover/?network=mainnet' \2 -H 'api-key: YOUR_API_KEY'GET /api/dapps/category/{slug}/ - dApps in a category
| Parameter | Notes |
|---|---|
network | Optional |
page, limit | Pagination |
1curl 'https://api.tokenkithq.io/api/dapps/category/defi/?network=mainnet&limit=20' \2 -H 'api-key: YOUR_API_KEY'Ads
GET /api/dapps/ads/ - fetch active ads
Returns the highest-priority active ads for a given placement, respecting per-ad scheduling and impression caps.
| Parameter | Required | Notes |
|---|---|---|
placement | yes | One of the configured placement slugs (e.g. discover_banner) |
network | no | Filter to ads targeting this chain. Ads with no network restriction always match. |
category | no | Category slug. Ads with no category restriction always match. |
limit | no | Max ads to return (default 1) |
1curl 'https://api.tokenkithq.io/api/dapps/ads/?placement=discover_banner&network=mainnet' \2 -H 'api-key: YOUR_API_KEY'POST /api/dapps/ads/{ad_id}/impression/ - record an impression
Fire this when an ad enters the user's viewport. Increments the impression counter; ads hit their total_impression_limit and disappear from GET /api/dapps/ads/ automatically.
POST /api/dapps/ads/{ad_id}/click/ - record a click
Fire this when the user clicks the ad. Increments the click counter (used for CTR reporting).
Both impression and click endpoints accept an empty body and return 204 No Content on success.
Submitting a dApp
If you want your dApp listed, head to tokenkithq.io and submit it through the dApp submission form. We review submissions for the verified flag.
See also
- Domain Reputation - check whether a dApp's domain is safe
- Keon Wallets Directory - the wallets that consume this directory