GoRunner docs
Search or askSearch⌘K

List an account’s AI apps

Since v2026.10.23

GET/api/embed/v1/accounts/{accountId}/ai-apps

Lists the AI apps an account’s people connected by signing in. Not its API tokens.

Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.

Embed · Self-hosted with an Embed license

Parameters

Path

accountIdRequired · string

Your ID for the customer’s account: 1 to 255 bytes of UTF-8, case-sensitive. URL-encode it: it may contain /.

Query

userOptional · string

Only this person’s, by your ID.

cursorOptional · string

The pagination.nextCursor of the page before, also answered as next. Left out: the first page.

limitOptional · integer

Rows a page, 1 to 100. The default is 50.

Read a row

The app, the person, the workspaces it reaches, what it may do (access: read, run, draft or publish) and its address (surface).

paused names the first switch that stops it now: tokens, mcp, mcpSignIn, or mcpBuild for a build connection. It works again when the switch is back on, for up to 180 days after it connected. See Tokens and AI apps.

Responses

  • 200OK

    The connections, newest first. pagination.nextCursor and next hold the same cursor, null on the last page.

  • limit, cursor or user isn’t valid.

  • You have no account with this ID.

  • 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_…
ACCOUNT_ID="acct-bakery"

URL="$GORUNNER/api/embed/v1/accounts/$ACCOUNT_ID/"
URL="${URL}ai-apps"
curl "$URL" \
  -H "Authorization: Bearer $GORUNNER_EMBED_KEY"

Response · 200 OK

json
{
  "data": [
    {
      "id": "6e9a1c3f-8b2d-4a57-9e0c-3f7b5d1a8c42",
      "client": {
        "name": "Claude",
        "redirectHost": "claude.ai",
        "kind": "web"
      },
      "user": {
        "id": "ada-123",
        "name": "Ada Lovelace"
      },
      "workspaces": [
        {
          "id": "ws-orders",
          "name": "Orders",
          "default": false
        }
      ],
      "access": "run",
      "surface": "tools",
      "paused": null,
      "createdAt": "2026-10-22T10:00:00Z",
      "lastUsedAt": "2026-10-25T09:00:00Z",
      "expiresAt": "2027-04-20T10:00:00Z"
    }
  ],
  "next": null,
  "pagination": {
    "limit": 50,
    "nextCursor": null
  }
}
Every field

It takes no body.

Response · 200 OK

dataarray of objects
idUUID
clientobject
namestring

The application’s name, as its registration claims it.

redirectHoststring

Where its code would go: a host, or an app’s callback.

kindstring

One of web, loopback, app.

userobject
idstring
namestring
workspacesarray of objects
idstring

Your workspace id; default for the account’s default workspace.

namestring
defaultboolean
accessstring

One of read, run, draft, publish.

surfacestring

One of build, tools.

pausedstring or null

The first switch off that this connection needs (it works again when the switch is back on), or null.

createdAttime
lastUsedAttime or null
expiresAttime
nextstring or null

The same cursor as pagination.nextCursor.

paginationobject
limitinteger
nextCursorstring or null

The cursor of the next page; null on the last page. A page that comes back full can carry a cursor even when nothing follows: the next page is then empty, with null here. Keep going until it is null.