digitalpublic-com CRM API
The CRM API from digitalpublic-com — 2 operation(s) for crm.
The CRM API from digitalpublic-com — 2 operation(s) for crm.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/digitalpublic-com:digitalpublic-com-crm-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: DigitalPublic Agent CRM API
version: 2026-09-10-trial-active-projects-v1
description: API for external AI agents to interact with DigitalPublic projects. Provides discovery, project context, Google Ads, Meta Ads, LinkedIn organic and LinkedIn Ads, Merchant Center, SEO, AEO, Search Console, WordPress, Analytics, Tag Manager, Business Profile, mailings, CRM, comments, reports, and scheduling.
contact:
email: soporte@digitalpublic.com
servers:
- url: https://platform.digitalpublic.com
description: Production
security:
- bearerAuth: []
tags:
- name: CRM
paths:
/api/crm/agent-query:
post:
summary: CRM leads and pipeline data
description: 'Read project leads, configured stage semantics, interactions, pipeline summary, and exportable segments. Call get_pipeline_stages before moving leads. Pending means action required from us: stages with pendingMode=when_follow_up_due are not pending while nextActionAt is in the future and become pending when it expires or is missing.'
tags:
- CRM
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AgentRequest'
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/AgentResponse'
x-tools:
- name: get_pipeline_stages
description: Get configured stages, operational semantics, pendingMode, and recommended transitions. when_follow_up_due is excluded from pending counts while nextActionAt is future, then automatically becomes pending when due or missing.
params: {}
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: get_inbound_form_config
description: Get the public form webhook configuration for server-side integrations. The returned URL contains a revocable token and must be stored as a deployment secret, never logged or exposed in client-side code.
params: {}
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_leads
description: Paginated lead list with filters.
params:
queue:
type: string
optional: true
enum:
- pending
- in_progress
- finished
- spam
stage:
type: string
optional: true
type:
type: string
optional: true
enum:
- LEAD
- CLIENT
- PARTNER
- HISTORIC
tag:
type: string
optional: true
source:
type: string
optional: true
q:
type: string
optional: true
ownerUserId:
type: string
optional: true
nextActionBefore:
type: string
optional: true
limit:
type: number
default: 20
offset:
type: number
default: 0
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: get_lead
description: Full lead detail with the latest 20 interactions.
params:
id:
type: string
optional: true
email:
type: string
optional: true
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: search_leads
description: Text search across name, company, and email.
params:
q:
type: string
required: true
limit:
type: number
default: 20
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_interactions
description: Paginated interaction history for one lead.
params:
leadId:
type: string
required: true
limit:
type: number
default: 20
offset:
type: number
default: 0
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: pipeline_summary
description: Lead counts by stage and type plus stale leads.
params:
staleDays:
type: number
default: 14
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: export_segment
description: Emails and names for a segment. Always excludes opted-out leads.
params:
stage:
type: string
optional: true
type:
type: string
optional: true
tag:
type: string
optional: true
limit:
type: number
default: 1000
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: check_mutation_status
description: Check one CRM configuration mutation.
params:
mutationId:
type: string
required: true
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_pending_mutations
description: List pending CRM configuration mutations.
params:
limit:
type: number
default: 20
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_mutation_history
description: List CRM configuration mutation history.
params:
status:
type: string
default: all
limit:
type: number
default: 20
x-mcp:
channel: crm
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
operationId: postApiCrmAgentQuery
x-operation-id-source: derived
/api/crm/agent-mutate:
post:
summary: Manage CRM leads
description: 'Create and edit leads, progress the commercial workflow, log interactions, schedule next actions, and handle GDPR opt-outs. Mandatory workflow: after sending or replying to an email, call progress_lead with the resulting stage and follow-up. DigitalPublic automatically moves new emailed leads to awaiting_reply as a fallback, but the agent remains responsible for reviewing nextActionAt. Waiting stages are removed from pending counts while that date is future and become pending again when it expires.'
tags:
- CRM
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AgentRequest'
responses:
'200':
description: Executed
content:
application/json:
schema:
$ref: '#/components/schemas/AgentResponse'
x-tools:
- name: create_lead
description: 'Create a lead with email deduplication; returns { deduplicated: true, leadId } when the email already exists.'
params:
email:
type: string
optional: true
name:
type: string
optional: true
company:
type: string
optional: true
type:
type: string
optional: true
default: LEAD
stage:
type: string
optional: true
tags:
type: array
optional: true
source:
type: string
optional: true
sourceDetail:
type: string
optional: true
legalBasis:
type: string
optional: true
enum:
- consent
- legitimate_interest
- contract
interactionSummary:
type: string
optional: true
agent_note:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: submit_web_lead
description: Server-to-server ingestion for a website form already validated by the originating site. Idempotently records the submission, quarantines review-risk entries, and creates an auditable notification outbox item for accepted leads.
params:
idempotencyKey:
type: string
required: true
fields:
type: object
required: true
riskLevel:
type: string
optional: true
enum:
- accepted
- review
riskReasons:
type: array
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: update_lead
description: Partially update lead fields. Stage changes are rejected; use progress_lead.
params:
id:
type: string
required: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: progress_lead
description: Recommended after every commercial action. Atomically changes stage, logs the reason, and schedules follow-up. awaiting_reply requires a future nextActionAt and nextActionNote. Waiting stages do not count as pending until the follow-up expires; won/lost/spam close the lead and clear follow-up.
params:
id:
type: string
required: true
stage:
type: string
required: true
enum:
- new
- awaiting_reply
- qualified
- meeting_scheduled
- proposal_sent
- won
- lost
- spam
note:
type: string
required: true
nextActionAt:
type: string
optional: true
nextActionNote:
type: string
optional: true
authorName:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: change_stage
description: Basic compatibility stage change. awaiting_reply is rejected because it requires progress_lead with follow-up.
params:
id:
type: string
required: true
stage:
type: string
required: true
note:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: add_interaction
description: Log an interaction on a lead. For email_in/email_out it accepts the FULL email (subject, sender, recipients, complete body) plus base64 attachments; attachments download at GET /api/crm/attachments/{attachmentId}.
params:
leadId:
type: string
required: true
kind:
type: string
required: true
enum:
- form_submission
- email_out
- email_in
- call
- note
- stage_change
- import
summary:
type: string
required: true
occurredAt:
type: string
optional: true
data:
type: object
optional: true
email:
type: object
optional: true
description: 'Only email_in/email_out: { subject, from, to[], cc[], bodyText, bodyHtml }'
attachments:
type: array
optional: true
description: 'Only email_in/email_out, max 10 x 10MB: [{ filename, contentType?, contentBase64 }]'
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: register_inbound_email
description: Record a human-relayed inbound email without inventing RFC headers. Existing governed-audience threads do not require a CRM lead or enabled CRM. Use leadId plus a governed CRM route only to create a new thread.
params:
conversationId:
type: string
optional: true
leadId:
type: string
optional: true
purpose:
type: string
optional: true
enum:
- GENERAL_EMAIL
- INFORMATION_REQUEST
- COMMERCIAL_PROPOSAL
- QUOTE
emailAccountId:
type: string
optional: true
idempotencyKey:
type: string
required: true
subject:
type: string
required: true
from:
type: string
required: true
to:
type: array
optional: true
cc:
type: array
optional: true
bodyText:
type: string
optional: true
bodyHtml:
type: string
optional: true
messageId:
type: string
optional: true
inReplyToMessageId:
type: string
optional: true
references:
type: array
optional: true
attachments:
type: array
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: set_next_action
description: Schedule the next commercial action.
params:
id:
type: string
required: true
nextActionAt:
type: string
required: true
nextActionNote:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: clear_next_action
description: Cancel the scheduled next action without changing the lead stage. Requires a reason and records the previous follow-up in the lead history.
params:
id:
type: string
required: true
note:
type: string
required: true
authorName:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: opt_out_lead
description: Mark GDPR communication opt-out.
params:
id:
type: string
optional: true
email:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: archive_lead
description: Soft-delete a lead (trash).
params:
id:
type: string
required: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: sync_segment_to_audience
description: Create or update a Brevo list from a CRM segment (always excludes opted-out leads). Requires verified Brevo mailings config.
params:
name:
type: string
optional: true
audienceId:
type: string
optional: true
stage:
type: string
optional: true
type:
type: string
optional: true
tag:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: sync_brevo_unsubscribes
description: Push Brevo blacklisted contacts into the CRM as GDPR opt-outs.
params:
sinceDays:
type: number
default: 30
x-mcp:
channel: crm
effect: sync
requiredScope: read
approval: auto_approval_possible
requestShape: tool_params
workload:
executionMode: BACKGROUND
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: PROVIDER_KEY
x-resources:
- resource: crm_config
operations:
- update
description: Enable or configure CRM. This requires human approval unless CRM auto-approval is enabled.
params:
data:
type: array
required: true
description: '[{ enabled?, inboundEnabled?, pipelineStages?, notifyEmails? }]'
validate_only:
type: boolean
default: false
agent_note:
type: string
optional: true
x-mcp:
channel: crm
effect: write
requiredScope: write
approval: auto_approval_possible
requestShape: resource_operation
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
operationId: postApiCrmAgentMutate
x-operation-id-source: derived
components:
schemas:
AgentRequest:
type: object
required:
- tool
properties:
tool:
type: string
description: Tool name to execute
params:
type: object
description: Tool-specific parameters
default: {}
projectId:
type: string
description: Required when using a dpa_ global agent token. dpk_ project API keys infer the project automatically.
AgentResponse:
type: object
properties:
ok:
type: boolean
status:
type: string
description: executed, queued, pending_approval, or a domain-specific status
operationId:
type: string
description: Persistent operation id when work continues in the background.
resourceClass:
type: string
enum:
- LIGHT
- STANDARD
- HEAVY
retryAfterSeconds:
type: integer
data:
type: object
error:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: Project API key starting with dpk_ or global agent token starting with dpa_. dpa_ requests must include projectId or X-DigitalPublic-Project-Id for project-scoped endpoints.
x-commercial-channels:
- key: google_ads
label:
es: Google Ads
en: Google Ads
commercialModule: google_ads
services:
- googleAds
mcpChannels:
- google_ads
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases:
- google-ads
- key: wordpress
label:
es: WordPress
en: WordPress
commercialModule: seo_aeo
services:
- wordpressSeo
mcpChannels:
- wordpress
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases:
- wordpress-seo
- key: crm
label:
es: CRM
en: CRM
commercialModule: crm
services:
- crm
mcpChannels:
- crm
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases: []
- key: websites
label:
es: Sitios web
en: Websites
commercialModule: content_web
services:
- landingPages
mcpChannels:
- landing_pages
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases:
- landing-pages
- landing_pages
- sites-web
- sites_web
- key: social
label:
es: Redes sociales
en: Social media
commercialModule: social
services:
- socialOrganic
- socialX
- socialLinkedIn
mcpChannels:
- social
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases: []
- key: blog
label:
es: Blog
en: Blog
commercialModule: content_web
services:
- blog
mcpChannels:
- blog
public: true
availability: generally_available
access: read_write
requiresConnection: true
acceptedAliases: []
- key: meta_ads
label:
es: Meta Ads
en: Meta Ads
commercialModule: meta_ads
services:
- metaAds
mcpChannels:
- meta_ads
public: true
availability: limited
access: read_write
requiresConnection: true
acceptedAliases:
- meta-ads
- meta
- key: linkedin_ads
label:
es: LinkedIn Ads
en: LinkedIn Ads
commercialModule: linkedin_ads
services:
- linkedinAds
mcpChannels:
- linkedin_ads
public: true
availability: limited
access: read_write
requiresConnection: true
acceptedAliases:
- linkedin-ads
- linkedin
- key: seo
label:
es: SEO y AEO
en: SEO and AEO
commercialModule: seo_aeo
services:
- seo
- aeo
mcpChannels:
- seo_tools
- aeo
public: true
availability: limited
access: read_write
requiresConnection: false
acceptedAliases: []
- key: analytics
label:
es: Analítica
en: Analytics
commercialModule: analytics
services:
- analytics
mcpChannels:
- analytics
public: true
availability: limited
access: read
requiresConnection: true
acceptedAliases: []
- key: search_console
label:
es: Search Console
en: Search Console
commercialModule: search_console
services:
- searchConsole
mcpChannels:
- search_console
public: true
availability: limited
access: read_write
requiresConnection: true
acceptedAliases:
- search-console
- key: email
label:
es: Email y newsletters
en: Email and newsletters
commercialModule: email_marketing
services:
- mailings
mcpChannels:
- mailings
public: true
availability: limited
access: read_write
requiresConnection: true
acceptedAliases:
- brevo