Stop a sign-in
POST/
Stops a sign-in you started, so finishing it later connects nothing.
Needs an API token with the Write permission for connections (connection:write).
Parameters
Path
attemptIdRequired · stringThe sign-in to stop.
Responses
- 200OK
The sign-in as it stands now, as Check a sign-in reads it. One that had already ended keeps its outcome. One that is gone answers
{"status": "expired"}. - 403
FORBIDDENThe token lacks the Write permission for connections.
- 404
NOT_FOUNDNot a sign-in you started.
The sign-in couldn’t be stopped. Try again.
- 503
UNAVAILABLEThis server can’t reach sign-ins now.
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 · 413 PAYLOAD_TOO_LARGE · 415 INVALID_CONTENT_TYPE · 429 RATE_LIMITED · 503 BUSY · 503 PAUSED · 503 SERVICE_UNAVAILABLE. See Errors.
Request
GORUNNER="https://api.gorunner.io"
GORUNNER_TOKEN="grt_…" # needs Write for connections
ATTEMPT_ID="your-attempt-id" # from the start
URL="$GORUNNER/api/connections/oauth2/attempts/"
URL="${URL}$ATTEMPT_ID/cancel"
curl -X POST "$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}/cancel`,
{
method: "POST",
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.post(
f"{GORUNNER}/api/connections/oauth2/attempts/"
f"{ATTEMPT_ID}/cancel",
headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]Response · 200 OK
{
"data": {
"attemptId": "Zq3XbN0iJm7dQe8TfR2wLg",
"status": "failed",
"reason": "cancelled",
"error": "You stopped this sign-in.",
"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