digitalpublic-com Project API
The Project API from digitalpublic-com — 1 operation(s) for project.
The Project API from digitalpublic-com — 1 operation(s) for project.
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-project-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 Project 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: Project
paths:
/api/projects/agent-query:
post:
summary: Project information
description: Get metadata about the project linked to this API key and manage draft emails.
tags:
- Project
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_project_info
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
processEligible: true
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
description: Returns project name, description, URL, secret-redacted context, email defaults, creation date, and connected services (Google Ads, SEO, Search Console, Analytics).
params: {}
- name: update_project_context
description: Updates the free-form project context/instructions used by agents. Credentials must be stored in their provider connection or an approved secret vault. Requires write scope.
params:
content:
type: string
required: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: list_activity
description: List recent project activity/audit timeline entries visible to agents.
params:
limit:
type: number
optional: true
default: 50
actor:
type: string
optional: true
enum:
- USER
- AGENT
- SYSTEM
area:
type: string
optional: true
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_messages
description: List recent project messages visible to agents, optionally filtered by channel slug.
params:
channel:
type: string
optional: true
limit:
type: number
optional: true
default: 50
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: post_message
description: Post a project message as the authenticated API key. Requires write scope.
params:
content:
type: string
required: true
channel:
type: string
optional: true
default: general
parentId:
type: string
optional: true
visibility:
type: string
optional: true
enum:
- all
- agents
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: reply_message
description: Reply to an existing project message as the authenticated API key. Requires write scope.
params:
parentId:
type: string
required: true
content:
type: string
required: true
channel:
type: string
optional: true
default: general
visibility:
type: string
optional: true
enum:
- all
- agents
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: get_email_draft
description: Reads an existing project email by ID. Read-only; does not require write scope. Returns full bodyHtml, derived bodyText, recipients, safe email account metadata, attachments, and audit dates. Agents should call this before updating a draft that may have been edited by a human.
params:
id:
type: string
required: true
response:
id: string
projectId: string
status: DRAFT | AUTHORIZED | SENT
subject: string
bodyHtml: string
bodyText: string
to: array
cc: array
bcc: array
emailAccount: '{ id, name, fromName, fromEmail } | null'
attachments: array
createdAt: ISO8601 string
updatedAt: ISO8601 string
authorizedAt: ISO8601 string | null
authorizedBy: object | null
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_email_drafts
description: Lists project emails with a compact payload that omits full bodyHtml. Read-only; does not require write scope. Use it to find DRAFT, AUTHORIZED, or SENT emails before calling get_email_draft.
params:
status:
type: string
optional: true
enum:
- DRAFT
- AUTHORIZED
- SENT
limit:
type: number
optional: true
default: 20
description: Clamped between 1 and 100.
since:
type: string
optional: true
description: ISO date; filters by updatedAt >= since.
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: list_email_conversations
description: Lists project email conversations and their timelines.
params:
leadId:
type: string
optional: true
status:
type: string
optional: true
enum:
- OPEN
- ACTION_REQUIRED
- WAITING_EXTERNAL
- CLOSED
limit:
type: number
optional: true
cursor:
type: string
optional: true
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: find_email_conversations_for_lead
description: Finds conversations for one CRM lead.
params:
leadId:
type: string
required: true
limit:
type: number
optional: true
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: get_email_conversation
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
processEligible: true
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
description: Returns one full conversation timeline.
params:
conversationId:
type: string
required: true
- name: create_email_draft
description: Creates a DRAFT email. A stable idempotencyKey makes retries safe. CRM_LEAD resolves the recipient from a lead in the authorized project; agents cannot supply an arbitrary address. Human authorization is always required before sending.
params:
subject:
type: string
required: true
bodyHtml:
type: string
required: true
audience:
type: string
optional: true
enum:
- CLIENT_FINAL
- DISTRIBUTOR
description: Required for FLEXIBLE projects. CRM_ONLY projects must use targetType CRM_LEAD and leadId instead.
purpose:
type: string
optional: true
enum:
- MONTHLY_REPORT
- TECHNICAL_REPORT
- GENERAL_EMAIL
- APPROVAL_REQUEST
- COMMERCIAL_PROPOSAL
- QUOTE
- INFORMATION_REQUEST
targetType:
type: string
optional: true
enum:
- STATIC_AUDIENCE
- CRM_LEAD
leadId:
type: string
optional: true
description: Required when targetType is CRM_LEAD.
to:
type: array
optional: true
description: Required only when the project has no active communication route. READY projects resolve recipients from audience and purpose.
cc:
type: array
optional: true
bcc:
type: array
optional: true
fromName:
type: string
optional: true
fromEmail:
type: string
optional: true
emailAccountId:
type: string
optional: true
description: If omitted, null, or blank, the project default email account is used when configured.
reportId:
type: string
optional: true
idempotencyKey:
type: string
optional: true
description: Stable project-scoped key for retry-safe draft creation.
attachments:
type: array
optional: true
description: Report IDs belonging to this project, or internal attachment objects. Invalid or cross-project IDs return 400.
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: create_email_reply_draft
description: Creates a reply to the latest inbound message in a conversation and preserves RFC threading. Human authorization remains required.
params:
conversationId:
type: string
optional: true
description: Preferred conversation ID. Legacy id remains accepted.
id:
type: string
optional: true
emailAccountId:
type: string
optional: true
description: Allowed sender account configured on the route.
bodyHtml:
type: string
optional: true
description: Initial reply body; may be blank for later editing.
includeQuotedHistory:
type: boolean
optional: true
default: true
reattachAttachmentIds:
type: array
optional: true
idempotencyKey:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: create_email_follow_up_draft
description: Creates a follow-up in an existing thread only when no inbound reply is pending.
params:
conversationId:
type: string
required: true
emailAccountId:
type: string
optional: true
description: Allowed sender account configured on the route.
bodyHtml:
type: string
optional: true
includeQuotedHistory:
type: boolean
optional: true
default: true
reattachAttachmentIds:
type: array
optional: true
idempotencyKey:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: defer_email_draft
description: Defers a draft until a manual date or follows the linked CRM lead nextActionAt. It never schedules an automatic send.
params:
id:
type: string
required: true
mode:
type: string
required: true
enum:
- MANUAL_DATE
- CRM_NEXT_ACTION
until:
type: string
optional: true
reason:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: resume_email_draft
description: Makes an agent-deferred draft actionable now. An agent cannot override a human deferral.
params:
id:
type: string
required: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: update_email_draft
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
processEligible: true
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
description: 'Updates a DRAFT or AUTHORIZED email. Requires write scope. Missing account/CC/BCC are completed from project defaults when absent on the draft; explicit cc: [] or bcc: [] clears those copies. The signature is always attached from the configured email account and cannot be overridden by agents. If the email was AUTHORIZED, any update automatically reverts it to DRAFT and the response includes revertedFromAuthorized: true.'
params:
id:
type: string
required: true
subject:
type: string
optional: true
bodyHtml:
type: string
optional: true
to:
type: array
optional: true
cc:
type: array
optional: true
bcc:
type: array
optional: true
fromName:
type: string
optional: true
fromEmail:
type: string
optional: true
emailAccountId:
type: string
optional: true
reportId:
type: string
optional: true
attachments:
type: array
optional: true
description: Report IDs belonging to this project. Replaces draft attachments when present.
- name: delete_email_draft
description: Deletes a DRAFT or AUTHORIZED email. Requires write scope. SENT emails cannot be deleted by this tool.
params:
id:
type: string
required: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: send_email_draft
description: 'Sends an existing AUTHORIZED email for this project. Requires write scope. Hard security rule: this tool rejects DRAFT emails with HTTP 409. Only a logged-in human using the DigitalPublic UI can move DRAFT -> AUTHORIZED; there is intentionally no agent tool or parameter to authorize drafts.'
params:
id:
type: string
required: true
emailAccountId:
type: string
optional: true
description: Optional explicitly assigned account. If omitted, the explicitly assigned project default is used.
response:
id: string
status: SENT
sentAt: ISO8601 string
to: array
cc: array
bcc: array
subject: string
bodyHtml: string
attachments: array
messageId: string | null
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: register_external_email_send
description: Idempotently records an email that was sent outside DigitalPublic. Requires write scope. Stores the exact sanitized HTML body, account, sent date, RFC Message-ID and thread metadata; creates the CRM email_out interaction and reconciles linked processes. Repeating the same Message-ID in the project returns the existing registration.
params:
id:
type: string
required: true
description: DRAFT or AUTHORIZED email ID in this project.
conversationId:
type: string
optional: true
description: Conversation the email must belong to.
sentAt:
type: string
required: true
description: ISO8601 send date.
bodyHtml:
type: string
required: true
description: Exact HTML body that was sent.
messageId:
type: string
required: true
description: RFC Message-ID supplied by the external provider.
emailAccountId:
type: string
optional: true
inReplyToMessageId:
type: string
optional: true
references:
type: array
optional: true
providerThreadId:
type: string
optional: true
idempotencyKey:
type: string
optional: true
description: Caller-stable key for retries; deduplicated within the project.
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: none
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: list_email_accounts
description: Lists only the active email accounts explicitly assigned to this project. Historical use never grants access. Read-only; does not require write scope. Returns safe metadata, ownership scope (GLOBAL, GROUP or PROJECT), owner, assignment source, status and default flag, never passwords, tokens or SMTP/OAuth secrets. Use it to discover a permitted emailAccountId before creating or sending email.
params: {}
response:
ok: true
data: array of { id, name, providerType, fromName, fromEmail, host, port, secure, oauthConnected, scopeType, ownerProject, ownerGroup, status, source, isDefault }
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: test_email_account
description: Runs a live connectivity check against one active account explicitly assigned to this project, reusing the same transport verification as the admin UI. Read-only; does not send any email and does not require write scope. Returns safe account metadata plus an actionable failureKind. Rejects unassigned, disabled or scope-incompatible accounts with a stable EMAIL_ACCOUNT_* code. Failures are recorded in the project activity log.
params:
emailAccountId:
type: string
required: true
description: Id of an active account explicitly assigned to the project.
response:
ok: true
data: '{ account: { id, name, providerType, fromName, fromEmail, host, port, secure, oauthConnected, oauthEmail, oauthConnectedAt }, test: { ok: boolean, failureKind?, error? } }'
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: test_project_email_accounts
description: Runs the connectivity check on every active account explicitly assigned to this project. Read-only; does not send any email and does not require write scope. Returns each account's safe metadata and test result plus a summary { total, passed, failed }. Historical use never adds an account to this list.
params: {}
response:
ok: true
data: '{ accounts: array of { account, test }, summary: { total, passed, failed } }'
x-mcp:
channel: projects
effect: read
requiredScope: read
approval: none
requestShape: tool_params
workload:
executionMode: INLINE
resourceClass: LIGHT
priority: INTERACTIVE
costModel: FIXED
idempotencyMode: READ_BEFORE_WRITE
- name: request_email_account_assignment
description: Proposes assigning a GLOBAL or compatible GROUP account to this project. Requires write scope and always creates a human approval; it never exposes credentials or grants access immediately.
params:
emailAccountId:
type: string
required: true
reason:
type: string
required: true
idempotencyKey:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: human
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: request_email_account_revocation
description: Proposes revoking one explicitly assigned account. Requires write scope and human approval. Future drafts will be blocked if they still reference the revoked account.
params:
emailAccountId:
type: string
required: true
reason:
type: string
required: true
idempotencyKey:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: human
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
- name: request_default_email_account
description: Proposes making one already assigned active account the project default. Requires write scope and human approval.
params:
emailAccountId:
type: string
required: true
reason:
type: string
required: true
idempotencyKey:
type: string
optional: true
x-mcp:
channel: projects
effect: write
requiredScope: write
approval: human
requestShape: tool_params
workload:
executionMode: AUTO
resourceClass: STANDARD
priority: NORMAL
costModel: ITEMS
idempotencyMode: READ_BEFORE_WRITE
operationId: postApiProjectsAgentQuery
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