us_paystubPay stub
Pay period, gross, deductions, net and year-to-date, with the math checked.
- Category
- Employment
- Country
- United States
- Extracted fields
- 16 fields
- Cost
- 1 credit
us_paystubspecimen- Employer name
- Employer address
- Employee name
- Employee id
- Ssn last4
- Pay period start
- Pay period end
- Pay date
- Pay frequency
Pay stubs come from hundreds of payroll providers in different layouts. Constaia extracts the period, pay date and amounts, checks that gross minus deductions equals net and that year-to-date totals are consistent, and confirms the stub is recent and in the applicant's name.
- Consistent math is a signal, not proof: an edited stub can still add up. Possible-edit warnings help you prioritize review.
- Use max_age_days with your policy, for example the last 30 or 60 days.
What it checks
- Holder. Name, number or date of birth match what you expect.
- Recency. Issued less than N days ago.
Extracted fields
- Employer name
employer_name - Employer address
employer_address - Employee name
employee_name - Employee id
employee_id - Ssn last4
ssn_last4 - Pay period start
pay_period_start - Pay period end
pay_period_end - Pay date
pay_date - Pay frequency
pay_frequency - Hours
hours - Rate
rate - Gross pay
gross_pay - Net pay
net_pay - Year-to-date gross
ytd_gross - Year-to-date net
ytd_net - Deductions
deductions
Where it is used
Sample request
curl https://api.constaia.com/v1/analyze \
-H "Authorization: Bearer $CONSTAIA_API_KEY" \
-F "file=@us_paystub_specimen.pdf" \
-F 'options={
"expect": "us_paystub",
"checks": {
"max_age_days": 45,
"reference_date": "2026-10-01",
"holder": {
"full_name": "Jordan Specimen"
}
},
"storage": "none"
}'Try it for free with a ck_test_ key and the file us_paystub_specimen.pdf.
Sample response
Fictitious data. Shortened response.
{
"id": "an_01J9Z3K8QW4T6Y2B7N5M1R0PXC",
"object": "analysis",
"status": "completed",
"livemode": false,
"document": {
"type": "us_paystub",
"label": "Pay stub",
"confidence": 0.97
},
"verdict": {
"expected": [
"us_paystub"
],
"match": true,
"status": "valid",
"reasons": [
{
"code": "type_match",
"severity": "info",
"message": "The document is: Pay stub."
}
]
},
"fields": {
"employee_name": {
"value": "JORDAN SPECIMEN",
"confidence": 0.99,
"validated": true
},
"employer_name": {
"value": "EXAMPLE LOGISTICS INC",
"confidence": 0.98,
"validated": null
},
"pay_period_start": {
"value": "2026-09-01",
"confidence": 0.97,
"validated": null
},
"pay_period_end": {
"value": "2026-09-15",
"confidence": 0.96,
"validated": null
},
"pay_date": {
"value": "2026-09-19",
"confidence": 0.99,
"validated": null
},
"pay_frequency": {
"value": "semimonthly",
"confidence": 0.98,
"validated": null
},
"gross_pay": {
"value": 2426.69,
"confidence": 0.97,
"validated": null
},
"deductions_total": {
"value": 612.4,
"confidence": 0.96,
"validated": null
},
"net_pay": {
"value": 1814.29,
"confidence": 0.99,
"validated": null
},
"ytd_gross": {
"value": 41253.73,
"confidence": 0.98,
"validated": null
}
},
"checks": [
{
"code": "pay_period_math",
"passed": true,
"message": "Gross, deductions and net add up."
},
{
"code": "max_age_days",
"passed": true,
"message": "The issue date is within the limit."
},
{
"code": "holder_match",
"passed": true,
"message": "The holder matches."
}
],
"warnings": [],
"storage": {
"mode": "none",
"file_deleted_at": "2026-09-29T10:00:02Z",
"expires_at": null
},
"usage": {
"credits": 1,
"pages": 1
}
}FAQ
Does Constaia prove the document is authentic?
No. It checks the type, data consistency and your rules, and flags signals such as a possible edit or a screen photo. That does not prove authenticity.
Is a copy of the document kept?
No, unless you ask for it. With storage "none" (the default) the file is deleted when the analysis ends.
Other documents
And for the record…
Create your account, copy the test key and validate your first document in five minutes.