Documentation
35 endpoints. Bearer-token auth. JSON or binary responses.
OpenAPI 3.1 spec → · Import into Postman, Insomnia, or any OpenAPI-aware client to scaffold an SDK in your language of choice.
Rate limits
Every plan has a sustained RPS budget plus a burst allowance enforced
via a per-key token bucket. Exceeding the burst returns
429 rate_limited with a Retry-After header.
| Plan | Sustained (req/s) | Burst |
|---|---|---|
| Starter | 2 | 5 |
| Pro | 5 | 15 |
| Growth | 20 | 40 |
| Scale | 100 | 200 |
| Business | 400 | 800 |
All successful responses carry RateLimit-Limit and
RateLimit-Remaining headers so your client can
self-throttle without hitting 429.
Authentication
Every request to /v1/* requires a bearer token in the
Authorization header:
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Get a key by subscribing to a plan on the pricing page. Keys
are emailed immediately after Stripe checkout. Treat them like passwords — never commit
them to source control. Rotate anytime via POST /v1/keys/rotate.
Self-service
Three endpoints that don't count against your quota:
GET /v1/usage
Check your current plan, quota, and usage.
curl https://api.bytario.com/v1/usage \
-H "Authorization: Bearer $KEY"
{
"plan": "growth",
"quota_monthly": 50000,
"used_this_month": 1234,
"remaining": 48766,
"resets_at": "2026-05-01T00:00:00.000Z",
"status": "active"
}
POST /v1/keys/rotate
Generate a new API key and invalidate the current one. The new key is returned in the response and emailed to you.
curl -X POST https://api.bytario.com/v1/keys/rotate \
-H "Authorization: Bearer $KEY"
GET /billing
Redirects to the Stripe Customer Portal where you can switch plans, update payment methods, view invoices, and cancel.
curl -L https://api.bytario.com/billing \
-H "Authorization: Bearer $KEY"
Quotas & usage
Each plan has a hard monthly request quota. Successful requests count; 4xx/5xx
responses do not. Every successful response carries an X-Quota-Remaining
header so you can monitor usage inline:
HTTP/1.1 200 OK
Content-Type: image/png
X-Quota-Remaining: 4998
At quota, the next request returns 429 Too Many Requests. Quotas reset on
the 1st of each month at 00:00 UTC.
Errors
All errors are JSON with the same shape:
{
"error": "invalid_input",
"message": "Field 'text' is required",
"upgrade_url": "https://api.bytario.com/pricing" // optional
}
Common error codes: unauthorized (401), subscription_inactive
(403), quota_exceeded (429), invalid_input (400),
unsupported_format (400), too_large (413),
conversion_failed (500).
Endpoints
POST /v1/qr/generate
Generate a QR code from text or URL.
curl https://api.bytario.com/v1/qr/generate \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"text":"https://bytario.com","format":"png","errorCorrection":"M"}' \
--output qr.png
POST /v1/qr/read
Decode a QR code from an image. Body is raw image bytes.
curl https://api.bytario.com/v1/qr/read \
-H "Authorization: Bearer $KEY" \
--data-binary @qr.png
POST /v1/image/convert
Convert between JPEG / PNG / WebP / AVIF / HEIC.
curl "https://api.bytario.com/v1/image/convert?to=webp&quality=85" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.heic \
--output photo.webp
POST /v1/image/resize
Resize an image with a fit mode.
curl "https://api.bytario.com/v1/image/resize?width=1200&height=630&fit=cover" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output resized.jpg
POST /v1/image/compress
curl "https://api.bytario.com/v1/image/compress?quality=75" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output compressed.jpg
POST /v1/image/strip-metadata
curl https://api.bytario.com/v1/image/strip-metadata \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output clean.jpg
POST /v1/image/read-metadata
Returns JSON with EXIF / GPS / camera info.
curl https://api.bytario.com/v1/image/read-metadata \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg
POST /v1/image/favicon-set
Returns JSON with base64-encoded ICO + 6 PNG sizes + manifest snippet.
curl https://api.bytario.com/v1/image/favicon-set \
-H "Authorization: Bearer $KEY" \
--data-binary @logo.png
POST /v1/pdf/merge
Multipart form with one or more files parts.
curl https://api.bytario.com/v1/pdf/merge \
-H "Authorization: Bearer $KEY" \
-F "files=@a.pdf" \
-F "files=@b.pdf" \
--output merged.pdf
POST /v1/pdf/split
curl "https://api.bytario.com/v1/pdf/split?ranges=1-3,7-9" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf
POST /v1/pdf/rotate
curl "https://api.bytario.com/v1/pdf/rotate?pages=all°rees=90" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf \
--output rotated.pdf
POST /v1/pdf/watermark
curl "https://api.bytario.com/v1/pdf/watermark?text=CONFIDENTIAL&opacity=0.3&rotation=-45" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf \
--output stamped.pdf
POST /v1/pdf/info
curl -X POST https://api.bytario.com/v1/pdf/info \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf
POST /v1/pdf/extract-text
curl https://api.bytario.com/v1/pdf/extract-text \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf
POST /v1/pdf/render-page
curl "https://api.bytario.com/v1/pdf/render-page?dpi=150&format=png" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf
POST /v1/pdf/fill-form
curl https://api.bytario.com/v1/pdf/fill-form \
-H "Authorization: Bearer $KEY" \
-F "file=@form.pdf" \
-F 'fields={"name":"Jane","date":"2026-04-07"}' \
-F "flatten=true" \
--output filled.pdf
POST /v1/pdf/flatten
curl https://api.bytario.com/v1/pdf/flatten \
-H "Authorization: Bearer $KEY" \
--data-binary @filled.pdf \
--output locked.pdf
POST /v1/barcode/generate
curl https://api.bytario.com/v1/barcode/generate \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"text":"0123456789012","format":"ean13","output":"svg"}' \
--output barcode.svg
POST /v1/barcode/read
curl https://api.bytario.com/v1/barcode/read \
-H "Authorization: Bearer $KEY" \
--data-binary @label.jpg
POST /v1/render/svg-to-png
curl "https://api.bytario.com/v1/render/svg-to-png?width=1024&background=white" \
-H "Authorization: Bearer $KEY" \
--data-binary @icon.svg \
--output icon.png
POST /v1/image/crop
Crop an image to a rectangle. Query params: x, y, width, height, format?, quality?
curl "https://api.bytario.com/v1/image/crop?x=100&y=50&width=400&height=300" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output cropped.jpg
POST /v1/image/rotate
Rotate an image by 90, 180, or 270 degrees.
curl "https://api.bytario.com/v1/image/rotate?degrees=90" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output rotated.jpg
POST /v1/image/flip
Flip an image horizontally or vertically.
curl "https://api.bytario.com/v1/image/flip?direction=horizontal" \
-H "Authorization: Bearer $KEY" \
--data-binary @photo.jpg \
--output flipped.jpg
POST /v1/pdf/compress
Compress a PDF. Returns JSON with bytes, originalSize, compressedSize, savedPercent.
curl "https://api.bytario.com/v1/pdf/compress?stripMetadata=true" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf
POST /v1/pdf/protect
Add password protection to a PDF.
curl "https://api.bytario.com/v1/pdf/protect?userPassword=secret123" \
-H "Authorization: Bearer $KEY" \
--data-binary @doc.pdf \
--output protected.pdf
POST /v1/data/base64-encode
Encode raw bytes to Base64. Returns text/plain.
curl https://api.bytario.com/v1/data/base64-encode \
-H "Authorization: Bearer $KEY" \
--data-binary @file.bin
POST /v1/data/base64-decode
Decode Base64 back to raw bytes.
echo "SGVsbG8gV29ybGQ=" | curl https://api.bytario.com/v1/data/base64-decode \
-H "Authorization: Bearer $KEY" \
--data-binary @- \
--output decoded.bin
POST /v1/data/url-encode
Percent-encode a UTF-8 string for URLs. Returns text/plain.
echo -n "hello world & foo=bar" | curl https://api.bytario.com/v1/data/url-encode \
-H "Authorization: Bearer $KEY" \
--data-binary @-
POST /v1/data/url-decode
Decode a percent-encoded string. Returns text/plain.
echo -n "hello%20world%26foo" | curl https://api.bytario.com/v1/data/url-decode \
-H "Authorization: Bearer $KEY" \
--data-binary @-
POST /v1/data/json-format
Pretty-print JSON. Returns application/json.
echo '{"a":1,"b":2}' | curl https://api.bytario.com/v1/data/json-format \
-H "Authorization: Bearer $KEY" \
--data-binary @-
POST /v1/data/json-minify
Minify JSON by stripping whitespace. Returns application/json.
curl https://api.bytario.com/v1/data/json-minify \
-H "Authorization: Bearer $KEY" \
--data-binary @pretty.json
POST /v1/data/csv-to-json
Convert CSV to JSON array. Returns application/json.
curl https://api.bytario.com/v1/data/csv-to-json \
-H "Authorization: Bearer $KEY" \
--data-binary @data.csv
POST /v1/data/json-to-csv
Convert JSON array to CSV. Returns text/csv.
curl https://api.bytario.com/v1/data/json-to-csv \
-H "Authorization: Bearer $KEY" \
--data-binary @data.json
POST /v1/file/hash
Compute file hash. Query param: algorithm (md5, sha1, sha256, sha384, sha512). Returns JSON.
curl "https://api.bytario.com/v1/file/hash?algorithm=sha256" \
-H "Authorization: Bearer $KEY" \
--data-binary @file.bin
POST /v1/file/detect
Detect file type from magic bytes. Returns JSON with mime, extension, description.
curl https://api.bytario.com/v1/file/detect \
-H "Authorization: Bearer $KEY" \
--data-binary @unknown-file
POST /v1/text/word-count
Count words, characters, sentences, paragraphs, reading time. Returns JSON.
echo "Hello world" | curl https://api.bytario.com/v1/text/word-count \
-H "Authorization: Bearer $KEY" \
--data-binary @-
POST /v1/text/diff
Compare two texts. Body: JSON { a, b, context?, labelA?, labelB? }. Returns JSON.
curl https://api.bytario.com/v1/text/diff \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"a":"hello\nworld","b":"hello\nearth"}'
POST /v1/text/markdown-to-html
Convert Markdown to HTML. Returns text/html.
echo "# Hello\n\n**Bold** text" | curl https://api.bytario.com/v1/text/markdown-to-html \
-H "Authorization: Bearer $KEY" \
--data-binary @-
POST /v1/color/convert
Convert between color formats. Body: JSON { color }. Returns JSON with hex, rgb, hsl, hsv, cmyk.
curl https://api.bytario.com/v1/color/convert \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{"color":"#ff6600"}'
Versioning
All endpoints live under /v1/. Breaking changes get a new major version
path; non-breaking additions go straight to /v1/. Old versions stay live
for at least 12 months after a deprecation announcement.
Support
Questions, bug reports, or feature requests: support@bytario.com. Scale and Business customers receive higher and highest priority email support respectively.