Check a sign-in
GET/
Reads how a sign-in you started is going.
Needs an API token with the Read permission for connections (connection:read).
Parameters
Path
attemptIdRequired · stringThe
attemptIdthe start answered.
Status
pending- The service hasn’t sent the browser back yet. Ask again in a few seconds.
connectedconnectionIdnames the connection.failedreason:denied,service_error,failed,cancelledorexpired.errorsays it for a person.
Only the token that started it can read it. A sign-in started from GoRunner’s own pages answers more states, such as launched.
Responses
- 200OK
Where the sign-in stands.
- 403
FORBIDDENThe token lacks the Read permission for connections.
- 404
NOT_FOUNDNot a sign-in you started, or one whose link ran out over an hour ago.
Something failed on GoRunner’s side. Try again.
- 503
UNAVAILABLEThis server can’t read sign-ins now. Try again.
Any call can also answer: 401 UNAUTHORIZED · 401 TOKEN_ENDED · 403 TOKEN_SURFACE_OFF · 403 FEATURE_OFF · 403 EMBED_NOT_ALLOWED · 403 EMBED_NOT_AVAILABLE · 403 ACCOUNT_SUSPENDED · 429 RATE_LIMITED · 503 BUSY · 503 PAUSED · 503 SERVICE_UNAVAILABLE. See Errors.
Request
GORUNNER="https://api.gorunner.io"
GORUNNER_TOKEN="grt_…" # needs Read for connections
ATTEMPT_ID="your-attempt-id" # from the start
URL="$GORUNNER/api/connections/oauth2/attempts/"
URL="${URL}$ATTEMPT_ID"
curl "$URL" \
-H "Authorization: Bearer $GORUNNER_TOKEN"const GORUNNER = "https://api.gorunner.io";
const TOKEN = process.env.GORUNNER_TOKEN;
const ATTEMPT_ID = process.env.ATTEMPT_ID; // from the start
const res = await fetch(
`${GORUNNER}/api/connections/oauth2/attempts/` +
`${ATTEMPT_ID}`,
{
headers: { Authorization: `Bearer ${TOKEN}` },
},
);
const { data } = await res.json();import os, requests
GORUNNER = "https://api.gorunner.io"
TOKEN = os.environ["GORUNNER_TOKEN"]
ATTEMPT_ID = os.environ["ATTEMPT_ID"] # from the start
res = requests.get(
f"{GORUNNER}/api/connections/oauth2/attempts/"
f"{ATTEMPT_ID}",
headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]Response · 200 OK
{
"data": {
"attemptId": "Zq3XbN0iJm7dQe8TfR2wLg",
"status": "connected",
"connectionId": "0f8b2c7e-4a51-4d3e-9b2a-6c1d2e3f4a5b",
"expiresAt": "2026-10-25T09:10:00Z"
}
}Every field
It takes no body.
Response · 200 OK, a sign-in from GoRunner’s own pages
dataobjectstatusstringpending— the popup has not bound yet;launched— the person is at the provider;connected— the tokens are stored;failed— seeerror;expired— the attempt aged out, or never existed.One of
pending,launched,connected,failed,expired.connectionIdUUIDThe connection signed in: for a sign-in that makes its connection, present once it connected.
reasonstringOnly when
failed:denied— the person said no on the provider’s page;other_window— the sign-in finished in a browser that did not start it;service_error— the provider answered with an error;failed— anything on this side (the connection, its client, storage).One of
denied,other_window,service_error,failed,cancelled.errorstringOnly when
failed: why it ended, as a sentence for a person.accountstringOnly when
connected: who signed in, when the test after the sign-in named them.previousAccountstringOnly when a sign-in again signed in as someone else than before: who it was.
accountChangedboolean
Response · 200 OK, a sign-in an API token started
dataobjectattemptIdstringstatusstringpending— the provider has not sent the browser back yet;connected— the connection holds its tokens;failed— seereason.One of
pending,connected,failed.connectionIdUUIDOnly when
connected: the connection made (or signed in again).reasonstringOnly when
failed:denied— the person said no on the provider’s page;service_error— the provider answered with an error;failed— anything on this side;cancelled— the sign-in was stopped (POST /api/connections/oauth2/attempts/{attemptId}/cancel, by the token that started it; no partner endpoint stops one);expired— the link ran out first.One of
denied,service_error,failed,cancelled,expired.errorstringOnly when
failed: why, as a sentence for a person.accountstringOnly when
connected: who signed in, when the test after the sign-in named them.expiresAttime