{
  "openapi": "3.1.0",
  "info": {
    "title": "SandboxAPIs — Slack (paths only)",
    "version": "coverage-manifest-rev-5",
    "summary": "The 17 read paths SandboxAPIs serves on Slack.",
    "description": "Every read SandboxAPIs serves on Slack, pointed at https://slack.sandboxapis.dev.\n\n17 requests, one per served row of our coverage manifest. PATHS ONLY: this file carries no request or\nresponse schema, because a schema is the part of an API description we do not own. It is generated from\ncoverage/COVERAGE_MANIFEST.yaml — our own record of what THIS host answers — and never from a vendor's\npublished specification, several of which may not be redistributed.\n\nThe host is read-only. Every write verb answers the provider's own error shape with a message naming what was\nattempted; the \"Read-only refusal, on purpose\" folder holds one so the shape is discoverable.\n\nNo credentials are needed — any value in `apiKey` is accepted, and a real SandboxAPIs key only raises the rate\nlimit. Path variables left blank are identifiers that move when the live host re-rolls; fill them from a list\nresponse."
  },
  "servers": [
    {
      "url": "https://slack.sandboxapis.dev",
      "description": "The live Slack host"
    }
  ],
  "security": [
    {
      "sandboxapisKey": []
    }
  ],
  "components": {
    "securitySchemes": {
      "sandboxapisKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Authorization: Bearer <key> (where the xoxb-/xoxp- token rides)"
      }
    }
  },
  "paths": {
    "/api/auth.test": {
      "post": {
        "summary": "POST /api/auth.test",
        "operationId": "post_api_auth_test",
        "tags": [
          "auth"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/bookmarks.list": {
      "get": {
        "summary": "GET /api/bookmarks.list",
        "operationId": "get_api_bookmarks_list",
        "tags": [
          "bookmarks"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/conversations.history": {
      "get": {
        "summary": "GET /api/conversations.history",
        "operationId": "get_api_conversations_history",
        "tags": [
          "conversations"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/conversations.info": {
      "get": {
        "summary": "GET /api/conversations.info",
        "operationId": "get_api_conversations_info",
        "tags": [
          "conversations"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/conversations.list": {
      "get": {
        "summary": "GET /api/conversations.list",
        "operationId": "get_api_conversations_list",
        "tags": [
          "conversations"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/conversations.members": {
      "get": {
        "summary": "GET /api/conversations.members",
        "operationId": "get_api_conversations_members",
        "tags": [
          "conversations"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/conversations.replies": {
      "get": {
        "summary": "GET /api/conversations.replies",
        "operationId": "get_api_conversations_replies",
        "tags": [
          "conversations"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/emoji.list": {
      "get": {
        "summary": "GET /api/emoji.list",
        "operationId": "get_api_emoji_list",
        "tags": [
          "emoji"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. This workspace has no CUSTOM emoji — the canon's reaction emoji are the standard set, which real Slack never lists here (DECISIONS 2026-08-25 [P34/slack] item 6)",
        "x-sandboxapis-mode": "empty",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/files.list": {
      "get": {
        "summary": "GET /api/files.list",
        "operationId": "get_api_files_list",
        "tags": [
          "files"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. No message in this universe carries a file — `message` has no attachment column and the fleet's only file entity, `attachment`, hangs off the support desk's ticket comments and macros and - from hello-18's attachmentParents - issues, issue comments, merge requests, alerts and the namespace, never off a chat message (clause re-worded at the hello-18 cutover 2026-09-12: the canon grew, the conclusion did not move); Slack's own answer for a workspace with no files is {ok:true, files:[], paging:{...}} at 200. RULED by the founder 2026-09-12 (round 19), coverage wave W5. It is already the third statement of one fact on this host: reactions.get refuses a `file` argument with file_not_found, and files.upload is a write",
        "x-sandboxapis-mode": "empty",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/pins.list": {
      "get": {
        "summary": "GET /api/pins.list",
        "operationId": "get_api_pins_list",
        "tags": [
          "pins"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. No message in this workspace is pinned, on any channel — which is what keeps conversations.history's pin_count: 0 coherent (DECISIONS 2026-08-25 [P34/slack] item 6)",
        "x-sandboxapis-mode": "empty",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/reactions.get": {
      "get": {
        "summary": "GET /api/reactions.get",
        "operationId": "get_api_reactions_get",
        "tags": [
          "reactions"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/search.messages": {
      "get": {
        "summary": "GET /api/search.messages",
        "operationId": "get_api_search_messages",
        "tags": [
          "search"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/team.info": {
      "get": {
        "summary": "GET /api/team.info",
        "operationId": "get_api_team_info",
        "tags": [
          "team"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/usergroups.list": {
      "get": {
        "summary": "GET /api/usergroups.list",
        "operationId": "get_api_usergroups_list",
        "tags": [
          "usergroups"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/users.info": {
      "get": {
        "summary": "GET /api/users.info",
        "operationId": "get_api_users_info",
        "tags": [
          "users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/users.list": {
      "get": {
        "summary": "GET /api/users.list",
        "operationId": "get_api_users_list",
        "tags": [
          "users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/api/users.lookupByEmail": {
      "get": {
        "summary": "GET /api/users.lookupByEmail",
        "operationId": "get_api_users_lookupByEmail",
        "tags": [
          "users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    }
  }
}
