EmailmoversMyDataHub docs
Browse the docs

Reference / MCP tool reference

Reference

Report an objection

report_objection: Records an objection to direct marketing for one record, by record id or email hash.

Generated from the contractsView as Markdown

Records an objection to direct marketing for one record, by record id or email hash. Scope licensee suppresses it for your organisation at once; scope emailmovers suppresses it database-wide within one working day and tells every licensee holding it. Free; it needs suppressions:write, and repeating the same objection returns the same suppression. Call it whenever a contact objects, in any channel. Lawful basis is UK GDPR Article 6(1)(f) legitimate interests; email audiences include corporate subscribers only by default (PECR), so sole traders and ordinary partnerships are left out unless the toggle is changed.

PropertyValue
Tool namereport_objection
Position in tools/list21 of 22
CostFree
Scopesuppressions:write
AnnotationsreadOnlyHint false, destructiveHint false, idempotentHint true, openWorldHint false
KindWrite; idempotent, not destructive, closed world
REST equivalentPOST /v1/objections

Input

The schema sets additionalProperties to false, so a member that is not listed is refused.

MemberTypeRequiredDescription
record_idstringnoFormat: a contact id: contact_ followed by a 26 character ULID in upper case Crockford base32, such as contact_01JA9X2V7XN3M9R6T1Y5W8ZAK8.
email_sha256stringnoSHA-256 of the trimmed, lower cased address, when the record id is not known.
channelenum: email, telephone, post, web_form, otheryes
received_atstring (date-time)yesRFC 3339 date and time, with Z or an offset such as +01:00.
scopeenum: licensee, emailmoversyeslicensee suppresses the record for your organisation at once; emailmovers suppresses it database-wide within one working day.
notestringno

Example call

The params of a tools/call request:

{
  "name": "report_objection",
  "arguments": {
    "record_id": "contact_01JA9X2V7XN3M9R6T1Y5W8ZAK8",
    "channel": "email",
    "received_at": "2026-10-01T08:30:00Z",
    "scope": "emailmovers",
    "note": "Replied asking not to be contacted again."
  }
}

Output

The result carries structuredContent that matches this schema, and one line of text that leads with the number.

MemberTypeAlways presentDescription
suppression_idstringyesThe list the record now sits on.
record_idstring or nullyes
scopeenum: licensee, emailmoversyes
statusenum: suppressed, pendingyessuppressed now, or pending until the database-wide overlay applies.
suppressed_atstring (date-time) or nullyes
effective_bystring (date-time)yes

Errors

A failed call returns isError true. The text content leads with the sentence a person acts on, then the whole problem as JSON, with code, detail, next_step and did_you_mean. A 401 and a step-up 403 are answered at HTTP level so the client can start authorisation. See Errors.