Skip to main content

Base URL

Every path in this documentation is relative to the base URL. The token endpoint is the exception: it sits at the host root. Keep both in configuration. Production uses the same paths at a production base URL, with production credentials, arranged with Securitize once your integration passes the go-live checklist.

Get a token

To try the API from this portal, get a sandbox token here: run Get an access token in the API reference with your client id and secret, then paste the access_token into the authorization field of any other operation to try it.
Authentication is OAuth 2.0 client credentials. Exchange the client id and secret Securitize issued you for a bearer token, then send it on every request:
200 with { "meta": …, "data": [] } means you are connected. A 401 without a code means the token (below).
  • The token lasts 2 hours (expires_in, in seconds). Cache it and get a new one shortly before it expires, or on the first 401. Do not request one per call.
  • No scope. Send none.
  • In the Authorization header only. Never put the token in a URL: URLs end up in logs.
  • The token identifies your partner account. You never send a partner or tenant id, and every record you create is scoped to your account: your identifiers cannot collide with another partner’s. Another partner’s investor answers 404, as if it did not exist.
The same token also reads your webhooks back at https://partners-api.sandbox.securitize.io/webhooks/v1 (Replay and recover).

Keeping secrets and data safe

  • The client secret is a secret: keep it in a secrets manager, inject it at runtime, and ask Securitize to rotate it at once if it is exposed. Never put it in source control, scripts or client-side code. Treat the access token the same way while it lives.
  • Keep separate credentials for sandbox and production, so production credentials can never reach the sandbox URL or the reverse.
  • Call the API from your backend only.
  • Identity documents are personal data: never log request bodies with content; log the document id and type from the response instead.
  • The correlationId holds no personal data and is safe to log and to share with Securitize support.

When the token is wrong

A missing, expired or unknown token is refused before the request reaches the API, with an OAuth-style body and no code or correlationId: Every other error carries a code and a correlationId. Branch on the status: a 401 without a code always means “get a new token”, whatever the body says.

How sandbox behaves

  • Synthetic data only. Sandbox validates requests like production and sends identity documents to a test identity provider. Use @test.invalid emails and invented names and identifiers.
  • Documents must be complete image files. A truncated or corrupt file is refused with 422 document_rejected. Use the test files.
  • Identifiers must change between runs. An externalInvestorId, tax identifier or email you already used belongs to an existing investor: the same body returns that investor, different data answers 409. Generate fresh values for every test run, including when you copy the examples in these docs.
  • Every submitted investor ends verified. Sandbox does not produce manual-review, rejected or updates-required, and does not check a US person’s tax identifier against their name and address; build those branches from Statuses.
  • When verified arrives depends on your agreement. Depending on your integration agreement with Securitize, an investor becomes verified as soon as the verification is submitted, or once Securitize’s screening answers. Requests and responses are the same in both cases; build your integration to poll until the status leaves processing.