Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion claude.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ docs/
├── base-chain/ # Network, nodes, tools
├── base-account/ # Smart Wallet SDK
├── ai-agents/ # Agent development
├── mini-apps/ # MiniKit guides
├── apps/ # Apps on Base (MiniKit, guides)
├── onchainkit/ # React components (versioned)
├── images/ # Assets by topic
├── snippets/ # Reusable MDX components
Expand Down
16 changes: 8 additions & 8 deletions docs/.mintignore
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Exclude specific files
writing.md

# Hidden mini-apps sections (redirected to migrate-to-standard-web-app)
/mini-apps/core-concepts/*
/mini-apps/resources/*
/mini-apps/featured-guidelines/*
/mini-apps/troubleshooting/*
/mini-apps/introduction/*
/mini-apps/growth/build-viral-mini-apps
/mini-apps/growth/optimize-onboarding
# Hidden apps sections (redirected to migrate-to-standard-web-app)
/apps/core-concepts/*
/apps/resources/*
/apps/featured-guidelines/*
/apps/troubleshooting/*
/apps/introduction/*
/apps/growth/build-viral-apps
/apps/growth/optimize-onboarding
12 changes: 6 additions & 6 deletions docs/agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK
|ai-agents/skills/trading:alchemy-agentic-gateway,coingecko,swap-execution
|ai-agents/skills/wallets:bankr,cdp-agentic-wallet,sponge-wallet
|ai-agents/trading:data-fetching,trade-execution
|apps/growth:rewards
|apps/quality-and-publishing:overview,quality-bar,submission-guidelines
|apps/quickstart:build-checklist,building-for-the-base-app,create-new-app,migrate-existing-apps,migrate-to-standard-web-app,template
|apps/technical-guides:accept-payments,base-notifications,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest
|base-account/basenames:basename-transfer,basenames-faq,basenames-wagmi-tutorial
|base-account/contribute:contribute-to-base-account-docs,security-and-bug-bounty
|base-account/framework-integrations:cdp,rainbowkit,reown,thirdweb
Expand All @@ -37,15 +41,11 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK
|base-chain/api-reference/ethereum-json-rpc-api:eth_blockNumber,eth_call,eth_chainId,eth_estimateGas,eth_feeHistory,eth_gasPrice,eth_getBalance,eth_getBlockByHash,eth_getBlockByNumber,eth_getBlockReceipts,eth_getBlockTransactionCountByHash,eth_getBlockTransactionCountByNumber,eth_getCode,eth_getLogs,eth_getStorageAt,eth_getTransactionByBlockHashAndIndex,eth_getTransactionByBlockNumberAndIndex,eth_getTransactionByHash,eth_getTransactionCount,eth_getTransactionReceipt,eth_maxPriorityFeePerGas,eth_sendRawTransaction,eth_subscribe,eth_syncing,eth_unsubscribe,net_version,web3_clientVersion
|base-chain/api-reference/flashblocks-api:base_transactionStatus,eth_simulateV1,flashblocks-api-overview,newFlashblockTransactions,newFlashblocks,pendingLogs
|base-chain/builder-codes:agent-developers,app-developers,builder-codes,wallet-developers
|base-chain/flashblocks:app-integration,architecture,faq,overview
|base-chain/flashblocks:app-integration,architecture,faq,overview,run-a-flashblocks-node
|base-chain/network-information:base-contracts,block-building,bridges,configuration-changelog,diffs-ethereum-base,ecosystem-contracts,network-faucets,network-fees,transaction-finality,troubleshooting-transactions
|base-chain/node-operators:node-providers,performance-tuning,run-a-base-node,snapshots,troubleshooting
|base-chain/quickstart:base-solana-bridge,connecting-to-base,deploy-on-base,why-base
|base-chain/security:avoid-malicious-flags,bug-bounty,report-vulnerability,security-council
|get-started:base-mentorship-program,base-services-hub,base,block-explorers,build-app,concepts,country-leads-and-ambassadors,data-indexers,deploy-smart-contracts,docs-llms,docs-mcp,get-funded,launch-token,learning-resources,mistakes,prompt-library,resources-for-ai-agents
|mini-apps/growth:rewards
|mini-apps/quality-and-publishing:overview,quality-bar,submission-guidelines
|mini-apps/quickstart:build-checklist,building-for-the-base-app,create-new-miniapp,migrate-existing-apps,migrate-to-standard-web-app,template
|mini-apps/technical-guides:accept-payments,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest
|onchainkit:migrate-from-onchainkit
|root:agents,cookie-policy,privacy-policy,terms-of-service,tone_of_voice
|root:agents,changes,cookie-policy,privacy-policy,terms-of-service,tone_of_voice
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ description: Earn financial incentives for building high-quality Apps that driv
## How Rewards Work

<Steps>
<Step title="Verify your Mini App">
Submit your Mini App to be verified on [Base.dev](https://www.base.dev/). This process validates your ownership of the mini app by adding Base builder address in the manifest.
<Step title="Verify your App">
Submit your App to be verified on [Base.dev](https://www.base.dev/). This process validates your ownership of the app by adding Base builder address.

</Step>

Expand All @@ -20,8 +20,6 @@ description: Earn financial incentives for building high-quality Apps that driv
</Step>

</Steps>
<Card title="Submit for Verification" href="/mini-apps/featured-guidelines/overview">
Learn how to prepare and submit your Mini App for the verification process.
</Card>



16 changes: 8 additions & 8 deletions docs/mini-apps/llms-full.txt → docs/apps/llms-full.txt
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
# https://docs.base.org/mini-apps/llms-full.txt
# https://docs.base.org/apps/llms-full.txt

## Mini Apps — Deep Guide for LLMs
## Apps — deep guide for LLMs

> The Base App now treats all apps as standard web apps. Migrate from Farcaster-specific SDKs to wagmi + SIWE, register on Base.dev, and earn rewards for driving onchain activity.

### What you can do here
- Migrate an existing Farcaster mini app to a standard web app compatible with the Base App
- Migrate an existing Farcaster-embedded app to a standard web app compatible with the Base App
- Register your app on Base.dev for search, discovery, and rewards eligibility
- Replace deprecated Farcaster SDK methods with standard web equivalents (wagmi, viem, SIWE)
- Earn financial rewards for building apps that drive user engagement and onchain transactions

## Navigation (with brief descriptions)

### Quickstart
- [Migrate to a Standard Web App](https://docs.base.org/mini-apps/quickstart/migrate-to-standard-web-app.md) — Step-by-step migration guide: replace Farcaster SDK, update auth and wallet logic, register on Base.dev
- [Migrate to a Standard Web App](https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md) — Step-by-step migration guide: replace Farcaster SDK, update auth and wallet logic, register on Base.dev

### Growth
- [Rewards](https://docs.base.org/mini-apps/growth/rewards.md) — Verification programs, competitions, and partner opportunities for earning rewards
- [Rewards](https://docs.base.org/apps/growth/rewards.md) — Verification programs, competitions, and partner opportunities for earning rewards


## Key Concepts (excerpts)

Source: `https://docs.base.org/mini-apps/quickstart/migrate-to-standard-web-app.md`
Source: `https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md`

After April 9, 2026, the Base App treats all apps as standard web apps regardless of Farcaster manifests. Key changes:

Expand All @@ -34,10 +34,10 @@ After April 9, 2026, the Base App treats all apps as standard web apps regardles
| Search and discovery via Farcaster | Base.dev app metadata + builder codes |

Migration options:
- **AI agent migration** — Install the Migration Skill: `npx skills add base/skills`, then ask your agent to migrate your Farcaster mini app to a standard web app
- **AI agent migration** — Install the Migration Skill: `npx skills add base/skills`, then ask your agent to migrate your Farcaster-embedded app to a standard web app
- **Manual migration** — Follow the step-by-step guide to replace SDK methods, update auth, and register on Base.dev

Source: `https://docs.base.org/mini-apps/growth/rewards.md`
Source: `https://docs.base.org/apps/growth/rewards.md`

Base.dev rewards developers who build apps that deliver real value and drive meaningful onchain activity:
1. Submit your app for verification on Base.dev — validates ownership by adding a Base builder address in the manifest
Expand Down
11 changes: 11 additions & 0 deletions docs/apps/llms.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# https://docs.base.org/apps/llms.txt

## Apps documentation

> Build apps that run in the Base App as standard web apps — no Farcaster SDK required. Register on Base.dev, use wagmi + SIWE for auth, and earn rewards for driving onchain activity.

## Quickstart
- [Migrate to a Standard Web App](https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md) — Replace deprecated Farcaster SDK methods and register your app on Base.dev

## Growth
- [Rewards](https://docs.base.org/apps/growth/rewards.md) — Earn financial incentives for building apps that drive user engagement and onchain transactions
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Migrate to a Standard Web App"
description: "Migrate your Farcaster mini app to work in the Base App. Covers replacing deprecated SDK methods, and registering on Base.dev."
description: "Migrate your Farcaster mini-app to work in the Base App. Covers replacing deprecated SDK methods, and registering on Base.dev."
tag: "NEW"
---

Expand All @@ -9,7 +9,7 @@ After April 9, 2026, the Base App treats all apps as standard web apps regardles
</Warning>

<Tip>
**Using an AI coding agent?** Install the [Migration Skill](https://github.com/base/skills) to let your agent handle this migration automatically. Run `npx skills add base/skills` and ask your agent to migrate your Farcaster mini app to a standard web app.
**Using an AI coding agent?** Install the [Migration Skill](https://github.com/base/skills) to let your agent handle this migration automatically. Run `npx skills add base/skills` and ask your agent to migrate your Farcaster app to a standard web app.
</Tip>

## What's changing
Expand All @@ -29,9 +29,9 @@ The Base App is moving from the Farcaster mini-app spec to a single model: **sta
## Choose your migration path

<Tabs>
<Tab title="I'm converting a mini app">
<Tab title="I'm converting an app">
<Tip>
**Let your agent handle this.** Install the [Migration Skill](https://github.com/base/skills) with `npx skills add base/skills` and ask your agent to migrate your Farcaster mini app to a standard web app. The skill maps deprecated SDK methods, replaces auth and wallet logic, and wires up the Base App path automatically.
**Let your agent handle this.** Install the [Migration Skill](https://github.com/base/skills) with `npx skills add base/skills` and ask your agent to migrate your Farcaster app to a standard web app. The skill maps deprecated SDK methods, replaces auth and wallet logic, and wires up the Base App path automatically.
</Tip>

Your app uses the Farcaster SDK. The migration replaces Farcaster-specific auth, identity, and actions with standard web equivalents.
Expand Down Expand Up @@ -228,7 +228,7 @@ The following Farcaster mini-app SDK methods are not invoked by the Base App aft
| `swapToken` | Construct swap transactions with wagmi, viem, or your preferred onchain library. |
| `requestCameraAndMicrophoneAccess` | No replacement |
| `close` | No replacement |
| `addMiniApp` | the Base App handles mini app installation automatically. No SDK needed. |
| `addMiniApp` | the Base App handles app installation automatically. No SDK needed. |
| `viewCast` | Not needed in the Base App |
| `composeCast` | Not needed in the Base App |
| `ready` | Not needed. Your app is ready to display when it loads. |
Expand Down
199 changes: 199 additions & 0 deletions docs/apps/technical-guides/base-notifications.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
---
title: "Notifications"
description: "Send in-app notifications to your app's users through the Base Dashboard REST API."
---

<Note>
Notifications are delivered through the **Base App** only. Users who interact with your app on other platforms will not receive notifications through this API.
</Note>

The Notifications API lets you send in-app notifications to users who have pinned your app and opted in to notifications. Two REST endpoints handle the full workflow: fetch your audience's wallet addresses, then send targeted or broadcast messages.

## Prerequisites

- A project on [Base Dashboard](https://dashboard.base.org) with your app URL registered
- An API key generated from **Settings > API Key** in your Base Dashboard project

## Quick start

Both endpoints require your API key in the `x-api-key` header.

<Info>
The notification endpoints share a rate limit of **10 requests per minute per IP**. Requests to either endpoint count toward the same limit. Exceeding it returns a `429 Too Many Requests` response.
</Info>

Fetch the wallet addresses of users who have opted in to notifications for your app:

```bash title="Get users with notifications enabled"
curl "https://dashboard.base.org/api/v1/notifications/app/users?app_url=<your-app-url>&notification_enabled=true" \
-H "x-api-key: <your-api-key>"
```

```json title="Response"
{
"success": true,
"users": [
{ "address": "0xA11ce00000000000000000000000000000000000", "notificationsEnabled": true },
{ "address": "0xB0B0000000000000000000000000000000000000", "notificationsEnabled": true }
]
}
```

Send a notification to one or more of those addresses. The `target_path` sets the route within your app that opens when the user taps the notification:

```bash title="Send a notification"
curl -X POST "https://dashboard.base.org/api/v1/notifications/send" \
-H "x-api-key: <your-api-key>" \
-H "Content-Type: application/json" \
-d '{
"app_url": "<your-app-url>",
"wallet_addresses": ["<wallet-address>"],
"title": "<title>",
"message": "<message>",
"target_path": "<target-path>"
}'
```

```json title="Response"
{
"success": true,
"results": [
{ "walletAddress": "0xA11ce00000000000000000000000000000000000", "sent": true }
],
"sentCount": 1,
"failedCount": 0
}
```

## API reference

### GET /v1/notifications/app/users

Returns users who have pinned your app, with optional filtering by notification opt-in status. Results are paginated.

```http
GET https://dashboard.base.org/api/v1/notifications/app/users
```

#### Query parameters

<ParamField query="app_url" type="string" required>
Your app URL as registered on the Base Dashboard.
</ParamField>

<ParamField query="notification_enabled" type="boolean">
Set to `true` to return only users who have enabled notifications for your app.
</ParamField>

<ParamField query="cursor" type="string">
Pagination cursor returned from a previous response. Omit for the first page.
</ParamField>

<ParamField query="limit" type="integer">
Maximum users per page. Capped at 100.
</ParamField>

#### Response

<ResponseField name="success" type="boolean">
Whether the request succeeded.
</ResponseField>

<ResponseField name="users" type="array">
Users who have pinned your app.
</ResponseField>

<ResponseField name="users[].address" type="string">
The user's wallet address.
</ResponseField>

<ResponseField name="users[].notificationsEnabled" type="boolean">
Whether the user has enabled notifications for your app.
</ResponseField>

<ResponseField name="nextCursor" type="string">
Cursor for the next page. Absent when no more results exist.
</ResponseField>



---

### POST /v1/notifications/send

Sends an in-app notification to one or more wallet addresses.

```http
POST https://dashboard.base.org/api/v1/notifications/send
```

#### Request body

<ParamField body="app_url" type="string" required>
Your app URL as registered on the Base Dashboard.
</ParamField>

<ParamField body="wallet_addresses" type="string[]" required>
Wallet addresses to notify. Minimum 1, maximum 1,000 per request.
</ParamField>

<ParamField body="title" type="string" required>
Notification title. Maximum 30 characters.
</ParamField>

<ParamField body="message" type="string" required>
Notification body text. Maximum 200 characters.
</ParamField>

<ParamField body="target_path" type="string">
Path to open when the user taps the notification, such as `/rewards`. Must start with `/` if provided. Maximum 500 characters. Omit to open your app at its root URL.
</ParamField>

#### Response

<ResponseField name="success" type="boolean">
`true` only when every address in the request delivered successfully.
</ResponseField>

<ResponseField name="results" type="array">
Per-address delivery status.
</ResponseField>

<ResponseField name="results[].walletAddress" type="string">
The targeted wallet address.
</ResponseField>

<ResponseField name="results[].sent" type="boolean">
Whether delivery succeeded for this address.
</ResponseField>

<ResponseField name="results[].failureReason" type="string">
Present when `sent` is `false`. Possible values: `user has not saved this app`, `user has notifications disabled`.
</ResponseField>

<ResponseField name="sentCount" type="number">
Total notifications delivered successfully.
</ResponseField>

<ResponseField name="failedCount" type="number">
Total notifications that failed to deliver.
</ResponseField>


## Errors

Both endpoints return the following errors:

| Status | Code | Cause |
|--------|------|-------|
| 400 | `Bad Request` | Possible causes:<ul><li>`app_url` is missing</li><li>`title` is missing or exceeds 30 characters</li><li>`message` is missing or exceeds 200 characters</li><li>`wallet_addresses` is missing or exceeds 1,000 addresses</li><li>`target_path` exceeds 500 characters or does not start with `/`</li></ul> |
| 401 | `Unauthorized` | Missing or invalid API key. |
| 403 | `Forbidden` | The `app_url` does not belong to your project, or your project is not whitelisted for notifications. |
| 404 | `Not Found` | The project associated with your API key does not exist. |
| 503 | `Service Unavailable` | The notification service is temporarily unavailable. Retry the request. Send endpoint only. |

## Batching and deduplication

Each request accepts up to 1,000 addresses. For larger audiences, split your address list across multiple requests.

Duplicate addresses within a single request are deduplicated automatically. Identical notifications — same app URL, wallet address, title, message, and target path — sent within a 24-hour window are also deduplicated and return a success response without sending a duplicate push.
Loading
Loading