API Documentation
RESTful API documentation for developers
https://intel.lotsmcp.comAPI Key (Bearer token or X-API-Key header)
19
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/competitorscompetitors
/api/v1/lotsintel/projects/:project_id/competitorsAdd competitor
lotsintel_add_competitorAdd 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.
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_idArchive competitor
lotsintel_archive_competitorTake a competitor off the watch. History stays. A later import or restore_competitor puts them back.
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_idGet competitor
lotsintel_get_competitorGet one competitor, the active pages and accounts being watched, the latest observation on each, and signals that have not been sent.
/api/v1/lotsintel/projects/:project_id/competitors/importImport competitors
lotsintel_import_competitorsAdd 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.
/api/v1/lotsintel/projects/:project_id/competitorsList competitors
lotsintel_list_competitorsList competitors in a project. Filter with status (proposed, active, paused, archived), kind, or due=true. Archived competitors are omitted unless status=archived.
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id/restoreRestore competitor
lotsintel_restore_competitorPut an archived competitor back on the watch as active and due.
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_idUpdate competitor
lotsintel_update_competitorChange kind, priority, interval, website, status, or notes. Status here is proposed, active, or paused. Removing someone from the watch is archive_competitor.
observations
/api/v1/lotsintel/projects/:project_id/observationsRecord observation
lotsintel_record_observationSave 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.
/api/v1/lotsintel/projects/:project_id/surfaces/:surface_id/refreshRefresh social surface
lotsintel_refresh_social_surfaceRead 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
/api/v1/lotsintel/projectsCreate intel project
lotsintel_create_projectCreate 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.
/api/v1/lotsintel/projects/:project_idGet intel project
lotsintel_get_projectGet one project plus counts of active competitors, competitors due for a check, and unsent signals.
/api/v1/lotsintel/projectsList intel projects
lotsintel_list_projectsList the products this owner is watching.
/api/v1/lotsintel/projects/:project_idUpdate intel project
lotsintel_update_projectChange 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
/api/v1/lotsintel/projects/:project_id/signals/:signal_id/dismissDismiss signal
lotsintel_dismiss_signalKeep a signal and do not send it. A sent signal cannot be dismissed.
/api/v1/lotsintel/projects/:project_id/signalsList signals
lotsintel_list_signalsList signals for a project. status is unsent, sent, or dismissed. unsent means recorded and not yet delivered.
/api/v1/lotsintel/projects/:project_id/signalsRecord signal
lotsintel_record_signalRecord 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.
/api/v1/lotsintel/projects/:project_id/signals/:signal_id/sendSend signal
lotsintel_send_signalDeliver 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
/api/v1/lotsintel/projects/:project_id/competitors/:competitor_id/surfacesSet watch surfaces
lotsintel_set_surfacesReplace 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
/api/v1/lotsintel/projects/:project_id/watch-queueGet watch queue
lotsintel_get_watch_queueStart 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.