Cyberimpact MCP by usefulapi

Read Cyberimpact members, groups and mailing results; add members, send opt-ins, create mailings.

我該用這個嗎

品質與安全性

A
說明品質
99%
結構描述完整度
92%
命名品質
76%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(5)

  • LOWTool 'cyberimpact_get_member_mailings' name length outside 3-30 range在 cyberimpact_get_member_mailings 中
  • LOWTool 'cyberimpact_list_bounced_members' name length outside 3-30 range在 cyberimpact_list_bounced_members 中
  • LOWTool 'cyberimpact_list_unsubscribed_members' name length outside 3-30 range在 cyberimpact_list_unsubscribed_members 中
  • LOWTool 'cyberimpact_list_mailing_recipients' name length outside 3-30 range在 cyberimpact_list_mailing_recipients 中
  • LOWTool 'cyberimpact_add_member_to_groups' name length outside 3-30 range在 cyberimpact_add_member_to_groups 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~7,146Token(工具定義)
~2.2 KB典型回應大小
顯著的注意力影響(128k 上下文的 5.58%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "cyberimpact": {
      "url": "https://cyberimpact.usefulapi.io/mcp"
    }
  }
}

遠端端點

https://cyberimpact.usefulapi.io/mcpstreamable-http

它能做什麼

工具清單

工具(25)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢cyberimpact_get_account

Check the connection and show which Cyberimpact account the API token belongs to (username, email, account name). GET /ping.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_members(status, sort, joinedOnFrom, joinedOnTo, updatedOnFrom, ...)

List subscribed contacts (members) with name, email, language, consent type, mailing counts and custom fields. status: active (in at least one group, default), orphans (in no group) or all. Filter by the date a member joined or was last updated. Bounced and unsubscribed members have their own tools. GET /members.

輸入結構描述

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Which subscribed members (default active).",
      "type": "string",
      "enum": [
        "active",
        "orphans",
        "all"
      ]
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "email_asc",
        "email_desc",
        "language_asc",
        "language_desc",
        "fullname_asc",
        "fullname_desc",
        "date_asc",
        "date_desc",
        "consent_type_asc",
        "consent_type_desc",
        "consent_date_asc",
        "consent_date_desc",
        "updated_asc",
        "updated_desc"
      ]
    },
    "joinedOnFrom": {
      "description": "Joined on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "joinedOnTo": {
      "description": "Joined on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnFrom": {
      "description": "Updated on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnTo": {
      "description": "Updated on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_member(key)

One member by email address or id: all attributes, consent type, mailings received/opened/clicked and custom fields (keyed by custom field id; see cyberimpact_list_custom_fields). GET /members/{key}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    }
  },
  "required": [
    "key"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_member_groups(key, sort, page, limit)

The groups a member belongs to (id, title, public/private, dynamic). GET /members/{key}/groups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "title_asc",
        "title_desc",
        "created_asc",
        "created_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "key"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_member_mailings(key, sort, page, limit)

The mailings a member received (use it to see what a contact was sent and when). GET /members/{key}/mailings.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "date_sent_asc",
        "date_sent_desc",
        "date_opened_asc",
        "date_opened_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "key"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_member_consent(key)

A member's consent record: consent type, relation type, consent date, expiration and proof (for CASL compliance checks). GET /members/{key}/consent.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    }
  },
  "required": [
    "key"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_bounced_members(sort, bouncedOnFrom, bouncedOnTo, updatedOnFrom, updatedOnTo, ...)

Members whose last mailing hard-bounced (invalid addresses to clean up), with the bounce date. GET /members/bounced.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "email_asc",
        "email_desc",
        "date_asc",
        "date_desc",
        "updated_asc",
        "updated_desc"
      ]
    },
    "bouncedOnFrom": {
      "description": "Bounced on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "bouncedOnTo": {
      "description": "Bounced on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnFrom": {
      "description": "Updated on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnTo": {
      "description": "Updated on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_unsubscribed_members(sort, unsubscribedOnFrom, unsubscribedOnTo, updatedOnFrom, updatedOnTo, ...)

Members who unsubscribed, with the unsubscribe date. These contacts must not be mailed again. GET /members/unsubscribed.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "email_asc",
        "email_desc",
        "date_asc",
        "date_desc",
        "updated_asc",
        "updated_desc"
      ]
    },
    "unsubscribedOnFrom": {
      "description": "Unsubscribed on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "unsubscribedOnTo": {
      "description": "Unsubscribed on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnFrom": {
      "description": "Updated on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnTo": {
      "description": "Updated on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_custom_fields

The account's custom member fields (id, name, type text/date/integer/decimal). Member customFields are keyed by these ids. GET /customfields.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_groups(sort, page, limit)

List the account's groups (mailing lists) with member and mailing counts, public/private and dynamic flags. Use the ids to target mailings and opt-ins. GET /groups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "group_asc",
        "group_desc",
        "nbmember_asc",
        "nbmember_desc",
        "type_asc",
        "type_desc",
        "nbnewsletter_asc",
        "nbnewsletter_desc",
        "date_asc",
        "date_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_group(group_id)

One group by id with its member count, mailing count and flags. GET /groups/{id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact group id."
    }
  },
  "required": [
    "group_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_group_members(group_id, sort, joinedOnFrom, joinedOnTo, updatedOnFrom, ...)

The members of one group, with the same member filters as cyberimpact_list_members. GET /groups/{id}/members.

輸入結構描述

{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact group id."
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "email_asc",
        "email_desc",
        "language_asc",
        "language_desc",
        "fullname_asc",
        "fullname_desc",
        "date_asc",
        "date_desc",
        "consent_type_asc",
        "consent_type_desc",
        "consent_date_asc",
        "consent_date_desc",
        "updated_asc",
        "updated_desc"
      ]
    },
    "joinedOnFrom": {
      "description": "Joined on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "joinedOnTo": {
      "description": "Joined on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnFrom": {
      "description": "Updated on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "updatedOnTo": {
      "description": "Updated on or before this date (whole day).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "group_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_mailings(kind, group_id, sort, page, limit)

List mailings by state: sent (default, archived ones excluded), scheduled (queued to go out) or archived. Each has id, subject, language, send/schedule date, recipient count and sender. Optionally only mailings sent to one group. GET /mailings/{sent|scheduled|archived}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "kind": {
      "description": "Which mailings (default sent).",
      "type": "string",
      "enum": [
        "sent",
        "scheduled",
        "archived"
      ]
    },
    "group_id": {
      "description": "Only mailings sent to this group id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort order (date_sent_* only applies to archived mailings).",
      "type": "string",
      "enum": [
        "language_asc",
        "language_desc",
        "subject_asc",
        "subject_desc",
        "recipients_asc",
        "recipients_desc",
        "date_asc",
        "date_desc",
        "date_sent_asc",
        "date_sent_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_mailing(mailing_id)

One mailing by id with its results: sent/delivered/stopped counts, views, clicks, delivery/click/view rates, per-link clicks, recipient groups, sender and body (HTML/text, cut at 20 000 characters). GET /mailings/{id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "mailing_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact mailing id."
    }
  },
  "required": [
    "mailing_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_mailing_recipients(mailing_id, kind, group_id, sort, page, ...)

Who received a mailing and what happened: kind = all, delivered, stopped, hard_bounced, soft_bounced, unsubscribed, opened or clicked. Optionally only recipients from one group. GET /mailings/{id}/recipients[/{kind}].

輸入結構描述

{
  "type": "object",
  "properties": {
    "mailing_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact mailing id."
    },
    "kind": {
      "description": "Which recipients (default all).",
      "type": "string",
      "enum": [
        "all",
        "delivered",
        "stopped",
        "hard_bounced",
        "soft_bounced",
        "unsubscribed",
        "opened",
        "clicked"
      ]
    },
    "group_id": {
      "description": "Only recipients that belong to this group id.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "email_asc",
        "email_desc",
        "language_asc",
        "language_desc",
        "fullname_asc",
        "fullname_desc",
        "date_asc",
        "date_desc",
        "updated_asc",
        "updated_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "mailing_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_list_templates(sort, page, limit)

List the account's email templates (id, title, created/updated). GET /templates.

輸入結構描述

{
  "type": "object",
  "properties": {
    "sort": {
      "description": "Sort order.",
      "type": "string",
      "enum": [
        "template_asc",
        "template_desc",
        "language_asc",
        "language_desc",
        "subject_asc",
        "subject_desc",
        "updated_asc",
        "updated_desc",
        "usage_asc",
        "usage_desc",
        "created_asc",
        "created_desc"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_template(template_id)

One template by id with its HTML and text body (cut at 20 000 characters). GET /templates/{id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "template_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact template id."
    }
  },
  "required": [
    "template_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢cyberimpact_get_batch(batch_id, show_error_details)

Status of a bulk batch job (NEW, PROCESSING or COMPLETED) and its result. Set show_error_details to list the per-member errors. GET /batches/{id}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "batch_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Cyberimpact batch id."
    },
    "show_error_details": {
      "description": "Include the details of each error.",
      "type": "boolean"
    }
  },
  "required": [
    "batch_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡cyberimpact_add_member(email, group_ids, firstname, lastname, company, ...)

WRITE: add a contact as a subscribed member WITHOUT a confirmation email (implied consent) and put it in the given groups; the contact can then be mailed. Only use it for people who really gave their consent (CASL); to ask the person to confirm first use cyberimpact_send_optin. A member that already exists is rejected by the API. Throttled by Cyberimpact; for many contacts use the app's import. POST /members.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 320,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "The member's email address."
    },
    "group_ids": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Group ids to subscribe the member to (see cyberimpact_list_groups)."
    },
    "firstname": {
      "description": "First name.",
      "type": "string",
      "maxLength": 200
    },
    "lastname": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 200
    },
    "company": {
      "description": "Company.",
      "type": "string",
      "maxLength": 200
    },
    "gender": {
      "description": "m, f or o.",
      "type": "string",
      "enum": [
        "m",
        "f",
        "o"
      ]
    },
    "language": {
      "description": "en_ca or fr_ca.",
      "type": "string",
      "enum": [
        "en_ca",
        "fr_ca"
      ]
    },
    "birthdate": {
      "description": "Birth date, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "postalCode": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 20
    },
    "country": {
      "description": "ISO 3166-1 alpha-2 country code, e.g. CA.",
      "type": "string",
      "pattern": "^[A-Za-z]{2}$"
    },
    "note": {
      "description": "Free-text note.",
      "type": "string",
      "maxLength": 2000
    },
    "customFields": {
      "description": "Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^\\d{1,12}$"
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 1000
          },
          {
            "type": "number"
          }
        ]
      }
    }
  },
  "required": [
    "email",
    "group_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cyberimpact_update_member(key, new_email, firstname, lastname, company, ...)

WRITE: change only the given attributes of a member (other attributes stay as they are). The old values of the changed fields are overwritten and not recoverable through the API. Set new_email to change the address. PATCH /members/{key}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    },
    "new_email": {
      "description": "The member's NEW email address.",
      "type": "string",
      "maxLength": 320,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "firstname": {
      "description": "First name.",
      "type": "string",
      "maxLength": 200
    },
    "lastname": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 200
    },
    "company": {
      "description": "Company.",
      "type": "string",
      "maxLength": 200
    },
    "gender": {
      "description": "m, f or o.",
      "type": "string",
      "enum": [
        "m",
        "f",
        "o"
      ]
    },
    "language": {
      "description": "en_ca or fr_ca.",
      "type": "string",
      "enum": [
        "en_ca",
        "fr_ca"
      ]
    },
    "birthdate": {
      "description": "Birth date, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "postalCode": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 20
    },
    "country": {
      "description": "ISO 3166-1 alpha-2 country code, e.g. CA.",
      "type": "string",
      "pattern": "^[A-Za-z]{2}$"
    },
    "note": {
      "description": "Free-text note.",
      "type": "string",
      "maxLength": 2000
    },
    "customFields": {
      "description": "Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^\\d{1,12}$"
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 1000
          },
          {
            "type": "number"
          }
        ]
      }
    }
  },
  "required": [
    "key"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡cyberimpact_add_member_to_groups(key, group_ids)

WRITE: add an existing member to more groups (existing group memberships are kept). Being in a group makes the member a recipient of mailings sent to it. Returns the member's groups after the update. POST /members/{key}/groups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "key": {
      "type": "string",
      "minLength": 1,
      "maxLength": 320,
      "description": "The member's email address or numeric id."
    },
    "group_ids": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Group ids to add the member to."
    }
  },
  "required": [
    "key",
    "group_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cyberimpact_send_optin(email, group_ids, optinConfirmUrl, firstname, lastname, ...)

WRITE, SENDS AN EMAIL to the given address: an opt-in confirmation request. The person is added to the groups only after they confirm (the member is created if it does not exist). Use this instead of cyberimpact_add_member when you do not have the person's consent yet. Only call it after the user has approved sending to this address, and set confirm_send to true. Throttled by Cyberimpact. POST /members/optins.

輸入結構描述

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "maxLength": 320,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "The address that receives the confirmation email."
    },
    "group_ids": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Group ids the person joins once they confirm."
    },
    "optinConfirmUrl": {
      "description": "Page the person lands on after confirming (http:// or https:// URL).",
      "type": "string",
      "maxLength": 2000
    },
    "firstname": {
      "description": "First name.",
      "type": "string",
      "maxLength": 200
    },
    "lastname": {
      "description": "Last name.",
      "type": "string",
      "maxLength": 200
    },
    "company": {
      "description": "Company.",
      "type": "string",
      "maxLength": 200
    },
    "gender": {
      "description": "m, f or o.",
      "type": "string",
      "enum": [
        "m",
        "f",
        "o"
      ]
    },
    "language": {
      "description": "en_ca or fr_ca.",
      "type": "string",
      "enum": [
        "en_ca",
        "fr_ca"
      ]
    },
    "birthdate": {
      "description": "Birth date, yyyy-mm-dd.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "postalCode": {
      "description": "Postal code.",
      "type": "string",
      "maxLength": 20
    },
    "country": {
      "description": "ISO 3166-1 alpha-2 country code, e.g. CA.",
      "type": "string",
      "pattern": "^[A-Za-z]{2}$"
    },
    "note": {
      "description": "Free-text note.",
      "type": "string",
      "maxLength": 2000
    },
    "customFields": {
      "description": "Custom field values keyed by custom field id (see cyberimpact_list_custom_fields).",
      "type": "object",
      "propertyNames": {
        "type": "string",
        "pattern": "^\\d{1,12}$"
      },
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string",
            "maxLength": 1000
          },
          {
            "type": "number"
          }
        ]
      }
    },
    "confirm_send": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: the user explicitly approved emailing this address."
    }
  },
  "required": [
    "email",
    "group_ids",
    "confirm_send"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡cyberimpact_create_group(title, is_public)

WRITE: create a new, empty group (mailing list). A public group can be offered on subscription forms; a private one is internal. Groups cannot be deleted through this server. POST /groups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The group name."
    },
    "is_public": {
      "type": "boolean",
      "description": "true = public group, false = private group."
    }
  },
  "required": [
    "title",
    "is_public"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡cyberimpact_create_template(title, bodyHtml, bodyText)

WRITE: create a new email template from HTML and/or text. It is only saved in the account; nothing is sent. POST /templates.

輸入結構描述

{
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "The template name."
    },
    "bodyHtml": {
      "description": "HTML body. At least one of bodyHtml or bodyText is required.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500000
    },
    "bodyText": {
      "description": "Plain-text body. At least one of bodyHtml or bodyText is required.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500000
    }
  },
  "required": [
    "title"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴cyberimpact_create_mailing(subject, language, group_ids, send_at, bodyHtml, ...)

WRITE, SENDS EMAIL TO CUSTOMERS: create a mailing scheduled to be sent at send_at to every member of the chosen groups. It goes out for real unless it is cancelled in the Cyberimpact app before send_at. Only call it after the user has approved the subject, body, sender and groups, and set confirm_send to true. mail_from must be a validated sender address of the account. A mailing cannot be deleted through this server. POST /mailings.

輸入結構描述

{
  "type": "object",
  "properties": {
    "subject": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500,
      "description": "Email subject."
    },
    "language": {
      "type": "string",
      "enum": [
        "en_ca",
        "fr_ca"
      ],
      "description": "en_ca or fr_ca."
    },
    "group_ids": {
      "minItems": 1,
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "description": "Groups whose members receive the mailing (see cyberimpact_list_groups; check member counts first)."
    },
    "send_at": {
      "type": "string",
      "description": "When to start sending, 'yyyy-mm-dd HH:mm:ss'. Cyberimpact reports dates in Eastern time (EST/EDT)."
    },
    "bodyHtml": {
      "description": "HTML body. At least one of bodyHtml or bodyText is required.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500000
    },
    "bodyText": {
      "description": "Plain-text body. At least one of bodyHtml or bodyText is required.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500000
    },
    "mail_from": {
      "description": "From address; must be a validated sender in the account.",
      "type": "string",
      "maxLength": 320,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "from_name": {
      "description": "From name.",
      "type": "string",
      "maxLength": 200
    },
    "reply_to": {
      "description": "Reply-to address.",
      "type": "string",
      "maxLength": 320,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "statistics": {
      "description": "detailed (default) or anonymized open/click statistics.",
      "type": "string",
      "enum": [
        "detailed",
        "anonymized"
      ]
    },
    "confirm_send": {
      "type": "boolean",
      "const": true,
      "description": "Must be true: the user explicitly approved sending this mailing to these groups."
    }
  },
  "required": [
    "subject",
    "language",
    "group_ids",
    "send_at",
    "confirm_send"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本25 個工具