Upscrape generates an OpenAPI 3.1 document for each platform from its registered capabilities and the canonical API error catalog.

## What the document contains

- `POST /execute` with a capability-specific request union;
- job and result polling endpoints;
- bearer authentication;
- `Prefer` and `Idempotency-Key` headers;
- rate-limit headers and canonical error envelopes;
- conditional credential endpoints for platforms that require authentication;
- JSON Schema Draft 2020-12 input definitions;
- capability-specific completed-response schemas where the contract can be expressed safely.

Raw capability output remains open-ended because upstream response shapes vary and may evolve additively.

## Public access

Every public platform has a stable document at:

```text
https://upscrape.com/scrapers/PLATFORM_ID/openapi.json
```

The authenticated console exposes the same generated document for platforms visible to that account. Private and unlisted definitions remain available only through account-scoped console routes; they are not exposed by the public URL.

## Generation rule

Do not hand-maintain a second OpenAPI file in application code or documentation. Change the manifest contract, canonical error catalog, or OpenAPI generator and test the resulting document.
