New: the MailCraft MCP server is live — connect your AI agent in one line. Connect your agent →
API reference

Properties

Custom contact fields. Each property is a schema definition — values live in the JSON `properties` object on the contact itself.

Create a property

`key` must be lowercase, start with a letter, and use only letters, numbers, and underscores.

POST
/properties

Authorizations

Authorization
string
header
required

API key for your workspace, scoped to contacts:manage. Pass it as a Bearer token in the Authorization header.

Body · application/json

key
string
label
string
type
string
default_value
string
Create a property
curl https://api.mailcraft.host/v1/properties \
  -X POST \
  -H 'Authorization: Bearer sk_live_...' \
  -H 'Content-Type: application/json' \
  -d '{
    "key": "plan",
    "label": "Plan",
    "type": "string",
    "default_value": "free"
  }'
{
  "data": {
    "id": 2,
    "key": "plan",
    "label": "Plan",
    "type": "string",
    "default_value": "free",
    "created_at": "2026-09-22T14:08:00.000000Z"
  }
}

List properties

Returns every custom contact property defined for the workspace.

GET
/properties

Authorizations

Authorization
string
header
required

API key for your workspace, scoped to contacts:manage. Pass it as a Bearer token in the Authorization header.

List properties
curl https://api.mailcraft.host/v1/properties \
  -H 'Authorization: Bearer sk_live_...'
{
  "data": [
    { "id": 2, "key": "plan", "label": "Plan", "type": "string", "default_value": "free" }
  ]
}

Delete a property

Deletes the property definition. Existing contacts keep the value under that key in their `properties` JSON until overwritten.

DELETE
/properties/{property}

Authorizations

Authorization
string
header
required

API key for your workspace, scoped to contacts:manage. Pass it as a Bearer token in the Authorization header.

Delete a property
curl https://api.mailcraft.host/v1/properties/2 \
  -X DELETE \
  -H 'Authorization: Bearer sk_live_...'
(empty body)