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/synccurl -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/contactscurl "https://api.molted.email/v1/contacts?tenantId=tenant_abc123&email=jane@acme.com" \
-H "Authorization: Bearer YOUR_API_KEY"| Parameter | Type | Required | Description |
|---|---|---|---|
tenantId | string | Yes | Your tenant identifier. |
email | string | No | Filter by exact email address. |
Get contact by ID
GET https://api.molted.email/v1/contacts/:idcurl https://api.molted.email/v1/contacts/CONTACT_ID \
-H "Authorization: Bearer YOUR_API_KEY"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
| Field | Type | Description |
|---|---|---|
id | string | Unique contact identifier. |
tenantId | string | Tenant this contact belongs to. |
email | string | Contact's email address. |
name | string | Display name. |
ownerEmail | string | Email of the assigned owner (e.g., sales rep). |
lifecycleStage | string | Current lifecycle stage (e.g., lead, customer). |
dealStage | string | Current deal stage (e.g., qualified, closed_won). |
accountId | string | Associated account identifier. |
metadata | object | Arbitrary 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.