{
  "schema": "aaes/capability-pack/1",
  "provider": "mailchimp",
  "version": "1.0.0",
  "description": "Read Mailchimp audiences, members, and campaigns; add or update members, send campaigns, and delete campaigns or entire audiences. Member updates can send confirmation emails or enable marketing mail.",
  "notes": "The endpoint host 'mailchimp-dc.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): the Marketing API host is data-center-specific (<dc>.api.mailchimp.com, where <dc> is the server prefix visible in the account's browser URL, e.g. us19, according to the reviewed quick-start guide), so substitute the customer's real <dc>.api.mailchimp.com host before enabling, in every endpoint, in the resource locators and in every egress allowlist entry — the allowlist matches exactly, so all three must be substituted together, and substitution is a required deployment step.\n\nThe Marketing API is version 3.0 (the retrieved fundamentals page: version 2.0 is deprecated, versions 1.x are gone).\n\nApproval classification: campaign send delivers email to an entire list of end recipients, so although the vendor operation is a POST to an actions subresource it is registered as create and send at the minimum R3 tier — send is one of the designated actions requiring human approval.\n\nMember upsert is registered as create, update and send at the minimum R3 tier: the unrestricted request body can set a member's status to pending, which triggers Mailchimp's double-opt-in confirmation email to that address — a message to an end recipient — and can set status to subscribed, which re-enables marketing mail; intended limits need a separate enforceable control, so consent enforcement must come from policy and review, not from this registration.\n\nCampaign send is registered as create and send at the minimum R3 tier: a campaign can be edited after creation, and targeting, subscription status and exclusions determine the actual recipients.\n\nDocumented exclusions — this pack does not register: permanent member erasure (the members delete-permanent action, Mailchimp's GDPR-oriented irreversible erasure — the truly irreversible member operation, deliberately left out); batch operations (one call executing many operations, which would defeat per-call review); automation flows and classic automation queue management (programmed sends outside a single reviewed action); transactional email (the separate Mandrill/Transactional API); webhook management (redirecting where member events flow); template, segment and interest-category administration; e-commerce store operations; and the OAuth2 authorization-code flow for third-party integrations — each is a different registration requiring its own review, and none is approximated here.\n\nDocumentary limitation, resolved 2026-09-23: at the 2026-09-21 review the operation-specific reference pages for the member add-or-update call and the campaign send action returned only the reference site's API index from the review environment. The member-upsert claims were guide-documented at that time (the retrieved create-your-first-audience guide shows the PUT /3.0/lists/{list_id}/members/{subscriber_hash} member update path, names the add-or-update list member endpoint, and states that adding a contact with status pending sends a double-opt-in confirmation email).\n\nOn 2026-09-23 the campaign-send operation page (https://mailchimp.com/developer/marketing/api/campaigns/send-campaign/) was retrieved live: it now server-renders the operation entry — post /campaigns/{campaign_id}/actions/send, 'Send a Mailchimp campaign. For RSS Campaigns, the campaign will send according to its schedule. All other campaigns will send immediately.' — and the page's own backing data document (the site's Gatsby page-data JSON) carries the full reference with operationId postCampaignsIdActionsSend, so the send path is now corroborated at operation level, not section-index level.\n\nHonestly stated: Mailchimp publishes no standalone OpenAPI or Swagger document at the probed vendor URLs (those URLs return the site's landing shell, HTTP 200 but no spec); the corroboration above rests on the vendor's own reference site and its backing data, not on a separate published specification.",
  "credential": {
    "secret_ref_id": "secret-ref-mailchimp-api-key",
    "custody": "customer_vault",
    "inject": "header",
    "inject_name": "Authorization",
    "note": "A Mailchimp Marketing API key presented as HTTP Basic authentication, held in the client's own secret manager. The retrieved quick-start guide authenticates with --user \"anystring:${apikey}\": the username may be any string and the password is the API key. The stored material must be the complete Authorization header value (scheme included): 'Basic ' followed by the base64 encoding of '<anystring>:<apikey>' exactly as issued.\n\nThere is no token-issuance exchange: the key is the credential, generated in the account's API Keys section and shown only once at creation, according to the reviewed quick-start guide, so the custody job stores it once and the executor injects it verbatim; renewal means generating a new key in the account and updating the reference.\n\nExpiry and revocation: the retrieved guides document no automatic expiry for API keys, and no revocation semantics either — keys can be deleted in the account, but whether deletion takes effect immediately for in-flight use, and whether any revocation cut-off exists, is not stated in any retrieved source. Treat an issued key as valid until the deployment verifies deletion behavior against the live account, and review that behavior before enabling.\n\nLeast privilege, Mailchimp documents that an API key provides full account access and offers no per-key scoping for API-key authentication, so least privilege cannot be expressed in the key itself — it must come from which account and user issues the key and from AAES policy and capability scope; the retrieved guides point to OAuth 2 as the alternative for integrations acting on behalf of other users.\n\nExecutor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack."
  },
  "capabilities": [
    {
      "capability_id": "mailchimp.lists.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/lists",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "mailchimp-audiences",
      "description": "Retrieve the collection of lists (audiences) in the account, according to the reviewed API reference's Lists/Audiences section. The registered path covers the collection read only — single-list reads are not registered, and of the list subresources only the members surface is registered (the members collection read and the member upsert capability); all other list subresources are not registered.\n\nThe host is a reserved placeholder: substitute the customer's <dc>.api.mailchimp.com host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.members.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/lists/LIST_ID/members",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "mailchimp-audiences",
      "description": "Retrieve the collection of members of one list, according to the reviewed API reference's Lists/Audiences > Members section: email addresses, names, merge fields and subscription status are personal data, so the read is classified as pii (personal data). LIST_ID is a placeholder the deployment binds to a concrete list before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.campaigns.read",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R0",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/campaigns",
      "method": "GET",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "read"
      ],
      "resource_id": "mailchimp-campaigns",
      "description": "Retrieve the collection of campaigns in the account, according to the reviewed API reference's Campaigns section: campaign titles, types and send states, classified as internal data. The registered path covers the collection read only — campaign content, feedback and checklist subresources are not registered.\n\nThe host is a reserved placeholder: substitute the customer's <dc>.api.mailchimp.com host before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.members.upsert",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/lists/LIST_ID/members/SUBSCRIBER_HASH",
      "method": "PUT",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "create",
        "update",
        "send"
      ],
      "resource_id": "mailchimp-audiences",
      "description": "Add or update one list member (the Marketing API's idempotent add-or-update member call).\n\nRegistered as create, update and send at the minimum R3 tier: the unrestricted request body can set status to pending, which makes Mailchimp send a double-opt-in confirmation email to that address — a message delivered to an end recipient that cannot be recalled after delivery (send is one of the designated actions requiring human approval: delete, send, pay, deploy, approve, share and transfer) — and can set status to subscribed, which re-enables marketing email to that address.\n\nThis registration does not enforce recipient consent, so consent checks must live in policy and review, not in this pack. LIST_ID and SUBSCRIBER_HASH are placeholders the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.campaigns.send",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/campaigns/CAMPAIGN_ID/actions/send",
      "method": "POST",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "create",
        "send"
      ],
      "resource_id": "mailchimp-campaigns",
      "description": "Send a campaign to its list. The vendor operation is a POST to an actions subresource, but the effect delivers the campaign's email to its recipients — messages to end recipients that cannot be recalled after delivery — so the capability is registered as create and send at the minimum R3 tier under the end-recipient message convention; send is one of the designated actions requiring human approval.\n\nOn supported AAES-mediated execution paths, irreversible actions require approval by an authorized person; this does not prevent calls through bypass or observation-only paths. This registration makes no claim that the campaign's content or audience were fixed at creation: a campaign can be edited at any time before sending, and targeting options, each member's subscription status and Mailchimp's exclusions determine who actually receives it — review the campaign before enabling the send.\n\nCAMPAIGN_ID is a placeholder the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.campaigns.delete",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "internal",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/campaigns/CAMPAIGN_ID",
      "method": "DELETE",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "delete"
      ],
      "resource_id": "mailchimp-campaigns",
      "description": "Delete a campaign. Delete is one of the designated actions requiring human approval; deleting a campaign removes it and its content from the account, and this pack makes no reversibility claim. CAMPAIGN_ID is a placeholder the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    },
    {
      "capability_id": "mailchimp.lists.delete",
      "version": "1.0.0",
      "kind": "tool",
      "risk_tier": "R3",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN",
      "data_class": "pii",
      "egress_allowlist": [
        "mailchimp-dc.invalid"
      ],
      "endpoint": "https://mailchimp-dc.invalid/3.0/lists/LIST_ID",
      "method": "DELETE",
      "connector": "http",
      "custody": "customer_vault",
      "secret_ref_id": "secret-ref-mailchimp-api-key",
      "inject": "header",
      "inject_name": "Authorization",
      "actions": [
        "delete"
      ],
      "resource_id": "mailchimp-audiences",
      "description": "Delete an entire list (audience). The scope of impact is the whole audience: the list, its members and their stored data are personal data at scale, and delete is one of the designated actions requiring human approval, so the capability sits at the minimum R3 tier.\n\nOn supported AAES-mediated execution paths, irreversible actions require approval by an authorized person; this does not prevent calls through bypass or observation-only paths. LIST_ID is a placeholder the deployment binds before enabling, and the host is a reserved placeholder to substitute before enabling.",
      "requires_review": true
    }
  ],
  "resources": [
    {
      "resource_id": "mailchimp-audiences",
      "kind": "api",
      "locator": "https://mailchimp-dc.invalid/3.0/lists",
      "data_class": "pii",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    },
    {
      "resource_id": "mailchimp-campaigns",
      "kind": "api",
      "locator": "https://mailchimp-dc.invalid/3.0/campaigns",
      "data_class": "internal",
      "owner": "REPLACE-WITH-ACCOUNTABLE-HUMAN"
    }
  ],
  "review": {
    "state": "library",
    "date": "2026-09-23",
    "sources": [
      "https://mailchimp.com/developer/marketing/docs/fundamentals/ (retrieved 2026-09-21)",
      "https://mailchimp.com/developer/marketing/guides/quick-start/ (retrieved 2026-09-21)",
      "https://mailchimp.com/developer/marketing/api/campaigns/ (retrieved 2026-09-21)",
      "https://mailchimp.com/developer/marketing/api/lists/ (retrieved 2026-09-21)",
      "https://mailchimp.com/developer/marketing/guides/create-your-first-audience/ (retrieved 2026-09-21)",
      "https://mailchimp.com/developer/marketing/api/campaigns/send-campaign/ (retrieved 2026-09-23)",
      "https://mailchimp.com/developer/page-data/marketing/api/campaigns/send-campaign/page-data.json (retrieved 2026-09-23)"
    ],
    "reviewer_id": "aaes-eng"
  }
}
