Read a sign-in request
This page needs your own installation with an Embed license.
GET/
Reads what an AI app’s sign-in request is for, after the person signed in to your product.
Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.
Parameters
Path
requestIdRequired · stringThe request’s ID: the
gr_requestparameter on the address the person arrived at.
Read the account here
The installation sends the person to your sign-in address with only ?gr_request=…. Read the account here, never from the link, and only after the person signed in: anyone with an account’s AI app address can start a request.
Check they belong to that account, then ask them to confirm: “Connect Claude (claude.ai) to Bakery Ltd?”. client.name is the name the app chose itself. Then sign them in or turn it down.
It isn’t audited, and counts against your key’s own budget for these requests: 600 a minute (EMBED_OAUTH_REQUEST_RATE_LIMIT).
Responses
- 200OK
The request.
No such request: unknown, past its 15 minutes, or answered and gone. Tell the person: “This connection request has expired. Go back to your AI app and connect again.” An installation without AI app sign-in (before v2026.10.23) answers a bare 404 too.
Something failed on the installation’s side. Try again.
Any call can also answer: 401 UNAUTHORIZED · 403 EMBED_NOT_LICENSED · 403 IP_NOT_ALLOWED · 429 RATE_LIMITED · 503 BUSY. See Errors.
Request
GORUNNER="https://automations.example.com"
GORUNNER_EMBED_KEY="YOUR_PARTNER_KEY" # gre_…
REQUEST_ID="q7Kd2mXr9TfL0aZc3vBn8wYe" # gr_request from the address
curl "$GORUNNER/api/embed/v1/oauth-requests/$REQUEST_ID" \
-H "Authorization: Bearer $GORUNNER_EMBED_KEY"const GORUNNER = "https://automations.example.com";
const KEY = process.env.GORUNNER_EMBED_KEY; // gre_…
const REQUEST_ID = encodeURIComponent("q7Kd2mXr9TfL0aZc3vBn8wYe");
const res = await fetch(
`${GORUNNER}/api/embed/v1/oauth-requests/` +
`${REQUEST_ID}`,
{
headers: { Authorization: `Bearer ${KEY}` },
},
);
const { data } = await res.json();import os, requests
from urllib.parse import quote
GORUNNER = "https://automations.example.com"
KEY = os.environ["GORUNNER_EMBED_KEY"] # gre_…
REQUEST_ID = quote("q7Kd2mXr9TfL0aZc3vBn8wYe", safe="")
res = requests.get(
f"{GORUNNER}/api/embed/v1/oauth-requests/"
f"{REQUEST_ID}",
headers={"Authorization": f"Bearer {KEY}"},
)
data = res.json()["data"]Response · 200 OK
{
"data": {
"id": "q7Kd2mXr9TfL0aZc3vBn8wYe",
"account": {
"id": "acct-bakery",
"name": "Bakery Ltd"
},
"client": {
"name": "Claude",
"redirectHost": "claude.ai",
"kind": "web"
},
"surface": "tools",
"status": "waiting",
"expiresAt": "2026-10-25T09:15:00Z"
}
}Every field
It takes no body.
Response · 200 OK
dataobjectidstringaccountobjectidstringYour account id.
namestringclientobjectnamestringThe application’s name, as its registration claims it.
redirectHoststringWhere its code would go: a host, or an app’s callback.
kindstringOne of
web,loopback,app.surfacestringOne of
build,tools.statusstringOne of
waiting,done.expiresAttime