How it is authorized
1
Claude asks for permission
When you tap Connect, Claude registers with SalesPilot and opens the
CrossUp permission screen, at
app.crossup.ai/oauth/authorize.2
You sign in with your CrossUp account
If you aren’t signed in, it asks you to and brings you back to the same
screen. There you see which store will be connected and what Claude will
be able to do. The request expires after 10 minutes.
3
You tap Allow
CrossUp issues an agent key for your store and hands it to Claude over
a sealed channel. The key never shows on screen.
4
Claude comes back with the tools
From then on, every question travels with that key. Every hour Claude
renews the session and SalesPilot checks the key is still alive.
What the connection can do
What the permission screen says, and nothing else:
It doesn’t create or edit suggestions, bundles or the CrossUp configuration.
If you ask, Claude gets
TOOL_NOT_AVAILABLE and tells you that is done from
the admin. Turning SalesPilot off or pausing a suggestion ask for your
confirmation before running: Claude shows you what changes and waits for the
yes.
The agent key
The connection is an agent key (sak_…) with a single permission,
agent:operate. It is nothing like the storefront key:
With Claude you never see it. For Cursor and other clients without OAuth you
generate it yourself and it shows only once.
Revoke
In API & Agents → Active connections, Revoke on the Claude connection. Claude can no longer renew the session and asks you to reconnect; a question already in progress may finish answering. To come back, Connect again in Claude: a new key is created. The connection lasts 90 days without use. While you use it, it renews itself.For developers
SalesPilot is a remote MCP server over Streamable HTTP and is its own authorization server (OAuth 2.1, PKCES256, dynamic client registration,
public clients).
A request without a credential answers
401 with the pointer to the resource
metadata, which is what starts the flow in the client:
https://claude.ai/api/mcp/auth_callback)
and Claude Code’s loopback ones (http://localhost and http://127.0.0.1, on
any port). The access token lasts one hour; the refresh token rotates on every
use and, if the key was revoked, the token endpoint answers invalid_grant.
With an agent key pasted by hand, the header is Authorization: Bearer sak_…
and there is no flow: the session starts on the first request.
If you don’t see it
Connect Claude
The URL and the three steps.
The MCP
What the connection can query and change.