Odoo 19.0 Community · Persistent

mailing.contact: fields, relations and API

The mailing.contact model ("Mailing Contact") is a persistent model declared by the Email Marketing module, then extended by 1 other module. It exposes 39 fields, 11 of them declared directly on the model; 3 fields from other models point to it. Below you will find every field with its technical name, type, label and relations, followed by an Odoo 19 JSON-2 API call.

Model identity

Technical name
mailing.contact
Label
Mailing Contact
Type
Persistent (models.Model)
SQL table
mailing_contact
Origin module
Email Marketing (mass_mailing)
Extended by
mass_mailing_sms
Default order (_order)
name ASC, id DESC
Inherits from (mixins)
mail.thread.blacklistproperties.base.definition.mixinmail.thread.phone

Model fields

11 own fields, 22 inherited from mixins and 6 automatic ORM fields. Click a name to get a direct link to that field.

39 of 39 fields shown

Technical nameLabelTypeDetails
company_nameCompany Namechar
country_idCountrymany2one
emailEmailchar
first_nameFirst Namechar
last_nameLast Namechar
list_idsMailing Listsmany2many
mobileMobilechar

added by SMS Marketing (mass_mailing_sms)

nameNamechar
computed, stored
opt_outOpt Out

Opt out flag for a specific mailing list. This field should not be used in a view without a unique and active mailing list context.

boolean
computed
subscription_idsSubscription Informationone2many

inverse: contact_id

tag_idsTagsmany2many
email_normalizedNormalized Email

This field is used to search on email address as the primary email field can contain more than strictly an email address.

char
computed, stored

inherited from mail.thread.blacklist

has_messageHas Messageboolean
computed

inherited from mail.thread

is_blacklistedBlacklist

If the email address is on the blacklist, the contact won't receive mass mailing anymore, from any list

boolean
computed

inherited from mail.thread.blacklist

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

message_bounceBounce

Counter of the number of bounced emails for this contact

integer

inherited from mail.thread.blacklist

message_follower_idsFollowersone2many

inverse: res_id

inherited from mail.thread

message_has_errorMessage Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_has_error_counterNumber of errors

Number of messages with delivery error

integer
computed

inherited from mail.thread

message_has_sms_errorSMS Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_idsMessagesone2many

inverse: res_id

inherited from mail.thread

message_is_followerIs Followerboolean
computed

inherited from mail.thread

message_needactionAction Needed

If checked, new messages require your attention.

boolean
computed

inherited from mail.thread

message_needaction_counterNumber of Actions

Number of messages requiring action

integer
computed

inherited from mail.thread

message_partner_idsFollowers (Partners)many2many
computed

inherited from mail.thread

phone_blacklistedBlacklisted Phone is Phone

Indicates if a blacklisted sanitized phone number is a phone number. Helps distinguish which number is blacklisted when there is both a mobile and phone field in a model.

boolean
computed

inherited from mail.thread.phone

phone_sanitizedSanitized Number

Field used to store sanitized phone number. Helps speeding up searches and comparisons.

char
computed, stored

inherited from mail.thread.phone

phone_sanitized_blacklistedPhone Blacklisted

If the sanitized phone number is on the blacklist, the contact won't receive mass mailing sms anymore, from any list

boolean
computed

inherited from mail.thread.phone

propertiesPropertiesproperties

inherited from properties.base.definition.mixin

properties_base_definition_idProperties Base Definitionmany2one
computed

inherited from properties.base.definition.mixin

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

create_dateCreated ondatetime
read-onlyautomatic
create_uidCreated bymany2one
read-onlyautomatic
display_nameDisplay Namechar
read-onlycomputedautomatic
idIDinteger
read-onlyautomatic
write_dateLast Updated ondatetime
read-onlyautomatic
write_uidLast Updated bymany2one
read-onlyautomatic

Relations

Models linked from this model

Fields of other models pointing here

Reading this model through the API

Odoo 19 JSON-2 API call reading the first five records with real fields of the model. Replace the instance, database and API key with your own.

curl
curl -X POST "https://your-instance.odoo.com/json/2/mailing.contact/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -H "Content-Type: application/json" \
  -d '{"domain":[],"fields":["name","country_id","company_name","email","first_name"],"limit":5}'
Python (requests)
import requests

BASE_URL = "https://your-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "your-db"}

res = requests.post(
    f"{BASE_URL}/mailing.contact/search_read",
    headers=headers,
    json={"domain": [], "fields": ["name","country_id","company_name","email","first_name"], "limit": 5},
)
res.raise_for_status()
print(res.json())
  • External API access requires Odoo's Custom plan.
  • XML-RPC and JSON-RPC will be removed in Odoo 22 (fall 2028): use JSON-2.
  • The access rights and record rules of the key's user apply.

Cite this tool

Writing a tutorial, internal documentation or a forum answer? Copy this link to send your readers to the up-to-date reference.

<a href="https://aidoo.ai/en/outils/explorateur-modeles-odoo/mailing-contact">mailing.contact (Odoo 19.0)</a>

Sources

Data verified on September 23, 2026 · Odoo 19.0 Community

Have an Odoo project, or want to put your ERP to work with AI? Let's talk

Implementation, custom module development, connecting Claude or ChatGPT to your data: tell us about your context and we will reply within 24 business hours.