> For the complete documentation index, see [llms.txt](https://docs.pepeunchained.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pepeunchained.com/reference/endpoints.md).

# Endpoints

Every endpoint the dev kit talks to, in one table: the public RPC and explorer, and the bundler and paymaster. Docs elsewhere write `PEPU_BUNDLER_URL` and `PEPU_PAYMASTER_URL` as placeholders and point here for what they mean. This page is generated from the SDK, so it cannot disagree with `resolvePepuEndpoints()`.

The SDK uses the hosted bundler and paymaster service by default (`PEPU_HOSTED`); the environment variables below override them. Bundler `https://bundler.pepeunchained.com`, paymaster service `https://paymaster.pepeunchained.com`. The ERC-7677 paymaster URL always embeds a token (`https://paymaster.pepeunchained.com/v2/paymaster/<token>`), so it is never a default: set `PEPU_PAYMASTER_URL` to it.

## Prerequisites

* Nothing for the RPC and explorer. Sponsored transactions also need a bundler and a paymaster, see [Infrastructure Map](/infrastructure/overview.md).

## Endpoint table

| Service                                               | Value                                                      | Environment variable                                             | Local development default                         |
| ----------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------- |
| RPC (chain `97741`)                                   | `https://rpc-pepu-v2-mainnet-0.t.conduit.xyz`              | `PEPU_RPC_URL` (browser: `NEXT_PUBLIC_PEPU_RPC_URL`)             | none, use the public RPC                          |
| Explorer (PepuScan)                                   | `https://pepuscan.com`                                     | none                                                             | none                                              |
| Explorer API (Blockscout)                             | `https://pepuscan.com/api`                                 | none                                                             | none                                              |
| Bundler (ERC-4337, EntryPoint v0.7)                   | `https://bundler.pepeunchained.com`                        | `PEPU_BUNDLER_URL` (browser: `NEXT_PUBLIC_PEPU_BUNDLER_URL`)     | `http://localhost:4337`                           |
| Paymaster service (REST API, health, free-tier state) | `https://paymaster.pepeunchained.com`                      | base of `PEPU_PAYMASTER_URL`                                     | `http://localhost:8788`                           |
| Paymaster ERC-7677 URL                                | `https://paymaster.pepeunchained.com/v2/paymaster/<token>` | `PEPU_PAYMASTER_URL` (browser: `NEXT_PUBLIC_PEPU_PAYMASTER_URL`) | `http://localhost:8788/v2/paymaster/<your-token>` |

The ERC-7677 paymaster URL carries a credential in its path (`/v2/paymaster/<token>`). A project **client token** (`ppt_`) is publishable but only works from the project's allowed origins: with none set, or from another origin, the service refuses it with `project_origin_not_allowed`. A project **server key** (`ppk_`) is a secret: keep it on the server and never put it in a `NEXT_PUBLIC_` variable. The **free tier** (100 PEPU/day and 50 PEPU/hour per user, TapScore as the only target for now) needs a verified Privy access token from PEPU's own Privy app sent as `context.privyAccessToken` in the ERC-7677 request; it is not available to apps on their own Privy app. See [Credential Matrix](/infrastructure/auth.md).

## How the SDK resolves them

`resolvePepuEndpoints()` picks each value in this order: an explicit option, then the environment (the server variable, then the `NEXT_PUBLIC_` variable), then the hosted default in `PEPU_HOSTED`. A malformed URL throws `CONFIG_BAD_URL` naming the variable, never its value. It returns `bundlerUrl`, `paymasterUrl` (the complete ERC-7677 URL, `null` unless you configured one, because it needs a token) and `paymasterBaseUrl` (the service base: the hosted base unless `PEPU_PAYMASTER_URL` points elsewhere, in which case the `/v2/paymaster/<token>` tail is stripped). `createPaymasterApi`, the probes, `checkSponsorship` and `pepu doctor` default to the base; `createPepuPaymasterClient` needs the complete URL or a `paymasterToken`. `hostedErc7677Url(token)` builds `<hosted base>/v2/paymaster/<token>` and `hostedFreeTierUrl()` the public free-tier state route. `isHostedSponsorshipLive()` is `true` only when the hosted bundler and paymaster base are both set.

| Value                  | Explicit option                  | Server variable              | Browser variable                         | Hosted default                                |
| ---------------------- | -------------------------------- | ---------------------------- | ---------------------------------------- | --------------------------------------------- |
| RPC                    | `rpcUrl`                         | `PEPU_RPC_URL`               | `NEXT_PUBLIC_PEPU_RPC_URL`               | `https://rpc-pepu-v2-mainnet-0.t.conduit.xyz` |
| Bundler                | `bundlerUrl`                     | `PEPU_BUNDLER_URL`           | `NEXT_PUBLIC_PEPU_BUNDLER_URL`           | `https://bundler.pepeunchained.com`           |
| Paymaster ERC-7677 URL | `paymasterUrl`                   | `PEPU_PAYMASTER_URL`         | `NEXT_PUBLIC_PEPU_PAYMASTER_URL`         | none (needs your token)                       |
| Paymaster service base | `baseUrl` (`createPaymasterApi`) | base of `PEPU_PAYMASTER_URL` | base of `NEXT_PUBLIC_PEPU_PAYMASTER_URL` | `https://paymaster.pepeunchained.com`         |

## Contract registry

Deployed addresses in the SDK registry (`getPepuAddresses()`), for quick copying. Notes, bytecode sizes and do-not-substitute warnings are on [Address Map](/contracts-and-addresses/address-map.md). PepuSwap's own non-canonical contracts are on [PepuSwap Addresses](/contracts-and-addresses/pepuswap.md).

| Key                       | Name                                                                    | Address                                      |
| ------------------------- | ----------------------------------------------------------------------- | -------------------------------------------- |
| `create2Factory`          | CREATE2 Deterministic Deployer                                          | `0x4e59b44847b379578588920cA78FbF26c0B4956C` |
| `multicall3`              | Multicall3                                                              | `0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd` |
| `permit2`                 | Permit2                                                                 | `0x000000000022D473030F116dDEE9F6B43aC78BA3` |
| `entryPoint06`            | ERC-4337 EntryPoint v0.6                                                | `0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789` |
| `entryPoint07`            | ERC-4337 EntryPoint v0.7                                                | `0x0000000071727De22E5E9d8BAf0edAc6f37da032` |
| `kernelFactory`           | Kernel v3 Account Factory                                               | `0xaac5D4240AF87249B3f71BC8E4A2cae074A3E419` |
| `kernelMetaFactory`       | Kernel MetaFactory                                                      | `0xd703aaE79538628d27099B8c4f621bE4CCd142d5` |
| `ecdsaValidator`          | Kernel ECDSA Validator                                                  | `0x845ADb2C711129d4f3966735eD98a9F09fC4cE57` |
| `paymaster`               | Sponsored Paymaster v2 (PepuSponsoredPaymasterV7, alias of paymasterV2) | `0xdb28528C9399C33c9A0297E8A62F39145acbC30D` |
| `kernelImplementation`    | Kernel v3.1 Implementation                                              | `0xbAC849bB641841b44E965fb01A4Bf5F074F84B4d` |
| `kernelEcdsaSignerModule` | Kernel ECDSA Signer (permission signer module)                          | `0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF` |
| `kernelCallPolicyV004`    | ZeroDev Call Policy v0.0.4                                              | `0x9a52283276A0ec8740DF50bF01B28A80D880eaf2` |
| `kernelTimestampPolicy`   | ZeroDev Timestamp Policy                                                | `0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F` |
| `tapScore`                | TapScore                                                                | `0x261eA5971B93237a56990206A46Bc80318e4d078` |
| `paymasterV1`             | Verifying Paymaster v1 (PepuVerifyingPaymasterV7) - RETIRED             | `0x2B6FED323bFA24f0475f4e1Dd3C7F6Cc1f3ae8B0` |
| `paymasterV2`             | Sponsored Paymaster v2 (PepuSponsoredPaymasterV7)                       | `0xdb28528C9399C33c9A0297E8A62F39145acbC30D` |

## Hosted-URL swap (maintainers)

The only place the hosted URLs are set is `PEPU_HOSTED` in `packages/sdk/src/endpoints.ts`. To change them: edit it, rebuild the SDK, run `node scripts/gen-docs.mjs`, run `pnpm --filter @pepu-chain/mcp snapshots`, then release the SDK and the MCP server together. See `RELEASING.md`.

## What to expect

* `pepu_health_check` and `pepu_sponsorship_status` report "not configured" for the bundler and paymaster until you set the variables or the hosted URLs exist.
* `node scripts/check-docs-parity.mjs` verifies the addresses and counts on the docs pages against the SDK registry.

## Common failures

| Symptom                                            | Cause                                                                                | Fix                                                                                                              |
| -------------------------------------------------- | ------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------- |
| `CONFIG_BAD_URL`                                   | A URL variable is not a valid http(s) URL                                            | Fix the variable the message names                                                                               |
| `CONFIG_MISSING_ENV` for the paymaster             | No complete ERC-7677 URL: it always embeds a token, so there is no tokenless default | Set `PEPU_PAYMASTER_URL` to `https://paymaster.pepeunchained.com/v2/paymaster/<token>`, or pass `paymasterToken` |
| Browser calls to the bundler fail with CORS errors | The bundler does not allow your origin                                               | See [Operating the Bundler](/infrastructure/operating.md)                                                        |

## Related

* [Network Reference](/get-started/network-reference.md)
* [Infrastructure Map](/infrastructure/overview.md)
* [Environment Variables](/reference/env-vars.md)
* [Address Map](/contracts-and-addresses/address-map.md)
* [Error Reference](/reference/errors.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.pepeunchained.com/reference/endpoints.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
