digitalpublic-com CRM API

The CRM API from digitalpublic-com — 2 operation(s) for crm.

Operations 2

POST /api/crm/agent-query CRM leads and pipeline data #
POST /api/crm/agent-mutate Manage CRM leads #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/digitalpublic-com:digitalpublic-com-crm-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

digitalpublic-com-crm-api-openapi.yml Raw ↑
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