Setting the file. One moment.
Skill 43 · Rp Source Wordpress
Subchapter 43.24
plugins/mailpoet.json
JSON52 lines3 KB
{
"schemaVersion": 1,
"plugin": "mailpoet",
"displayName": "MailPoet",
"profileVersion": "2026-08",
"sourceOfTruth": "https://kb.mailpoet.com/",
"distribution": "wordpress-org",
"capabilities": [
"crm.email-subscription"
],
"detect": {
"pluginFileIds": [
"mailpoet/mailpoet.php"
],
"routes": [
"/mailpoet/v1/subscribers"
],
"restNamespaces": [
"mailpoet/v1"
],
"assetPathSlugs": [
"mailpoet"
]
},
"entities": [
{
"entity": "subscriber",
"channel": "plugin-rest",
"route": "/mailpoet/v1/subscribers",
"recordKeyField": "id",
"responseEnvelope": {
"itemsPath": "data.items",
"countPath": "data.meta.count"
},
"candidateTargetRefs": [
"crm/email-subscription"
],
"pitfalls": [
{
"code": "consent-status-per-record",
"severity": "blocker",
"summary": "VERIFIED LIVE against the reference store 2026-08-11: each subscriber carries status (subscribed / unconfirmed / unsubscribed — MailPoet's double opt-in flow) both at the top level and per entry in subscriptions[] (one per list/segment). Only a status of 'subscribed' is consent evidence; writing an unconfirmed or unsubscribed record as a Wix subscribed contact is a consent violation, not a data-quality nuance — see crm/email-subscription's own consent-proof-required pitfall. On this run, the first 2 of 3 inspected subscribers were 'unconfirmed'."
}
]
}
],
"quirks": [
"finding #28: the REST route wraps its records as { data: { items: [...], meta: { count, pages } } } instead of a flat array, and advertises no X-WP-Total/X-WP-TotalPages headers — responseEnvelope (itemsPath/countPath) is what makes this readable at all; without it the whole envelope would sample as a single opaque record with recordCount 1.",
"VERIFIED LIVE 2026-08-11: 306 real subscribers on the reference store, genuinely paginated (page/per_page args; 16 pages at 20/page at the default per_page).",
"MailPoet exposes /segments, /tags, /newsletters, /forms, /automations, /dynamic-segments, and /custom-fields under the same namespace and the same responseEnvelope shape (all VERIFIED LIVE 2026-08-11) — not profiled here. Each subscriber record already embeds its own segment_id/status pairs (subscriptions[]) and tags[], so a segment/tag NAME lookup is only needed if a migration wants human-readable list/tag names rather than ids; add /segments and /tags as additional entities if that lookup becomes necessary."
]
}