API Reference

Complete reference for all 20 API services. Every service uses the same authentication, headers, response format, and error conventions.

Base URL

All API requests are made to the following base URL:

Base URL

All endpoints are prefixed with /api/v1/ and accept JSON only. HTTPS is required for all requests.

Authentication

The platform uses a dual authentication model:

API Key (required for all public endpoints)

Pass your API key in the X-API-Key header. This identifies your account and enforces rate limits and billing.

API Key authentication
curl -X POST /api/v1/check \
  -H "X-API-Key: apk_live_7f3a9b2c..." \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com"}'

JWT Bearer Token (for portal and admin endpoints)

Admin endpoints require a JWT token obtained from /api/authenticate. Tokens have a 5–15 minute TTL and are validated locally by each service.

JWT authentication
curl -X GET /api/v1/admin/stats \
  -H "Authorization: Bearer eyJhbGciOiJSUzI1NiIs..." \
  -H "X-API-Key: apk_live_7f3a9b2c..."

Security note: API keys are stored as SHA-256 hashes. Tokens are never logged. All communication must use HTTPS.

Standard Headers

Header Required Description
X-API-Key Yes Your API key for identification, billing, and rate limiting
Content-Type Yes (POST/PUT) Must be application/json
Authorization Admin only Bearer <JWT> for admin/portal endpoints
Accept No Defaults to application/json

Response Headers

Header Description
X-RateLimit-Limit Maximum requests allowed per minute for your plan
X-RateLimit-Remaining Requests remaining in the current window
X-RateLimit-Reset Unix timestamp when the rate limit window resets
Retry-After Seconds to wait before retrying (only on 429 responses)

Response Format

All responses are JSON. Successful responses return the resource directly (no wrapper envelope). Error responses use the RFC 7807 Problem Detail format.

Success Response

200 OK
{
  "field1": "value",
  "field2": 42,
  "checkedAt": "2026-03-25T12:00:00Z"
}

Error Response (RFC 7807)

400 Bad Request
{
  "type": "/problems/validation-error",
  "title": "Validation Error",
  "status": 400,
  "detail": "The 'email' field is required and must be a valid email address.",
  "instance": "/api/v1/check"
}

Batch Response

Batch endpoints return an array of results. Each item includes the input and the corresponding result, even if individual items fail.

200 OK (batch)
{
  "results": [
    { "email": "a@safe.com", "disposable": false, "score": 0.02 },
    { "email": "b@tempmail.org", "disposable": true, "score": 0.95 }
  ],
  "checkedAt": "2026-03-25T12:00:00Z"
}

Error Codes

Code Status Description Resolution
200 OK Request succeeded
201 Created Resource created
204 No Content Successful deletion, no body
400 Bad Request Malformed request body or missing required fields Check detail field for specifics
401 Unauthorized Missing or invalid API key / JWT token Verify X-API-Key or Authorization header
403 Forbidden Valid credentials but insufficient permissions Check required role (e.g., ROLE_ADMIN)
404 Not Found Endpoint or resource does not exist Verify the URL path and resource ID
413 Payload Too Large Request body exceeds the maximum size (64 KB typical) Reduce payload size or use batch endpoint
422 Unprocessable Entity Syntactically valid but semantically incorrect request Check field values and constraints
429 Too Many Requests Rate limit exceeded Wait for Retry-After seconds; consider upgrading plan
500 Internal Server Error Unexpected server error Retry with exponential backoff; contact support if persistent
503 Service Unavailable Service is temporarily down for maintenance Retry after a brief delay; check status page

Rate Limits

Rate limits are enforced per API key via Redis sliding-window counters. Limits apply uniformly across all services.

Plan Requests/Min Requests/Day Batch Size
Free1050010
Basic6010,00050
Pro300100,000100
EnterpriseCustomCustom1,000

Service Reference

Detailed endpoint documentation for all 20 API services, organized by category.

Disposable Email Detector

Detect whether an email address belongs to a disposable/temporary email provider. Uses a multi-layer detection pipeline: static blocklist, regex patterns, MX record inspection, and domain-age heuristics.

Endpoints

POST /api/v1/check

Check a single email address.

Request
{ "email": "user@example.com" }
Response
{
  "email": "user@example.com",
  "domain": "example.com",
  "disposable": false,
  "score": 0.05,
  "reasons": [],
  "checkedAt": "2026-03-25T12:00:00Z"
}
POST /api/v1/check/batch

Check multiple emails in one request (max 100 per batch).

Request
{ "emails": ["a@safe.com", "b@tempmail.org"] }
GET /api/v1/domains/{domain}

Look up a specific domain for disposable status.

Phone Validation

Validate, format, and classify phone numbers. Returns carrier type (mobile, landline, VoIP), country code, and E.164 formatted number.

POST /api/v1/phone/validate

Validate and classify a single phone number.

Request
{ "phoneNumber": "+1-555-123-4567", "defaultCountry": "US" }
Response
{
  "valid": true,
  "e164": "+15551234567",
  "countryCode": "US",
  "type": "MOBILE",
  "carrier": "Verizon Wireless"
}
POST /api/v1/phone/validate/batch

Batch validate multiple phone numbers.

IP Reputation

Score IP addresses for abuse risk. Detects proxies, VPNs, Tor exit nodes, and known malicious IPs using threat intelligence feeds.

POST /api/v1/ip/check

Check the reputation of a single IP address.

Request
{ "ip": "203.0.113.42" }
Response
{
  "ip": "203.0.113.42",
  "riskScore": 0.72,
  "isProxy": true,
  "isVpn": false,
  "isTor": false,
  "threats": ["open_proxy", "spam_source"],
  "lastSeen": "2026-03-24T08:15:00Z"
}
POST /api/v1/ip/check/batch

Batch check multiple IP addresses.

Captcha (HVS)

Human Verification System — generate CAPTCHA challenges and validate user responses. Includes fraud scoring integration with the IP Geolocation module.

POST /api/v1/captcha/generate

Generate a new CAPTCHA challenge.

Response
{
  "challengeId": "chg_8a7b6c5d4e3f",
  "imageUrl": "/api/v1/captcha/image/chg_8a7b6c5d4e3f",
  "expiresAt": "2026-03-25T12:05:00Z"
}
POST /api/v1/captcha/validate

Validate a user's CAPTCHA response.

Request
{ "challengeId": "chg_8a7b6c5d4e3f", "answer": "xK9mP" }

Password Breach

Check whether a password has appeared in known data breaches. Uses k-anonymity — the full password is never transmitted over the network.

POST /api/v1/passwords/check

Check a single password against breach databases.

Request
{ "password": "MyP@ssword123" }
Response
{
  "breached": true,
  "occurrences": 4521,
  "message": "This password has appeared in known data breaches."
}
POST /api/v1/passwords/check/batch

Batch check multiple passwords.

GET /api/v1/passwords/range/{hashPrefix}

k-anonymity range query. Returns all hash suffixes matching the 5-character SHA-1 prefix.

Uptime Monitor

Schedule HTTP, TCP, and ICMP health checks against your endpoints. Track uptime percentages, response times, and manage incidents with alerting.

POST /api/v1/monitors

Create a new monitoring target.

Request
{
  "name": "Production API",
  "url": "https://api.myapp.com/health",
  "type": "HTTP",
  "intervalSeconds": 60,
  "expectedStatusCode": 200
}
GET /api/v1/monitors

List all monitoring targets (paginated).

GET /api/v1/monitors/{id}/status

Get current status and uptime percentage for a target.

GET /api/v1/monitors/{id}/history

Get check history with response times and status codes.

POST /api/v1/monitors/{id}/check

Trigger an ad-hoc health check immediately.

DNS Checker

Resolve DNS records for any domain. Supports A, AAAA, MX, TXT, CNAME, NS, SOA, and SRV record types. Results are cached via Caffeine for sub-50ms responses.

POST /api/v1/dns/lookup

Look up DNS records for a domain.

Request
{
  "domain": "example.com",
  "recordTypes": ["A", "MX", "TXT"]
}
POST /api/v1/dns/lookup/batch

Batch DNS lookup for multiple domains.

GET /api/v1/dns/lookup/{domain}

Quick lookup for a single domain (all record types).

IP Geolocation

Map IP addresses to geographic location, ISP, ASN, and organization data. Supports both IPv4 and IPv6.

GET /api/v1/geoip/{ip}

Look up geolocation data for an IP address.

Response
{
  "ip": "8.8.8.8",
  "country": "US",
  "region": "California",
  "city": "Mountain View",
  "latitude": 37.386,
  "longitude": -122.084,
  "isp": "Google LLC",
  "asn": 15169
}
POST /api/v1/geoip/batch

Batch geolocation lookup for multiple IPs.

Cron Service

Schedule HTTP callbacks using cron expressions. Define jobs that dispatch HTTP requests to your endpoints on a schedule, with full execution history and retry logic.

POST /api/v1/cron/jobs

Create a new scheduled job.

Request
{
  "name": "Nightly cleanup",
  "cronExpression": "0 0 3 * * ?",
  "targetUrl": "https://myapp.com/api/cleanup",
  "httpMethod": "POST",
  "headers": { "Authorization": "Bearer ..." }
}
GET /api/v1/cron/jobs

List all scheduled jobs (paginated).

GET /api/v1/cron/jobs/{id}/executions

Get execution history for a job.

DELETE /api/v1/cron/jobs/{id}

Delete a scheduled job.

SSL Checker

Inspect TLS/SSL certificates for any hostname. Reports certificate expiry, chain validity, hostname matching, protocol support, and an overall security grade.

POST /api/v1/ssl/check

Check the SSL certificate of a hostname.

Request
{ "hostname": "github.com", "port": 443 }
Response
{
  "hostname": "github.com",
  "grade": "A+",
  "issuer": "DigiCert",
  "validFrom": "2025-03-01T00:00:00Z",
  "validUntil": "2027-03-01T23:59:59Z",
  "daysRemaining": 706,
  "chainValid": true,
  "hostnameMatch": true,
  "protocols": ["TLSv1.2", "TLSv1.3"]
}
POST /api/v1/ssl/check/batch

Batch check multiple hostnames.

URL Metadata

Fetch and extract Open Graph, Twitter Card, and standard HTML meta tags from any URL. Useful for link previews and SEO analysis.

POST /api/v1/metadata/extract

Extract metadata from a URL.

Request
{ "url": "https://github.com" }
Response
{
  "url": "https://github.com",
  "title": "GitHub: Let's build from here",
  "description": "GitHub is where over 100 million developers...",
  "ogImage": "https://github.githubassets.com/images/og-image.png",
  "ogType": "website",
  "twitterCard": "summary_large_image",
  "favicon": "https://github.com/favicon.ico",
  "language": "en"
}
POST /api/v1/metadata/extract/batch

Batch extract metadata from multiple URLs.

Screenshot

Capture full-page or viewport-sized screenshots of web pages using a headless Chromium browser (Playwright). Returns PNG/JPEG images or PDF documents.

POST /api/v1/screenshots/capture

Capture a screenshot of a web page.

Request
{
  "url": "https://example.com",
  "format": "png",
  "width": 1280,
  "height": 720,
  "fullPage": false
}
GET /api/v1/screenshots/{id}

Retrieve a previously captured screenshot.

Note: Screenshot capture is asynchronous. Depending on the target page, captures may take 2–30 seconds. The response includes a statusUrl for polling completion.

Readability

Analyze text readability using multiple scoring algorithms: Flesch-Kincaid Grade Level, Flesch Reading Ease, Gunning Fog Index, Coleman-Liau Index, SMOG Grade, and Automated Readability Index.

POST /api/v1/readability/analyze

Analyze a text passage.

Request
{ "text": "The quick brown fox jumps over the lazy dog...", "language": "en" }
Response
{
  "fleschKincaidGrade": 5.2,
  "fleschReadingEase": 78.5,
  "gunningFog": 7.1,
  "colemanLiau": 6.8,
  "smogGrade": 6.5,
  "ari": 5.0,
  "wordCount": 142,
  "sentenceCount": 8,
  "avgWordsPerSentence": 17.75
}

Keyword Extractor

Extract keywords and key phrases from text using a deterministic NLP pipeline. Returns ranked keywords with relevance scores.

POST /api/v1/keywords/extract

Extract keywords from text.

Request
{
  "text": "Machine learning algorithms are transforming how we process...",
  "maxKeywords": 10,
  "language": "en"
}
Response
{
  "keywords": [
    { "term": "machine learning", "score": 0.92 },
    { "term": "algorithms", "score": 0.85 },
    { "term": "data processing", "score": 0.71 }
  ],
  "language": "en"
}

Log Redaction

Detect and redact PII, secrets, and sensitive data from log text. Supports credit card numbers, SSNs, emails, API keys, JWTs, and custom patterns.

POST /api/v1/redact

Redact sensitive data from text.

Request
{
  "text": "User john@acme.com paid with card 4111-1111-1111-1111",
  "rules": ["EMAIL", "CREDIT_CARD"]
}
Response
{
  "redacted": "User [EMAIL_REDACTED] paid with card [CC_REDACTED]",
  "detections": [
    { "type": "EMAIL", "offset": 5, "length": 13 },
    { "type": "CREDIT_CARD", "offset": 35, "length": 19 }
  ]
}
POST /api/v1/redact/batch

Batch redact multiple text entries.

Deduplication

Detect and remove duplicate records from datasets. Supports exact matching, fuzzy matching, and configurable field-level strategies.

POST /api/v1/dedup/detect

Detect duplicate records in a dataset.

Request
{
  "records": [
    { "name": "John Smith", "email": "john@acme.com" },
    { "name": "Jon Smith", "email": "john@acme.com" }
  ],
  "strategy": "FUZZY",
  "matchFields": ["name", "email"]
}
Response
{
  "duplicateGroups": [
    { "similarity": 0.94, "indices": [0, 1] }
  ],
  "totalRecords": 2,
  "duplicatesFound": 1
}

JSON Validator

Validate JSON documents against JSON Schema (Draft 4, 6, 7, 2019-09, and 2020-12). Also performs syntax checking, linting, and custom rule evaluation.

POST /api/v1/validate

Validate a JSON document against a schema.

Request
{
  "document": { "name": "test", "age": "not-a-number" },
  "schema": {
    "type": "object",
    "properties": {
      "name": { "type": "string" },
      "age": { "type": "integer" }
    }
  }
}
Response
{
  "valid": false,
  "issues": [
    {
      "path": "$.age",
      "message": "Expected type integer but got string",
      "severity": "ERROR"
    }
  ]
}
POST /api/v1/validate/syntax

Check JSON syntax validity only (no schema required).

File Type

Detect file type from magic bytes, extension analysis, and content inspection. Identifies MIME type, category, and whether the file is safe to process.

POST /api/v1/file-types/classify/upload

Upload a file for type detection (multipart form data).

Response
{
  "filename": "report.pdf",
  "mimeType": "application/pdf",
  "category": "DOCUMENT",
  "extension": "pdf",
  "magicBytesMatch": true,
  "safe": true
}
POST /api/v1/file-types/classify/reference

Classify a file by URL reference (no upload required).

POST /api/v1/file-types/classify/batch

Batch classify multiple files.

Webhook Inspector

Capture, inspect, and replay inbound webhooks. Validates signatures (HMAC-SHA256, etc.) for popular providers like Stripe, GitHub, and Twilio.

POST /api/v1/webhooks/endpoints

Create a new webhook capture endpoint.

Response
{
  "id": "wh_9x8y7z6w",
  "captureUrl": "/api/v1/webhooks/capture/wh_9x8y7z6w",
  "provider": "stripe"
}
GET /api/v1/webhooks/endpoints/{id}/deliveries

List captured webhook deliveries.

POST /api/v1/webhooks/endpoints/{id}/replay/{deliveryId}

Replay a captured webhook delivery.

Rate Test

Run controlled HTTP load tests against your own endpoints. Configurable concurrency, duration, and request patterns with real-time metrics collection.

POST /api/v1/rate-test/scenarios

Create a load test scenario.

Request
{
  "name": "API stress test",
  "targetUrl": "https://myapp.com/api/health",
  "method": "GET",
  "concurrency": 10,
  "durationSeconds": 60,
  "requestsPerSecond": 100
}
POST /api/v1/rate-test/scenarios/{id}/execute

Execute a load test scenario.

GET /api/v1/rate-test/executions/{id}

Get execution results with latency percentiles, throughput, and error rates.

Response
{
  "status": "COMPLETED",
  "totalRequests": 6000,
  "successCount": 5982,
  "errorCount": 18,
  "latencyP50ms": 12,
  "latencyP95ms": 45,
  "latencyP99ms": 128,
  "throughputRps": 99.7
}

Safety: Rate tests can only target URLs that you own. The platform validates target ownership and enforces safety limits to prevent abuse. Targets must be pre-registered.

MCP / AI Integration

Orovai exposes a Model Context Protocol (MCP) tools manifest that describes every API endpoint in a machine-readable format. AI agents, LLM tool-use frameworks, and automation platforms can consume this manifest to discover and invoke Orovai services automatically.

GET /api/mcp-tools.json

Point your MCP-compatible client at https://api.orovai.com/api/mcp-tools.json to load all available tools. The manifest follows the MCP specification and includes parameter schemas, descriptions, and authentication requirements for each service.

See also: raw manifest file.