One API for every verification your product needs
Bank income, payroll, document review, offer letters, identity, and rental history — through a single integration and one embedded widget. We run the provider network and the compliance layer underneath. You ship a widget.
curl -X POST https://api.payscore.com/v1/verifications \
-H "Authorization: Bearer $PAYSCORE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"applicant": { "email": "applicant@example.com" },
"checks": ["bank_income", "payroll", "identity", "rental_history"],
"redirect_url": "https://yourapp.com/verification/complete"
}'The data is the easy part
One connection isn't coverage.
A single bank or payroll provider fails on a meaningful share of real applicants. Every gap becomes an abandoned application. Real coverage means running several providers in sequence and maintaining all of them.
Five products, five integrations.
Bank aggregation, payroll access, document AI, identity verification, and rental history are five vendors, five contracts, five auth schemes, and five things that break independently.
And then there's everything after the data.
Permissible purpose, consumer disclosures, dispute intake, reinvestigation, and adverse action all attach to a verification used for a housing or lending decision. Standing that function up is a bigger project than the integration itself, and it never ships once.
Redirect to it, or embed it.
Either way, your backend does the same thing: create a verification request, then handle one webhook when the result is ready.
Hosted flow
We host the applicant experience.
Create a verification request, redirect the applicant to a Payscore-hosted link, and receive the result on your webhook. No frontend work at all — useful for getting to production fast or for testing demand before you invest in the embed.
Lift: an afternoon.
Embedded widget
Drop-in JavaScript inside your product.
A script tag and a few data attributes. Your logo, your colors, your domain. The applicant never leaves your app, and it works inside a webview.
Lift: [X] days.
Start hosted and move to the embedded widget later without changing your backend. The API contract and the webhook payload are identical.
Structured, decision-ready, and consistent across every check
Whatever combination of checks ran, and whichever provider ultimately answered, the payload shape is the same.
{
"id": "vrf_01HQ8X2K9M",
"status": "completed",
"applicant": { "email": "applicant@example.com" },
"income": {
"monthly_gross": 6420.00,
"confidence": "high",
"source": "payroll",
"streams": [
{ "employer": "Acme Corp", "frequency": "biweekly", "verified": true }
]
},
"employment": { "status": "active", "tenure_months": 27 },
"identity": { "match": true, "document_type": "drivers_license" },
"rental_history": { "verified": true, "on_time_payment_rate": 1.0 },
"report_url": "https://app.payscore.com/reports/vrf_01HQ8X2K9M"
}Every check, from the same endpoint
Name the checks you want in the request. Add a product later without touching your integration.
Verified deposits and recurring income streams pulled directly from the applicant's accounts.
Employment status, tenure, and earnings confirmed at the source.
AI extraction and fraud checks on uploaded paystubs, W-2s, tax returns, and bank statements — the fallback when a connection isn't available.
Future income for applicants who haven't started the job yet.
Government ID capture, selfie match, and name reconciliation against verified income. Coverage in 200+ countries and territories.
Prior tenancy, on-time payment history, and landlord-confirmed ledger data.
Already using Plaid or MX? Keep it.
If your product already connects bank accounts, send us that data and we'll categorize it into structured, decision-ready income — then fall back to our provider network when your source comes up short. You don't have to rip out what works.
Run checks individually, or as a sequential waterfall that stops the moment the applicant is verified — so you aren't billed for checks that never had to run.
The obligations stay on our side
A verification used for a housing or lending decision carries duties that outlast the API call. We operate that layer so your platform doesn't have to build or staff it:
- Permissible purpose collection and verification
- Consumer disclosures and authorization capture, including state-specific requirements
- Dispute intake and reinvestigation, run by our team
- Adverse action support
- SOC 2 [Type 1 / Type 2 — confirm which, and as of what date]
Consumers reach our team directly, and reinvestigation runs end to end on our side. You don't staff a compliance desk. We'll share full documentation of how responsibility is allocated for your legal team to review before anything is signed.

Usage-based, no seat licenses
You're billed on verifications, not users or units of software. Waterfall pricing means you're only charged for checks that actually run. Volume tiers start at [X] verifications per month. [Confirm the partner pricing shape before this ships.]
Book a demoQuestions engineers ask first
Request access
Tell us what you're building and we'll walk through integration options, coverage, and the partner compliance model.