📊 New GET /estimates endpoint, more income estimates and webhook catch-up
- Added — New endpoint:
GET /estimates/{identifier}— Computemonthly_income,employment_statusandtenurefor a CURP with your own window, sources and date, including a month-by-month history. It doesn't create a verification and isn't billed. - Deprecated —
estimated_monthly_income,employment_statusandtenureinGET /profile—GET /estimatesreplaces these three fields. They keep working until November 15, 2026, then they are removed fromGET /profile. - Improved —
estimated_monthly_incomeis returned for more people — When there is no recent payroll or employment data,GET /profilenow uses payroll and employment records from up to the last 12 months, so fewer profiles returnnull. Applies to estimates computed from now on. - Added — New
tenurevalue:less_than_3_months— Employed people who joined their current employer less than 3 months ago now returnless_than_3_monthsinstead ofnull. If you validate this enum strictly, accept the new value. - Improved — Auto-disabled webhooks keep your events — If a webhook is auto-disabled after repeated delivery failures, its events are now kept for up to 72 hours and delivered when you re-enable it.
📊 GET /estimates
GET /estimates/{identifier} computes monthly_income, employment_status and tenure for a CURP with your own settings:
window_months: 3, 6, 9, 12 or 24 months of history (default 12). With 3 it matchesGET /profile.sources:all,invoices(nóminas and own billing) oremployments(IMSS/ISSSTE).as_of: compute the values as of a past date, up to 24 months back.history=true: one point-in-time estimate per month, up to 18 months.
The response also includes income_source: where the estimated income comes from.
Same access rules as GET /profile. It doesn't create a verification and isn't billed. See the Estimates guide and the API Reference.
⚠️ Replaces three fields in GET /profile
GET /estimates replaces these fields of GET /profile, which are now deprecated:
Deprecated in GET /profile | Use in GET /estimates |
|---|---|
estimated_monthly_income | monthly_income |
employment_status | employment_status |
tenure | tenure |
With window_months=3, GET /estimates returns the same values as GET /profile. The deprecated fields keep working (including the improvements below) until November 15, 2026, then they are removed from GET /profile. Move to GET /estimates before that date, with window_months=3 if you want the same values you get today.
💰 Estimated monthly income
GET /profile/{identifier} used to return estimated_monthly_income only when there was payroll from the last 60 days or an employment record refreshed in the last 90 days. When neither exists, it now falls back to payroll and open IMSS/ISSSTE employment records from the last 12 months. Recent data always takes priority, and jobs with an end date are never used.
employment_status can be unknown while estimated_monthly_income has a value. Existing profiles pick up the change as their estimates are refreshed. See the Profile guide.
🗓️ Tenure
tenure now distinguishes "recently hired" from "no data":
| Value | Meaning |
|---|---|
less_than_3_months | New. employment_status = employed and the current employer's evidence covers less than 3 months |
3_months_plus … 12_months_plus | Unchanged |
null | Not employed, or no employer-level evidence |
GET /profile and GET /estimates return the same tenure for the same person.
🔔 Webhooks
When a webhook is auto-disabled after repeated failures, new events for it are kept for up to 72 hours. Once you re-enable that same webhook (fix its URL and turn it back on), they are delivered and show up in the delivery log like any other delivery. Creating a new webhook doesn't release them.
Webhooks you disable yourself still don't keep events while they're off.
