POST a document image. Get a forgery probability score. $0.05/check, no contracts.
Veriscor uses AI vision models to analyze document images for signs of forgery — metadata anomalies, compression artifacts, font inconsistencies, and pixel-level manipulation. The API returns a structured score in under 3 seconds.
# 1. Sign up at https://veriscor.io/auth/signup (100 free checks/month)
# 2. Create an API key at https://veriscor.io/dashboard/keys
# 3. Make your first request:
curl -X POST https://veriscor.io/api/v1/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "document=@passport.jpg"Response:
{
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"forgeryScore": 0.12,
"confidence": "high",
"documentType": "passport",
"flags": [],
"latencyMs": 2340
}
}| Endpoint | Method | Description |
|---|---|---|
/api/v1/verify |
POST | Single document verification |
/api/v1/verify/batch |
POST | Batch verification (up to 50 docs) |
/api/v1/batches/:id |
GET | Batch status and progress |
/api/v1/audit |
GET | Verification audit log |
/api/keys |
GET/POST | API key management |
The /verify endpoint accepts documents in three ways:
Multipart upload (recommended for files under 4.5MB):
curl -X POST https://veriscor.io/api/v1/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "document=@document.jpg"URL fetch (recommended for large files up to 10MB):
curl -X POST https://veriscor.io/api/v1/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"documentUrl": "https://storage.example.com/document.jpg"}'Base64 (for inline embedding):
curl -X POST https://veriscor.io/api/v1/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"document": "data:image/jpeg;base64,/9j/4AAQ..."}'- Passports
- Government-issued IDs
- Driver licenses
- I-9 employment eligibility documents
- Utility bills
- Financial statements
Formats: JPEG, PNG, PDF (first page)
All API requests require an API key via the Authorization: Bearer header.
- Live keys (
vsk_live_*) — production requests, billed - Test keys (
vsk_test_*) — sandbox mode, returns mock scores, no billing
Create and manage keys at veriscor.io/dashboard/keys.
Full authentication guide: veriscor.io/docs/authentication
Submit up to 50 documents in a single request. Results are delivered asynchronously via HMAC-SHA256 signed webhooks.
curl -X POST https://veriscor.io/api/v1/verify/batch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"documents": ["base64doc1", "base64doc2"],
"callbackUrl": "https://yourapp.com/webhook",
"callbackSecret": "your_webhook_secret_min_16_chars"
}'Full batch documentation: veriscor.io/docs/api/verify-batch
All errors follow a consistent envelope format:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "documentUrl must be a valid URL",
"field": "documentUrl"
}
}Common error codes: VALIDATION_ERROR (400), UNAUTHORIZED (401), KEY_EXPIRED (401), TRIAL_EXHAUSTED (402), RATE_LIMITED (429), INTERNAL_ERROR (500).
Full error reference: veriscor.io/docs/errors
100 requests per minute per API key. Rate limit headers are included in every response:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests per window |
X-RateLimit-Remaining |
Remaining requests in current window |
Retry-After |
Seconds until the rate limit resets (on 429) |
Full rate limit documentation: veriscor.io/docs/rate-limits
| Tier | Price | Included | Overage |
|---|---|---|---|
| Free | $0/month | 100 checks | — |
| Starter | $49/month | 1,000 checks | $0.10/check |
| Growth | $199/month | 5,000 checks | $0.08/check |
| Pay-as-you-go | $0/month | 0 checks | $0.05/check |
No contracts. No credit card required for the free tier.
- API keys are SHA-256 hashed before storage — never stored in plaintext
- No document images stored — only SHA-256 hashes for audit trail
- Webhook payloads signed with HMAC-SHA256
- RLS (Row Level Security) on all database tables
- 90-day audit log retention
- GDPR and CCPA compliant
| Resource | URL |
|---|---|
| Website | veriscor.io |
| Quick Start | veriscor.io/docs/quickstart |
| API Reference | veriscor.io/docs/api/verify |
| Batch API | veriscor.io/docs/api/verify-batch |
| Authentication | veriscor.io/docs/authentication |
| Webhooks | veriscor.io/docs/webhooks |
| Error Codes | veriscor.io/docs/errors |
| Rate Limits | veriscor.io/docs/rate-limits |
| I-9 Guide | veriscor.io/docs/guides/i9-verification |
| Privacy Policy | veriscor.io/privacy |
| Terms of Service | veriscor.io/terms |
Use Veriscor to verify the authenticity of documents submitted as part of I-9 employment eligibility verification. Integration guide
Automate document verification in employee onboarding flows. Verify contractor IDs, work permits, and government-issued documents without redirecting users to a third-party session.
Validate pay stubs, bank statements, and utility bills submitted during tenant applications. Catch AI-generated synthetic documents before they pass manual review.
Run identity document checks as part of Know Your Customer compliance. Score documents programmatically and flag suspicious submissions for manual review.
How accurate is the forgery detection? Veriscor uses AI vision models to analyze metadata, compression artifacts, font consistency, and pixel-level anomalies. The score is based on visual forensics — not database lookups.
Do you store the documents I submit? No. We store a SHA-256 hash of each submitted image in the audit log — not the image itself. Images are processed in memory and discarded after scoring.
Can I use this for I-9 employment verification? Yes. The documentation includes a dedicated I-9 integration guide. Note: Veriscor scores document authenticity — it does not verify employment eligibility status.
What happens if I exceed my plan's check limit? Overage checks are billed at your plan's overage rate. You can set a monthly hard cap in the dashboard — once reached, the API returns a 429 status code instead of processing.
- Verification API —
POST /api/v1/verify(single) andPOST /api/v1/verify/batch(up to 50 documents with webhook delivery) - AI-powered scoring — Claude Vision analyzes metadata, compression artifacts, font consistency, and pixel-level anomalies
- Metered billing — Stripe integration with free tier (100 checks/month), pay-as-you-go at $0.05/check
- Dashboard — API key management, audit log, billing, and interactive playground
- Documentation site — Quickstart, API reference, authentication, webhooks, errors, rate limits, I-9 guide
- Security — SHA-256 key hashing, RLS on all tables, HMAC-SHA256 webhook signatures, security headers, Vercel WAF rules
- Quality — 119 tests (96% coverage), Lighthouse SEO 100, zero type casts, Zod validation on all inputs
Added:
- Test suite: 119 tests across 14 files (96% statement coverage)
- Coverage thresholds enforced (80% statements/lines/functions, 75% branches)
Changed:
- Logger uses
console.infofor info-level output (semantic correctness)
Removed:
- Unused Supabase middleware helper (dead code superseded by
proxy.ts)
Fixed:
- OG image route 500 in production
- Pricing CTA color contrast (3.38:1 to 7.0:1)
- Nav glassmorphism violation (removed
backdrop-blur-sm) - Privacy/Terms pages missing from sitemap
- All
as anyandas stringtype casts eliminated - Playground 413 error handling
Added:
- Security headers (X-Frame-Options, HSTS, Referrer-Policy, Permissions-Policy)
- Zod
.strict()validation on verify endpoint - Per-page OpenGraph metadata on all doc pages
- Expanded meta descriptions to 80-160 chars on 15 pages
- Vercel WAF rules (API rate limiting, auth protection, webhook validation)
- Supabase security migration (pinned search_path, service_role-only policies)
Added:
- Landing page with product positioning, pricing, and FAQ
- Supabase auth (email/password + GitHub OAuth)
- Dashboard with API key management, audit log, billing, playground
POST /api/v1/verify— single document verificationPOST /api/v1/verify/batch— batch verification with webhook deliveryGET /api/v1/batches/:id— batch statusGET /api/v1/audit— audit log with cursor-based pagination- Stripe metered billing with free tier (100 checks/month)
- HMAC-SHA256 webhook signing with exponential backoff retries
- Rate limiting (100 req/min per API key)
- Documentation site with full API reference
- SEO: sitemap, robots.txt, JSON-LD, Open Graph
- Structured JSON logging
- Website: veriscor.io
- Email: hello@veriscor.io