How to Filter Data
WealthTech API supports both simple and complex filtering. A simple filter is a key-value pair. A complex filter is a structured json object that allows you to join multiple conditions together using one of the several operators.
All resources that support complex filtering have a .../filter
endpoint where you can deliver a json body in a POST
request.
Using Simple Filters
Simple filters are key-value pairs that can be provided as a query string parameters. For example:
GET .../api-section/resource-name?field=value
Or as a json payload:
POST .../api-section/resource-name
{
"field": "value"
}
Request Examples
- Here's how you can filter on Accounts that are tax deferred using query string parameters:
curl --request GET \
--url 'https://api.bridgeft.com/v2/account-management/accounts?is_tax_deferred=true' \
--header 'Authorization: Bearer {YOUR_TOKEN}'
And as a json payload to the filter endpoint:
curl --request POST \
--url 'https://api.bridgeft.com/v2/account-management/accounts/filter' \
--header 'Authorization: Bearer {YOUR_TOKEN}' \
--header 'Content-Type: application/json' \
--data '
{
"is_tax_deferred": true
}
'
- Another example is how to get an Account with the name "Jane Smith"
curl --request POST \
--url 'https://api.bridgeft.com/v2/account-management/accounts/filter' \
--header 'Authorization: Bearer {YOUR_TOKEN}' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Jane Smith"
}
'
A key-value expression is sufficient in these cases because the field being filtered can only take on two values: true or false; or we are filtering by the exact match. However more complex use cases arise from other types of data. You might want to filter a string field for the inclusion of a value, or whether it starts or ends with a value. Likewise you might want to filter numeric data for being within a certain range or above / below a certain value. These use cases are supported by complex filters described in the next section.
Complex Filters
Complex filters enable multiple conditions and comparison operators. These filters are expressed as json and must be provided as a POST
request to the .../filter
endpoint of a resource. If you find that there is no .../filter
endpoint for the resource (you can check that out from the API Reference page), that means this API doesn't support the complex filtering.
The typical payload structure is:
{
"field_name": {
"any_or_all": "all", // required only if more than 1 condition is provided
"conditions": [{
"value": <value1>,
"op": <comparison operator>
}, {
"value": <value2>,
"op": <comparison operator>,
}, {
...
}]
}
}
Comparison operators depend on the data type of field_name
:
"Op" Value | Description | Supported Data Types |
---|---|---|
eq | Equals Case sensitive for strings | String, Integer, Float, Date/time |
neq | Not equals Case sensitive for strings | String, Integer, Float, Date/time |
iexact | Case insensitive match | String |
contains | Contains provided value, case sensitive | String |
icontains | Contains provided value, case insensitive | String |
startswith | Starts with provided value, case sensitive | String |
istartswith | Starts with provided value, case insensitive | String |
endswith | Ends with provided value, case sensitive | String |
iendswith | Ends with provided value, case insensitive | String |
lt | Less than provided value | Integer, Float, Date/time |
lte | Less than or equal to provided value | Integer, Float, Date/time |
gt | Greater than provided value | Integer, Float, Date/time |
gte | Greater than or equal to provided value | Integer, Float, Date/time |
Request Example
Following request will return all Accounts those name is ending with "Smith":
curl --request POST \
--url 'https://api.bridgeft.com/v2/account-management/accounts/filter' \
--header 'Authorization: Bearer {YOUR_TOKEN}' \
--header 'Content-Type: application/json' \
--data '
{
"name": {
"conditions": [{
"value": "Smith",
"op": "endswith"
}]
}
}
'
Joining Conditions
The any_or_all
field is optional when specifying a single condition. It's required when multiple conditions are provided and, as the name suggests, can take on the value of all
or any
, interpreted as:
all
will AND the conditions together when querying the database. All the provided conditions must be true among the results.any
will OR the conditions together when querying the database. Any of the conditions must be true among the results.
Mixing with Simple Filters
A complex filter is a superset of a simple filter. Instead of field_name
providing the filter json object above it can simply provide a value:
{
"field_name": <value>
}
Here field_name
will be consumed as a simple filter, requiring an exact match to the data in the database to be true. This way you can mix simple with complex filters:
{
"field_1": "simple value",
"field_2": {
"conditions": [{
"value": 5,
"op": "gte"
}]
}
}
Request Example
The following request with combined filters can be used to get positions with reported realized gains/losses of at least $50 for the given advisor and a security:
curl --request POST \
--url 'https://api.bridgeft.com/v2/data/source/positions/filter?pager.limit=100&pager.page=1' \
--header 'Authorization: Bearer {YOUR_TOKEN}' \
--header 'Content-Type: application/json' \
--data '
{
"reported_date": "2023-06-21",
"advisor_code": "1234",
"security_id": 5678,
"reported_unrealized_gain_loss": [{
"value": 50,
"op": "gte"
}]
}
'
Filtering with Range of Values
You can use complex filters to query the data within the range of values. For example, the following query will find all objects whose field_name
is between 5 and 150, inclusive of those values:
{
"field_name": {
"any_or_all": "all",
"conditions": [{
"value": 5,
"op": "gte",
}, {
"value": 150,
"op": "lte"
}]
}
}
Request Example
Getting all Account Balances which are in between $1,000 and $10,000
curl --request POST \
--url 'https://api.bridgeft.com/v2/data/source/account-balances/filter' \
--header 'Authorization: Bearer {YOUR_TOKEN}' \
--header 'Content-Type: application/json' \
--data '
{
"beginning_period_value": {
"any_or_all": "all",
"conditions": [{
"value": 1000,
"op": "gte"
}, {
"value": 10000,
"op": "lte"
}]
}
'
Updated about 1 year ago