# Rate Limit Docs Audit (`defenestrator/rate-limit-docs-audit`) Actor

Audit public API documentation for rate-limit completeness: limits, headers, 429 behavior, Retry-After, backoff, quotas, reset windows, and examples.

- **URL**: https://apify.com/defenestrator/rate-limit-docs-audit.md
- **Developed by:** [Defenestrator](https://apify.com/defenestrator) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 rate-limit docs audit rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Rate Limit Docs Audit

Audit public API documentation for rate-limit and retry-behavior coverage, then export one structured checklist row per docs URL.

Use this Actor to quickly see whether API docs explain limits, quota scopes, rate-limit headers, HTTP 429 behavior, `Retry-After`, reset windows, backoff guidance, and examples clearly enough for client developers.

This is an unofficial documentation-audit utility. It reviews public docs only; it does not test live API limits or call provider APIs beyond fetching the documentation pages you submit.

### Common use cases

| Use case | Why it helps |
|---|---|
| API launch readiness | Check whether customers can find the information needed to build stable clients. |
| Client / sync-job planning | Compare third-party APIs before designing polling, retry, or backoff behavior. |
| DevRel documentation QA | Identify missing headers, reset-window details, or 429 handling guidance. |
| Vendor diligence | Produce comparable rows for many public API docs sites before manual review. |
| Support-risk triage | Find docs gaps that may cause avoidable integration tickets. |

### Input

Provide public HTTP(S) API documentation URLs. Direct rate-limit pages are best, but broader API docs pages can work with a modest page budget.

```json
{
  "startUrls": [
    { "url": "https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api" }
  ],
  "maxPagesPerSite": 3,
  "timeoutSecs": 20,
  "sameHostOnly": true
}
```

#### Input fields

| Field | Type | Default | Notes |
|---|---:|---:|---|
| `startUrls` | array | required | Public API docs or developer-portal URLs to audit. |
| `maxPagesPerSite` | integer | `8` | Maximum successful pages analyzed per input URL. |
| `timeoutSecs` | integer | `20` | HTTP timeout per page request. |
| `sameHostOnly` | boolean | `true` | Keeps candidate links on the same host as the input URL. |

Do not submit confidential, authenticated, internal, or non-public documentation URLs.

### Output

The Actor writes one dataset item per input URL. Rows include:

- `domain`, `inputUrl`, and normalized URL details
- `auditScore`, `grade`, and `riskLevel`
- checklist booleans for `rateLimitDocsFound`, `limitsQuantified`, `rateLimitHeadersDocumented`, `http429Documented`, `retryAfterDocumented`, `backoffGuidance`, `quotaScopesDocumented`, and `resetWindowDocumented`
- `bestPageUrl`, evidence URLs/snippets, pages analyzed, URLs fetched, warnings, and recommendations

### Pricing

from $4.00 / 1,000 audited rate-limit documentation URLs

This Actor uses Apify Pay per Event pricing with platform usage included. The row event is charged only for useful rows written to the default dataset.

| Event | Price | Unit |
|---|---:|---|
| Actor start (`apify-actor-start`) | `$0.00005` | Once when the run starts. |
| Rate-limit docs audit row (`apify-default-dataset-item`) | `$0.004` | Per audited rate-limit documentation URL row. |

A row is one public rate-limit documentation URL audit result. Apify plan discounts, user-configured max-charge limits, and any future Apify pricing UI changes may affect final charges.

### Limitations and responsible use

- This is a heuristic documentation audit, not legal advice, security certification, penetration testing, or live API validation.
- Results describe what the public docs appear to say; they do not prove the provider enforces limits as documented.
- JavaScript-heavy, blocked, sparse, or login-gated documentation may under-score.
- Human review is recommended before relying on results for high-stakes vendor, security, procurement, or compliance decisions.
- Use only with documentation you are allowed to access and review.

### Data handling

The Actor fetches the public URLs supplied in the input and, when enabled, a small set of same-host candidate links. It writes structured audit rows to the run's default dataset and intentionally avoids storing full page contents in output.

### Related Actors in this portfolio

This Actor is part of the **API documentation reliability audits** group. These are narrow, source-specific Apify Actors intended for scheduled checks and repeatable dataset exports — not broad scraped-content feeds.

- [Webhook Signature Docs Audit](https://apify.com/defenestrator/webhook-signature-doc-audit) — Webhook signature-verification documentation audit for integration readiness.
- [Rate Limit Docs Audit](https://apify.com/defenestrator/rate-limit-docs-audit) — API rate-limit documentation audit for quota, header, reset, and retry clarity.
- [Idempotency Docs Audit](https://apify.com/defenestrator/idempotency-docs-audit) — API idempotency documentation audit for retry-safety and duplicate handling.
- [API Error Contract Docs Audit](https://apify.com/defenestrator/api-error-contract-docs-audit) — API error-contract documentation audit for status codes, error bodies, and examples.

Each listing includes its own source notes, limits, pricing, and responsible-use caveats. Use the official source links in each Actor when decisions require verification.

# Actor input Schema

## `startUrls` (type: `array`):

Public HTTP(S) rate-limit documentation, developer portal, API reference, or vendor docs URLs to audit. Do not enter private, confidential, localhost, internal-network, or non-public URLs.

## `maxPagesPerSite` (type: `integer`):

Maximum number of successful HTML/text pages to analyze per input. The Actor may fetch additional candidate URLs to find the target documentation, but only analyzes up to this many pages.

## `timeoutSecs` (type: `integer`):

HTTP timeout per request.

## `sameHostOnly` (type: `boolean`):

Only follow discovered links on the same hostname as the input URL. Recommended for predictable, low-cost audits.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api"
    },
    {
      "url": "https://docs.slack.dev/apis/web-api/rate-limits/"
    }
  ],
  "maxPagesPerSite": 8,
  "timeoutSecs": 20,
  "sameHostOnly": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api"
        },
        {
            "url": "https://docs.slack.dev/apis/web-api/rate-limits/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("defenestrator/rate-limit-docs-audit").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [
        { "url": "https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api" },
        { "url": "https://docs.slack.dev/apis/web-api/rate-limits/" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("defenestrator/rate-limit-docs-audit").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://docs.github.com/en/rest/using-the-rest-api/rate-limits-for-the-rest-api"
    },
    {
      "url": "https://docs.slack.dev/apis/web-api/rate-limits/"
    }
  ]
}' |
apify call defenestrator/rate-limit-docs-audit --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=defenestrator/rate-limit-docs-audit",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sCYp37OgS6i10Gzsr/builds/eP1J1JM781NXmDErS/openapi.json
