Add rate limit headers to OpenAPI generation script
Some checks failed
Build & Deploy to Staging / Build & Deploy to Staging (push) Failing after 2m11s
Some checks failed
Build & Deploy to Staging / Build & Deploy to Staging (push) Failing after 2m11s
- Update generate-openapi.mjs to include header components - Ensure public/openapi.json has rate limit headers - Update rate limits description in generation script
This commit is contained in:
parent
70eb6908e3
commit
f0cb83a901
2 changed files with 63 additions and 1 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
"info": {
|
"info": {
|
||||||
"title": "DocFast API",
|
"title": "DocFast API",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Convert HTML, Markdown, and URLs to pixel-perfect PDFs. Built-in invoice & receipt templates.\n\n## Authentication\nAll conversion and template endpoints require an API key via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.\n\n## Demo Endpoints\nTry the API without signing up! Demo endpoints are public (no API key needed) but rate-limited to 5 requests/hour per IP and produce watermarked PDFs.\n\n## Rate Limits\n- Demo: 5 PDFs/hour per IP (watermarked)\n- Pro tier: 5,000 PDFs/month, 30 req/min\n\n## Getting Started\n1. Try the demo at `POST /v1/demo/html` — no signup needed\n2. Subscribe to Pro at [docfast.dev](https://docfast.dev/#pricing) for clean PDFs\n3. Use your API key to convert documents",
|
"description": "Convert HTML, Markdown, and URLs to pixel-perfect PDFs. Built-in invoice & receipt templates.\n\n## Authentication\nAll conversion and template endpoints require an API key via `Authorization: Bearer <key>` or `X-API-Key: <key>` header.\n\n## Demo Endpoints\nTry the API without signing up! Demo endpoints are public (no API key needed) but rate-limited to 5 requests/hour per IP and produce watermarked PDFs.\n\n## Rate Limits\n- Demo: 5 PDFs/hour per IP (watermarked)\n- Pro tier: 5,000 PDFs/month, 30 req/min\n\nAll rate-limited endpoints return `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` headers. On `429`, a `Retry-After` header indicates seconds until the next allowed request.\n\n## Getting Started\n1. Try the demo at `POST /v1/demo/html` — no signup needed\n2. Subscribe to Pro at [docfast.dev](https://docfast.dev/#pricing) for clean PDFs\n3. Use your API key to convert documents",
|
||||||
"contact": {
|
"contact": {
|
||||||
"name": "DocFast",
|
"name": "DocFast",
|
||||||
"url": "https://docfast.dev",
|
"url": "https://docfast.dev",
|
||||||
|
|
@ -56,6 +56,36 @@
|
||||||
"description": "API key via X-API-Key header"
|
"description": "API key via X-API-Key header"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"headers": {
|
||||||
|
"X-RateLimit-Limit": {
|
||||||
|
"description": "The maximum number of requests allowed in the current time window",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 30
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"X-RateLimit-Remaining": {
|
||||||
|
"description": "The number of requests remaining in the current time window",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 29
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"X-RateLimit-Reset": {
|
||||||
|
"description": "Unix timestamp (seconds since epoch) when the rate limit window resets",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 1679875200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Retry-After": {
|
||||||
|
"description": "Number of seconds to wait before retrying the request (returned on 429 responses)",
|
||||||
|
"schema": {
|
||||||
|
"type": "integer",
|
||||||
|
"example": 60
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"schemas": {
|
"schemas": {
|
||||||
"PdfOptions": {
|
"PdfOptions": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@ Try the API without signing up! Demo endpoints are public (no API key needed) bu
|
||||||
- Demo: 5 PDFs/hour per IP (watermarked)
|
- Demo: 5 PDFs/hour per IP (watermarked)
|
||||||
- Pro tier: 5,000 PDFs/month, 30 req/min
|
- Pro tier: 5,000 PDFs/month, 30 req/min
|
||||||
|
|
||||||
|
All rate-limited endpoints return \`X-RateLimit-Limit\`, \`X-RateLimit-Remaining\`, and \`X-RateLimit-Reset\` headers. On \`429\`, a \`Retry-After\` header indicates seconds until the next allowed request.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
1. Try the demo at \`POST /v1/demo/html\` — no signup needed
|
1. Try the demo at \`POST /v1/demo/html\` — no signup needed
|
||||||
2. Subscribe to Pro at [docfast.dev](https://docfast.dev/#pricing) for clean PDFs
|
2. Subscribe to Pro at [docfast.dev](https://docfast.dev/#pricing) for clean PDFs
|
||||||
|
|
@ -64,6 +66,36 @@ Try the API without signing up! Demo endpoints are public (no API key needed) bu
|
||||||
description: 'API key via X-API-Key header'
|
description: 'API key via X-API-Key header'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
headers: {
|
||||||
|
'X-RateLimit-Limit': {
|
||||||
|
description: 'The maximum number of requests allowed in the current time window',
|
||||||
|
schema: {
|
||||||
|
type: 'integer',
|
||||||
|
example: 30
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'X-RateLimit-Remaining': {
|
||||||
|
description: 'The number of requests remaining in the current time window',
|
||||||
|
schema: {
|
||||||
|
type: 'integer',
|
||||||
|
example: 29
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'X-RateLimit-Reset': {
|
||||||
|
description: 'Unix timestamp (seconds since epoch) when the rate limit window resets',
|
||||||
|
schema: {
|
||||||
|
type: 'integer',
|
||||||
|
example: 1679875200
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'Retry-After': {
|
||||||
|
description: 'Number of seconds to wait before retrying the request (returned on 429 responses)',
|
||||||
|
schema: {
|
||||||
|
type: 'integer',
|
||||||
|
example: 60
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
schemas: {
|
schemas: {
|
||||||
PdfOptions: {
|
PdfOptions: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue