Skip to content

Latest commit

 

History

History
8471 lines (5824 loc) · 132 KB

File metadata and controls

8471 lines (5824 loc) · 132 KB

Reference

Attributes

client.attributes.post_attribute(...)

📝 Description

Adds a new attribute to an entity in the project

🔌 Usage

from sayari import Sayari
from sayari.attributes import AddAttribute

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.attributes.post_attribute(
    request=AddAttribute(
        entity="zq04axX2dLn9tE6W6Q8Qhg",
        type="address",
        value={
            "street1": "1600 Pennsylvania Avenue NW",
            "city": "Washington DC",
            "state": "Washington DC",
            "postalCode": "20500",
            "country": "US",
        },
        to_date="2024-04-30",
        from_date="2024-01-01",
        date="2024-02-15",
    ),
)

⚙️ Parameters

request: AddAttribute

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.attributes.patch_attribute(...)

📝 Description

This endpoint is in beta and is subject to change. It is provided for early access and testing purposes only. Updates an existing Attribute

🔌 Usage

from sayari import Sayari
from sayari.attributes import UpdateAttribute

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.attributes.patch_attribute(
    attribute_id="enEwNGF4WDJkTG45dEU2VzZROFFoZ3xhZGRyZXNzfDBwbEVCMHxVNzhzN21yOUVFTThIZ3pwREM3UDFB",
    request=UpdateAttribute(
        value={
            "street1": "1600 Pennsylvania Avenue NW",
            "city": "Washington DC",
            "state": "Washington DC",
            "postalCode": "20500",
            "country": "US",
        },
        to_date="2024-04-30",
        from_date="2024-01-01",
        date="2024-02-15",
    ),
)

⚙️ Parameters

attribute_id: str

request: UpdateAttribute

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.attributes.delete_attribute(...)

📝 Description

This endpoint is in beta and is subject to change. It is provided for early access and testing purposes only. Delete an existing Attribute

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.attributes.delete_attribute(
    attribute_id="enEwNGF4WDJkTG45dEU2VzZROFFoZ3xhZGRyZXNzfDBwbEVCMHxVNzhzN21yOUVFTThIZ3pwREM3UDFB",
)

⚙️ Parameters

attribute_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Auth

client.auth.get_token(...)

📝 Description

Hit the auth endpoint to get a bearer token

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.auth.get_token(
    client_id="your client_id here",
    client_secret="your client_secret here",
)

⚙️ Parameters

client_id: str

client_secret: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Entity

client.entity.get_entity(...)

📝 Description

To retrieve a L1 Due Dilligence PDF Report. Include 'Accept: application/pdf' in request headers. Retrieve an entity profile from the database based on the entity ID. This endpoint returns the full profile, entity_summary returns the same payload minus relationships.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.entity.get_entity(
    id="mGq1lpuqKssNWTjIokuPeA",
    attributes_name_limit=1,
    attributes_address_limit=1,
    attributes_country_limit=1,
    attributes_additional_information_limit=1,
    attributes_business_purpose_limit=1,
    attributes_company_type_limit=1,
    attributes_identifier_limit=1,
    attributes_status_limit=1,
    relationships_limit=1,
    possibly_same_as_limit=1,
    referenced_by_limit=1,
)

⚙️ Parameters

id: str — Unique identifier of the entity

attributes_additional_information_next: typing.Optional[str] — The pagination token for the next page of attribute additional_information.

attributes_additional_information_prev: typing.Optional[str] — The pagination token for the previous page of attribute additional_information.

attributes_additional_information_limit: typing.Optional[int] — Limit total values returned for attribute additional_information. Defaults to 100.

attributes_address_next: typing.Optional[str] — The pagination token for the next page of attribute address.

attributes_address_prev: typing.Optional[str] — The pagination token for the previous page of attribute address.

attributes_address_limit: typing.Optional[int] — Limit total values returned for attribute address. Defaults to 100.

attributes_business_purpose_next: typing.Optional[str] — The pagination token for the next page of attribute business_purpose.

attributes_business_purpose_prev: typing.Optional[str] — The pagination token for the previous page of attribute business_purpose.

attributes_business_purpose_limit: typing.Optional[int] — Limit total values returned for attribute business_purpose. Defaults to 100.

attributes_company_type_next: typing.Optional[str] — The pagination token for the next page of attribute company_type.

attributes_company_type_prev: typing.Optional[str] — The pagination token for the previous page of attribute company_type.

attributes_company_type_limit: typing.Optional[int] — Limit total values returned for attribute company_type. Defaults to 100.

attributes_country_next: typing.Optional[str] — The pagination token for the next page of attribute country.

attributes_country_prev: typing.Optional[str] — The pagination token for the previous page of attribute country.

attributes_country_limit: typing.Optional[int] — Limit total values returned for attribute country. Defaults to 100.

attributes_identifier_next: typing.Optional[str] — The pagination token for the next page of attribute identifier.

attributes_identifier_prev: typing.Optional[str] — The pagination token for the previous page of attribute identifier.

attributes_identifier_limit: typing.Optional[int] — Limit total values returned for attribute identifier. Defaults to 100.

attributes_name_next: typing.Optional[str] — The pagination token for the next page of attribute name.

attributes_name_prev: typing.Optional[str] — The pagination token for the previous page of attribute name.

attributes_name_limit: typing.Optional[int] — Limit total values returned for attribute name. Defaults to 100.

attributes_status_next: typing.Optional[str] — The pagination token for the next page of attribute status.

attributes_status_prev: typing.Optional[str] — The pagination token for the previous page of attribute status.

attributes_status_limit: typing.Optional[int] — Limit total values returned for attribute status. Defaults to 100.

relationships_next: typing.Optional[str] — The pagination token for the next page of relationship results

relationships_prev: typing.Optional[str] — The pagination token for the previous page of relationship results

relationships_limit: typing.Optional[int] — Limit total relationship values. Defaults to 50.

relationships_type: typing.Optional[Relationships] — Filter relationships to relationship type, e.g. director_of or has_shareholder

relationships_sort: typing.Optional[str] — Sorts relationships by As Of date or Shareholder percentage, e.g. date or -shares

relationships_start_date: typing.Optional[dt.date] — Filters relationships to after a date

relationships_end_date: typing.Optional[dt.date] — Filters relationships to before a date

relationships_min_shares: typing.Optional[int] — Filters relationships to greater than or equal to a Shareholder percentage

relationships_country: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filters relationships to a list of countries

relationships_arrival_country: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filters shipment relationships to a list of arrival countries

relationships_arrival_state: typing.Optional[str] — Filters shipment relationships to an arrival state

relationships_arrival_city: typing.Optional[str] — Filters shipment relationships to an arrival city

relationships_departure_country: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filters shipment relationships to a list of departure countries

relationships_departure_state: typing.Optional[str] — Filters shipment relationships to a departure state

relationships_departure_city: typing.Optional[str] — Filters shipment relationships to a departure city

relationships_partner_name: typing.Optional[str] — Filters shipment relationships to a trade partner name

relationships_partner_risk: typing.Optional[typing.Union[Risk, typing.Sequence[Risk]]] — Filters shipment relationships to a trade partner risk tag

relationships_hs_code: typing.Optional[str] — Filters shipment relationships to an HS code

possibly_same_as_next: typing.Optional[str] — The pagination token for the next page of possibly same entities.

possibly_same_as_prev: typing.Optional[str] — The pagination token for the previous page of possibly same entities.

possibly_same_as_limit: typing.Optional[int] — Limit total possibly same as entities. Defaults to 100.

referenced_by_next: typing.Optional[str] — The pagination token for the next page of the entity's referencing records

referenced_by_prev: typing.Optional[str] — The pagination token for the previous page of the entity's referencing records

referenced_by_limit: typing.Optional[int] — Limit totals values returned for entity's referencing records. Defaults to 100.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.entity.entity_summary(...)

📝 Description

The Entity Summary endpoint returns a similar payload, minus relationships.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.entity.entity_summary(
    id="mGq1lpuqKssNWTjIokuPeA",
)

⚙️ Parameters

id: str — Unique identifier of the entity

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Info

client.info.get_usage(...)

📝 Description

The usage endpoint provides a simple interface to retrieve information on usage made by your API account. This includes both views per API path and credits consumed. The time period for the usage query is also specified in the response and whether or not this includes total usage.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.info.get_usage()

⚙️ Parameters

from_: typing.Optional[dt.date] — An ISO 8601 encoded date string indicating the starting time period to obtain usage stats. In the format YYYY-MM-DD

to: typing.Optional[dt.date] — An ISO 8601 encoded date string indicating the ending time period to obtain usage stats. In the format YYYY-MM-DD

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.info.get_history(...)

📝 Description

The history endpoint return a user's event history.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.info.get_history()

⚙️ Parameters

events: typing.Optional[typing.Union[str, typing.Sequence[str]]] — The type of events to filter on.

from_: typing.Optional[dt.date] — An ISO 8601 encoded date string indicating the starting time period for the events. In the format YYYY-MM-DD

to: typing.Optional[dt.date] — An ISO 8601 encoded date string indicating the ending time period for the events. In the format YYYY-MM-DD

size: typing.Optional[int] — Size to limit number of events returned

token: typing.Optional[str] — Pagination token to retrieve the next page of results

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Metadata

client.metadata.metadata()

📝 Description

Get metadta about the api, both its versions, which releases are present, and the identity of the authenticated user.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.metadata.metadata()

⚙️ Parameters

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

NegativeNews

client.negative_news.negative_news(...)

📝 Description

This endpoint is in beta and subject to change Screens entities against news articles and public records to identify risk-relevant content. Leverages machine learning to detect and classify risks across various domains. Provides detailed article metadata with risk assessments and direct source references.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.negative_news.negative_news(
    name="Alameda Research",
    topic="financial",
)

⚙️ Parameters

name: str — Target entity name for adverse media screening.

topic: typing.Optional[Topics] — Risk category filter for targeted screening. Each topic represents a distinct risk domain (e.g., environmental for environmental violations, financial for financial misconduct).

until: typing.Optional[dt.date] — Date cutoff for article inclusion in YYYY-MM-DD format. If provided, only articles published after this date will be included in results.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Notifications

client.notifications.project_notifications(...)

📝 Description

Legacy endpoint. New integrations should contact Sayari for best practices. The Project Notifications endpoint returns a list of notifications on all entities saved to a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.notifications.project_notifications(
    id="0oZnoG",
    limit=20,
    sort="-date",
)

⚙️ Parameters

id: str — Unique identifier of the project

limit: typing.Optional[int] — Limit total notifications in the response. Defaults to 100.

offset: typing.Optional[int] — Offset which notifications are returned. Defaults to 0.

sort: typing.Optional[NotificationsSortField]

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.notifications.resource_notifications(...)

📝 Description

Legacy endpoint. New integrations should contact Sayari for best practices. The Resource Notifications endpoint returns a list of notifications for a saved entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.notifications.resource_notifications(
    id="03ePyj",
    limit=20,
)

⚙️ Parameters

id: str — Unique identifier of the resource

limit: typing.Optional[int] — Limit total notifications in the response. Defaults to 100.

offset: typing.Optional[int] — Offset which notifications are returned. Defaults to 0.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.notifications.delete_project_notifications(...)

📝 Description

Legacy endpoint. New integrations should contact Sayari for best practices. Deletes all notifications from a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.notifications.delete_project_notifications(
    project_id="YWmNKV",
)

⚙️ Parameters

project_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.notifications.delete_entity_notifications(...)

📝 Description

Legacy endpoint. New integrations should contact Sayari for best practices. Deletes notifications for saved resources of an entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.notifications.delete_entity_notifications(
    entity_id="N0xLDy4wcud-M1ZtwdsvRA",
)

⚙️ Parameters

entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.notifications.delete_resource_notifications(...)

📝 Description

Legacy endpoint. New integrations should contact Sayari for best practices. Deletes notifications for a saved resource.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.notifications.delete_resource_notifications(
    resource_id="oGxxqG",
)

⚙️ Parameters

resource_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Ontology

client.ontology.get_ontology()

📝 Description

Get ontology data for all resource types.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_ontology()

⚙️ Parameters

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_attributes(...)

📝 Description

Get attributes from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_attributes(
    id=["additional_information"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Attributes]] — Attribute Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_countries(...)

📝 Description

Get countries from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_countries(
    id=["USA"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Country]] — Country Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_currencies(...)

📝 Description

Get currencies from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_currencies(
    id=["USD"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Currency]] — Currency Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_entity_types(...)

📝 Description

Get entity types from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_entity_types(
    id=["aircraft"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Entities]] — Entity type Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_enums(...)

📝 Description

Get enums from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_enums(
    id=["address_type"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[str]] — Enum Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_hs_codes(...)

📝 Description

Get HS codes from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_hs_codes(
    code=["1503"],
)

⚙️ Parameters

code: typing.Optional[typing.Sequence[str]] — HS code filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_identifiers(...)

📝 Description

Get identifiers from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_identifiers(
    id=["aer_free_zone_license"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[IdentifierType]] — Identifier Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_languages(...)

📝 Description

Get languages from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_languages(
    id=["en"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Language]] — Language Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_regions(...)

📝 Description

Get regions from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_regions(
    id=["usa_&_canada"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[str]] — Region Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_relationships(...)

📝 Description

Get relationships from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_relationships(
    id=["auditor_of"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Relationships]] — Relationship Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_risk_factors(...)

📝 Description

Get risk factors from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_risk_factors(
    id=["psa_owner_of_ofac_fto_sanctioned"],
    risk_category=["sanctions"],
    level=["high"],
    risk_type=["network"],
    enabled=True,
    visible=True,
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[Risk]] — Risk factor Id filter.

risk_category: typing.Optional[typing.Sequence[RiskCategory]] — Risk category filter.

level: typing.Optional[typing.Sequence[RiskLevel]] — Risk level filter.

risk_type: typing.Optional[typing.Sequence[str]] — Risk type filter.

enabled: typing.Optional[bool] — Risk enabled filter.

visible: typing.Optional[bool] — Risk visible filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_sources(...)

📝 Description

Get sources from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_sources(
    id=["e85d865943ee6d8369307569d2ad9de0"],
    country=["XXX"],
    source_type=["adverse_media_/_negative_news_data"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[str]] — Source Id filter.

country: typing.Optional[typing.Sequence[Country]] — Source country filter.

source_type: typing.Optional[typing.Sequence[str]] — Source type filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.ontology.get_source_types(...)

📝 Description

Get source types from ontology data.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.ontology.get_source_types(
    id=["adverse_media_/_negative_news_data"],
)

⚙️ Parameters

id: typing.Optional[typing.Sequence[str]] — Source type Id filter.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

ProjectEntityAttributes

client.project_entity_attributes.get_project_entity_attributes(...)

📝 Description

Retrieves all attributes for a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_attributes.get_project_entity_attributes(
    project_id="V03eYM",
    project_entity_id="BG72YW",
)

⚙️ Parameters

project_id: str

project_entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_attributes.create_project_entity_attribute(...)

📝 Description

Creates a new attribute for a project entity.

🔌 Usage

from sayari import Sayari
from sayari.project_entity_attributes import CreateProjectEntityAttributeRequest

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_attributes.create_project_entity_attribute(
    project_id="V03eYM",
    project_entity_id="BG72YW",
    request=CreateProjectEntityAttributeRequest(
        field="custom_phone",
        value="+1-555-123-4567",
        match_resolution=False,
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

request: CreateProjectEntityAttributeRequest

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_attributes.update_project_entity_attribute(...)

📝 Description

Updates a specific attribute for a project entity.

🔌 Usage

from sayari import Sayari
from sayari.project_entity_attributes import UpdateProjectEntityAttributeRequest

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_attributes.update_project_entity_attribute(
    project_id="V03eYM",
    project_entity_id="BG72YW",
    attribute_id="xG8wYP",
    request=UpdateProjectEntityAttributeRequest(
        field="name",
        value="updated name",
        match_resolution=True,
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

attribute_id: str

request: UpdateProjectEntityAttributeRequest

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_attributes.delete_project_entity_attribute(...)

📝 Description

Deletes a specific attribute for a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_attributes.delete_project_entity_attribute(
    project_id="project_id",
    project_entity_id="project_entity_id",
    attribute_id="attribute_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

attribute_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

ProjectEntitySupplyChainSnapshots

client.project_entity_supply_chain_snapshots.get_project_entity_supply_chain_snapshots(...)

📝 Description

Retrieves all supply chain snapshots for a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_supply_chain_snapshots.get_project_entity_supply_chain_snapshots(
    project_id="V03eYM",
    project_entity_id="BG72YW",
)

⚙️ Parameters

project_id: str

project_entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_supply_chain_snapshots.get_project_entity_supply_chain_snapshot_by_id(...)

📝 Description

Retrieves a specific supply chain snapshot by ID for a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_supply_chain_snapshots.get_project_entity_supply_chain_snapshot_by_id(
    project_id="V03eYM",
    project_entity_id="BG72YW",
    snapshot_id="sN4p2K",
)

⚙️ Parameters

project_id: str

project_entity_id: str

snapshot_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_supply_chain_snapshots.create_project_entity_supply_chain_snapshot(...)

📝 Description

Creates a new supply chain snapshot for a project entity.

🔌 Usage

from sayari import Sayari
from sayari.project_entity_supply_chain_snapshots import (
    CreateProjectEntitySupplyChainSnapshotRequest,
)

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_supply_chain_snapshots.create_project_entity_supply_chain_snapshot(
    project_id="V03eYM",
    project_entity_id="BG72YW",
    request=CreateProjectEntitySupplyChainSnapshotRequest(
        label="Q1 2024 Supply Chain Analysis",
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

request: CreateProjectEntitySupplyChainSnapshotRequest

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity_supply_chain_snapshots.delete_project_entity_supply_chain_snapshot_by_id(...)

📝 Description

Deletes a specific supply chain snapshot by ID for a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity_supply_chain_snapshots.delete_project_entity_supply_chain_snapshot_by_id(
    project_id="project_id",
    project_entity_id="project_entity_id",
    snapshot_id="snapshot_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

snapshot_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

ProjectEntity

client.project_entity.create_project_entity(...)

📝 Description

The resolution endpoints allow users to search for matching entities against a provided list of attributes. The endpoint is similar to the search endpoint, except it's tuned to only return the best match so the client doesn't need to do as much or any post-processing work to filter down results.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import CreateResolvedProjectEntityRequest

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.create_project_entity(
    project_id="0n4473",
    request=CreateResolvedProjectEntityRequest(
        name=["Marvel Garment"],
        country=["KHM"],
        address=[
            "Beung Thom 3 Village, Sangkat Beung Thom, Posenchey, Phnom Penh"
        ],
    ),
)

⚙️ Parameters

project_id: str

request: CreateResolvedProjectEntityRequest

enable_llm_clean: typing.Optional[bool] — Whether to enable LLM-based data cleaning to remove noise and standardize entity attributes. Defaults to true if not supplied. Set to false to disable LLM cleaning.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.get_project_entities(...)

📝 Description

Retrieves a list of entities for a specific project with pagination support.

Response Formats:

  • JSON (default): Returns structured data with nested objects
  • CSV: Returns tabular data with dynamic columns for attributes and risk categories

CSV Format: The CSV response includes dynamic columns based on the data:

  • attribute_{field_name}: Dynamic columns for each attribute field found in the data
  • risk_category_{category_id}: Dynamic columns for each risk category found in the data
  • Standard columns: project_id, project_entity_id, label, project_entity_url, upload_ids, strength, countries, tags, case_status, created_at, match_count, upstream_products, upstream_risk_factors, upstream_countries

Use the Accept: text/csv header to request CSV format.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import (
    ProjectEntitiesExactFilter,
    ProjectEntitiesFilter,
    ProjectEntitiesFuzzyFilter,
)

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.get_project_entities(
    project_id="YVB88Y",
    limit=25,
    filter=ProjectEntitiesFilter(
        risk_category=["sanctions", "export_controls"],
        upstream_product=["8536", "8544"],
        shipment_country=["CHN", "VNM"],
        tier_1_shipment_country=["CHN"],
        city=ProjectEntitiesFuzzyFilter(
            fuzzy=["moscow", "beijing"],
        ),
        identifier=ProjectEntitiesFuzzyFilter(
            fuzzy=["253400V1H6ART1UQ0N98"],
        ),
        source=ProjectEntitiesExactFilter(
            exact=[
                "92edb8fe6615498f6e3e7b0e220f74e6",
                "c10d482320f207d92aa814519c3bd686",
            ],
        ),
        status=["active"],
        bounds="55.680357237879136|-71.53607290158526|41.10876347746233|-40.963927098414736",
        match_entity_id=["dy-rh2g0QtzUN_jC_e9S_A"],
        entity_type=["company"],
        upload=["upload_123"],
        match_count="one",
    ),
)

⚙️ Parameters

project_id: str

next: typing.Optional[str] — The pagination token for the next page of projects.

prev: typing.Optional[str] — The pagination token for the previous page of projects.

limit: typing.Optional[int] — Limit total values returned for projects. Defaults to 100. Max 100.

filter: typing.Optional[ProjectEntitiesFilter] — Filter the project entities. Supports both dot notation (e.g., 'filter.attribute.name') and bracket notation (e.g., 'filter[attribute][name]') for nested field filtering.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.get_project_entity(...)

📝 Description

Retrieves a specific entity in a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.get_project_entity(
    project_id="project_id",
    project_entity_id="project_entity_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.add_project_entity_matches(...)

📝 Description

Adds matches to a project entity.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import UpdateProjectEntityMatchesBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.add_project_entity_matches(
    project_id="project_id",
    project_entity_id="project_entity_id",
    request=UpdateProjectEntityMatchesBody(
        entity_ids=["entity_ids", "entity_ids"],
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

request: UpdateProjectEntityMatchesBody

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.replace_project_entity_matches(...)

📝 Description

Replace matches in a project entity.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import UpdateProjectEntityMatchesBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.replace_project_entity_matches(
    project_id="project_id",
    project_entity_id="project_entity_id",
    request=UpdateProjectEntityMatchesBody(
        entity_ids=["entity_ids", "entity_ids"],
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

request: UpdateProjectEntityMatchesBody

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.delete_project_entity(...)

📝 Description

Deletes a project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.delete_project_entity(
    project_id="project_id",
    project_entity_id="project_entity_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.delete_project_entity_match(...)

📝 Description

Deletes a specific project entity match.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.delete_project_entity_match(
    project_id="project_id",
    project_entity_id="project_entity_id",
    match_id="match_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

match_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.project_entity_exists(...)

📝 Description

Checks if a project entity with the given attributes already exists.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import ResolutionAttributes

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.project_entity_exists(
    project_id="YVB88Y",
    request=ResolutionAttributes(
        name=["Example Company"],
        country=["USA"],
    ),
)

⚙️ Parameters

project_id: str

request: ResolutionAttributes

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.save_project_entity(...)

📝 Description

Stores a project entity given entity IDs and a list of attributes.

🔌 Usage

from sayari import Sayari
from sayari.project_entity import ResolutionAttributes, SaveProjectEntityBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.save_project_entity(
    project_id="YVB88Y",
    request=SaveProjectEntityBody(
        entity_ids=["entity_id_1", "entity_id_2"],
        attributes=ResolutionAttributes(
            name=["Example Company"],
            country=["USA"],
        ),
        profile="corporate",
    ),
)

⚙️ Parameters

project_id: str

request: SaveProjectEntityBody

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.get_project_risk_changes(...)

📝 Description

Retrieves the risk changes for all project entities in a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.get_project_risk_changes(
    project_id="YVB88Y",
)

⚙️ Parameters

project_id: str

limit: typing.Optional[int] — The maximum number of risk changes to return. Default is 100.

next: typing.Optional[str] — Token to retrieve the next page of risk changes

prev: typing.Optional[str] — Token to retrieve the previous page of risk changes

sort_date: typing.Optional[SortOrder] — Sort by timestamp in ascending or descending order. Default is desc.

filter_from: typing.Optional[str] — Filter risk changes from the provided date

filter_to: typing.Optional[str] — Filter risk changes up to the provided date

filter_risk_factor: typing.Optional[typing.Sequence[str]] — Filter risk changes for the provided risk factors

filter_risk_category: typing.Optional[typing.Sequence[str]] — Filter risk changes for risk factors from the provided risk categories

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.get_project_entity_risk_changes(...)

📝 Description

Retrieves the risk changes for a single project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.get_project_entity_risk_changes(
    project_id="YVB88Y",
    project_entity_id="52z4Wa",
)

⚙️ Parameters

project_id: str

project_entity_id: str

limit: typing.Optional[int] — The maximum number of risk changes to return. Default is 100.

next: typing.Optional[str] — Token to retrieve the next page of risk changes

prev: typing.Optional[str] — Token to retrieve the previous page of risk changes

sort_date: typing.Optional[SortOrder] — Sort by timestamp in ascending or descending order. Default is desc.

filter_from: typing.Optional[str] — Filter risk changes from the provided date

filter_to: typing.Optional[str] — Filter risk changes up to the provided date

filter_risk_factor: typing.Optional[typing.Sequence[str]] — Filter risk changes for the provided risk factors

filter_risk_category: typing.Optional[typing.Sequence[str]] — Filter risk changes for risk factors from the provided risk categories

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.delete_project_risk_changes(...)

📝 Description

Dismiss risk changes for all project entities in a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.delete_project_risk_changes(
    project_id="project_id",
)

⚙️ Parameters

project_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.delete_project_entity_risk_changes(...)

📝 Description

Dismiss risk changes for a single project entity.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.delete_project_entity_risk_changes(
    project_id="project_id",
    project_entity_id="project_entity_id",
)

⚙️ Parameters

project_id: str

project_entity_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.project_entity_supply_chain(...)

📝 Description

Execute a traversal of the upstream trade network (supply chain) for all matched entities of a project entity, returning a set of entities and edges between them.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.project_entity_supply_chain(
    project_id="Gam5qG",
    project_entity_id="GOeOE8",
    min_date="2023-03-15",
    product=["3204"],
    risk=["forced_labor_xinjiang_origin_subtier"],
)

⚙️ Parameters

project_id: str — The project Identifier

project_entity_id: str — The project entity Identifier

product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to include only trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

not_product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to exclude any trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

risk: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has 1+ of the specified risk factors.

not_risk: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has none of the specified risk factors.

countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in 1+ of the specified countries.

not_countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in none of the specified countries.

shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from any tier matches the provided values.

not_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where none of the shipment countries from any tier matches the provided values.

tier_1_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 1 matches the provided values.

tier_2_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 2 matches the provided values.

tier_3_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 3 matches the provided values.

tier_4_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 4 matches the provided values.

tier_5_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 5 matches the provided values.

component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain at least one edge with 1+ of the specified HS codes.

not_component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain no edges with any of the specified HS codes.

min_date: typing.Optional[str] — Minimum date edge filter in format. Only return supply chains with edge dates that are greater than or equal to this date.

max_date: typing.Optional[str] — Maximum date edge filter in format. Only return supply chains with edge dates that are less than or equal to this date.

max_depth: typing.Optional[int] — The maximum depth of the traversal, from 1 to 4 inclusive. Default is 4. Reduce if query is timing out.

limit: typing.Optional[int] — The maximum number of results to return. Default is no limit.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.get_project_entity_risk_summary(...)

📝 Description

Retrieves a risk summary for a specific project entity, including risk factors with network paths and risk intelligence data.

Response includes:

  • Risk factors with their levels (elevated, high, critical)
  • Network paths showing relationships between entities
  • Risk intelligence scores and metadata
  • Risk categories and source entity information

🔌 Usage

from sayari import Sayari
from sayari.project_entity import ProjectEntityRiskSummaryFilters

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.get_project_entity_risk_summary(
    project_id="YVB88Y",
    project_entity_id="52z4Wa",
    filter=ProjectEntityRiskSummaryFilters(
        risk_factor=["sanctioned", "regulatory_action"],
        risk_category=["sanctions", "export_controls"],
    ),
)

⚙️ Parameters

project_id: str

project_entity_id: str

filter: ProjectEntityRiskSummaryFilters — Filter risk factors by risk factor IDs and risk categories

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project_entity.project_entity_supply_chain_summary(...)

📝 Description

Execute a traversal of the upstream trade network (supply chain) for all matched entities of a project entity, returning a summary of countries, risks, and components.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project_entity.project_entity_supply_chain_summary(
    project_id="Gam5qG",
    project_entity_id="GOeOE8",
    min_date="2023-03-15",
    product=["8536", "8544", "4016"],
    risk_factors=[
        "forced_labor_xinjiang_name",
        "forced_labor_xinjiang_uflpa",
        "forced_labor_uflpa_origin_direct",
        "exports_russian_gold",
        "export_to_sanctioned",
    ],
)

⚙️ Parameters

project_id: str — The project Identifier

project_entity_id: str — The project entity Identifier

product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to include only trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

not_product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to exclude any trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

risk_factors: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has 1+ of the specified risk factors.

not_risk: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has none of the specified risk factors.

countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in 1+ of the specified countries.

not_countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in none of the specified countries.

component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain at least one edge with 1+ of the specified HS codes.

not_component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain no edges with any of the specified HS codes.

min_date: typing.Optional[str] — Minimum date edge filter in format. Only return supply chains with edge dates that are greater than or equal to this date.

max_date: typing.Optional[str] — Maximum date edge filter in format. Only return supply chains with edge dates that are less than or equal to this date.

max_depth: typing.Optional[int] — The maximum depth of the traversal, from 1 to 4 inclusive. Default is 4. Reduce if query is timing out.

limit: typing.Optional[int] — The maximum number of results to return. Default is no limit.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Project

client.project.create_project(...)

📝 Description

Create a new project.

🔌 Usage

from sayari import Sayari
from sayari.project import CreateProjectRequest, ProjectShareOnCreate

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project.create_project(
    request=CreateProjectRequest(
        label="My First Project",
        type="network",
        share=ProjectShareOnCreate(
            org="admin",
        ),
    ),
)

⚙️ Parameters

request: CreateProjectRequest

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project.get_projects(...)

📝 Description

Retrieve a list of projects including upload progress info.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project.get_projects(
    archived=True,
    limit=5,
)

⚙️ Parameters

next: typing.Optional[str] — The pagination token for the next page of projects.

prev: typing.Optional[str] — The pagination token for the previous page of projects.

limit: typing.Optional[int] — Limit total values returned for projects. Defaults to 100. Max 100.

archived: typing.Optional[bool] — Toggle between projects that have been archived (true) or not (false). Defaults to false.

type: typing.Optional[ProjectType] — Which project types to return

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.project.delete_project(...)

📝 Description

Deletes an existing project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.project.delete_project(
    project_id="Gam5qG",
)

⚙️ Parameters

project_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Record

client.record.get_record(...)

📝 Description

Retrieve a record from the database based on the ID

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.record.get_record(
    id="74cf0fc2a62f9c8f4e88f8a0b3ffcca4%2FF0000110%2F1682970471254",
)

⚙️ Parameters

id: str — The unique identifier for a record in the database

references_limit: typing.Optional[int] — A limit on the number of references to be returned. Defaults to 100.

references_offset: typing.Optional[int] — Number of references to skip before returning response. Defaults to 0.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Resolution

client.resolution.resolution(...)

📝 Description

The resolution endpoints allow users to search for matching entities against a provided list of attributes. The endpoint is similar to the search endpoint, except it's tuned to only return the best match so the client doesn't need to do as much or any post-processing work to filter down results.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resolution.resolution(
    name="Oleg Deripaska",
    country="RUS",
)

⚙️ Parameters

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 10 inclusive. Defaults to 10.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

name: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity name

address: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity address. For optimal matching results, it's recommended to concatenate the full address string (street, city, state, postal code).

city: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity city that contains the provided city name.

state: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity state that contains the provided state name.

country: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Entity country - must be ISO (3166) Trigram i.e., USA. See complete list here

identifier: typing.Optional[ typing.Union[BothIdentifierTypes, typing.Sequence[BothIdentifierTypes]] ] — Entity identifier. Can be from either the Identifier Type or Weak Identifier Type enums.

date_of_birth: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity date of birth

contact: typing.Optional[typing.Union[str, typing.Sequence[str]]] — Entity contact

type: typing.Optional[typing.Union[Entities, typing.Sequence[Entities]]]Entity type. If multiple values are passed for any field, the endpoint will match entities with ANY of the values.

profile: typing.Optional[ProfileEnum] — Specifies the search algorithm to use. corporate (default) is optimized for accurate entity attribute matching, ideal for business verification. suppliers is tailored for matching entities with trade data, suitable for supply chain use cases. search mimics /search/entity behavior, best for name-only matches.

name_min_percentage: typing.Optional[int] — Adding this param enables an alternative matching logic. It will set a minimum percentage of tokens needed to match with user input to be considered a "hit". Accepts integers from 0 to 100 inclusive.

name_min_tokens: typing.Optional[int] — Adding this param enables an alternative matching logic. It sets the minimum number of matching tokens the resolved hits need to have in common with the user input to be considered a "hit". Accepts non-negative integers.

minimum_score_threshold: typing.Optional[int] — Specifies the minimum score required to pass, which controls the strictness of the matching threshold. The default value is 77, and tuned for general use-case accuracy. Increase the value for stricter matching, reduce to loosen.

search_fallback: typing.Optional[bool] — Enables a name search fallback when either the corporate or supplier profiles fails to find a match. When invoked, the fallback will make a call similar to /search/entity on name only. By default set to false.

cutoff_threshold: typing.Optional[int] — Specifies the window of similar results returned in the match group. Increase for fewer multiple matches, decrease to open the aperture and allow for more matches. Default is .8

candidate_pool_size: typing.Optional[int] — Specifies the maximum number of entity candidates considered during search. Default is 50. Higher values increase match pool size but also increase latency.

skip_post_process: typing.Optional[bool] — Bypasses the post-processing setps and re-ranking. Useful for debugging. By default set to false, set to true to enable.

enable_llm_clean: typing.Optional[bool] — Whether to enable LLM-based data cleaning to remove noise and standardize entity attributes. Defaults to true if not supplied. Set to false to disable LLM cleaning.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.resolution.resolution_post(...)

📝 Description

The resolution endpoints allow users to search for matching entities against a provided list of attributes. The endpoint is similar to the search endpoint, except it's tuned to only return the best match so the client doesn't need to do as much or any post-processing work to filter down results.

🔌 Usage

from sayari import Sayari
from sayari.resolution import ResolutionBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resolution.resolution_post(
    limit=1,
    enable_llm_clean=False,
    request=ResolutionBody(
        name=["Chongqing Jingyou Zhicai New Materials Co."],
        address=[
            "4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"
        ],
        country=["CHN"],
        enable_llm_clean=False,
    ),
)

⚙️ Parameters

request: ResolutionBody

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 10 inclusive. Defaults to 10.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

enable_llm_clean: typing.Optional[bool] — Whether to enable LLM-based data cleaning to remove noise and standardize entity attributes. Defaults to true if not supplied. Set to false to disable LLM cleaning.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.resolution.resolution_persisted(...)

📝 Description

This endpoint is deprecated. The persisted resolution endpoints allow users to search for matching entities against a provided list of attributes. The endpoint is similar to the resolution endpoint, except it also stores matched entities into user's project.

🔌 Usage

from sayari import Sayari
from sayari.resolution import ResolutionBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resolution.resolution_persisted(
    project_id="6GaxYn",
    limit=1,
    request=ResolutionBody(
        name=["victoria beckham limited"],
        profile="suppliers",
    ),
)

⚙️ Parameters

project_id: str — Unique identifier of the project

request: ResolutionBody

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 10 inclusive. Defaults to 10.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.resolution.resolution_upload(...)

📝 Description

This endpoint is deprecated. This endpoint allows you to upload entities in bulk.

🔌 Usage

from sayari import Sayari
from sayari.resolution import ResolutionBody, ResolutionUploadBody

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resolution.resolution_upload(
    project_id="V03eYM",
    request=ResolutionUploadBody(
        filename="testblah.csv",
        enable_llm_clean=False,
        data=[
            ResolutionBody(
                name=[
                    "Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"
                ],
                address=[
                    "4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"
                ],
                country=["CHN"],
            )
        ],
    ),
)

⚙️ Parameters

project_id: str — Unique identifier of the project

request: ResolutionUploadBody

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Resource

client.resource.save_entity(...)

📝 Description

Save an entity to a project.

🔌 Usage

from sayari import Sayari
from sayari.resource import SaveEntityRequest

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resource.save_entity(
    request=SaveEntityRequest(
        type="entity",
        project="GNJbkG",
        entity_id="Zk0qOaM2SSYg_ZhsljykMQ",
        custom_fields={"properties": {"custom_name": "Victoria Beckham"}},
    ),
)

⚙️ Parameters

request: SaveEntityRequest

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.resource.delete_resource(...)

📝 Description

Deletes an existing saved resource from a project.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.resource.delete_resource(
    type="entity",
    resource_id="YWmNKV",
)

⚙️ Parameters

type: ResourceType

resource_id: str

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Search

client.search.search_entity(...)

📝 Description

Search for an entity. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.search.search_entity(
    limit=1,
    q="victoria beckham limited",
)

⚙️ Parameters

q: str — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 100. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

fields: typing.Optional[typing.Sequence[SearchField]] — Record or entity fields to search against.

filter: typing.Optional[FilterList] — Filters to be applied to search query to limit the result-set.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

geo_facets: typing.Optional[bool] — Whether or not to return search geo bound facets in results giving counts by geo tile. Defaults to false.

advanced: typing.Optional[bool] — Set to true to enable full elasticsearch query string syntax which allows for fielded search and more complex operators. Note that the syntax is more strict and can result in empty result-sets. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.search.search_entity_get(...)

📝 Description

Search for an entity. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.search.search_entity_get(
    limit=1,
    q="victoria beckham limited",
)

⚙️ Parameters

q: str — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 100. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

fields: typing.Optional[typing.Union[SearchField, typing.Sequence[SearchField]]] — Record or entity fields to search against.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

geo_facets: typing.Optional[bool] — Whether or not to return search geo bound facets in results giving counts by geo tile. Defaults to false.

advanced: typing.Optional[bool] — Set to true to enable full elasticsearch query string syntax which allows for fielded search and more complex operators. Note that the syntax is more strict and can result in empty result-sets. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.search.search_record(...)

📝 Description

Search for a record. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.search.search_record(
    limit=1,
    q="victoria beckham limited",
)

⚙️ Parameters

q: str — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 100. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

filter: typing.Optional[FilterList] — Filters to be applied to search query to limit the result-set.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

advanced: typing.Optional[bool] — Set to true to enable full elasticsearch query string syntax which allows for fielded search and more complex operators. Note that the syntax is more strict and can result in empty result-sets. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.search.search_record_get(...)

📝 Description

Search for a record. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.search.search_record_get(
    q="victoria beckham limited",
    limit=1,
)

⚙️ Parameters

q: str — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 100. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

advanced: typing.Optional[bool] — Set to true to enable full elasticsearch query string syntax which allows for fielded search and more complex operators. Note that the syntax is more strict and can result in empty result-sets. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

SupplyChain

client.supply_chain.upstream_trade_traversal(...)

📝 Description

Execute a traversal of the upstream trade network (supply chain) of an entity, returning a set of entities and edges between them.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.supply_chain.upstream_trade_traversal(
    id="ESkH7J-UCRfY5t0_JXIH3w",
    min_date="2023-03-15",
    product=["3204"],
    risk=["forced_labor_xinjiang_origin_subtier"],
)

⚙️ Parameters

id: str — The root entity identifier.

product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to include only trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

not_product: typing.Optional[typing.Sequence[str]] — Product root edge filter. Filters results to exclude any trade relationships where the associated component is part of the specified product's blueprint or is a sub-component of that product.

risk: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has 1+ of the specified risk factors.

not_risk: typing.Optional[typing.Sequence[Risk]] — Risk leaf node filter. Only return supply chains that end with a supplier that has none of the specified risk factors.

countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in 1+ of the specified countries.

not_countries: typing.Optional[typing.Sequence[Country]] — Country leaf node filter. Only return supply chains that end with a supplier in none of the specified countries.

shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from any tier matches the provided values.

not_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where none of the shipment countries from any tier matches the provided values.

tier_1_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 1 matches the provided values.

tier_2_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 2 matches the provided values.

tier_3_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 3 matches the provided values.

tier_4_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 4 matches the provided values.

tier_5_shipment_country: typing.Optional[typing.Sequence[Country]] — Filters supply chain paths where 1+ shipment country from tier 5 matches the provided values.

component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain at least one edge with 1+ of the specified HS codes.

not_component: typing.Optional[typing.Sequence[str]] — Component edge filter. Only return supply chains that contain no edges with any of the specified HS codes.

min_date: typing.Optional[str] — Minimum date edge filter in format. Only return supply chains with edge dates that are greater than or equal to this date.

max_date: typing.Optional[str] — Maximum date edge filter in format. Only return supply chains with edge dates that are less than or equal to this date.

max_depth: typing.Optional[int] — The maximum depth of the traversal, from 1 to 4 inclusive. Default is 4. Reduce if query is timing out.

limit: typing.Optional[int] — The maximum number of results to return. Default is no limit.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Trade

client.trade.search_shipments(...)

📝 Description

Search for a shipment. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari
from sayari.trade import TradeFilterList

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.trade.search_shipments(
    limit=1,
    filter=TradeFilterList(
        departure_country=["DEU"],
        arrival_country=["RUS"],
        hs_code=["854231"],
        arrival_date="2024-01|2024-10",
    ),
)

⚙️ Parameters

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 3000. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

q: typing.Optional[str] — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

filter: typing.Optional[TradeFilterList] — Filters to be applied to search query to limit the result-set.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.trade.search_suppliers(...)

📝 Description

Search for a supplier. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari
from sayari.trade import TradeFilterList

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.trade.search_suppliers(
    limit=1,
    filter=TradeFilterList(
        departure_country=["DEU"],
        arrival_country=["RUS"],
        hs_code=["854231"],
        arrival_date="2024-01|2024-10",
    ),
)

⚙️ Parameters

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 3000. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

q: typing.Optional[str] — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

filter: typing.Optional[TradeFilterList] — Filters to be applied to search query to limit the result-set.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.trade.search_buyers(...)

📝 Description

Search for a buyer. Please note, searches are limited to a maximum of 10,000 results.

🔌 Usage

from sayari import Sayari
from sayari.trade import TradeFilterList

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.trade.search_buyers(
    limit=1,
    filter=TradeFilterList(
        departure_country=["DEU"],
        arrival_country=["RUS"],
        hs_code=["854231"],
        arrival_date="2024-01|2024-10",
    ),
)

⚙️ Parameters

limit: typing.Optional[int] — A limit on the number of objects to be returned with a range between 1 and 3000. Defaults to 100.

offset: typing.Optional[int] — Number of results to skip before returning response. Defaults to 0.

q: typing.Optional[str] — Query term. The syntax for the query parameter follows elasticsearch simple query string syntax. The includes the ability to use search operators and to perform nested queries. Must be url encoded.

filter: typing.Optional[TradeFilterList] — Filters to be applied to search query to limit the result-set.

facets: typing.Optional[bool] — Whether or not to return search facets in results giving counts by field. Defaults to false.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

Traversal

client.traversal.traversal(...)

📝 Description

The Traversal endpoint returns paths from a single target entity to up to 50 directly or indirectly-related entities. Each path includes information on the 0 to 10 intermediary entities, as well as their connecting relationships. The response's explored_count field indicates the size of the graph subset the application searched. Running a traversal on a highly connected entity with a restrictive set of argument filters and a high max depth will require the application to explore a higher number of traversal paths, which may affect performance. In cases where a traversal searches over a very large, highly-connected subgraph, a partial result set may be returned containing only the most relevant results. This will be indicated in the response by the partial_results field.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.traversal.traversal(
    id="mGq1lpuqKssNWTjIokuPeA",
    limit=1,
)

⚙️ Parameters

id: str — Unique identifier of the entity

limit: typing.Optional[int] — Limit total values for traversal. Defaults to 10. Max of 50.

offset: typing.Optional[int] — Offset values for traversal. Defaults to 0. Max of 1000.

min_depth: typing.Optional[int] — Set minimum depth for traversal. Defaults to 1.

max_depth: typing.Optional[int] — Set maximum depth for traversal. Defaults to 4.

relationships: typing.Optional[typing.Union[Relationships, typing.Sequence[Relationships]]] — Set relationship type(s) to follow when traversing related entities. Defaults to following all relationship types.

psa: typing.Optional[bool] — Also traverse relationships from entities that are possibly the same as any entity that appears in the path. Defaults to traversing possibly same as relationships.

countries: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filter paths to only those that end at an entity associated with the specified country(ies). Defaults to returning paths that end in any country.

types: typing.Optional[typing.Union[Entities, typing.Sequence[Entities]]] — Filter paths to only those that end at an entity of the specified type(s). Defaults to returning paths that end at any type.

sanctioned: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a watchlist. Defaults to not filtering paths by sanctioned status.

pep: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a pep list. Defaults to not filtering paths by pep status.

min_shares: typing.Optional[int] — Set minimum percentage of share ownership for traversal. Defaults to 0.

include_unknown_shares: typing.Optional[bool] — Also traverse relationships when share percentages are unknown. Only useful when min_shares is set greater than 0. Defaults to true.

exclude_former_relationships: typing.Optional[bool] — Include relationships that were valid in the past but not at the present time. Defaults to true.

exclude_closed_entities: typing.Optional[bool] — Include entities that existed in the past but not at the present time. Defaults to false.

risk_categories: typing.Optional[typing.Sequence[RiskCategory]] — Filter paths to only those that include an entity associated with any risk factor belonging to one of the specified categories.

eu_high_risk_third: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_modern_slavery: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

state_owned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

formerly_sanctioned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_terrorism: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_organized_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_financial_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_bribery_and_corruption: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_other: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_cybercrime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

regulatory_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

law_enforcement_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

xinjiang_geospatial: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.traversal.ubo(...)

📝 Description

The UBO endpoint returns paths from a single target entity to up to 50 beneficial owners. The endpoint is a shorthand for the equivalent traversal query.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.traversal.ubo(
    id="mGq1lpuqKssNWTjIokuPeA",
    limit=1,
)

⚙️ Parameters

id: str — Unique identifier of the entity

limit: typing.Optional[int] — Limit total values for traversal. Defaults to 10. Max of 50.

offset: typing.Optional[int] — Offset values for traversal. Defaults to 0. Max of 1000.

min_depth: typing.Optional[int] — Set minimum depth for traversal. Defaults to 1.

max_depth: typing.Optional[int] — Set maximum depth for traversal. Defaults to 4.

relationships: typing.Optional[typing.Union[Relationships, typing.Sequence[Relationships]]] — Set relationship type(s) to follow when traversing related entities. Defaults to has_shareholder, has_beneficial_owner, has_partner, subsidiary_of, and branch_of.

psa: typing.Optional[bool] — Also traverse relationships from entities that are possibly the same as any entity that appears in the path. Defaults to traversing possibly same as relationships.

countries: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filter paths to only those that end at an entity associated with the specified country(ies). Defaults to returning paths that end in any country.

types: typing.Optional[typing.Union[Entities, typing.Sequence[Entities]]] — Filter paths to only those that end at an entity of the specified type(s). Defaults to returning paths that end at any type.

sanctioned: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a watchlist. Defaults to not filtering paths by sanctioned status.

pep: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a pep list. Defaults to not filtering paths by pep status.

min_shares: typing.Optional[int] — Set minimum percentage of share ownership for traversal. Defaults to 0.

include_unknown_shares: typing.Optional[bool] — Also traverse relationships when share percentages are unknown. Only useful when min_shares is set greater than 0. Defaults to true.

exclude_former_relationships: typing.Optional[bool] — Include relationships that were valid in the past but not at the present time. Defaults to true.

exclude_closed_entities: typing.Optional[bool] — Include entities that existed in the past but not at the present time. Defaults to false.

risk_categories: typing.Optional[TraversalRiskCategory] — Filter paths to only those that relate with an entity that we have flagged with any risk factor of these categories

eu_high_risk_third: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_modern_slavery: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

state_owned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

formerly_sanctioned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_terrorism: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_organized_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_financial_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_bribery_and_corruption: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_other: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_cybercrime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

regulatory_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

law_enforcement_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

xinjiang_geospatial: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.traversal.ownership(...)

📝 Description

The Ownership endpoint returns paths from a single target entity to up to 50 entities directly or indirectly owned by that entity. The endpoint is a shorthand for the equivalent traversal query.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.traversal.ownership(
    id="mGq1lpuqKssNWTjIokuPeA",
    limit=1,
)

⚙️ Parameters

id: str — Unique identifier of the entity

limit: typing.Optional[int] — Limit total values for traversal. Defaults to 10. Max of 50.

offset: typing.Optional[int] — Offset values for traversal. Defaults to 0. Max of 1000.

min_depth: typing.Optional[int] — Set minimum depth for traversal. Defaults to 1.

max_depth: typing.Optional[int] — Set maximum depth for traversal. Defaults to 4.

relationships: typing.Optional[typing.Union[Relationships, typing.Sequence[Relationships]]] — Set relationship type(s) to follow when traversing related entities. Defaults to shareholder_of, beneficial_owner_of, partner_of, has_subsidiary, and has_branch.

psa: typing.Optional[bool] — Also traverse relationships from entities that are possibly the same as any entity that appears in the path. Defaults to traversing possibly same as relationships.

countries: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filter paths to only those that end at an entity associated with the specified country(ies). Defaults to returning paths that end in any country.

types: typing.Optional[typing.Union[Entities, typing.Sequence[Entities]]] — Filter paths to only those that end at an entity of the specified type(s). Defaults to returning paths that end at any type.

sanctioned: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a watchlist. Defaults to not filtering paths by sanctioned status.

pep: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a pep list. Defaults to not filtering paths by pep status.

min_shares: typing.Optional[int] — Set minimum percentage of share ownership for traversal. Defaults to 0.

include_unknown_shares: typing.Optional[bool] — Also traverse relationships when share percentages are unknown. Only useful when min_shares is set greater than 0. Defaults to true.

exclude_former_relationships: typing.Optional[bool] — Include relationships that were valid in the past but not at the present time. Defaults to true.

exclude_closed_entities: typing.Optional[bool] — Include entities that existed in the past but not at the present time. Defaults to false.

risk_categories: typing.Optional[TraversalRiskCategory] — Filter paths to only those that relate with an entity that we have flagged with any risk factor of these categories

eu_high_risk_third: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_modern_slavery: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

state_owned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

formerly_sanctioned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_terrorism: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_organized_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_financial_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_bribery_and_corruption: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_other: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_cybercrime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

regulatory_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

law_enforcement_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

xinjiang_geospatial: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.traversal.watchlist(...)

📝 Description

The Watchlist endpoint returns paths from a single target entity to up to 50 other entities that appear on a watchlist. The endpoint is a shorthand for the equivalent traversal query.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.traversal.watchlist(
    id="mGq1lpuqKssNWTjIokuPeA",
    limit=1,
)

⚙️ Parameters

id: str — Unique identifier of the entity

limit: typing.Optional[int] — Limit total values for traversal. Defaults to 10. Max of 50.

offset: typing.Optional[int] — Offset values for traversal. Defaults to 0. Max of 1000.

min_depth: typing.Optional[int] — Set minimum depth for traversal. Defaults to 1.

max_depth: typing.Optional[int] — Set maximum depth for traversal. Defaults to 4.

relationships: typing.Optional[typing.Union[Relationships, typing.Sequence[Relationships]]] — Set relationship type(s) to follow when traversing related entities. Defaults to following 31 relevant relationship types covering ownership, control, and trade.

psa: typing.Optional[bool] — Also traverse relationships from entities that are possibly the same as any entity that appears in the path. Defaults to traversing possibly same as relationships.

countries: typing.Optional[typing.Union[Country, typing.Sequence[Country]]] — Filter paths to only those that end at an entity associated with the specified country(ies). Defaults to returning paths that end in any country.

types: typing.Optional[typing.Union[Entities, typing.Sequence[Entities]]] — Filter paths to only those that end at an entity of the specified type(s). Defaults to returning paths that end at any type.

sanctioned: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a watchlist. Defaults to not filtering paths by sanctioned status.

pep: typing.Optional[bool] — Filter paths to only those that end at an entity appearing on a pep list. Defaults to not filtering paths by pep status.

min_shares: typing.Optional[int] — Set minimum percentage of share ownership for traversal. Defaults to 0.

include_unknown_shares: typing.Optional[bool] — Also traverse relationships when share percentages are unknown. Only useful when min_shares is set greater than 0. Defaults to true.

exclude_former_relationships: typing.Optional[bool] — Include relationships that were valid in the past but not at the present time. Defaults to false.

exclude_closed_entities: typing.Optional[bool] — Include entities that existed in the past but not at the present time. Defaults to false.

risk_categories: typing.Optional[TraversalRiskCategory] — Filter paths to only those that relate with an entity that we have flagged with any risk factor of these categories

eu_high_risk_third: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_modern_slavery: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

state_owned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

formerly_sanctioned: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_terrorism: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_organized_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_financial_crime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_bribery_and_corruption: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_other: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

reputational_risk_cybercrime: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

regulatory_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

law_enforcement_action: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

xinjiang_geospatial: typing.Optional[bool] — Filter paths to only those that relate with an entity that we have flagged with this risk factor

request_options: typing.Optional[RequestOptions] — Request-specific configuration.

client.traversal.shortest_path(...)

📝 Description

The Shortest Path endpoint returns a response identifying the shortest traversal path connecting each pair of entities.

🔌 Usage

from sayari import Sayari

client = Sayari(
    client_id="YOUR_CLIENT_ID",
    client_secret="YOUR_CLIENT_SECRET",
)
client.traversal.shortest_path(
    entities="H1y25N5ymnFyZ-q9Lpwm_g&entities=xthsA_jQuKn3GW8-9ILQqg",
)

⚙️ Parameters

entities: typing.Union[str, typing.Sequence[str]] — A list of Sayari entity IDs specifying the source and target entities for the shortest path calculation. The list must contain exactly two entity IDs The first entity ID represents the source.The second entity ID represents the target.

request_options: typing.Optional[RequestOptions] — Request-specific configuration.