Skip to main content

POST /contact-books/:id/contacts

Add a new contact to the specified contact book.

Authentication

JWT Bearer token (dashboard auth)

Request Body

FieldTypeRequiredDescription
emailstringYesContact email address
firstNamestringNoContact first name
lastNamestringNoContact last name
subscribedbooleanNoSubscription status (defaults to true)
propertiesobjectNoCustom key-value metadata

Response

{
  "success": true,
  "data": {
    "contact": {
      "id": "660e8400-e29b-41d4-a716-446655440000",
      "contact_book_id": "550e8400-e29b-41d4-a716-446655440000",
      "email": "jane@example.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "subscribed": true,
      "properties": {
        "company": "Acme Inc"
      },
      "created_at": "2026-03-07T12:00:00Z",
      "updated_at": "2026-03-07T12:00:00Z"
    }
  }
}

Example

curl -X POST https://app.usesendi.com/api/contact-books/BOOK_ID/contacts \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "properties": {
      "company": "Acme Inc"
    }
  }'

Errors

StatusErrorCause
400Invalid request dataMissing or invalid email
403Contact limit reachedFree plan allows a maximum of 200 total contacts
404Contact book not foundInvalid book ID or not owned by user