List approvals

October 12, 2026

Table of contents

  1. Request Headers
  2. Query Parameters
  3. Responses
  4. Model
  5. Examples
  6. Try It

List the agent’s permission requests on one Muse account, across all of its chats. Each Muse account is one agent, and before some actions it asks for permission: for example to send information to a website while it runs code, or to act in a connected app.

  • pending holds the requests that wait for an answer. Each names the chatId that asked. Answer one with POST /chats/chatId/approvals/approvalId and one of its options.
  • decided holds requests that already ended, newest first: approved, denied or timed out.

While a request waits, that chat’s answer is paused. A request that is not answered by its expires time ends as timed out. The chat stream shows the same requests as approval events, see GET /chats/chatId/stream.

https://api.useapi.net/v1/muse/accounts/email/approvals?status=status&limit=limit

  • email is the email of an added account, URL-encoded in the path.
Request Headers
Authorization: Bearer {API token}
Query Parameters
  • status is optional, pending for the waiting requests only, or all for pending and decided.
    Default: all.
  • limit is optional, how many decided requests to read.
    Range: 1 to 100. Default: 50.
Responses
  • 200 OK

    {
      "email": "[email protected]",
      "pending": [
        {
          "approvalId": "b996c81a-fbf4-4645-bc62-4a3cb75d3cbb",
          "chatId": "c-u12345-email:[email protected]:24b7e718-bb5a-4ff3-81d9-d90b108f084c-bot:muse",
          "status": "pending",
          "decision": null,
          "title": "Share info with deb.nodesource.com",
          "question": "Allow Muse to share information with deb.nodesource.com?",
          "details": [
            { "label": "Host", "value": "deb.nodesource.com" },
            { "label": "Grants", "value": "nodesource.com and all subdomains" },
            { "label": "Method", "value": "CONNECT" },
            { "label": "Path", "value": "deb.nodesource.com:443" },
            { "label": "Policy", "value": "tool.exec" }
          ],
          "options": [
            { "decision": "allow_once", "label": "Allow once" },
            { "decision": "allow_always", "label": "Always allow this site" },
            { "decision": "deny", "label": "Deny" }
          ],
          "requested": "2026-10-13T01:26:15.483Z",
          "decided": null,
          "expires": "2026-10-13T01:36:15.483Z"
        }
      ],
      "decided": [
        {
          "approvalId": "c5728845-81a7-4c50-902a-84a7dacff6fd",
          "chatId": "c-u12345-email:[email protected]:8d69a599-7aa9-46e2-bfcb-78e156f9a138-bot:muse",
          "status": "approved",
          "decision": "allow_always",
          "title": "Share info with deb.nodesource.com",
          "question": "Allow Muse to share information with deb.nodesource.com?",
          "details": [
            { "label": "Host", "value": "deb.nodesource.com" },
            { "label": "Grants", "value": "nodesource.com and all subdomains" },
            { "label": "Method", "value": "CONNECT" },
            { "label": "Path", "value": "deb.nodesource.com:443" },
            { "label": "Policy", "value": "tool.exec" }
          ],
          "requested": "2026-10-13T01:26:15.483Z",
          "decided": "2026-10-13T01:26:21.339Z",
          "expires": "2026-10-13T01:36:15.483Z"
        }
      ]
    }
    

    With status=pending the response has no decided.

  • 400 Bad Request — a parameter is invalid.

    {
      "error": "Parameter status (done) valid values: pending,all",
      "code": 400
    }
    
  • 401 Unauthorized — Invalid API token.

    {
      "error": "useapi.net ⁝ Unauthorized",
      "code": 401
    }
    
  • 404 Not Found — the account named by email is not added.

    {
      "error": "Account [email protected] is not configured",
      "code": 404
    }
    
  • 503 Service Unavailable — Muse could not be read right now. Retry shortly.

    {
      "error": "Muse could not be read right now (…), please retry",
      "code": 503
    }
    
  • 596 Account Error

    The account needs your attention, and it is paused until you add it again. You receive an email when this happens. There are two causes.

    Meta asks for a security check on the account. Sign in once at muse.ai in a browser, complete the check, then add the account again with POST /accounts using the same email and password. The API keeps using its session, so no new sign-in is needed.

    {
      "error": "Account [email protected]: Meta asks for a security check on account [email protected] (\"This account must complete a security checkpoint on the web\"). Sign in once at https://muse.ai in a browser, complete the check, then add the account again with POST /accounts",
      "code": 596
    }
    

    Or Muse refused to sign the account in again when its session needed renewing, most often because the password was changed. Add the account again with the current password.

    {
      "error": "Account [email protected]: Muse refused to sign in account [email protected] (…). Update its password with POST /accounts, or sign in at https://muse.ai to clear the block, then re-add it",
      "code": 596
    }
    
Model
{ // TypeScript, all fields are optional
  email: string
  pending: Approval[]          // waiting for an answer
  decided?: Approval[]         // ended, newest first (not with status=pending)
  error?: string               // errors only
  code?: number                // errors only
}

type Approval = {
  approvalId: string
  chatId: string | null        // the chat that asked: answer with POST /chats/{chatId}/approvals/{approvalId}
  status: string               // pending, approved, denied, or how it ended, e.g. timed out
  decision: string | null      // e.g. allow_once, allow_always, deny
  title: string | null         // e.g. "Share info with deb.nodesource.com"
  question: string | null
  details: { label: string, value: string }[]
  options?: { decision: string, label: string }[]   // pending only: the answers you can give
  requested: string | null     // ISO 8601
  decided: string | null       // ISO 8601
  expires: string | null       // ISO 8601, an unanswered request times out then
}
Examples
  • EMAIL="[email protected]"
    curl -H "Authorization: Bearer …" \
         "https://api.useapi.net/v1/muse/accounts/$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" "$EMAIL")/approvals?status=pending"
    
  • const token = "API token";
    const email = "Previously added account email";
    const apiUrl = `https://api.useapi.net/v1/muse/accounts/${encodeURIComponent(email)}/approvals?status=pending`;
    const response = await fetch(apiUrl, {
      method: "GET",
      headers: {
        "Authorization": `Bearer ${token}`,
      }
    });
    console.log("response", response.status, await response.json());
    
  • import requests
    from urllib.parse import quote
    token = "API token"
    email = "Previously added account email"
    apiUrl = f"https://api.useapi.net/v1/muse/accounts/{quote(email, safe='')}/approvals"
    headers = {
        "Authorization" : f"Bearer {token}"
    }
    response = requests.get(apiUrl, headers=headers, params={"status": "pending"})
    print(response, response.json())
    
Try It