API reference
MCP server
Eighteen tools for an agent: read with any key, edit with an edit key.
#Connecting
The server is at https://peekin.bio/mcp. In Claude or ChatGPT, add that
address as a custom connector: it asks you to sign in to peekin and approve read only, or
read and make changes, and that is all. No key to copy. You can disconnect it from
Dashboard › API.
Any other MCP client can send your API key as the bearer token instead, the same key the REST endpoints take. Make one at Dashboard › API.
Transport is Streamable HTTP: one endpoint, JSON-RPC 2.0 in, JSON out. There is no SSE, because nothing here streams. Every tool is a single question with a single answer.
{
"mcpServers": {
"peekin": {
"url": "https://peekin.bio/mcp",
"headers": { "Authorization": "Bearer pk_live_YOUR_KEY" }
}
}
}
#The tools
| Tool | What it answers |
|---|---|
get_stats | Daily views, taps and tap-through rate for your pages. Takes page and days (7, 28 or 90) |
list_pages | Every page on the account with its links: label, destination, active, and whether it sits behind the 18+ check |
list_subscribers | People who left an email address, newest first. Takes page |
scan_link | All nine checks against any public link page, including other platforms'. Takes url. Twenty an hour per key |
get_page | One page in full, with link and social ids. Takes page (id or slug) |
get_analytics | Views, paid taps, social taps and people per day, and taps per link. Takes page, link, days |
list_poplinks | Every poplink and where it goes |
list_domains | Your domains, whether each is active, and the page each shows |
check_slug | Whether a page address is free |
With an edit key, these as well:
| Tool | What it does |
|---|---|
create_page | A new page, always a draft. Takes slug and optionally name, bio, theme |
update_page | Change fields on a page: words, look, protection, capture, countdown, and its links and socials. Takes page and fields |
duplicate_page | A paused copy with its links |
add_link, update_link, remove_link | Paid links and socials, one at a time |
update_links_bulk | One link on every page at once, by exact address or by platform, optionally only on pages with a tag. Lists what would change until it is sent with confirm: true |
create_poplink, update_poplink | Links on your own domain at /p/ |
#What an agent can and cannot do
An agent with an edit key can build a page, write its words, set its look and manage its
links. It cannot make a page live on its own initiative: publishing, a new address, a
domain, Shield and crawler mode all need "confirm": true in the same call,
and a page only goes live on a plan that publishes. A read key gets every write tool
back as an error.
It goes through the same checks as the dashboard, so the plan's caps apply and a destination that is not a web address is refused. Every change it makes is in the audit log on the Team screen, with the key that made it.
#When a call fails
A refused call comes back as a normal result with isError set and the API's
own message in the content, not as a JSON-RPC error. A key that is out of quota is not a
broken server, and telling an agent otherwise makes it give up instead of waiting.