Skip to main content
CRS (Common Reporting Standard) is the global standard for the automatic exchange of financial account information. Financial institutions report their reportable accounts once a year to their national tax authority, which exchanges the data with other jurisdictions. This connector exposes a REST API: you push accounts into a submission for a reporting year, then hand it off to be reported to the tax authority.

How it works

A submission holds every account you report for one reporting year. Push accounts into it over as many calls as you need, then submit it:
1

Open a submission

POST /reports/crs/v1/submissions with the reporting year. You get back a submissionId that scopes every subsequent call. Optionally include a webhookUrl to be notified when the submission finishes processing.
2

Push accounts

POST /reports/crs/v1/submissions/{submissionId}/accounts with a batch of accounts.
3

Submit

POST /reports/crs/v1/submissions/{submissionId}:submit starts report generation and submission to the tax authority. After this call the submission is no longer editable.
4

Track progress and fix errors

Poll GET .../status for the high-level state, or GET .../report to track progress pending counts of accounts and messages. GET .../accounts/errors lists the accounts with unresolved tax authority validation errors, with the error codes to fix.
While a submission is still a draft you can delete it along with every account pushed under it. To change anything you have already reported, open a new submission for the same year.

Corrections

Opening a submission for a year that has already been reported returns kind: CORRECTION. A correction works exactly like the first submission, using the same endpoints and keyed by accountNumber, but each call now acts on what the tax authority already holds:
  • POST /accounts adds accounts the tax authority has not seen. An account it already has is rejected.
  • PUT /accounts/{accountNumber} amends an already-reported account. Amending an account the tax authority has never seen is rejected.
  • DELETE /accounts/{accountNumber} deletes the account report at the tax authority. An account it has never seen returns 404.
Like any submission, a correction only reaches the tax authority once you submit it. You can open as many rounds for a year as you need, but only one at a time: opening a submission for a year whose earlier round is still being processed returns 409.

Pushing accounts

A batch is not all-or-nothing. Accounts that fail are reported individually and the rest of the batch is still saved, so a 207 response means some accounts were rejected while the others were stored. Send the optional Idempotency-Key header to make a retried batch safe.

Submission status

status on a submission moves through:

Webhook

Instead of polling for status, pass a webhookUrl when you open a submission. Once the submission finishes processing, the connector calls it with a POST carrying a JSON body:
status is the tax authority’s validation result for the submission: ACCEPTED or REJECTED. Calls originate from the following IP addresses; whitelist them to receive the webhook.

Authentication

All endpoints require a bearer JWT obtained via the OAuth2 client_credentials grant. See Authentication.

API Reference

Explore the full API specification in the Swagger documentation.
IP Whitelisting Required: Before you can access the Swagger documentation, your IP address must be whitelisted. Contact us to register your IP addresses.

Resources

Submissions

Open a reporting batch, submit it, and track its status

Accounts

Push, amend, and delete the accounts you report

Report

Reported-versus-pending counts of accounts and messages

Errors

Accounts the tax authority rejected, with error codes
Last modified on August 6, 2026