Documentation

API Documentation

RESTful API documentation for developers

Quick Info
Base URL
https://intel.lotsmcp.com
Authentication

API Key (Bearer token or X-API-Key header)

Total Endpoints

19

Getting Started

Authentication

All API requests require authentication using an API key. You can create an API key from your dashboard.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://intel.lotsmcp.com/api/v1/lotsintel/projects/:project_id/competitors

competitors

POST
/api/v1/lotsintel/projects/:project_id/competitors

Add competitor

lotsintel_add_competitor

Add one competitor, or update the existing row when the domain is already in this project. Optional surfaces can be included. The same domain is never inserted twice.

DELETE
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id

Archive competitor

lotsintel_archive_competitor

Take a competitor off the watch. History stays. A later import or restore_competitor puts them back.

GET
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id

Get competitor

lotsintel_get_competitor

Get one competitor, the active pages and accounts being watched, the latest observation on each, and signals that have not been sent.

POST
/api/v1/lotsintel/projects/:project_id/competitors/import

Import competitors

lotsintel_import_competitors

Add or update up to 50 competitors in one call. Match is the domain. An archived domain is brought back when it is imported again. Each row reports created, updated, or rejected. Pass surfaces on a row to set what to watch; omit surfaces to leave existing pages and accounts untouched.

GET
/api/v1/lotsintel/projects/:project_id/competitors

List competitors

lotsintel_list_competitors

List competitors in a project. Filter with status (proposed, active, paused, archived), kind, or due=true. Archived competitors are omitted unless status=archived.

POST
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id/restore

Restore competitor

lotsintel_restore_competitor

Put an archived competitor back on the watch as active and due.

PATCH
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id

Update competitor

lotsintel_update_competitor

Change kind, priority, interval, website, status, or notes. Status here is proposed, active, or paused. Removing someone from the watch is archive_competitor.

observations

POST
/api/v1/lotsintel/projects/:project_id/observations

Record observation

lotsintel_record_observation

Save what was seen on one surface. The first observation for that surface is a baseline and cannot by itself justify a signal. The same content is stored once and still counts as a completed check. Only active competitors can be checked.

POST
/api/v1/lotsintel/projects/:project_id/surfaces/:surface_id/refresh

Refresh social surface

lotsintel_refresh_social_surface

Read one saved social account through the existing research provider, store the observation, and dedupe posts by URL. The project can spend 20 provider calls per day. The first snapshot is a baseline. A repeat of the same feed does not create another observation.

projects

POST
/api/v1/lotsintel/projects

Create intel project

lotsintel_create_project

Create the product or project to watch, or return the existing project when this owner already used that name. A repeat does not overwrite the saved description or destinations.

GET
/api/v1/lotsintel/projects/:project_id

Get intel project

lotsintel_get_project

Get one project plus counts of active competitors, competitors due for a check, and unsent signals.

GET
/api/v1/lotsintel/projects

List intel projects

lotsintel_list_projects

List the products this owner is watching.

PATCH
/api/v1/lotsintel/projects/:project_id

Update intel project

lotsintel_update_project

Change the project name, website, description, or signal destinations. Destinations.emails receives signals. webhook_url, when set, must be https and is posted the same JSON.

signals

POST
/api/v1/lotsintel/projects/:project_id/signals/:signal_id/dismiss

Dismiss signal

lotsintel_dismiss_signal

Keep a signal and do not send it. A sent signal cannot be dismissed.

GET
/api/v1/lotsintel/projects/:project_id/signals

List signals

lotsintel_list_signals

List signals for a project. status is unsent, sent, or dismissed. unsent means recorded and not yet delivered.

POST
/api/v1/lotsintel/projects/:project_id/signals

Record signal

lotsintel_record_signal

Record a competitive change. Pass observation ids from this competitor. At least one must be a later observation rather than a baseline. This does not send the signal.

POST
/api/v1/lotsintel/projects/:project_id/signals/:signal_id/send

Send signal

lotsintel_send_signal

Deliver one signal once to the project email addresses and optional webhook. A second call returns the original delivery and does not send again. Fails with NO_DESTINATIONS when the project has nowhere to send. A partial failure stays unsent so only the failed destinations are retried.

surfaces

PUT
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id/surfaces

Set watch surfaces

lotsintel_set_surfaces

Replace the pages and social accounts watched for one competitor. Social platforms are twitter (use this for X), instagram, linkedin, linkedin_page, and threads. A homepage, pricing page, changelog, or blog needs a public url.

watch

GET
/api/v1/lotsintel/projects/:project_id/watch-queue

Get watch queue

lotsintel_get_watch_queue

Start every check run here. Returns unsent signals first, then at most 3 due competitors. Each competitor includes its surfaces and the latest observation, or needs_surfaces when nothing is being watched yet.