Skip to main content
POST
/
api
/
v2
/
contact
/
_assert
curl --request POST \
  --url https://api.example.com/api/v2/contact/_assert \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "match": {
    "primary_email": "sarah.chen@acme.com"
  },
  "attributes": {
    "first_name": "Sarah",
    "last_name": "Chen",
    "title": "VP of Engineering"
  }
}
'
{
  "data": {
    "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "created_at": "2023-11-07T05:31:56Z",
    "updated_at": "2023-11-07T05:31:56Z",
    "attributes": {
      "id": {
        "value": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "value_type": "uuid"
      },
      "organization_id": {
        "value": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "value_type": "uuid"
      },
      "created_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "updated_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "display_name": {
        "value": "<string>",
        "value_type": "string"
      },
      "stage": {
        "value": {
          "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "display_value": "<string>",
          "api_name": "<string>",
          "color": "<string>"
        },
        "value_type": "contact_stage"
      },
      "created_by_user_id": {
        "value": {
          "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "related_record_type": "<string>"
        },
        "value_type": "record_reference"
      },
      "participant_user_id_list": [
        {
          "value": {
            "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
            "related_record_type": "<string>"
          },
          "value_type": "record_reference"
        }
      ],
      "first_name": {
        "value": "<string>",
        "value_type": "string"
      },
      "last_name": {
        "value": "<string>",
        "value_type": "string"
      },
      "middle_name": {
        "value": "<string>",
        "value_type": "string"
      },
      "title": {
        "value": "<string>",
        "value_type": "string"
      },
      "department": {
        "value": "<string>",
        "value_type": "string"
      },
      "primary_email": {
        "value": "jsmith@example.com",
        "value_type": "email"
      },
      "primary_phone_number": {
        "value": "<string>",
        "value_type": "phone_number"
      },
      "sms_consent": {
        "value": true,
        "value_type": "boolean"
      },
      "address": {
        "value": {
          "street_one": "<string>",
          "street_two": "<string>",
          "city": "<string>",
          "state": "<string>",
          "country": "<string>",
          "zip_code": "<string>"
        },
        "value_type": "address"
      },
      "contact_emails": [
        {
          "value": {
            "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
            "email": "jsmith@example.com",
            "is_primary": true,
            "labels": []
          },
          "value_type": "contact_email"
        }
      ],
      "contact_phone_numbers": [
        {
          "value": {
            "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
            "phone_number": "<string>",
            "is_primary": true,
            "labels": []
          },
          "value_type": "contact_phone_number"
        }
      ],
      "linkedin_url": {
        "value": "<string>",
        "value_type": "string"
      },
      "zoominfo_url": {
        "value": "<string>",
        "value_type": "string"
      },
      "x_url": {
        "value": "<string>",
        "value_type": "string"
      },
      "facebook_url": {
        "value": "<string>",
        "value_type": "string"
      },
      "owner_user_id": {
        "value": {
          "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "related_record_type": "<string>"
        },
        "value_type": "record_reference"
      },
      "owner_team_id": {
        "value": {
          "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "related_record_type": "<string>"
        },
        "value_type": "record_reference"
      },
      "updated_by_user_id": {
        "value": {
          "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "related_record_type": "<string>"
        },
        "value_type": "record_reference"
      },
      "archived_by_user_id": {
        "value": {
          "related_record_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "related_record_type": "<string>"
        },
        "value_type": "record_reference"
      },
      "created_source": {
        "value": "<string>",
        "value_type": "enum"
      },
      "created_source_form_submission_details": {
        "value": {
          "form_submission_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "form_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "source_event_occurred_at": "2023-11-07T05:31:56Z",
          "utm_campaign": "<string>",
          "utm_source": "<string>",
          "utm_medium": "<string>",
          "utm_content": "<string>",
          "utm_term": "<string>"
        },
        "value_type": "created_source_form_submission_details"
      },
      "phone_enriched_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "email_enriched_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "email_enrich_status": {
        "value": "<string>",
        "value_type": "enum"
      },
      "phone_number_enrich_status": {
        "value": "<string>",
        "value_type": "enum"
      },
      "last_activity_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_voice_call": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_meeting": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_global_thread": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_engaged_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_outreached_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_inbound_meeting_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_inbound_voice_call_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_inbound_global_thread_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_outbound_meeting_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_outbound_voice_call_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "last_outbound_global_thread_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      },
      "archived_at": {
        "value": "2023-11-07T05:31:56Z",
        "value_type": "timestamp"
      }
    },
    "record_type": "contact"
  },
  "meta": {
    "matched_on": {}
  }
}

Authorizations

Authorization
string
header
required

Reevo API key passed as Authorization: Bearer <api-key>.

Body

application/json

Assert (upsert) request — match block + create-shape attributes.

Per FR-035 the assert body carries no relationships block; relationships are written via the relationship sub-resource endpoint (contracts/07). The match-key field is immutable on the update branch, so a key present in BOTH match and attributes is a structural conflict rejected here with a generic 422. An empty attributes block (zero set fields) is likewise structural: an assert must carry at least one attribute so the no-match branch can CREATE the record.

attributes
ContactCreateRequestAttributes · object
required

Create standard-field surface.

display_name is NOT writable: core ContactV2.display_name is is_ui_editable=False (server-derived from first / last), so it is absent from the create surface and rendered only on the response.

match
ContactEmailsMatchKey · object
required

Assert match against any address in the contact's contact_emails array (C14).

Each contact_email row's email field is is_unique=true on the descriptor, so the match value resolves to at most one contact. The primary email is itself a member of contact_emails, so this single key covers matching by primary email too.

Response

Successful Response

Response shape for the contact _assert (upsert) endpoint.

data
ContactObjectRecord · object
required
meta
AssertMeta · object
required

Metadata describing the outcome of an assert (upsert) call.