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.Corrections
Opening a submission for a year that has already been reported returnskind: 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 /accountsadds 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 returns404.
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 a207 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 awebhookUrl 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 OAuth2client_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