SCA Health and Welfare Fringe Checker API Reference
Beta. Checks one pay period of Service Contract Act health and welfare, employee by employee, for a fixed-rate wage determination: the required amount on all hours paid up to 40 a week (29 CFR 4.175 and 4.172), what was furnished as plan contributions and cash in lieu (4.177), the shortfall, and the Fact Sheet #67B recordkeeping problems. Product page and free test form.
Endpoint
| Paid | POST https://www.spreadrun.com/api/v1/sca-hw-fringe-checker, API key required, $100.00 per completed check |
|---|---|
| Demo | POST https://www.spreadrun.com/api/demo/sca-hw-fringe-checker, no key, 10 runs per day, up to 10 employees and 64 KB. |
| Body | One of: CSV text (parameters in the query string); an .xlsx workbook with an Employees sheet, or the first sheet (parameters in the query string or a Parameters sheet of name and value rows); or JSON {"parameters": {...}, "employeesCsv": "..."}. Up to 5,000 employees and 4.4 MB. |
Parameters
wdType | Optional. fixed (the default): a fixed health and welfare rate per hour, met employee by employee. average is refused with a limitation message and not charged. |
eo13706 | true if the contract is covered by Executive Order 13706 (paid sick leave), false if not. Picks the default rate. Required unless you send hwRate (and, for Hawaii, hwRateHphca). |
hawaii | Optional, default false. true for a Hawaii wage determination: then every row needs hphca_covered. |
periodWeeks | Optional whole number from 1 to 53, default 1: the weeks in the pay period. The 40-hour cap is per week. |
hwRate | Optional dollars per hour. The rate printed on your wage determination. Default: $5.92, or $5.42 when eo13706 is true (All Agency Memorandum No. 252, effective 2026-08-10). |
hwRateHphca | Optional, Hawaii only. The rate for employees covered by the Hawaii Prepaid Health Care Act. Default: $2.51, or $2.01 when eo13706 is true. Employees not covered use hwRate. |
An unknown parameter is refused, so a typo never changes the result quietly. True and false may also be written yes and no.
Columns
A header row, then one row per employee. Case and spacing in column names do not matter, and a few other names are accepted (for example employee_id, contributions, cil). Blank money cells count as 0. Columns for names or Social Security numbers are refused.
hours_paid | Required. All hours paid in the period, including paid vacation, sick leave and holiday hours. |
plan_contributions | Required. Contributions to bona fide health and welfare plans for this employee for the period, in dollars. 0 where none. |
cash_in_lieu | Required. Cash paid in lieu of health and welfare for the period, in dollars. 0 where none. |
employee_ref | Optional. Your own reference for the employee, unique per row. Never a name or Social Security number. Never repeated in the report. |
hours_week_1 to hours_week_N | Optional, one per week of periodWeeks. Each week is capped at 40. Without them the cap is applied to the period total. |
ytd_hw_hours | Optional. Hours already counted for health and welfare earlier in the contract year. Hours past 2,080 are not counted. |
admin_costs_credited | Optional. Administrative costs or fees included in plan_contributions. Not creditable: taken out and flagged. |
employee_paid_included | Optional. Amounts paid by the employee, or taken from their wages, included in plan_contributions. Not creditable: taken out and flagged. |
hw_hours_credited | Optional. The hours your payroll figured health and welfare on. Compared with the hours that count. |
wage_rate_paid, wd_wage_rate | Optional, together. The hourly wage paid and the wage determination rate for the classification. Used to flag wages offsetting a fringe shortfall. |
cash_in_lieu_separate | Optional yes or no. Whether cash in lieu is shown separately from wages on the payroll records. |
hphca_covered | Hawaii only, required then. yes if the employer provides coverage under the Hawaii Prepaid Health Care Act for this employee. |
Start from the CSV template or the sample with errors. The employees in the samples are invented.
Method
- Hours counted: all hours paid in the period, including paid vacation, sick leave and holidays, up to 40 per week. With weekly hour columns each week is capped at 40; without them the period total is capped at 40 times the number of weeks. If ytd_hw_hours is given, hours past 2,080 for the contract year are not counted.
- Required H&W: hours counted times the H&W rate, rounded to the cent.
- Furnished H&W: bona fide plan contributions plus cash in lieu, less any administrative costs or employee-paid amounts included in the contributions, which cannot be credited.
- Shortfall: required minus furnished, when positive. Each employee is checked on their own; an overpayment for one employee never covers another.
- Back wage exposure: the sum of the shortfalls for the period.
Report
| Field | Meaning |
|---|---|
status | FAIL if any error, WARN if only warnings, otherwise PASS. A PASS is a math check, not a compliance determination and not DOL acceptance. |
employees | One entry per row: line (its line in your file), hoursCounted, capped, rate, required, furnished, notCreditable, shortfall, result, partTime. Amounts are strings with two decimals. |
totals | employees, passing, failing, required, furnished and backWageExposure, the sum of the shortfalls. |
shortfallLines | The lines of every employee with a shortfall. |
recordkeeping | The Fact Sheet #67B items: separate, partTime and adminCosts, each clear, flagged (with lines) or not-checked (with howToCheck). |
findings | By line, errors first. Each has severity, ruleId, path, line, message and source. Up to 500; findingsTruncated says when there were more. |
parameters | What the run used, including the rates, whether each was the default or supplied, and the rate memo. |
notes, methodology, notChecked, sources, scope, input, inputSha256 | Anything to know about this run, the method, what the report does not cover, where the rules come from, what the verdict means, and a fingerprint of the request body. |
The report never repeats your employee references. Join it back to your file by line.
Rule IDs
| Rule | Severity | Meaning | Rule source |
|---|---|---|---|
SCA-HW-SHORTFALL | error | Furnished health and welfare is below the required amount for this employee. | 29 CFR 4.172, 4.175 |
SCA-WAGE-OFFSET | error | Short on health and welfare while paid above the wage determination rate. Higher wages cannot offset fringe. | 29 CFR 4.170(a) |
SCA-PART-TIME | error | A part-time employee received no health and welfare. | 29 CFR 4.175(c), 4.176; Fact Sheet #67B |
SCA-ADMIN-COSTS | error | Administrative costs or fees counted as health and welfare. | 29 CFR 4.172; Fact Sheet #67B |
SCA-EMPLOYEE-PAID | error | Employee-paid amounts counted as health and welfare. | 29 CFR 4.171(a)(1) |
SCA-CIL-NOT-SEPARATE | error | Cash in lieu not recorded separately from wages. | 29 CFR 4.170(a); Fact Sheet #67B |
SCA-CREDIT-HOURS-HIGH | warning | A part-time employee credited with health and welfare for more hours than were paid, as if full time. | 29 CFR 4.176 |
SCA-CREDIT-HOURS-LOW | warning | Health and welfare figured on fewer hours than were paid, such as leaving out holiday or vacation hours. | 29 CFR 4.175(a) |
SCA-WEEKS-MISMATCH | warning | The weekly hours do not add up to hours_paid. The weekly hours were used. | 29 CFR 4.175(a) |
Source keys, as returned in every report:
cfr4.170 | 29 CFR 4.170(a): fringe benefits separate from and in addition to wages; no offset by higher wages; separate records |
cfr4.171 | 29 CFR 4.171(a)(1): employee contributions are not creditable |
cfr4.172 | 29 CFR 4.172: the stated amount is the minimum; no deduction for administrative costs; 40 hours a week and 2,080 a year |
cfr4.175 | 29 CFR 4.175: health and welfare on all hours paid, employee by employee; average cost determinations; employees excluded from a plan |
cfr4.176 | 29 CFR 4.176: temporary and part-time employees, pro-rated benefits |
cfr4.177 | 29 CFR 4.177: meeting the obligation with equivalent benefits or cash |
fs67b | DOL Wage and Hour Division Fact Sheet #67B (October 2024): Meeting Requirements for SCA Fringe Benefits, Common Violations |
aam246 | DOL All Agency Memorandum No. 246 (July 16, 2024): average cost H&W wage determinations not issued or used for new contracts |
rates | DOL All Agency Memorandum No. 252, effective 2026-08-10, as printed on current SAM.gov wage determinations |
- 29 CFR 4.170: furnishing fringe benefits, no offset by wages, separate records
- 29 CFR 4.171: bona fide fringe benefits
- 29 CFR 4.172: no deduction for administrative costs; 40 hours a week, 2,080 a year
- 29 CFR 4.175: health and welfare on all hours paid; average cost determinations
- 29 CFR 4.176: temporary and part-time employees
- 29 CFR 4.177: equivalent benefits and cash in lieu
- DOL Fact Sheet #67B: Meeting Requirements for SCA Fringe Benefits (October 2024)
- DOL Fact Sheet #67: The McNamara-O'Hara Service Contract Act (penalties and typical problems)
- DOL All Agency Memorandum No. 246 (July 16, 2024): end of average cost wage determinations
- SAM.gov All Agency Memorandums: All Agency Memorandum No. 252, the 2026 health and welfare rate
- GAO-21-11: Actions Needed to Improve DOL's Enforcement of Service Worker Wage Protections (2020)
Not checked
- Whether your wage determination is the right one for the contract, and whether its rate is the one in effect. Existing contracts change rates only when the contracting officer adds a revised wage determination.
- Whether each worker is a covered service employee and correctly classified.
- Whether your plans are bona fide under 29 CFR 4.171: written, funded, irrevocable and communicated to employees.
- Vacation, holiday and EO 13706 paid sick leave obligations. Paid sick leave under EO 13706 cannot be credited toward H&W.
- Whether cash in lieu was paid on the regular payday and whether the hours and amounts you entered are accurate.
- Average cost health and welfare wage determinations.
Example responses
A paid check of the clean sample (report shortened), and the findings from a demo run of the sample with errors. Both generated by running the real endpoint code.
{
"requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
"api": "sca-hw-fringe-checker",
"mode": "paid",
"charged": true,
"priceCents": 10000,
"balanceCents": 10000,
"report": {
"schemaVersion": 1,
"status": "PASS",
"summary": "Every employee received at least the required H&W, and no recordkeeping problems were found.",
"parameters": {
"wdType": "fixed",
"eo13706": true,
"hawaii": false,
"periodWeeks": 1,
"weeklyHours": false,
"annualCapApplied": false,
"rates": {
"rate": "5.42",
"basis": "default"
},
"rateMemo": "All Agency Memorandum No. 252",
"rateEffective": "2026-08-10"
},
"totals": {
"employees": 4,
"passing": 4,
"failing": 0,
"required": "715.44",
"furnished": "715.44",
"backWageExposure": "0.00"
},
"employees": [
{
"line": 2,
"hoursCounted": "40.00",
"capped": true,
"rate": "5.42",
"required": "216.80",
"furnished": "216.80",
"notCreditable": "0.00",
"shortfall": "0.00",
"result": "PASS",
"partTime": false
},
{
"line": 3,
"hoursCounted": "40.00",
"capped": false,
"rate": "5.42",
"required": "216.80",
"furnished": "216.80",
"notCreditable": "0.00",
"shortfall": "0.00",
"result": "PASS",
"partTime": false
},
{
"line": 4,
"hoursCounted": "20.00",
"capped": false,
"rate": "5.42",
"required": "108.40",
"furnished": "108.40",
"notCreditable": "0.00",
"shortfall": "0.00",
"result": "PASS",
"partTime": true
},
{
"line": 5,
"hoursCounted": "32.00",
"capped": false,
"rate": "5.42",
"required": "173.44",
"furnished": "173.44",
"notCreditable": "0.00",
"shortfall": "0.00",
"result": "PASS",
"partTime": true
}
],
"shortfallLines": [],
"recordkeeping": [
{
"item": "separate",
"label": "Wages kept separate from H&W fringe on payroll records",
"status": "clear",
"lines": [],
"source": "fs67b"
},
{
"item": "partTime",
"label": "Part-time employees given pro-rated H&W",
"status": "clear",
"lines": [],
"source": "fs67b"
},
{
"item": "adminCosts",
"label": "No administrative costs or fees credited against H&W",
"status": "clear",
"lines": [],
"source": "fs67b"
}
],
"findingCount": 0,
"findingCounts": {
"error": 0,
"warning": 0
},
"ruleCounts": {},
"findings": [],
"findingsTruncated": false,
"notes": [
"Default rate from All Agency Memorandum No. 252, effective 2026-08-10. Use the rate printed on your contract's wage determination if it is different: an existing contract keeps its rate until the contracting officer adds a revised wage determination."
],
"scope": "A math check of the H&W amounts you entered against the published SCA rules. It is not a compliance determination, not legal advice and not DOL acceptance. A PASS means the arithmetic on these rows meets the rate you chose; your obligations under the contract remain yours.",
"input": {
"format": "json",
"bytes": 444,
"columns": [
"admin_costs_credited",
"cash_in_lieu",
"cash_in_lieu_separate",
"employee_ref",
"hours_paid",
"hw_hours_credited",
"plan_contributions",
"wage_rate_paid",
"wd_wage_rate"
]
},
"inputSha256": "2a5c38e2661e1f52a42ffaab956ba51bb16c5fddcdaf7ac60bc8d934c6d945d3"
}
}[
{
"severity": "error",
"ruleId": "SCA-HW-SHORTFALL",
"path": "/employees/line[4]",
"line": 4,
"message": "Furnished H&W is below the required amount for this employee. The difference is owed to the employee as plan contributions or cash in lieu, and an overpayment for another employee does not cover it.",
"source": "cfr4.172"
},
{
"severity": "error",
"ruleId": "SCA-PART-TIME",
"path": "/employees/line[4]",
"line": 4,
"message": "A part-time employee received no H&W. Part-time employees are owed H&W pro-rated to the hours they were paid, and those a plan excludes are owed the cash equivalent. Fact Sheet #67B lists this as a common violation.",
"source": "cfr4.176"
},
{
"severity": "error",
"ruleId": "SCA-ADMIN-COSTS",
"path": "/employees/line[5]",
"line": 5,
"message": "Administrative costs or fees were counted as H&W. They are a business expense and cannot be credited, so they were taken out of the furnished amount. Fact Sheet #67B lists this as a common violation.",
"source": "cfr4.172"
},
{
"severity": "error",
"ruleId": "SCA-HW-SHORTFALL",
"path": "/employees/line[5]",
"line": 5,
"message": "Furnished H&W is below the required amount for this employee. The difference is owed to the employee as plan contributions or cash in lieu, and an overpayment for another employee does not cover it.",
"source": "cfr4.172"
},
{
"severity": "error",
"ruleId": "SCA-HW-SHORTFALL",
"path": "/employees/line[6]",
"line": 6,
"message": "Furnished H&W is below the required amount for this employee. The difference is owed to the employee as plan contributions or cash in lieu, and an overpayment for another employee does not cover it.",
"source": "cfr4.172"
},
{
"severity": "error",
"ruleId": "SCA-WAGE-OFFSET",
"path": "/employees/line[6]",
"line": 6,
"message": "This employee was paid above the wage determination rate, but wages above that rate cannot make up an H&W shortfall. H&W must be furnished separately and in addition to wages, so the shortfall is still owed.",
"source": "cfr4.170"
}
]Errors
See the shared error table. Rejected with HTTP 400 and not charged: an average cost determination, a missing required column or parameter, a column this check does not use, an unreadable or negative number, a repeated employee_ref, a name or Social Security number column, weekly columns that do not match periodWeeks, and on the demo endpoint more than 10 employees. Example, an average cost determination (HTTP 400):
{
"error": {
"code": "input_error",
"message": "This check supports fixed-rate (employee by employee) health and welfare wage determinations only. Average cost determinations work differently: contributions are averaged across everyone in the plan (29 CFR 4.175(b)), and DOL stopped issuing them for new contracts in All Agency Memorandum 246 (July 16, 2024). No result was produced and nothing was charged.",
"requestId": "7f3c2a1e-5b8d-4c6f-9e0a-1d2b3c4d5e6f",
"charged": false
}
}Code samples
curl -X POST "https://www.spreadrun.com/api/v1/sca-hw-fringe-checker?eo13706=true" \
-H "Authorization: Bearer $SPREADRUN_API_KEY" \
-H "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" \
--data-binary @pay_period.xlsx