Changelog

Get the latest feature updates in Truv

Monetary values across the API are moving to a single representation: a decimal string with two decimal places, such as "2697.36". The majority of monetary fields already use this format. On September 25 2026, the remaining fields that currently return a JSON number switch to the same format, so every monetary value in the API is represented consistently.

Breaking change. If your integration parses any of the fields listed below as a JSON number, it will receive a decimal string instead. The amounts themselves and the field names do not change — only the JSON type.

Asset verification reports

Four fields change on GET /v1/users/{user_id}/assets/reports/{report_id}/ and POST /v1/users/{user_id}/assets/reports/:

  • accounts[].balances.balance
  • accounts[].balances.available_balance
  • accounts[].balances.credit_limit
  • accounts[].transactions[].ending_daily_balance

This also resolves an inconsistency within a single response. The same account balance was returned as a number under balances and as a decimal string under summary. Both now use the decimal string.

Before:

{
  "balances": {
    "currency_code": "USD",
    "balance": 2697.36,
    "available_balance": 1359.82,
    "credit_limit": null
  },
  "summary": {
    "currency_code": "USD",
    "balance": "2697.36"
  },
  "transactions": [
    {
      "amount": "0.61",
      "ending_daily_balance": 2697.36
    }
  ]
}

After:

{
  "balances": {
    "currency_code": "USD",
    "balance": "2697.36",
    "available_balance": "1359.82",
    "credit_limit": null
  },
  "summary": {
    "currency_code": "USD",
    "balance": "2697.36"
  },
  "transactions": [
    {
      "amount": "0.61",
      "ending_daily_balance": "2697.36"
    }
  ]
}

These fields continue to return null when a value is not available.

See the Balances object and Transactions object reference.


Scoring attributes reports

Two fields change on GET /v1/scoring_attributes/reports/{report_id}:

  • derived_incomes[].average_amount
  • derived_incomes[].monthly_amount

Before:

{
  "derived_incomes": [
    {
      "average_amount": 475.99,
      "monthly_amount": 1003.21
    }
  ]
}

After:

{
  "derived_incomes": [
    {
      "average_amount": "475.99",
      "monthly_amount": "1003.21"
    }
  ]
}

scores[].value and metrics[].value are not monetary values and are unchanged.

See the Scoring attributes object reference.


Direct deposit and paycheck linked lending reports

deposit_value is now always returned with two decimal places on:

  • GET /v1/links/{link_id}/direct_deposit/report/
  • GET /v1/links/{link_id}/pll/report/
  • GET /v1/users/{user_id}/deposit_switch/report/

Before:

{
  "deposit_value": "25",
  "deposit_type": "percent",
  "is_confirmed": true
}

After:

{
  "deposit_value": "25.00",
  "deposit_type": "percent",
  "is_confirmed": true
}

The value itself does not change. Where deposit_type is percent, the field continues to express a percentage rather than an amount. deposit_value on the bank account object already used two decimal places and is unchanged.

See the Direct deposit report object reference.


Pay statement rates and units

rate and units on earnings are a pay rate and a quantity rather than monetary amounts, so they keep variable precision instead of moving to two decimal places. Values carrying more than six decimal places are now rounded to six. All other values are unchanged.

This affects earnings[] and earnings_ytd[] wherever pay statements are returned, including GET /v1/links/{link_id}/statements/, GET /v1/links/{link_id}/income/report/, and GET /v1/orders/{id}/.

Before:

{
  "name": "Regular",
  "amount": "1935.77",
  "rate": "17.0000",
  "units": "41.666666666666664"
}

After:

{
  "name": "Regular",
  "amount": "1935.77",
  "rate": "17.0000",
  "units": "41.666667"
}

See the Earnings object reference.


What is not changing

  • Request bodies. Both 2500 and "2500" continue to be accepted wherever monetary values are sent. No changes are needed to code that creates orders, tasks, or reports.
  • Field names, on every endpoint.
  • null for values that are not available.
  • The amounts themselves. Only their JSON representation changes.
  • Every monetary field that already returns a decimal string, which is the majority of the API.

What to check in your integration

  • Code that parses these fields as JSON numbers should parse decimal strings instead.
  • Statically typed clients need the field type updated from a number or double to a string.
  • In JavaScript, JSON.parse returns these fields as strings, so arithmetic on them needs an explicit conversion.
  • Across all template endpoints: Create Template , Update Template, Retrieve Template, and List All Templates, we will simplify the bank info section used in Direct Deposit Switch and Paycheck-Linked Loan product by removing account_type, bank_address, account_number, and routing_number.
  • These fields don’t belong in templates since the are user-specific and added during order creation.

To provide better visibility into Truv’s login success rate with a given employer, we added null as a potential value for the success_rate parameter in the company search API endpoints. If there are not enough recent attempts to determine success, we will return null, whereas previously we would return low.

The following API endpoints are affected by this change

  • AWS Certificate Manager (ACM) will no longer cross-sign public certificates with the Starfield Class 2 root starting August 2024 for new certificates. We do not expect this change to impact our clients. However, please see the additional details from AWS concerning who may be affected.

The following is a breaking change that will need to be updated by developer teams.

Truv will modify the data_source field values in its API responses. Starting on 06/01/2023, the data_source for successful verifications with payroll providers will be named “payroll” instead of crawler. When the change goes into effect, only payroll will be returned after successful payroll verification. If your source code depends on the data_source field, modify it by 06/01/2023 or let us know as soon as possible about any constraints. All other data sources remain unchanged.

The following API endpoints are affected by the change:

Account Links

  • https://prod.truv.com/v1/link-access-tokens/
  • https://prod.truv.com/v1/links/
  • https://prod.truv.com/v1/links/{link_id}

Orders

  • https://prod.truv.com/v1/orders/
  • https://prod.truv.com/v1/orders/{id}/

Reports

  • https://prod.truv.com/v1/links/{link_id}/employment/report
  • https://prod.truv.com/v1/links/{link_id}/income/report