How an error looks
API errors carry acode. Branch on the HTTP status and the code; message is for humans and can change. Quote correlationId when you contact Securitize support.
details depends on the error:
- a validation error lists every field to fix:
[{ "field": "phone.code", "message": "code must contain digits only" }](on a query parameter, a list of strings); - a conflict carries the existing id:
{ "investorId": … }or{ "keyPartyId": … }; - a refused submit names who is short:
{ "investor": …, "keyParties": [ … ] }; - a whitelisting waiting for suitability names what:
{ "notVerified": ["us", "eu"] }; - a tax form of the wrong type lists the forms the investor can receive:
{ "allowed": ["W-9", "W-8BEN"] }; - a W-9 sent as data while the investor has a form on file names that form:
{ "activeTaxForm": { "taxFormId": …, "formType": "W-8BEN" } }; - a W-9 sent as data for an investor subject to backup withholding says why:
{ "reason": "backup_withholding_not_supported" }.
code and no correlationId: the request never reached the API. A 401 ({"error": "invalid_request" | "invalid_token", "error_description": …}) means the bearer token is missing, unknown or expired: get a new one and send the request again. A 403 {"message": "You cannot consume this service"} means your account is not enabled for this API (Sandbox and authentication); a 403 IP address not allowed means the request is outside the API, for example a path outside /investors or a DELETE. A body that is not valid JSON answers 400 without a code either.
What to do
Fix the request and send it again
Use what already exists
Wait, or finish a step first
Stop and talk to Securitize
Not found
Retry
What is safe to retry
Keep a small state per investor in your own system (created, documented, submitted, verdict) and resume from it after a crash, instead of replaying the whole flow.
A handling pattern
Getting help
When you contact Securitize support about a response, send:- the
correlationId(a gateway error has none: say so); - your
externalInvestorId, and theinvestorIdorkeyPartyIdif you have them; - the method and path, and whether it was sandbox or production;
- the
statusCodeandcodeyou received, and what you expected instead.
correlationId is enough for Securitize to find the request.