Skip to main content
Watchlists let you group companies, persons, addresses, properties, and vehicles into named lists and receive notifications when monitored entities change.

Overview

ConceptMeaning
WatchlistA named container for members you want to monitor.
MembersEntities (companies, persons, addresses, properties, vehicles) added to a watchlist.
SubscriptionsEvent types the watchlist is tracking — without a subscription, no events are recorded.
NotificationsDestinations (webhook / email / SMS) that receive events for a watchlist.
EventsChanges detected on members, delivered to every enabled notification.

Minimum plan

Member typeMinimum plan
CompaniesPro+
VehiclesPro+
PersonsMax+
AddressesEnterprise+
PropertiesEnterprise+
Watchlist management, notifications, subscriptions, and events are available on Pro+.

Watchlist CRUD

List watchlists

curl -H "x-api-key: YOUR_API_KEY" \
  "https://lens-api.tic.io/watchlists?sortBy=name"
Query parameters:
ParameterTypeDefaultDescription
sortBystringnamename or created
Response — array of watchlist objects:
[
  {
    "watchListGuid": "a1b2c3d4-e5f6-...",
    "watchListName": "My companies",
    "watchListDescription": "Portfolio monitoring",
    "numberOfCompanies": 42,
    "numberOfPersons": 0,
    "numberOfNotifications": 2,
    "numberOfSubscriptions": 5,
    "numberOfUnacknowledgedEvents": 3
  }
]

Create a watchlist

curl -X POST "https://lens-api.tic.io/watchlists" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "watchListName": "My companies", "watchListDescription": "Portfolio monitoring" }'
FieldTypeRequiredConstraints
watchListNamestringYes1–200 characters
watchListDescriptionstringNoMax 1000 characters
Returns 201 Created with the full watchlist object and a Location header.

Update a watchlist

PUT /watchlists/{watchlistGuid}
Same request body as create. Returns the updated watchlist.

Delete a watchlist

DELETE /watchlists/{watchlistGuid}
Returns 204 No Content. Deleting a watchlist removes all members, events, notifications, and subscriptions.

Members

Each member type has the same three operations: list (paginated), add, and remove.

Adding a member

# Add a company
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/companies/3508351" \
  -H "x-api-key: YOUR_API_KEY"
Replace companies/3508351 with the entity type and ID:
EntityRouteID field
Company/companies/{companyId}companyId
Person/persons/{personId}personId
Address/addresses/{addressId}addressId
Property/properties/{propertyId}propertyId
Vehicle/vehicles/{vehicleId}vehicleId
Returns 201 Created with the member GUID:
{
  "watchListMemberGuid": "f6e5d4c3-b2a1-...",
  "companyId": 3508351
}
Returns 409 Conflict if the entity is already a member.

Listing members (paginated)

Member lists use the same offset-based pagination as other table endpoints. See Pagination for the full reference.
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/companies" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "startRow": 0, "endRow": 50 }'
Paginated member endpoints:
EndpointDescription
POST /watchlists/{id}/companiesCompany members
POST /watchlists/{id}/personsPerson members
POST /watchlists/{id}/addressesAddress members
POST /watchlists/{id}/propertiesProperty members
POST /watchlists/{id}/vehiclesVehicle members

Exporting members

Each member type can be exported as CSV:
GET /watchlists/{watchlistGuid}/companies/export
GET /watchlists/{watchlistGuid}/persons/export
GET /watchlists/{watchlistGuid}/addresses/export
GET /watchlists/{watchlistGuid}/properties/export
GET /watchlists/{watchlistGuid}/vehicles/export

Removing a member

DELETE /watchlists/{watchlistGuid}/members/{memberGuid}
Returns 204 No Content. Associated events are also deleted.

Moving members

Move a single member to another watchlist:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/members/{memberGuid}/move" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "targetWatchListGuid": "b2c3d4e5-f6a7-..." }'
Move multiple members at once:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/members/move" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "targetWatchListGuid": "b2c3d4e5-f6a7-...",
    "memberGuids": ["f6e5d4c3-b2a1-...", "a1b2c3d4-e5f6-..."]
  }'
Returns 409 for members that already exist in the target watchlist. Bulk move reports skipped duplicates:
{
  "movedCount": 8,
  "skippedDuplicates": ["f6e5d4c3-b2a1-..."],
  "targetWatchListGuid": "b2c3d4e5-f6a7-..."
}

Check membership

Find which watchlists an entity belongs to:
curl -H "x-api-key: YOUR_API_KEY" \
  "https://lens-api.tic.io/watchlists/membership?companyId=3508351"
Pass exactly one query parameter: companyId, personId, addressId, propertyId, or vehicleId.

Event subscriptions

Subscriptions control which event types generate events for a watchlist. Without subscriptions, no events are recorded.

List subscriptions

curl -H "x-api-key: YOUR_API_KEY" \
  "https://lens-api.tic.io/watchlists/{watchlistGuid}/subscriptions"
Response:
[
  {
    "subscriptionId": "abcdef01-2345-...",
    "eventType": 1,
    "eventTypeName": "CompanyAddress",
    "lastUpdatedAtUtc": "2025-03-15T10:30:00Z"
  }
]

Subscribe to event types

Subscribe to a single event type:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/subscriptions" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "eventType": 1 }'
Subscribe to all event types at once:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/subscriptions" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "subscribeToAll": true }'

Unsubscribe

DELETE /watchlists/{watchlistGuid}/subscriptions/{subscriptionId}

Event types

ValueNameEntity
1CompanyAddressCompany
2CompanyNameCompany
3CompanyStatusCompany
4CompanyRegistrationCompany
5CompanyIntelligenceCompany
6CompanyBeneficialOwnerCompany
7CompanyDocumentCompany
8CompanyWorkplaceCompany
9CompanyPersonCompany
10CompanyRegisteredOfficeCompany
11CompanyShareCapitalCompany
12CompanyPurposeCompany
13CompanyDebtBalanceCompany
14CompanyOrderToPayCaseCompany
15CompanyFinancialDocumentCompany
16CompanyCaseCompany
17CompanyWorkplaceAddressCompany
25PersonAddressPerson
26PersonNamePerson
27PersonIntelligencePerson
28PersonStatusPerson
29PersonCompanyPerson
40PropertyOwnershipChangeProperty
41PropertyMortgageDeedChangeProperty
47VehicleOwnerChangeVehicle
48VehicleUserChangeVehicle
49VehicleStatusChangeVehicle
50VehicleInspectionVehicle
51VehicleStolenVehicle

Notifications

Notifications define where events are delivered. Each watchlist can have multiple notification destinations.

List notifications

curl -H "x-api-key: YOUR_API_KEY" \
  "https://lens-api.tic.io/watchlists/{watchlistGuid}/notifications"
Response:
[
  {
    "notificationId": "12345678-abcd-...",
    "destination": "https://example.com/webhook",
    "destinationType": 0,
    "destinationTypeDescription": "Webhook",
    "hasBeenValidated": true,
    "lastUpdatedAtUtc": "2025-03-15T10:30:00Z"
  }
]

Create a notification

FieldTypeDescription
destinationstringEmail address, webhook URL, or E.164 phone number
destinationTypeint0 = Webhook, 1 = Email, 2 = SMS
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/notifications" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "destination": "https://example.com/webhook", "destinationType": 0 }'
Destination must be a valid https:// URL.
Returns 409 Conflict if the destination already exists on the watchlist.

Delete a notification

DELETE /watchlists/{watchlistGuid}/notifications/{notificationId}

Events

When a subscribed change is detected on a member, an event is recorded. Events persist until the member is removed.

List events (paginated)

curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/events" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "startRow": 0, "endRow": 50 }'
Uses offset-based pagination. See Pagination. Each event contains:
FieldTypeDescription
eventIdintUnique event identifier
watchListMemberGuidGuidThe member that changed
eventTypeintEvent type (see table above)
subTypestringAdditional detail about the change
eventDatedatetimeWhen the change was detected
isAcknowledgedboolWhether the event has been acknowledged
acknowledgedNotestringNote added during acknowledgement
companyId / personId / addressId / propertyId / vehicleIdintThe entity that changed (one is set)

Export events

GET /watchlists/{watchlistGuid}/events/export
Returns a CSV file.

Acknowledge a single event

curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/events/42/acknowledge" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "note": "Reviewed, no action needed" }'
The note field is optional.

Unacknowledge a single event

DELETE /watchlists/{watchlistGuid}/events/{eventId}/acknowledge

Bulk acknowledge

Acknowledge multiple events at once:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/events/acknowledge" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "eventIds": [42, 43, 44], "note": "Batch reviewed" }'

Bulk unacknowledge

curl -X DELETE "https://lens-api.tic.io/watchlists/{watchlistGuid}/events/acknowledge" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "eventIds": [42, 43, 44] }'

Acknowledge all

Acknowledge every unacknowledged event on a watchlist:
curl -X POST "https://lens-api.tic.io/watchlists/{watchlistGuid}/events/acknowledge-all" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "note": "End-of-week review" }'
Optionally exclude specific events:
{
  "note": "End-of-week review",
  "excludeEventIds": [99, 100]
}

Dashboard

Get a summary of a watchlist including recent events and event counts per entity type:
curl -H "x-api-key: YOUR_API_KEY" \
  "https://lens-api.tic.io/watchlists/{watchlistGuid}/dashboard?recentEventCount=10"
ParameterTypeDefaultMax
recentEventCountint1025
Response:
{
  "watchListGuid": "a1b2c3d4-e5f6-...",
  "watchListName": "My companies",
  "totalMembers": 42,
  "unacknowledgedEventCount": 3,
  "lastEventAtUtc": "2025-03-15T10:30:00Z",
  "eventBreakdown": {
    "companyEvents": 12,
    "personEvents": 0,
    "addressEvents": 0,
    "propertyEvents": 0,
    "vehicleEvents": 0,
    "totalEvents": 12
  },
  "recentEvents": [
    {
      "eventId": 42,
      "memberGuid": "f6e5d4c3-b2a1-...",
      "eventType": 2,
      "subType": "Name changed",
      "eventDate": "2025-03-15T10:30:00Z",
      "isAcknowledged": false,
      "entityType": "Company",
      "entityName": "Volvo AB",
      "entityId": 3508351
    }
  ]
}

Typical workflow

1

Create a watchlist

POST /watchlists with a name and optional description.
2

Add members

Add companies, persons, addresses, properties, or vehicles to your watchlist.
3

Subscribe to event types

Choose specific event types or use subscribeToAll to monitor everything.
4

Add notifications

Set up webhook for real-time delivery, email for digests, or SMS for alerts.
5

Poll or receive events

Events are recorded as members change. Poll the events endpoint or receive notifications.
6

Acknowledge events

Mark events as reviewed — individually, in bulk, or all at once.

Error reference

StatusCause
201Member or resource created
204Delete successful
400Invalid request body or missing required field
404Watchlist or member not found
409Duplicate member or notification