MOLTED EMAIL

Contacts & Accounts

Sync contacts, manage accounts, and maintain your contact data through the API.

Contacts represent the people you email. Each contact belongs to a tenant and can optionally be associated with an account (company).

Sync contacts

Bulk upsert contacts into your tenant. Existing contacts are matched by email and updated; new contacts are created.

POST https://api.molted.email/v1/contacts/sync
curl
curl -X POST https://api.molted.email/v1/contacts/sync \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tenantId": "tenant_abc123",
    "contacts": [
      {
        "email": "jane@acme.com",
        "name": "Jane Smith",
        "ownerEmail": "rep@yourco.com",
        "lifecycleStage": "customer",
        "dealStage": "closed_won",
        "accountId": "acc_123",
        "metadata": { "plan": "enterprise", "region": "us-west" }
      }
    ]
  }'

List contacts

GET https://api.molted.email/v1/contacts
curl
curl "https://api.molted.email/v1/contacts?tenantId=tenant_abc123&email=jane@acme.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
ParameterTypeRequiredDescription
tenantIdstringYesYour tenant identifier.
emailstringNoFilter by exact email address.

Get contact by ID

GET https://api.molted.email/v1/contacts/:id
curl
curl https://api.molted.email/v1/contacts/CONTACT_ID \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

Response
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "tenantId": "tenant_abc123",
  "email": "jane@acme.com",
  "name": "Jane Smith",
  "ownerEmail": "rep@yourco.com",
  "lifecycleStage": "customer",
  "dealStage": "closed_won",
  "accountId": "acc_123",
  "metadata": { "plan": "enterprise", "region": "us-west" },
  "createdAt": "2026-03-01T12:00:00Z",
  "updatedAt": "2026-03-01T12:00:00Z"
}

Contact model

FieldTypeDescription
idstringUnique contact identifier.
tenantIdstringTenant this contact belongs to.
emailstringContact's email address.
namestringDisplay name.
ownerEmailstringEmail of the assigned owner (e.g., sales rep).
lifecycleStagestringCurrent lifecycle stage (e.g., lead, customer).
dealStagestringCurrent deal stage (e.g., qualified, closed_won).
accountIdstringAssociated account identifier.
metadataobjectArbitrary key-value pairs for custom data.

Updating contacts

There is no individual update endpoint. To update contact data, use the POST /v1/contacts/sync endpoint with the updated fields — existing contacts are matched by email and merged.

Accounts

Accounts represent companies or organizations. Contacts can be linked to an account via the accountId field. Accounts are created automatically when contacts are synced with an account association, or can be managed through your CRM integration.