NAV

Introduction

Welcome to the StratiFi API!

With our API you can manage your portfolios in StratiFi and get information on various risks and scores.

This page describe the available API endpoints. You will find some code examples in the dark area to the right. Also, if you are familiar with Postman, you can consult and import this collection and play with the API.

Before start using the API you need contact us at support@stratifi.com and request API access. We will provide you a CLIENT ID an a SECRET KEY required to complete the authorization process.

If you want to know more about how the information is organized in StratiFi or want to familiarize with the API structure go to the About section. If you are ready to start, go to the Authorization section.

Overview

Our API follows a REST pattern, where HTTP methods define the action to perform and the endpoint URL determines the object(s) scope.

HTTP method Usage
GET List objects or Retrieve a particular object if the ID is provided in the URL.
POST Create object.
PUT Update entire object.
PATCH Update only the provided attributes.
DELETE Delete object.

The result of the operations is well described by standard HTTP response codes.

HTTP response code Description
20x Success
30x Resource moved
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- The resource requested is hidden for administrators only.
404 Not Found -- The specified resource could not be found.
405 Method Not Allowed -- You tried to access a uri with an invalid method.
429 Too Many Requests -- You're making too many requests. Please allow some time for our server to serve your previous requests.
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.

The StratiFi API uses the following error codes:

Domain

We offer a sandbox where you can test safely: https://sandbox.stratifi.com

Once you are ready, you will get access to the production domain https://backend.stratifi.com

About StratiFi

You can think about data in StratiFi as a hierarchical structure where a companies are at the higher level and accounts at the bottom level.

Company ⟶ Advisor ⟶ Household * ⟶ Investor ⟶ Account

Each object is linked to another in the upper level, for instance, an account has an investor_id attribute that contains the ID of the investor that owns that account.

(*) Households are optional. An investor can be linked directly to the advisor.

Search & Filtering

You can search and filter objects returned by an endpoint using URL parameters.

For searching, you need to include the search parameter in the URL. e.g. /api/v1/households/?search=Smith

For filtering, you need to include the desired attribute in the URL parameters. Each section describes the allowed Filtering Fields for that endpoint. For instance, if you want to list the accounts of the investor with ID 31 you can use /api/v1/accounts/?investor=31

Authorization

We use the OAuth 2.0 protocol with PKCE, an industry standard for authorization management.

Make sure you have the CLIENT ID an a SECRET KEY provided by our support team. If you don't have them contact us at support@stratifi.com.

Authorization Code Flow + PCKE

Following the steps below you will get an access token that can be used to access StratiFi on behalf of the advisor.

PCKE

import base64
import hashlib
import random
import string

# generate the code verifier
code_verifier = "".join(
    random.choice(string.ascii_uppercase + string.digits)
    for _ in range(random.randint(43, 128))
)
code_verifier = base64.urlsafe_b64encode(code_verifier.encode("utf-8"))

# generate the code challenge
code_challenge = hashlib.sha256(code_verifier).digest()
code_challenge = (
    base64.urlsafe_b64encode(code_challenge).decode("utf-8").replace("=", "")
)
  1. Generate an authentication code grant with PKCE (Proof Key for Code Exchange).

    • Generate a random strng between 43 and 128 characters, encode it in base64 and save it as code_verifier.
    • Hash the code_verifier with SHA-256, encode it in base64 and save it as code_challenge.
  2. Redirect the advisor to the StratiFi authorization page:

    https://{{ domain }}/o/authorize/?response_type=code&code_challenge={{ code_challenge }}&code_challenge_method=S256&client_id={{ client_id }}&scope={{ scope }}&state={{ state }}

    Parameter Description
    domain StratiFi sandbox or production domain.
    response_type "code"
    state Random string generated by your application. It will be returned along with the code in the response.
    code_challenge Random string between 43 and 128 characters encoded with SHA-256. We use it to validate the token request.
    code_challenge_method "S256"
    client_id Provided by StratiFi.
    scope Required scopes. You will want to use "read write".
  3. The advisor submits the StratiFi credentials.

    login

  4. The advisor allow your application access the resources in StratiFi.

    grant

  5. We redirect the browser to your return url with a single-usage access code.

    https://{{ callback-url }}code={{ code }}&state={{ state }}&iss={{ issuer }}

    Parameter Description
    callback-url URL provided by you when during the application setup
    code Single-usage code that can be exchanged by an access token.
    state Random string generated by your application included in the authorization URL.
    iss The authorization server that issued the code, https://backend.stratifi.com/o. Check it before using the code (RFC 9207).
  6. Your application backend exchange the access code by an access token.


curl -X POST "https://backend.stratifi.com/o/token/" \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=authorization_code' \
  --data-urlencode 'client_id={{ client_id }}' \
  --data-urlencode 'client_secret={{ secret_key }}' \
  --data-urlencode 'redirect_uri={{ redirect_url }}' \
  --data-urlencode 'code={{ code }}' \
  --data-urlencode 'code_verifier={{ code_verifier }}'

{
    "access_token": "{{ access_token }}",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "{{ refresh_token }}",
    "scope": "openid read write",
    "advisor_id": 1,
    "session_token": "{{ session_token }}",
    "id_token": "{{ id_token }}"
}

Request Parameters

Parameter Type
grant_type string Always "authorization_code"
code string The single-usage code received in the callback
code_verifier string The random string generated in the first step
redirect_uri string The callback URL
client_id string Your application client id
client_secret string Your application secret key

Response

Parameter Type
token_type string Always "Bearer"
access_token string An access token valid to consult other endpoints on behalf of the user
expires_in string Expiration time of the access token in seconds
refresh_token string A refresh token valid to renew the access token. See Refresh Token Flow.
scope string The scopes with granted access for this token
advisor_id int The ID of the advisor associated to this user
session_token string A short-lived token used to start a session in stratifi.com
id_token string An OpenID Connect ID token used to start a session in stratifi.com

6. Include the Authorization header in your requests as follows:

Authorization: Bearer {{ access-token }}

Refresh Token Flow

If your access token expired you can renew it using a valid refresh token.

curl -X POST "https://backend.stratifi.com/o/token/" \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=refresh_token' \
  --data-urlencode 'client_id={{ client_id }}' \
  --data-urlencode 'client_secret={{ secret_key }}' \
  --data-urlencode 'refresh_token={{ refresh_token }}'

{
    "access_token": "{{ access_token }}",
    "token_type": "Bearer",
    "expires_in": 3600,
    "refresh_token": "{{ refresh_token }}",
    "scope": "openid read write",
    "advisor_id": 1,
    "session_token": "{{ session_token }}",
    "id_token": "{{ id_token }}"

}

Request Parameters

Parameter Type
grant_type string Always "refresh_token"
refresh_token string Your Refresh Token
client_id string Your application client id
client_secret string Your application secret key

Response

Parameter Type
token_type string Always "Bearer"
access_token string An access token valid to consult other endpoints on behalf of the user
expires_in string Expiration time of the access token in seconds
refresh_token string An refresh token valid to renew the access token
scope string The scopes with granted access for this token
advisor_id int The ID of the advisor associated to this user
session_token string A short-lived token used to start a session in stratifi.com
id_token string An OpenID Connect ID token used to start a session in stratifi.com

Client Credentials Flow

Server-to-server integrations that act on their own behalf (not on behalf of a specific advisor) authenticate with the OAuth 2.0 client credentials grant. There is no user, no browser redirect and no PKCE: your backend exchanges its client_id and client_secret directly for an access token. Contact support@stratifi.com to be issued a service-account client_id / client_secret for this grant.

curl -X POST "https://backend.stratifi.com/o/token/" \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=client_credentials' \
  --data-urlencode 'client_id={{ client_id }}' \
  --data-urlencode 'client_secret={{ secret_key }}' \
  --data-urlencode 'scope=read write'

{
    "access_token": "{{ access_token }}",
    "token_type": "Bearer",
    "expires_in": 36000,
    "scope": "read write"
}

Request Parameters

Parameter Type
grant_type string Always "client_credentials"
client_id string Your service-account client id
client_secret string Your service-account secret key
scope string Required scopes. Use "read write".

Response

Parameter Type
token_type string Always "Bearer"
access_token string An access token valid to consult the API as the service account
expires_in int Expiration time of the access token in seconds. Honor this value rather than hard-coding it.
scope string The scopes granted for this token

Use the token the same way as any other, in the Authorization header:

Authorization: Bearer {{ access-token }}

Starting a session in stratifi.com

You can start a session in stratifi.com using the OpenID Connect protocol. To do so, you need to include the openid scope when requesting the authorization code. The response will include an id_token property that you can use to start a session in stratifi.com.

curl -X POST "https://backend.stratifi.com/o/sso/" \
  -H "Authorization: Bearer {{ access-token }}" \
  -d "{'starting_url': '/advisor/investors'}"

redirection to "https://advisors.stratifi.com/advisor/investors/"

Making an authenticated request to the /o/sso/ endpoint will redirect the user to stratifi.com and start a session. You can include an optional starting_url property to specify the path where the user will be redirected after starting the session. If not provided, the user will be redirected to the default dashboard.

Session Token Flow(Deprecated)

The authorization responses described above contain a session_token property. This token automatically authenticates advisors in stratifi.com, meaning that the advisor won't be required to fill the credentials when visiting Stratifi.

To build an authenticated URL you need 3 parts:

Description URL
Clients list /advisor/investors/
Clients overview /advisor/investors/<id>/
Prospects list /advisor/prospects/
Prospects overview /advisor/prospects/<id>/
Households list /advisor/households/
Households overview /advisor/households/<id>/
Model Portfolios list /advisor/models/
Model Portfolios overview /advisor/models/<id>/

Having these 3 elements, the full URL is: https://{{ base_domain }}{{ path }}?session={{ sesison_token }}

For instance, https://advisors.stratifi.com/advisor/investors/1/?session=abc123 will lead the user to the details page of the client with id 1.

Note: The session token has a life of 5 minutes. After that, you will need to follow the refresh token flow to get a new one. If you use an expired token in an URL, the user will be redirected to the signin page in Stratifi.

Retrieving logged user information

You can get basic information about the user related to a token by consulting the /userinfo endpoint. The response includes the advisor ID and the session_token described above.

curl -X GET "https://backend.stratifi.com/api/v1/userinfo/"

{
    "first_name":"John",
    "last_name":"Wick",
    "email":"john.wick@example.com",
    "advisor_id": 1,
    "session_token": "{{ session_token }}"
}

Response

Name Type Description
first_name string User first name
last_name string User last name
email string User email address
advisor_id int The ID of the advisor associated to this user
session_token string A short-lived token used to start a session in stratifi.com

Single Sign-On

StratiFi supports SAML 2.0 Single Sign-On so your platform can send an advisor straight into the StratiFi web app without a StratiFi login screen. StratiFi acts as the SAML Service Provider (SP); your platform is the Identity Provider (IdP). SSO is provisioned per firm — contact support@stratifi.com to set it up.

Service Provider endpoints

Your SP endpoints are templated by a short org slug assigned to your firm. Download the metadata document from the metadata URL to configure your IdP; the SP Entity ID is that same metadata URL.

Endpoint URL
Metadata (SP Entity ID) https://backend.stratifi.com/sso/saml/{{ org_slug }}/metadata/
ACS (assertion consumer) https://backend.stratifi.com/sso/saml/{{ org_slug }}/acs/
SLS (single logout) https://backend.stratifi.com/sso/saml/{{ org_slug }}/sls/

IdP-initiated sign-in

Your IdP issues a signed SAML assertion for the advisor and your application POSTs it to the ACS, optionally with a RelayState that deep-links the advisor to a specific page:

<form method="POST" action="https://backend.stratifi.com/sso/saml/{{ org_slug }}/acs/">
  <input type="hidden" name="SAMLResponse" value="{{ base64_signed_saml_response }}"/>
  <input type="hidden" name="RelayState"  value="/advisor/investors/{{ investor_id }}"/>
</form>

RelayState opens StratiFi on a specific page after sign-in. It must be a bare, same-origin path: it starts with / and has no scheme, host, query string or fragment (for example /advisor/investors/42). StratiFi prepends its own app origin, so the advisor lands at https://advisors.stratifi.com/advisor/investors/42. A value that is not a bare same-origin path is ignored and the advisor lands on the StratiFi home page; omit RelayState for a plain sign-in.

The id in the path is the StratiFi investor id, not your external id — resolve it first with GET /investors/?external_id={{ your_id }}.

Description RelayState path
Clients list /advisor/investors/
Client overview /advisor/investors/<id>
Prospects list /advisor/prospects/
Prospect overview /advisor/prospects/<id>
Households list /advisor/households/
Model Portfolios list /advisor/models/

Requirements

Companies

Company Object Definition

Company Object

{
  "id": 1,
  "name": "Company A, LLC"
}

Name Type Description
id int ID of the company
external_id string Your company identifier
name string Name of the company

List Companies

List Companies

curl "https://backend.stratifi.com/api/v1/companies/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/companies/?page=2",
  "previous": null,
  "results": [
    {
        "id": 1,
        "external_id": "co-1",
        "name": "Companny A, LLC"
    },
    …
  ]
}

-request-type: GET

-request-url: /companies/

Response Fields

Name Type Description
count int Total number of companies
next string Link to next page of companies
previous string Link to previous page of companies
results Object List of company objects

Filtering Fields

Name Type Description
external_id string Your company identifier

Get Company

Get Company

curl "https://backend.stratifi.com/api/v1/companies/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "co-1",
  "name": "Companny A, LLC"
}

-request-type: GET

-request-url: /companies/<id>/

Response: The requested company object.

Create Company

Create Company

curl -X POST "https://backend.stratifi.com/api/v1/companies/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{"name": "Company Z, LLC", "external_id": "co-1",}'

{
  "id": 11,
  "external_id": "co-1",
  "name": "Companny Z, LLC"
}

-request-type: POST

-request-url: /companies/

Request Parameters

Parameter Type
name string Required
external_id string Optional

Response: The new company object.

Update Company

Update Company

curl -X PUT "https://backend.stratifi.com/api/v1/companies/11/"
  -H "Authorization: Bearer {{ access-token }}" \
  -d '{"name": "Company W, LLC", "external_id": "co-1"}'

{
  "id": 11,
  "external_id": "co-1",
  "name": "Companny W, LLC"
}

-request-type: PUT/PATCH

-request-url: /companies/<id>/

Request Parameters

Parameter Type
name string Required
external_id string Optional

Company Prism Aggregation

Company Prism Aggregation

curl "https://backend.stratifi.com/api/v1/companies/11/prism_aggregation/" -H "Authorization: Bearer {{ access-token }}"

{
  "scores": {…},
  "media": {…},
}

-request-type: GET

-request-url: /companies/<id>/prism_aggregation/

Response Fields

Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images

Users

User Object Definition

Name Type Description
first_name string User first name
last_name string User last name
email string User email address

User Object

{
 "first_name":"John",
 "last_name":"Wick",
 "email":"john.wick@example.com"
}

Advisors

Advisor Object Definition

Advisor Object

{
  "id": 1,
  "external_id": "adv-1",
  "company": 1,
  "default_investor": 101,
  "phone": "5555555555",
  "title": "Co-founder",
  "user": {
     "first_name":"John",
     "last_name":"Wick",
     "email":"john.wick@example.com"
  }
}
Name Type Description
id int Advisor ID
external_id string Your advisor identifier
company int Company ID
default_investor int ID of the default investor of this advisor *
phone string Advisor Phone
title string Advisor Job Title
user User Object User info

(*) Sometimes the advisor owns accounts that are not attached to an investor or the investor information is not available. In these cases, you can use the advisor default investor to create link accounts to the advisor without an investor.

List Advisors

List Advisors

curl "https://backend.stratifi.com/api/v1/advisors/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/advisors/?page=2",
  "previous": null,
  "results": [
    {
      "id": 1,
      "external_id": "adv-1",
      "company": 1,
      "default_investor": 101,
      "phone": "5555555555",
      "title": "Co-founder",
      "user": {
         "first_name":"John",
         "last_name":"Wick",
         "email":"john.wick@example.com"
      }
    },
    …
  ]
}

-request-type: GET

-request-url: /advisors/

Response Fields

Name Type Description
count int Total number of advisors
next string Link to next page of advisors
previous string Link to previous page of advisors
results Object List of advisor objects

Filtering Fields

Name Type Description
company int Company ID
external_id string Your advisor identifier

Get Advisor

Get Advisor

curl "https://backend.stratifi.com/api/v1/advisors/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "adv-1",
  "company": 1,
  "default_investor": 101,
  "phone": "5555555555",
  "title": "Co-founder",
  "user": {
     "first_name":"John",
     "last_name":"Wick",
     "email":"john.wick@example.com"
  },
}

-request-type: GET

-request-url: /advisors/<id>/

Response: The requested advisor object.

Create Advisor

Create Advisor

curl -X POST "https://backend.stratifi.com/api/v1/advisors/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "adv-1",
    "company": 1,
    "phone": "754-3010",
    "title": "CEO",
    "user": {
      "first_name": "Doug",
      "last_name": "Spencer",
      "email": "doug.spencer@example.com"
    }
  }'

{
  "id": 150,
  "external_id": "adv-1",
  "company": 1,
  "default_investor": 102,
  "phone": "754-3010",
  "title": "CEO",
  "user": {
    "first_name": "Doug",
    "last_name": "Spencer",
    "email": "doug.spencer@example.com"
  }
}

-request-type: POST

-request-url: /advisors/

Request Parameters

Parameter Type
user User Object Required
company int Required
phone string Optional
title string Optional
external_id string Optional

Response: The new advisor object.

Update Advisor

Update Advisor

curl -X PUT "https://backend.stratifi.com/api/v1/advisors/150/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "adv-1",
    "title": "CEO/Founder",
    "company": 1,
    "phone": "754-3010",
    "user": {
      "first_name": "Doug",
      "last_name": "Spencer",
      "email": "dspencer@example.com"
    }
  }'

{
  "id": 150,
  "external_id": "adv-1",
  "company": 1
  "phone": "754-3010",
  "default_investor": 102,
  "title": "CEO/Founder",
  "user": {
    "first_name": "Doug",
    "last_name": "Spencer",
    "email": "dspencer@example.com"
  }
}

-request-type: PUT/PATCH

-request-url: /advisors/<id>/

Request Parameters

Parameter Type
user User Object Required
company int Required
phone string Optional
title string Optional
external_id string Optional

Advisor Stats

Individual Advisor Stats

curl "https://backend.stratifi.com/api/v1/advisors/11/stats/" -H "Authorization: Bearer {{ access-token }}"

{
    "risk": {
        "scores": {
            "overall": …
        },
        "media": {
            "overall": { … }
        }
    },
    "tolerance": {
        "scores": {
            "overall": …
        },
        "media": {
            "overall": { … }
        }
    },
    "drift": …
}

All Advisors Stats

curl "https://backend.stratifi.com/api/v1/advisors/stats/" -H "Authorization: Bearer {{ access-token }}"

{
  "10": {
      "risk": {
          "scores": {
              "overall": …
          },
          "media": {
              "overall": { … }
          }
      },
      "tolerance": {
          "scores": {
              "overall": …
          },
          "media": {
              "overall": { … }
          }
      },
      "drift": …
  },
  <advisor_id>: { … },
  …
}

-request-type: GET

-request-url: /advisors/stats/

-request-url: /advisors/<id>/stats/

Response Fields

Name Type Description
risk.scores.overall float Advisor risk score overall
risk.media.overall Scores Media Advisor risk score images
tolerance.scores.overall float Advisor tolerance score overall
tolerance.media.overall Scores Media Advisor tolerance score images
drift float Advisor drift score

Teams

TeamMembership object definition

Request TeamMembership

{
    "advisor": 1,
    "is_primary": true|false
}
Parameter Type Description
advisor int Advisor id
is_primary bool Boolean value indicating if the advisor is the primary advisor for the team

Response TeamMembership

{
    "advisor": {
        "id": 1,
        "user": {
            "id": 1,
            "first_name": "First",
            "last_name": "Last",
            "email": "first_last@stratifi.com"
        },
        "company": 1,
        "title": "",
        "phone": "+11111111111",
        "default_investor": 2,
        "external_id": ""
    },
    "is_primary": true|false
}
Name Type Description
advisor object Advisor object
is_primary bool Boolean value indicating if the advisor is the primary advisor for the team

Team object definition

Team Object

{
    "id": 1,
    "name": "Some Team",
    "external_id": "45912d",
    "description": "Team description",
    "company": 1,
    "rep_codes": ["rep_code1", "rep_code2"],
    "team_memberships": [
        {...TeamMembership Object},
        {...TeamMembership Object}
    ]
}
Name Type Description
id int Team id
name string Team name
external_id string External id
description string Team description
company int Company id
rep_codes string list List of rep codes
team_memberships object list List of team memberships

List Teams

List Teams

curl "https://backend.stratifi.com/api/v1/teams/" -H "Authorization
{
  "count": 1,
    "next": null,
    "previous": null,
    "results": [
      {...Team Object},
      {...Team Object},
    ]
}

-request-type: GET

-request-url: /teams/

Response Fields

Name Type Description
count int Total number of advisors
next string Link to next page of advisors
previous string Link to previous page of advisors
results object list List of team objects

Filtering Fields

Name Type Description
company int Company ID
external_id string Your advisor identifier

Get team by id

Get team by id

curl "https://backend.stratifi.com/api/v1/teams/1/" -H "Authorization
{...Team Object}

-request-type: GET

-request-url: /teams/<team_id>

Response: The requested team object.

Create team

Create team

curl -X POST "https://backend.stratifi.com/api/v1/teams/" -H "Authorization
  -d '{
    "name": "Some Team",
    "company": 1,
    "team_memberships": [
      {
        "advisor": 1,
        "is_primary": true
      }
    ],
    "external_id": "45912d",
    "description": "Team description",
    "rep_codes": ["rep_code1", "rep_code2"]
  }'
{...New Team Object}

-request-type: POST

-request-url: /teams/

Request Parameters

Parameter Type
name string Required
company int Required
team_memberships team-memberships list Optional
external_id string Optional
description string Optional
rep_codes string list Optional

Response: The new team object.

Update team

Update team

curl -X PATCH "https://backend.stratifi.com/api/v1/teams/1/" -H "Authorization
  -d '{
    "name": "Some Team",
    "company": 1,
    "team_memberships": [
      {
        "advisor": 1,
        "is_primary": true
      }
    ]
  }'
{...Updated Team Object}

-request-type: PUT/PATCH

-request-url: /teams/<id>/

Request Parameters

Parameter Type PUT PATCH
name string Required Optional
company int Required Optional
team_memberships team-memberships list Optional Optional
external_id string Optional Optional
description string Optional Optional
rep_codes string list Optional Optional

The provided team_memberships list replaces the existing list. If not provided, no changes are made.

Response: The updated team object.

Delete team

Delete team

curl -X DELETE "https://backend.stratifi.com/api/v1/teams/1/" -H "Authorization

-request-type: DELETE

-request-url: /teams/<id>/

Households

Household Object Definition

Household Object

{
  "id": 1,
  "external_id": "hou-1",
  "name": "Smith Family",
  "advisor": 1,
  "investment_objective": "Growth",
  "investment_objective_custom": "",
  "advisory_fee": 1.250,
  "exceptions_enabled": true,
  "created_at": "2026-01-15T14:02:11.482000Z",
  "updated_at": "2026-10-09T18:30:45.120000Z",
  "integration_link_updated_at": null,
  "risk": {
    "scores": {
      "overall": 8.1,
      "concentrated": 3.0,
      "correlation": 3.0,
      "tail": 2.0,
      "volatility": 4.0
    }
  },
  "tolerance": {
    "scores": {
      "overall": 3.0,
      "concentrated": 3.0,
      "correlation": 3.0,
      "tail": 2.0,
      "volatility": 4.0
    }
  },
  "drift": 5.1,
  "sources": […]
}

Name Type Description
id int Household ID
external_id string Your household identifier
name string Household Name
advisor int Advisor ID
investment_objective string Name of one of your firm's standardized investment objectives (the firm of the household's advisor), exact match; "" when unset. Exclusive with investment_objective_custom: sending both is a 400, and writing one clears the other.
investment_objective_custom string Free-text investment objective for firms without standardized objectives
advisory_fee decimal Advisory fee, percent (for example 1.250)
exceptions_enabled bool Surveillance exceptions are raised for this household (default true)
created_at datetime Read only. When the household was created
updated_at datetime Read only. Last change to the household
integration_link_updated_at datetime Read only. Last time an integration updated the household
risk.scores Scores Factors Household aggregated risk scores
risk.media Scores Media Household aggregated risk scores images
tolerance.scores Scores Factors Household aggregated tolerance scores
tolerance.media Scores Media Household aggregated tolerance scores images
drift float Household drift score
sources List of Sources Objects List of sources that are associated with the household

Households Source Object Definition

Source Object

{
    {
        "id": "",
        "provider": "Stratifi API",
        "provider_id": "0",
        "created": "2024-07-08T09:39:07.103365Z",
        "modified": "2024-07-08T09:44:35.463377Z"
    }
}
Name Type Description
id string ID of the source
provider string Source provider
provider_id string Source provider ID
created string Source created date
modified string Source modified date

List Households

List Households

curl "https://backend.stratifi.com/api/v1/households/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/households/?page=2",
  "previous": null,
  "results": [
    {
        "id": 1,
        "external_id": "hou-1",
        "name": "Smith Family"
        "advisor": 1,
        "risk": {…},
        "tolerance": {…},
        "drift": 5.1,
        "sources": […]
    },
    …
  ]
}

-request-type: GET

-request-url: /households/

Response Fields

Name Type Description
count int Total number of households
next string Link to next page of households
previous string Link to previous page of households
results Object List of household objects

Filtering Fields

Name Type Description
advisor int Advisor ID
external_id string Your household identifier
source_id int Source ID
source_provider int Source provider ID
source_provider_name str Source provider Name

Get Household

Get Household

curl "https://backend.stratifi.com/api/v1/households/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "hou-1",
  "name": "Smith Family"
  "advisor": 1,
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: GET

-request-url: /households/<id>/

Response: The requested household object.

Create Household

Create Household

curl -X POST "https://backend.stratifi.com/api/v1/households/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "hou-1",
    "name": "Smith-Pinkett Family",
    "advisor": 2,
    "investment_objective": "Growth",
    "advisory_fee": 1.25
  }'

{
  "id": 11,
  "external_id": "hou-1",
  "name": "Smith-Pinkett Family",
  "advisor": 2,
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: POST

-request-url: /households/

Request Parameters

Parameter Type
name string Required
advisor int Required
external_id string Optional
investment_objective, investment_objective_custom string Optional. Sending both is a 400
advisory_fee decimal Optional
exceptions_enabled bool Optional

Response: The new household object.

Update Household

Update Household

curl -X PUT "https://backend.stratifi.com/api/v1/households/2/"
  -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "hou-1",
    "name": "Pinkett Family",
    "advisor": 2
  }'

{
  "id": 11,
  "external_id": "hou-1",
  "name": "Pinkett Family",
  "advisor": 2,
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: PUT/PATCH

-request-url: /households/<id>/

Request Parameters

Parameter Type
name string Required
advisor int Required
external_id string Optional
investment_objective, investment_objective_custom string Optional. Sending both is a 400
advisory_fee decimal Optional
exceptions_enabled bool Optional

Household Prism Aggregation

Household Prism Aggregation

curl "https://backend.stratifi.com/api/v1/households/11/prism_aggregation/" -H "Authorization: Bearer {{ access-token }}"

{
  "scores": {…},
  "media": {…},
}

-request-type: GET

-request-url: /households/<id>/prism_aggregation/

Response Fields

Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images
status Scores Status Risk score status

Investors

Investor Object Definition

Investor Object

{
  "id": 1,
  "external_id": "inv-1",
  "advisor": 1,
  "household": 1,
  "phone": "5555555555",
  "is_prospect": false,
  "user": {
     "first_name":"John",
     "last_name":"Wick",
     "email":"john.wick@example.com"
  },
  "date_of_birth": "1980-05-17",
  "marital_status": "married",
  "dependants": 2,
  "employment_status": "employed",
  "occupation": "Architect",
  "mailing_address": "1 Main St",
  "city": "Austin",
  "state": "TX",
  "zip": "78701",
  "country_of_citizenship": "US",
  "country_of_residence": "US",
  "investment_objective": "Growth",
  "investment_objective_custom": "",
  "investment_experience": 12,
  "investment_experience_level": "moderate",
  "time_horizon": null,
  "time_horizon_bucket": "10_to_20",
  "liquidity_needs": 25000.00,
  "annual_income": 185000.00,
  "annual_expenses": 90000.00,
  "special_expenses": 15000.00,
  "net_worth": 1250000.00,
  "liquid_net_worth": 400000.00,
  "investable_assets": 650000.00,
  "advisory_fee": 1.250,
  "tax_rate": 32.500,
  "tax_bracket": "high",
  "exceptions_enabled": true,
  "clients_review_enabled": true,
  "checkins_enabled": true,
  "created_at": "2026-01-15T14:02:11.482000Z",
  "updated_at": "2026-10-09T18:30:45.120000Z",
  "next_review_date": "2027-01-15",
  "integration_link_updated_at": null,
  "risk": {
    "scores": {
      "overall": 8.1,
      "concentrated": 3.0,
      "correlation": 3.0,
      "tail": 2.0,
      "volatility": 4.0
    }
  },
  "tolerance": {
    "scores": {
      "overall": 3.0,
      "concentrated": 3.0,
      "correlation": 3.0,
      "tail": 2.0,
      "volatility": 4.0
    }
  },
  "drift": 5.1,
  "sources": […]
}
Name Type Description
id int Investor ID
external_id string Your investor identifier
advisor int Advisor ID
household int Household ID
is_prospect bool true for a prospect, false (default) for a client. Adding a prospect requires your firm's permission to add prospects; turning a prospect into a client excludes its accounts, as in the StratiFi app
phone string Phone of the investor
user User Object User info
date_of_birth date Date of birth (YYYY-MM-DD), not in the future
marital_status string One of single, married, divorced, widowed, domestic_partner
dependants int Number of dependants
employment_status string One of employed, self_employed, retired, unemployed, student, homemaker
occupation string Occupation
mailing_address string Street address
city string City
state string State or region
zip string Postal code
country_of_citizenship string ISO 3166-1 alpha-2 country code, upper case (for example US)
country_of_residence string ISO 3166-1 alpha-2 country code, upper case (for example US)
investment_objective string Name of one of your firm's standardized investment objectives (the firm of the investor's advisor), exact match; "" when unset. Exclusive with investment_objective_custom
investment_objective_custom string Free-text investment objective for firms without standardized objectives. Exclusive with investment_objective
investment_experience int Years of investing experience
investment_experience_level string One of none, limited, moderate, extensive
time_horizon int Investment time horizon in exact years. Exclusive with time_horizon_bucket
time_horizon_bucket string One of under_5, 5_to_10, 10_to_20, over_20. Exclusive with time_horizon
liquidity_needs decimal Dollar amount the investor needs to keep liquid
annual_income decimal Annual income
annual_expenses decimal Annual expenses
special_expenses decimal Planned special expenses
net_worth decimal Total net worth
liquid_net_worth decimal Liquid net worth
investable_assets decimal Investable assets
advisory_fee decimal Advisory fee, percent (for example 1.250)
tax_rate decimal Income tax rate, percent
tax_bracket string One of low, medium, high, top
exceptions_enabled bool Read only. Surveillance exceptions are raised for this investor; switched in the StratiFi app
clients_review_enabled bool Read only. The investor is included in client reviews; switched in the StratiFi app
checkins_enabled bool Read only. Check-ins are sent to the investor; switched in the StratiFi app
created_at datetime Read only. When the investor was created
updated_at datetime Read only. Last change to the investor
next_review_date date Read only. Earliest next review date across the investor's accounts
integration_link_updated_at datetime Read only. Last time an integration updated the investor
risk.scores Scores Factors Investor aggregated risk scores
risk.media Scores Media Investor aggregated risk scores images
tolerance.scores Scores Factors Investor aggregated tolerance scores
tolerance.media Scores Media Investor aggregated tolerance scores images
drift float Investor drift score
sources List of Sources Objects List of sources that are associated with the investor

Investor Source Object Definition

Source Object

{
    {
        "id": "",
        "provider": "Stratifi API",
        "provider_id": "0",
        "created": "2024-07-08T09:39:07.103365Z",
        "modified": "2024-07-08T09:44:35.463377Z"
    }
}
Name Type Description
id string ID of the source
provider string Source provider
provider_id string Source provider ID
created string Source created date
modified string Source modified date

List Investors

List Investors

curl "https://backend.stratifi.com/api/v1/investors/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/investors/?page=2",
  "previous": null,
  "results": [
    {
      "id": 1,
      "external_id": "inv-1",
      "advisor": 1,
      "household": 1,
      "phone": "5555555555",
      "user": {
         "first_name":"John",
         "last_name":"Wick",
         "email":"john.wick@example.com"
      },
      "risk": {…},
      "tolerance": {…},
      "drift": 5.1,
      "sources": […]
    },
    …
  ]
}

-request-type: GET

-request-url: /investors/

Response Fields

Name Type Description
count int Total number of investors
next string Link to next page of investors
previous string Link to previous page of investors
results Object List of investor objects

Filtering Fields

Name Type Description
advisor int Advisor ID
household int Household ID
external_id string Your investor identifier
is_prospect bool true lists prospects, false lists clients (1/0 also accepted). Without it the list returns clients only, as before
source_id int Source ID
source_provider int Source provider ID
source_provider_name str Source provider Name

Get Investor

Get Investor

curl "https://backend.stratifi.com/api/v1/investors/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "inv-1",
  "advisor": 1,
  "household": 1,
  "phone": "5555555555",
  "user": {
     "first_name":"John",
     "last_name":"Wick",
     "email":"john.wick@example.com"
  },
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: GET

-request-url: /investors/<id>/

Response: The requested investor object.

Create Investor

Create Investor

curl -X POST "https://backend.stratifi.com/api/v1/investors/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "inv-1",
    "advisor": 1,
    "household": 1,
    "phone": "754-3010",
    "user": {
      "first_name": "Brian",
      "last_name": "May",
      "email": "brian.may@example.com"
    },
    "date_of_birth": "1947-07-19",
    "employment_status": "self_employed",
    "investment_objective": "Growth",
    "time_horizon_bucket": "over_20",
    "net_worth": 1250000,
    "tax_bracket": "high"
  }'

{
  "id": 150,
  "external_id": "inv-1",
  "advisor": 1,
  "household": 1,
  "phone": "754-3010",
  "user": {
    "first_name": "Brian",
    "last_name": "May",
    "email": "brian.may@example.com"
  },
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: POST

-request-url: /investors/

Request Parameters

Parameter Type
user User Object Required
advisor int Required
household int Optional
phone string Optional
external_id string Optional
is_prospect bool Optional
date_of_birth, marital_status, dependants, employment_status, occupation, mailing_address, city, state, zip, country_of_citizenship, country_of_residence see Investor Object Optional
investment_objective, investment_objective_custom, investment_experience, investment_experience_level, time_horizon, time_horizon_bucket, liquidity_needs see Investor Object Optional. Sending both halves of an exclusive pair returns a 400
annual_income, annual_expenses, special_expenses, net_worth, liquid_net_worth, investable_assets, advisory_fee, tax_rate, tax_bracket see Investor Object Optional

The objective and the time horizon are exclusive pairs: sending both halves in one request returns a 400, and setting one clears the other.

Response: The new investor object.

Update Investor

Update Investor

curl -X PUT "https://backend.stratifi.com/api/v1/investors/150/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "inv-1",
    "advisor": 1,
    "household": 1,
    "phone": "754-3010",
    "user": {
      "first_name": "Brian",
      "last_name": "May",
      "email": "b.may@example.com"
    }
  }'

{
  "id": 150,
  "external_id": "inv-1",
  "advisor": 1
  "phone": "754-3010",
  "user": {
    "first_name": "Brian",
    "last_name": "May",
    "email": "b.may@example.com"
  },
  "risk": {…},
  "tolerance": {…},
  "drift": 5.1,
  "sources": […]
}

-request-type: PUT/PATCH

-request-url: /investors/<id>/

Request Parameters

Parameter Type
user User Object Required
advisor int Required
household int Optional
phone string Optional
external_id string Optional
is_prospect bool Optional
date_of_birth, marital_status, dependants, employment_status, occupation, mailing_address, city, state, zip, country_of_citizenship, country_of_residence see Investor Object Optional
investment_objective, investment_objective_custom, investment_experience, investment_experience_level, time_horizon, time_horizon_bucket, liquidity_needs see Investor Object Optional. Sending both halves of an exclusive pair returns a 400
annual_income, annual_expenses, special_expenses, net_worth, liquid_net_worth, investable_assets, advisory_fee, tax_rate, tax_bracket see Investor Object Optional

A prospect is reachable by id like a client, so it can be read, updated and deleted. Fields set from the client's paperwork by OperationsIQ cannot be changed through the API: sending a different value, or the other half of its exclusive pair, returns a 400 naming the field. Sending the stored value back is accepted.

Investor Prism Aggregation

Investor Prism Aggregation

curl "https://backend.stratifi.com/api/v1/investors/11/prism_aggregation/" -H "Authorization: Bearer {{ access-token }}"

{
  "scores": {…},
  "media": {…},
}

-request-type: GET

-request-url: /investors/<id>/prism_aggregation/

Response Fields

Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images
status Scores Status Risk score status

Risk and Tolerance

Risk statuses

Calculating scores for a portfolio might take some time (from a few seconds to a few minutes). In order to make our system more responsive, we calculate the scores in asynchronously. That means that when an account is created or updated, we will be able to provide an immediate answer to the request and, at the same time, queue the score calculation. In the response, we provide a readable status that indicates what is happening in background. The available statuses are:

Name Type Description
pending (Default) string The risk score calculation has not started
processing string The risk score calculation is in progress or the existing score is outdated
error string The last risk score calculation failed
ready string The risk score calculation is completed and is up to date

Scores Factors

Scores Factors

{
    "overall": 8.1,
    "concentrated": 1.0,
    "correlation": 8.0,
    "tail": 9.0,
    "volatility": 8.0
}
Name Type Description
overall float Overall score
concentrated float Concentrated score
correlation float Correlation score
tail float Tail score
volatility float Volatility score

Scores Media

Scores Images

{
    "overall": {
        "large": "https://scores-media.stratifi.com/10/large/81.png",
        "medium": "https://scores-media.stratifi.com/10/medium/81.png",
        "compact": "https://scores-media.stratifi.com/10/compact/81.png"
    },
    "concentrated": {
        "large": "https://scores-media.stratifi.com/10/large/10.png",
        "medium": "https://scores-media.stratifi.com/10/medium/10.png",
        "compact": "https://scores-media.stratifi.com/10/compact/10.png"
    },
    "correlation": {
        "large": "https://scores-media.stratifi.com/10/large/80.png",
        "medium": "https://scores-media.stratifi.com/10/medium/80.png",
        "compact": "https://scores-media.stratifi.com/10/compact/80.png"
    },
    "tail": {
        "large": "https://scores-media.stratifi.com/10/large/90.png",
        "medium": "https://scores-media.stratifi.com/10/medium/90.png",
        "compact": "https://scores-media.stratifi.com/10/compact/90.png"
    },
    "volatility": {
        "large": "https://scores-media.stratifi.com/10/large/80.png",
        "medium": "https://scores-media.stratifi.com/10/medium/80.png",
        "compact": "https://scores-media.stratifi.com/10/compact/80.png"
    }
}
Name Type Description
overall string Overall score image URLs
concentrated string Concentrated score image URLs
correlation string Correlation score image URLs
tail string Tail score image URLs
volatility string Volatility score image URLs

Notice that we provide 3 image versions for each one of the score factors. You can use the version that better adjust to your site layout.

large image

medium image

compact image

Risk Object Definition

Risk Object

{
  "scores": {
      "overall": 8.1,
      "concentrated": 1.0,
      "tail": 9.0,
      "correlation": 8.0,
      "volatility": 8.0
  },
  "media": {
    "overall": {
        "large": "https://scores-media.stratifi.com/10/large/81.png",
        "medium": "https://scores-media.stratifi.com/10/medium/81.png",
        "compact": "https://scores-media.stratifi.com/10/compact/81.png"
    },
    "concentrated": {
        "large": "https://scores-media.stratifi.com/10/large/10.png",
        "medium": "https://scores-media.stratifi.com/10/medium/10.png",
        "compact": "https://scores-media.stratifi.com/10/compact/10.png"
    },
    "correlation": {
        "large": "https://scores-media.stratifi.com/10/large/80.png",
        "medium": "https://scores-media.stratifi.com/10/medium/80.png",
        "compact": "https://scores-media.stratifi.com/10/compact/80.png"
    },
    "tail": {
        "large": "https://scores-media.stratifi.com/10/large/90.png",
        "medium": "https://scores-media.stratifi.com/10/medium/90.png",
        "compact": "https://scores-media.stratifi.com/10/compact/90.png"
    },
    "volatility": {
        "large": "https://scores-media.stratifi.com/10/large/80.png",
        "medium": "https://scores-media.stratifi.com/10/medium/80.png",
        "compact": "https://scores-media.stratifi.com/10/compact/80.png"
    }
  },
  "status": "processing",
  "created": "2021-04-21T15:11:37.564188",
  "top_risk_attributions": [
      {
          "ticker_name": "VANGUARD TARGET 2045",
          "ticker": "OPPI",
          "risk": 0.9997862976486193,
          "weight": 99.763225
      },
      {
          "ticker_name": "Fha Non Int Bearing",
          "ticker": "UNTB",
          "risk": 0.00021370235138087705,
          "weight": 0.236775
      }
  ],
  "scenarios": [
      {
          "risk": 8.8,
          "name": "Global Financial Crisis",
          "end_date": "2009-2-1",
          "start_date": "2007-2-1"
      },
      {
          "risk": 8.8,
          "name": "2011 Euro Credit Crisis",
          "end_date": "2012-1-1",
          "start_date": "2010-1-1"
      },
      {
          "risk": 8.1,
          "name": "2013 Taper Tantrum",
          "end_date": "2014-6-1",
          "start_date": "2012-6-1"
      },
      {
          "risk": 7.7,
          "name": "2015-16 Market Selloff",
          "end_date": "2017-1-1",
          "start_date": "2015-1-1"
      }
  ]
}
Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images
status Risk Status Risk score status
created date Score timestamp
top_risk_attributions[].ticker string Risk attribution ticker
top_risk_attributions[].ticker_name string Risk attribution ticker description
top_risk_attributions[].risk float Risk attribution overall score
top_risk_attributions[].weight float Risk attribution weight
scenarios[].name string Scenario name
scenarios[].start_date string Scenario start date
scenarios[].end_date string Scenario end date
scenarios[].risk float Scenario overall risk

Tolerance Object Definition

Tolerance Object

{
  "scores": {
      "overall": 6.4,
      "concentrated": 5.0,
      "correlation": 5.0,
      "tail": 5.0,
      "volatility": 8.0
  },
  "media": {
    "overall": {
        "large": "https://scores-media.stratifi.com/10/large/64.png",
        "medium": "https://scores-media.stratifi.com/10/medium/64.png",
        "compact": "https://scores-media.stratifi.com/10/compact/64.png"
    },
    "concentrated": {
        "large": "https://scores-media.stratifi.com/10/large/50.png",
        "medium": "https://scores-media.stratifi.com/10/medium/50.png",
        "compact": "https://scores-media.stratifi.com/10/compact/50.png"
    },
    "correlation": {
        "large": "https://scores-media.stratifi.com/10/large/50.png",
        "medium": "https://scores-media.stratifi.com/10/medium/50.png",
        "compact": "https://scores-media.stratifi.com/10/compact/50.png"
    },
    "tail": {
        "large": "https://scores-media.stratifi.com/10/large/50.png",
        "medium": "https://scores-media.stratifi.com/10/medium/50.png",
        "compact": "https://scores-media.stratifi.com/10/compact/50.png"
    },
    "volatility": {
        "large": "https://scores-media.stratifi.com/10/large/80.png",
        "medium": "https://scores-media.stratifi.com/10/medium/80.png",
        "compact": "https://scores-media.stratifi.com/10/compact/80.png"
    }
}
}
Name Type Description
scores Scores Factors Tolerance score factors
media Scores Images Tolerance score factors images

Positions

Positions are the holdings of an account and the target allocation of a model portfolio. They are sent and returned inside the positions list of their parent; there is no positions endpoint.

Sending positions on create or update replaces the whole list: holdings that are not sent are removed. A position is matched to the one it replaces by ticker, then by cusip.

Account Position Object Description:

{
    "id": 98213,
    "ticker": "GOOGL",
    "ticker_name": "ALPHABET INC CLASS A",
    "cusip": "02079K305",
    "isin": "US38259P5089",
    "type": "Equity",
    "subtype": "US",
    "sector": "Large Cap",
    "security_type": "Common Stock",
    "value": 36275.50,
    "quantity": 780,
    "price": 46.5070,
    "unit": "shares",
    "cost_basis": 44473.96,
    "unrealized_gains": -8198.46,
    "purchase_date": "2021-03-15",
    "excluded": false,
    "created_at": "2026-01-05T14:12:09.120000Z",
    "updated_at": "2026-10-10T09:30:00.000000Z"
}
Name Type Description -
id int Position ID. Stable while the holding keeps its ticker or cusip; a holding sent under a new identifier gets a new id Read-only
ticker string Asset symbol Required
ticker_name string Asset description Optional
cusip string Asset cusip Optional
isin string ISIN identifier Optional
type string Position type Read-only
subtype string Position subtype Read-only
sector string Position sector Read-only
security_type string Security type Read-only
value number Value Required
quantity number Number of units of the security held Optional
price number Price per unit of the security (value / quantity) Read-only
unit string Denomination of each unit of the security Optional
cost_basis number The total cost of the position Optional
unrealized_gains number Unrealized gains of the position. Kept when an update leaves it out Optional
purchase_date date Purchase date (YYYY-MM-DD). Kept when an update leaves it out Optional
excluded bool Left out of risk monitoring and PRISM. See excluded positions. Optional
created_at datetime When the position was created Read-only
updated_at datetime When one of the position's values last changed; sending the same values again does not move it Read-only

Excluded positions

Excluded positions are returned with the rest of the holdings, with excluded: true. Since sending positions replaces the whole list, send them back when you update an account, or they are removed.

id, created_at and updated_at are ignored when sent, so positions can be sent back as they were read.

Model portfolio positions

Model Position Object Description:

{
    "id": 5521,
    "ticker": "VTI",
    "ticker_name": "VANGUARD TOTAL STOCK MARKET ETF",
    "cusip": "922908769",
    "isin": "US9229087690",
    "type": "Equity",
    "subtype": "US",
    "sector": "Large Cap",
    "security_type": "ETF",
    "value": 60.0,
    "created_at": "2026-01-05T14:12:09.120000Z",
    "updated_at": "2026-10-10T09:30:00.000000Z"
}

Model positions carry id, ticker, ticker_name, cusip, isin, type, subtype, sector, security_type, value (the weight, a percentage), created_at and updated_at, with the same rules as account positions. They have no quantity, price, cost basis or exclusion.

Accounts

Account Object Definition

Account Object

{
  "id": 1,
  "external_id": "act-1",
  "name": "John Doe Trust",
  "value": "1234567.89",
  "type": "100",
  "tax_status": "taxable",
  "number": "987654321",
  "investor": 1,
  "advisor": 1,
  "matching_model": 1,
  "strategy": 1,
  "nickname": "Mom's brokerage",
  "inception_date": "2019-03-01",
  "close_date": null,
  "relationship_type": "advisory",
  "retirement_category": "non_retirement",
  "held_away": false,
  "excluded": false,
  "custodian": "Charles Schwab",
  "investment_objective": "Growth",
  "investment_objective_custom": "",
  "exceptions_enabled": true,
  "clients_review_enabled": true,
  "created_at": "2026-01-15T14:02:11.482000Z",
  "updated_at": "2026-10-09T18:30:45.120000Z",
  "provider": "Charles Schwab",
  "integration_link_updated_at": "2026-10-09T18:30:45.120000Z",
  "sync_status": "ready",
  "sync_status_changed": "2026-10-09T18:30:45.120000Z",
  "next_review_date": "2027-01-15",
  "display_name": "Mom's brokerage",
  "display_number": "******4321",
  "positions": […],
  "risk": {…},
  "tolerance": {…},
  "drift": 1.7,
  "sources": […],
  "teams": […]
}
Name Type Description
id int Account ID
external_id string Your account identifier
name string Account name
value string Account value
type string Account type .
tax_status string Account tax status. One of these values.
number string Account number
matching_model int Account strategy represented as Model Portfolio Id. You can find the desired model portfolio using the list or get endpoint. null when the account has no strategy.
strategy int Alias of matching_model, kept for integrations built on the original field name. It is returned with the same value and accepted on create and update. If both names are sent they must carry the same value, otherwise the request is rejected with a 400.
investor int Investor ID. A new account needs an investor or an advisor; an update cannot clear it.
advisor int Advisor ID. Ideally, you would provide the investor ID. However, if you don't have that information but you know who is the advisor that owns this account then you can pass the advisor ID. We will assign the account to the default_investor of the selected advisor.
positions[] List of Positions Objects Account holdings
risk Risk Object Account risk
tolerance Tolerance Object Account tolerance
drift float Drift between the risk and the tolerance overall scores
sources List of Sources Objects List of sources that are associated with the account
teams List of Teams Ids List of teams ids that are associated with the account
nickname string Advisor-facing display name. name is fed by the custodian and may be overwritten on sync; use nickname to rename.
inception_date date Date the account was opened (YYYY-MM-DD)
close_date date Date the account was closed; null while open
relationship_type string One of brokerage, advisory; "" or null clears it
retirement_category string Read only. One of non_retirement, ira, qualified, education, retirement_other, derived from type on create and whenever type changes.
held_away bool The account is not managed by the firm
excluded bool Left out of aggregations and PRISM rollups. Defaults to the value of held_away on create.
custodian string Custodian name from the StratiFi catalogue. The whole name or one of its alternative names must match, ignoring case (a fragment does not match); the canonical name is returned. "" or null clears it; an unknown name is a 400.
investment_objective string Name of one of your firm's standardized investment objectives; "" when unset. Exclusive with investment_objective_custom: sending both is a 400, and writing one clears the other.
investment_objective_custom string Free-text investment objective for firms without standardized objectives
exceptions_enabled bool Surveillance exceptions are raised for this account (default true)
clients_review_enabled bool The account is included in client reviews (default true)
created_at datetime Read only. When the account was created
updated_at datetime Read only. Last change to the account
provider string Read only. Integration that created the account (for example Stratifi API, Orion, Charles Schwab); null for accounts created in the app
integration_link_updated_at datetime Read only. Last time an integration updated the account
sync_status string Read only. Synchronisation state: ready, syncing or error (status is the PRISM score status)
sync_status_changed datetime Read only. When sync_status last changed
next_review_date date Read only. Next client review date for the account
display_name string Read only. nickname when set, otherwise the name with the number
display_number string Read only. Account number, masked when the firm masks numbers

Account Source Object Definition

Source Object

{
    {
        "id": "",
        "provider": "Stratifi API",
        "provider_id": "0",
        "created": "2024-07-08T09:39:07.103365Z",
        "modified": "2024-07-08T09:44:35.463377Z"
    }
}
Name Type Description
id string ID of the source
provider string Source provider
provider_id string Source provider ID
created string Source created date
modified string Source modified date

Account Tax Statuses

Value Description
taxable Taxable accounts
exempt Tax Exempt accounts
deferred Tax Deferred accounts

List Accounts

-request-type: GET

-request-url: /accounts/

List Accounts

curl "https://backend.stratifi.com/api/v1/accounts/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/accounts/?page=2",
  "previous": null,
  "results": [
    {
      "id": 1,
      "external_id": "act-1",
      "name": "John Doe Trust",
      "value": "1234567.89",
      "type": "100",
      "tax_status": "taxable",
      "number": "987654321",
      "investor": 1,
      "advisor": 1,
      "matching_model": 1,
      "strategy": 1,
      "positions": [ … ],
      "risk": { … },
      "tolerance": { … },
      "drift": 1.0,
      "sources": […],
      "teams": […]
    },
    …
  ]
}

Response Fields

Name Type Description
count int Total number of accounts
next string Link to next page of accounts
previous string Link to previous page of accounts
results Object List of account objects

Filtering Fields

Name Type Description
external_id string Your account identifier
investor int Investor ID
household int Household ID
source_id int Source ID
source_provider int Source provider ID
source_provider_name str Source provider Name

Get Account

Get Account

curl "https://backend.stratifi.com/api/v1/accounts/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "act-1",
  "name": "John Doe Trust",
  "value": "1234567.89",
  "type": "100",
  "tax_status": "tax-exempt",
  "number": "987654321",
  "investor": 1,
  "advisor": 1,
  "matching_model": 1,
  "strategy": 1,
  "positions": [ … ],
  "risk": { … },
  "tolerance": { … },
  "drift": 1.0,
  "sources": […],
  "teams": […]
}

-request-type: GET

-request-url: /accounts/<id>/

Response: The requested account object.

Create Account

Create Account

curl -X POST "https://backend.stratifi.com/api/v1/accounts/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "act-1",
    "name": "John Doe Trust",
    "value": "1234567.89",
    "type": "100",
    "tax_status": "tax-exempt",
    "number": "987654321",
    "investor": 1,
    "nickname": "Mom's brokerage",
    "custodian": "Schwab",
    "relationship_type": "advisory",
    "investment_objective": "Growth",
    "positions": [
      {
        "ticker": "SPY",
        "ticker_name": "SPDR S&P 500",
        "value": "823045.26"
      },
      {
        "ticker": "IBM",
        "ticker_name": "IBM",
        "value": "411522.63"
      },
      …
    ],
    "teams": [1]
  }'

{
  "id": 1,
  "external_id": "act-1",
  "name": "John Doe Trust",
  "value": "1234567.89",
  "type": "100",
  "tax_status": "tax-exempt",
  "number": "987654321",
  "investor": 1,
  "advisor": 1,
  "matching_model": 1,
  "strategy": 1,
  "positions": [ … ],
  "risk": { … },
  "tolerance": { … },
  "drift": 1.0,
  "sources": […],
  "teams": [1]
}

-request-type: POST

-request-url: /accounts/

Request Parameters

Parameter Type
name string Required
positions[] List of Positions Objects Required
value string Optional
type string Optional
tax_status string Optional
number string Optional
investor int Required unless advisor is sent
advisor int Required unless investor is sent
matching_model int Optional
strategy int Optional, alias of matching_model
external_id string Optional
nickname, inception_date, close_date, relationship_type, held_away, excluded see Account Object Optional
custodian string Optional, custodian name
investment_objective, investment_objective_custom string Optional. Sending both is a 400
exceptions_enabled, clients_review_enabled bool Optional

Response: The new account object.

Update Account

Update Account

curl -X PUT "https://backend.stratifi.com/api/v1/accounts/1/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "act-1",
    "name": "John Doe 401k",
    "value": "1234567.89",
    "type": "401",
    "tax_status": "tax-deferred",
    "number": "987654321",
    "investor": 1,
    "matching_model": 1,
    "positions": [
      {
        "ticker": "SPY",
        "ticker_name": "SPDR S&P 500",
        "value": "823045.26"
      },
      {
        "ticker": "IBM",
        "ticker_name": "IBM",
        "value": "411522.63"
      },
      …
    ],
    "teams": [1]
  }'

{
  "id": 1,
  "external_id": "act-1",
  "name": "John Doe Trust",
  "value": "1234567.89",
  "type": "100",
  "tax_status": "tax-deferred",
  "number": "987654321",
  "investor": 1,
  "advisor": 1,
  "matching_model": 1,
  "strategy": 1,
  "positions": [ … ],
  "risk": { … },
  "tolerance": { … },
  "drift": 1.0,
  "sources": […],
  "teams": [1]
}

-request-type: PUT/PATCH

-request-url: /accounts/<id>/

Request Parameters

Parameter Type
name string Required
positions[] List of Positions Objects Required
value string Optional
type [1] string Optional
tax_status [2] string Optional
number string Optional
investor int Optional
advisor [3] int Optional
matching_model [4] int Optional
strategy [4] int Optional, alias of matching_model
external_id string Optional
nickname, inception_date, close_date, relationship_type, held_away, excluded see Account Object Optional
custodian string Optional, custodian name
investment_objective, investment_objective_custom string Optional. Sending both is a 400
exceptions_enabled, clients_review_enabled bool Optional

Account Prism Score

Account Prism Score

curl "https://backend.stratifi.com/api/v1/accounts/11/prism_score/" -H "Authorization: Bearer {{ access-token }}"

{
  "scores": {…},
  "media": {…},
}

-request-type: GET

-request-url: /accounts/<id>/prism_score/

Response Fields

Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images

Model Portfolios

Model Portfolio Object Definition

Model Portfolio Object

{
  "id": 1,
  "external_id": "mp-1",
  "name": "80% Equities / 20% Fixed Income",
  "value": 100.0,
  "type": "Aggressive",
  "is_strategy": false,
  "is_benchmark": false,
  "visibility": "private",
  "company": 1,
  "created_at": "2026-01-15T14:02:11.482000Z",
  "updated_at": "2026-10-09T18:30:45.120000Z",
  "display_name": "80% Equities / 20% Fixed Income",
  "sync_status": "ready",
  "sync_status_changed": "2026-01-15T14:02:11.482000Z",
  "integration_link_updated_at": null,
  "is_security_origin": false,
  "security_origin": null,
  "source_account": null,
  "positions": [
    {
        "ticker": "AGG",
        "ticker_name": "iShares Core US Aggregate Bond",
        "value": 20.0
    },
    {
        "ticker": "SPY",
        "ticker_name": "SPDR S&P500 ETF Trust",
        "value": 80.0
    }
  ],
  "risk": {…},
  "sources": […],
  "teams": […]
}
Name Type Description
id int Model Portfolio ID
external_id string Your model identifier
name string Model Portfolio name
value string Model Portfolio value
type string Model Portfolio type
is_strategy bool Is this model a strategy?
is_benchmark bool The model is used as a benchmark (default false)
visibility string public shares the model with the whole firm; private (default) limits it to its owner and teams. Managers see every model of the firm
company int Company ID. An advisor can use their own company when they may add models
created_at datetime Read only. When the model was created
updated_at datetime Read only. Last change to the model
display_name string Read only. Name shown in the app
sync_status string Read only. Integration sync state: ready, syncing or error
sync_status_changed datetime Read only. When sync_status last changed
integration_link_updated_at datetime Read only. Last change to any of the model's integration links; null without links
is_security_origin bool Read only. The model was generated from a security (for example an ETF or mutual fund)
security_origin string Read only. Ticker of the security the model was generated from; null otherwise
source_account int Read only. ID of the account the model was replicated from; null otherwise
positions[] List of Positions Objects Model Portfolio holdings
risk Risk Object Model Portfolio risk
sources List of Sources Objects List of sources that are associated with the Model Portfolio
teams List of Teams Ids Team the model is shared with while private (at most one id)

Model Portfolios Source Object Definition

Source Object

{
    {
        "id": "",
        "provider": "Stratifi API",
        "provider_id": "0",
        "created": "2024-07-08T09:39:07.103365Z",
        "modified": "2024-07-08T09:44:35.463377Z"
    }
}
Name Type Description
id string ID of the source
provider string Source provider
provider_id string Source provider ID
created string Source created date
modified string Source modified date

List Model Portfolios

List Model Portfolios

curl "https://backend.stratifi.com/api/v1/models/" -H "Authorization: Bearer {{ access-token }}"

{
  "count": 10,
  "next": "https://backend.stratifi.com/api/v1/models/?page=2",
  "previous": null,
  "results": [
    {
      "id": 1,
      "external_id": "mp-1",
      "name": "80% Equities / 20% Fixed Income",
      "value": 100.0,
      "type": "Aggressive",
      "is_strategy": false,
      "company": 1,
      "positions": [ … ],
      "risk": { … },
      "sources": […],
      "teams": […]
    },
    …
  ]
}

-request-type: GET

-request-url: /models/

Response Fields

Name Type Description
count int Total number of models
next string Link to next page of models
previous string Link to previous page of models
results Object List of model objects

Filtering Fields

Name Type Description
external_id string Your model identifier
source_id int Source ID
source_provider int Source provider ID
source_provider_name str Source provider Name

Get Model Portfolio

Get Model Portfolio

curl "https://backend.stratifi.com/api/v1/models/1/" -H "Authorization: Bearer {{ access-token }}"

{
  "id": 1,
  "external_id": "mp-1",
  "name": "80% Equities / 20% Fixed Income",
  "value": 100.0,
  "type": "Aggressive",
  "is_strategy": false,
  "company": 1,
  "positions": [ … ],
  "risk": { … },
  "sources": […],
  "teams": […]
}

-request-type: GET

-request-url: /models/<id>/

Response: The requested model object.

Create Model Portfolio

Create Model Portfolio

curl -X POST "https://backend.stratifi.com/api/v1/models/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "mp-1",
    "name": "80% Equities / 20% Fixed Income",
    "value": 100.0,
    "type": "Aggressive",
    "is_strategy": false,
    "company": 1,
    "positions": [
      {
          "ticker": "AGG",
          "ticker_name": "iShares Core US Aggregate Bond",
          "value": 20.0
      },
      {
          "ticker": "SPY",
          "ticker_name": "SPDR S&P500 ETF Trust",
          "value": 80.0
      }
    ],
    "visibility": "private",
    "teams": [1]
  }'

{
  "id": 1,
  "external_id": "mp-1",
  "name": "80% Equities / 20% Fixed Income",
  "value": 100.0,
  "type": "Aggressive",
  "is_strategy": false,
  "company": 1,
  "positions": [ … ],
  "risk": { … },
  "sources": […],
  "teams": [1]
}

-request-type: POST

-request-url: /models/

Request Parameters

Parameter Type
name string Required
positions[] List of Positions Objects Required
value string Optional
type string Optional
is_strategy bool Optional
is_benchmark bool Optional
visibility string (public or private) Optional
teams List of Teams Ids (at most one) Optional
company int Required
advisor int Optional. Defaults to the caller for advisor tokens; a manager can name a colleague
external_id int Optional

Response: The new model object.

Update Model Portfolio

Update Model Portfolio

curl -X PUT "https://backend.stratifi.com/api/v1/models/1/" -H "Authorization: Bearer {{ access-token }}" \
  -d '{
    "external_id": "mp-1",
    "name": "70% Equities / 30% Fixed Income",
    "value": 100.0,
    "type": "Moderate",
    "is_strategy": true,
    "company": 1,
    "positions": [
      {
          "ticker": "AGG",
          "ticker_name": "iShares Core US Aggregate Bond",
          "value": 30.0
      },
      {
          "ticker": "SPY",
          "ticker_name": "SPDR S&P500 ETF Trust",
          "value": 70.0
      }
    ],
    "visibility": "private",
    "teams": [1]
  }'

{
  "id": 1,
  "external_id": "mp-1",
  "name": "80% Equities / 20% Fixed Income",
  "value": 100.0,
  "type": "Moderate",
  "is_strategy": true,
  "company": 1,
  "positions": [ … ],
  "risk": { … },
  "sources": […],
  "teams": [1]
}

-request-type: PUT/PATCH

-request-url: /models/<id>/

Request Parameters

Parameter Type
name string Required
positions[] List of Positions Objects Required
value string Optional
type * string Optional
is_strategy bool Optional
is_benchmark bool Optional
visibility string (public or private) Optional
teams List of Teams Ids (at most one) Optional
company int Optional
external_id int Optional

Model Portfolio Prism Score

Model Portfolio Prism Score

curl "https://backend.stratifi.com/api/v1/models/11/prism_score/" -H "Authorization: Bearer {{ access-token }}"

{
  "scores": {…},
  "media": {…},
}

-request-type: GET

-request-url: /models/<id>/prism_score/

Response Fields

Name Type Description
scores Scores Factors Risk score factors
media Scores Images Risk score factors images
status Scores Status Risk score status

Securities

Securities are read-only: look one up by ticker or by cusip; the lookup ignores case. You only find the securities you can see in the StratiFi app:

A custom security you cannot see answers 404, the same as an unknown symbol.

Security Object

{
    "id": 10423,
    "ticker": "VFIAX",
    "cusip": "922908710",
    "isin": "US9229087104",
    "figi": "BBG000BHTMY7",
    "ticker_name": "Vanguard 500 Index Admiral",
    "description": "Tracks the S&P 500 index.",
    "type": "Equity",
    "subtype": "US",
    "sector": "Large Cap",
    "security_type": "Mutual Fund",
    "share_class": "Admiral",
    "is_retirement": false,
    "fund_family": "Vanguard",
    "is_custom": false,
    "is_sma": false,
    "expense_ratio": 0.0004,
    "expense_ratio_updated_at": "2026-09-01T06:00:00Z",
    "distribution_yield": 0.0125,
    "distribution_yield_updated_at": "2026-09-01T06:00:00Z",
    "management_fee": null,
    "minimum_purchase_amount": 3000.0,
    "beta": 1.0,
    "marketcap": null,
    "price_to_book": null,
    "prism_score": {
        "concentrated": 10,
        "overall": 9.3,
        "tail": 9,
        "correlation": 6,
        "volatility": 10,
        "upside_capture_ratio": 1.33886097996,
        "downside_capture_ratio": 0.863528362089
    },
    "created": "2019-04-02T17:21:05Z",
    "modified": "2026-10-01T06:00:00Z"
}
Name Type Description
id int Security ID
ticker string Asset symbol
cusip string Asset cusip
isin string ISIN identifier
figi string OpenFIGI identifier confirmed when the security was classified
ticker_name string Asset name
description string Long description; "" when unknown
type string Asset type
subtype string Asset subtype
sector string Asset sector
security_type string Security type
share_class string Share class; "" when unknown
is_retirement bool The share class is a retirement share class
fund_family string Fund family name, null when unknown
is_custom bool Custom security created by a firm
is_sma bool Represents a separately managed account
expense_ratio number Expense ratio as a decimal fraction (0.0004 is 0.04%)
expense_ratio_updated_at datetime When the expense ratio last changed, null if it never did
distribution_yield number Distribution yield as a decimal fraction
distribution_yield_updated_at datetime When the distribution yield last changed, null if it never did
management_fee number Management fee as a decimal fraction
minimum_purchase_amount number Minimum initial investment
beta number Beta
marketcap int Market capitalization
price_to_book number Price to book ratio
prism_score object PRISM score summary, null while the security is unscored
prism_score.overall float Overall risk score
prism_score.concentrated float Concentrated risk score
prism_score.tail float Tail risk score
prism_score.volatility float Volatility risk score
prism_score.correlation float Correlation risk score
prism_score.downside_capture_ratio float Asset downside capture vs the market
prism_score.upside_capture_ratio float Asset upside capture vs the market
created datetime When the security was added to StratiFi
modified datetime When the security was last changed

Get security by ticker

Get security by ticker

curl "https://backend.stratifi.com/api/v1/securities/ticker/GOOGL" \
  -H "Authorization: Bearer {{ access-token }}"

-request-type: GET

-request-url: /securities/ticker/<ticker>

Get security by cusip

Get security by cusip

curl "https://backend.stratifi.com/api/v1/securities/cusip/02079K305" \
  -H "Authorization: Bearer {{ access-token }}"

-request-type: GET

-request-url: /securities/cusip/<cusip>

Surveillance Exceptions

Surveillance exceptions are the monitoring alerts StratiFi raises on accounts, investors and households: drift, share class, cash concentration, portfolio concentration, trading activity and IPS drift. They are read-only through the API.

You see the same exceptions as in the StratiFi app: an advisor token sees the exceptions on the accounts, investors and households visible to that advisor; an API-user token sees the exceptions on the objects it owns.

Surveillance Exception object definition

Surveillance Exception Object

{
    "id": 81234,
    "cause": "share_class",
    "cause_id": 2,
    "status": "to_do",
    "status_changed": "2026-10-01T06:00:00Z",
    "target_type": "account",
    "target_type_id": 38,
    "target_id": 51234,
    "trigger_type": "position",
    "trigger_type_id": 41,
    "trigger_id": 98213,
    "extra_data": {"newest_position_data": {…}},
    "created": "2026-10-01T06:00:00Z",
    "modified": "2026-10-01T06:00:00Z",
    "start": "2026-10-01T06:00:00Z",
    "end": null,
    "age": 9,
    "snoozed_until": null
}
Name Type Description
id int Surveillance exception ID
cause string One of these causes
cause_id int Numeric id of the cause
status string One of these statuses
status_changed datetime When the status last changed
target_type string Kind of object the exception is on: account, investor or household
target_type_id int Numeric id of that kind of object. It differs between environments; use target_type in your logic
target_id int ID of the account, investor or household
trigger_type string Kind of object that triggered it: position for share class exceptions (see positions), otherwise the target itself
trigger_type_id int Numeric id of that kind of object. It differs between environments; use trigger_type in your logic
trigger_id int ID of the triggering object
extra_data object Cause-specific metrics recorded when the exception was raised
created datetime When the exception was created
modified datetime When the exception was last changed
start datetime When the exception opened
end datetime When it was snoozed, resolved or closed; null while open
age int Days open (from start to end, or to now while open)
snoozed_until datetime When a snoozed exception returns to to_do; null otherwise

Surveillance Exception causes

cause cause_id
drift 1
share_class 2
cash_concentration 3
portfolio_concentration 4
trading_activity 5
ips_drift 6

Surveillance Exception statuses

status Description
to_do Open, not yet worked on
in_progress Open, an advisor is working on it
snoozed Open, hidden until snoozed_until
resolved Finished by StratiFi: the object is healthy again
closed Finished by an advisor, who dismissed it

List surveillance exceptions

List Surveillance Exceptions

curl "https://backend.stratifi.com/api/v1/surveillance-exceptions/?status=to_do,in_progress&target_type=account" \
  -H "Authorization: Bearer {{ access-token }}"
{
    "count": 42,
    "next": "https://backend.stratifi.com/api/v1/surveillance-exceptions/?page=2&status=to_do,in_progress&target_type=account",
    "previous": null,
    "total_pages": 3,
    "results": [
        {...Surveillance Exception Object},
        {...Surveillance Exception Object}
    ]
}

-request-type: GET

-request-url: /surveillance-exceptions/

Results are paginated: page and page_size (default 20, at most 100). There is no option to return every result at once.

Response Fields

Name Type Description
count int Total number of exceptions
next string Link to the next page
previous string Link to the previous page
total_pages int Number of pages
results object list List of surveillance exception objects

Filtering Fields

Name Type Description
status string One or more statuses, comma separated (to_do,in_progress,snoozed are the open ones)
target_type string account, investor or household
target_id int ID of the target (use with target_type)
trigger_type string account, investor, household or position
trigger_id int ID of the trigger (use with trigger_type)
created_after, created_before datetime Created at or after / at or before (ISO 8601)
start_after, start_before datetime Opened at or after / at or before
end_after, end_before datetime Finished at or after / at or before
status_changed_after, status_changed_before datetime Status changed at or after / at or before
ordering string id, created, modified, status_changed, start, end or age; prefix - for descending. Default -id (newest first)

An unknown status, target_type or trigger_type value is rejected with a 400.

Get surveillance exception by id

Get Surveillance Exception by id

curl "https://backend.stratifi.com/api/v1/surveillance-exceptions/81234/" \
  -H "Authorization: Bearer {{ access-token }}"

-request-type: GET

-request-url: /surveillance-exceptions/<exception_id>/

Returns a surveillance exception object, or 404 when it does not exist or is not visible to you.

Changelog