Skip to content
Constaia
us_paystub

Pay 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 nameemployer_name
  • Employer addressemployer_address
  • Employee nameemployee_name
  • Employee idemployee_id
  • Ssn last4ssn_last4
  • Pay period startpay_period_start
  • Pay period endpay_period_end
  • Pay datepay_date
  • Pay frequencypay_frequency
  • Hourshours
  • Raterate
  • Gross paygross_pay
  • Net paynet_pay
  • Year-to-date grossytd_gross
  • Year-to-date netytd_net
  • Deductionsdeductions

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.

200 OK · application/json
{
  "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.