원클릭으로
api-explorer
Discover, test, and document public REST/GraphQL/JSON APIs — explore endpoints, inspect responses, and build integration guides
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Discover, test, and document public REST/GraphQL/JSON APIs — explore endpoints, inspect responses, and build integration guides
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Transform, filter, and analyse data using sandbox handlers
KQL language expertise for writing correct, efficient Kusto queries using Fabric RTI MCP tools
Connect and use external MCP servers (M365, GitHub, custom services)
Expert at building professional PDF documents using Hyperlight sandbox modules
Generate documents, reports, and formatted output files
Multi-source web research synthesised into structured reports or presentations
| name | api-explorer |
| description | Discover, test, and document public REST/GraphQL/JSON APIs — explore endpoints, inspect responses, and build integration guides |
| triggers | ["API","endpoint","REST","GraphQL","swagger","openapi","API documentation","API reference","test endpoint","status code","rate limit","webhook","API call","REST API","HTTP endpoint"] |
| patterns | ["fetch-and-process","data-extraction","two-handler-pipeline","file-generation"] |
| antiPatterns | ["Don't hardcode API keys or secrets in handler code — authenticated APIs are not yet supported, stick to public endpoints","Don't ignore rate limits — add delays between requests and respect Retry-After headers","Don't assume JSON responses — always check content-type before parsing","Don't fetch OpenAPI/Swagger specs by scraping docs pages — look for /openapi.json, /swagger.json, or /api-docs endpoints first","Don't make destructive API calls (POST/PUT/DELETE) without explicit user confirmation via ask_user","Don't store full API responses in handler source — use ha:shared-state for large payloads","Don't skip error response documentation — 4xx/5xx responses are as important as 2xx","Don't ignore pagination — check for next/Link headers and follow them","Don't scrape SPA API documentation sites — fetch the OpenAPI spec directly or use raw API endpoints","Don't parse HTML documentation with regex — use ha:html parseHtml() if you must read docs pages"] |
| allowed-tools | ["register_handler","execute_javascript","execute_bash","delete_handler","get_handler_source","edit_handler","list_handlers","reset_sandbox","list_modules","module_info","list_plugins","plugin_info","manage_plugin","list_mcp_servers","mcp_server_info","manage_mcp","apply_profile","configure_sandbox","sandbox_help","register_module","write_output","read_input","read_output","ask_user"] |
Guidance for discovering, testing, and documenting public REST and JSON APIs.
NOTE: This skill is for public, unauthenticated APIs only. Authenticated API support (tokens, API keys, OAuth) is planned but not yet available — see SECRET-MANAGEMENT-DESIGN.md. Do not ask the user for API keys or tokens.
Find the API surface before making requests:
GET /openapi.jsonGET /swagger.jsonGET /api-docsGET /v2/api-docs (Spring Boot)GET /api/v1 or /api/v2 (versioned roots)api.github.com)If you find an OpenAPI spec, parse it as JSON — it contains all endpoints, methods, parameters, and response schemas in machine-readable form.
For each endpoint you want to test:
ask_userf.get(url) meta to verify before reading bodyf.read(url) until done, collect chunks, joinX-RateLimit-*, Retry-After), pagination headers (Link), and caching headers (ETag, Cache-Control)// Handler 1: API Discovery + Testing
import * as f from "host:fetch";
import * as state from "ha:shared-state";
export function handler(event) {
const { urls } = event;
const results = [];
for (const url of urls) {
const meta = f.get(url);
if (!meta.ok) {
results.push({ url, error: meta.statusText, status: meta.status });
continue;
}
const chunks = [];
while (true) {
const chunk = f.read(url);
if (chunk.done) break;
chunks.push(chunk.text);
}
const body = chunks.join("");
const parsed = meta.contentType?.includes("json") ? JSON.parse(body) : body;
results.push({
url,
status: meta.status,
contentType: meta.contentType,
data: parsed,
});
}
state.set("api-results", JSON.stringify(results));
return { tested: results.length, stored: "api-results" };
}
After collecting responses:
next/previous fields, Link headers, offset/limit/cursor parametersX-RateLimit-Limit, X-RateLimit-Remaining){ error: string }, { message, code }, HTTP status only?Produce clear, structured output:
For each endpoint discovered, document:
| Method | Path | Description | Response Type | Paginated |
|---|---|---|---|---|
| GET | /users | List users | Array of User | Yes (Link header) |
| GET | /users/:id | Get user by ID | User object | No |
For each unique response type, document field names and types:
| Field | Type | Description |
|---|---|---|
| id | number | Unique identifier |
| name | string | Display name |
| created_at | string (ISO 8601) | Creation timestamp |
Use write_output for the final documentation. Markdown is the default format. Include:
These APIs are known to be public and well-structured for exploration:
jsonplaceholder.typicode.com — Fake REST API for testing (posts, comments, users, todos)pokeapi.co/api/v2 — Pokémon data with discoverable root, pagination, nested resourcesapi.open-meteo.com — Weather forecasts via query parameters, no auth neededrestcountries.com/v3.1 — Country data by name, code, regionhttpbin.org — Echo/test API for request inspectiondog.ceo/api — Random dog images, breeds listpetstore3.swagger.io — OpenAPI 3.0 spec available at /api/v3/openapi.json