Upsert a Contact
Changed onCreates a new contact or updates an existing one.
Identifiers — with only linkedin_url, also pass account_id or domain.
Duplicate resolution — matched against existing contacts by email (case-insensitive), then linkedin_url. A match is updated in place, otherwise a contact is created. Unlike POST /contacts, a duplicate identifier is not a 409. The exception: if the identifiers resolve to two different contacts on the same account, neither can be updated and a 409 is returned.
Update by id — with id, that contact is updated as on PATCH /v1/contacts/{contact_id} and never created; an unknown id returns 404. This is how to change a contact's email. Null fields are left unchanged; list fields to clear in clear_fields. account_id, domain, location and is_inbound are not accepted with id.
Account resolution priority — when creating: account_id, then domain, then the domain parsed from email.
Enrichment — creating a contact synchronously enriches it and resolves or creates its account, so those requests can take several seconds. Use generous timeouts (10s+) and keep upserts off hot paths.
Request
- Base URLhttps://api.monaco.com
- URLhttps://api.monaco.com/v1/contacts/
- Authnone declared
Request body
Example request
{
"email": "jane@acme.com",
"linkedin_url": "https://linkedin.com/in/janesmith",
"first_name": "Jane",
"last_name": "Smith",
"title": "VP of Engineering",
"phone_number": "+1-415-555-0132",
"location": "San Francisco, CA",
"domain": "acme.com",
"notes": "Met at conference in 2025",
"clear_fields": [
"notes"
]
}Response
Successful Response
Example response
{
"data": {
"id": "con_abc123",
"account_id": "acc_def456",
"account_name": "Acme Corp",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@acme.com",
"title": "VP of Engineering",
"phone_number": "+1-415-555-0132",
"linkedin_url": "https://linkedin.com/in/janesmith",
"location": "San Francisco, CA",
"source": "linkedin",
"notes": "Met at SaaStr 2025",
"scoring": {
"heat_score": "Hot"
},
"tags": [
"Interested",
"Decision Maker"
],
"created_at": "2025-06-15T10:30:00Z",
"updated_at": "2025-06-15T10:30:00Z",
"last_activity_at": "2025-06-15T10:30:00Z",
"last_activity_type": "outbound_email",
"last_outbound_at": "2025-06-15T10:30:00Z",
"last_outbound_type": "email",
"last_inbound_at": "2025-06-15T10:30:00Z",
"last_inbound_type": "email"
}
}Changes
- info
added the new optional request property
- info
added the new optional request property
- info
added the new optional request property
- info
added the new optional request property
- info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status - info
added the optional property
/to the response with the status
- info