---
title: "Simulate a CRA Servicing report"
method: POST
path: "/sandbox/cra/servicing/simulate"
tags: ["plaid"]
---

# Simulate a CRA Servicing report

`POST /sandbox/cra/servicing/simulate`

Use the `/sandbox/cra/servicing/simulate` endpoint to synchronously seed a CRA Servicing report in the Sandbox environment and return a `report_id` that can be fetched via `/cra/check_report/base_report/get` or `/cra/check_report/income_insights/get`. This endpoint also fires a `CRA_REPORT_UPDATED` webhook, mirroring the notification a live subscription would emit.

## Request body

- SandboxCraServicingSimulateRequest — SandboxCraServicingSimulateRequest defines the request schema for `/sandbox/cra/servicing/simulate`
  - `client_id` string — Your Plaid API `client_id`. The `client_id` is required and may be provided either in the `PLAID-CLIENT-ID` header or as part of a request body.
  - `secret` string — Your Plaid API `secret`. The `secret` is required and may be provided either in the `PLAID-SECRET` header or as part of a request body.
  - `subscription_id` string, required — The Servicing subscription to simulate an update for. Upon calling this endpoint, Plaid will simulate a report creation for all products referenced by this subscription ID.
  - `user_id` string — The user to simulate an update for, in place of a `subscription_id`.
  - `options` SandboxCraServicingSimulateRequestOptions, nullable — Optional parameters controlling the simulated report.
    - `transactions_end_date` string, date, nullable — The end of the synthesized transaction window ("the present"), as a YYYY-MM-DD date. Accepts past or future dates up to 180 days ahead; defaults to today. A later value appends newer transactions without churning earlier ones.
    - `error_webhook_code` 'USER_NOT_FOUND' | 'PRODUCT_GENERATION_FAILED' | 'UNMATCH' | 'DATA_UNAVAILABLE' | 'NO_ELIGIBLE_ITEMS_ON_PROFILE' | 'PRODUCT_GENERATION_ERROR', nullable — If set, skip report generation and instead fire a `CRA_REPORT_UPDATED` error webhook carrying this code. The accepted values depend on the `scope` of the subscription being simulated, since a simulation can only fire a webhook that scope would send in Production. A `CLIENT_USER` subscription accepts `USER_NOT_FOUND` and `PRODUCT_GENERATION_FAILED`; a `PLAID_NETWORK` subscription accepts `UNMATCH`, `DATA_UNAVAILABLE`, `NO_ELIGIBLE_ITEMS_ON_PROFILE`, and `PRODUCT_GENERATION_ERROR`. Supplying a code that does not match the subscription's scope returns an `INVALID_FIELD` error.

## Response `200`

OK

- SandboxCraServicingSimulateResponse — SandboxCraServicingSimulateResponse defines the response schema for `/sandbox/cra/servicing/simulate`
  - `report_id` string, nullable — The `cra-report` token for the seeded snapshot. Pin as `report_id` on `/cra/check_report/base_report/get` or `/cra/check_report/income_insights/get`. Omitted when `error_webhook_code` was used.
  - `request_id` string, required — A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

## Other responses

- `default` — Error response

## Changes

- **2026-09-01** `141de8aaaad2` — 2 info
  - added the new optional request property `user_id`
  - added the new `PRODUCT_GENERATION_ERROR` enum value to the request property `options/error_webhook_code`
- **2026-08-17** `e536704a333f` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/plaid/apis/the-plaid-api/changes/sandbox/cra/servicing/simulate/post.md)

---

[API](https://skmtc.dev/plaid/apis/the-plaid-api.md) · [All operations](https://skmtc.dev/plaid/apis/the-plaid-api/llms.txt) · [OpenAPI document](https://skmtc.dev/plaid/apis/the-plaid-api/revisions/141de8aaaad2?raw)
