# POST /contacts/bulk-create

**Resource:** [Contacts](./contacts.md)  
**Scopes:** `contacts:write`  
**Write operation:** yes

Create up to 100 contacts in a single request. Built for historical migrations and bulk imports. Each record accepts the same fields as POST /contacts (first_name required). Set skip_automations: true to suppress contact_created triggers across all records. Returns a created array and an errors array.

## Parameters

| Name | In | Type | Required | Description |
|------|----|------|----------|-------------|
| `records` | body | object[] | yes | Array of contact objects (max 100). Each requires first_name plus any optional contact fields (last_name, email, phone, landline, job_title, notes, metadata, source, date_of_birth, etc.). |
| `skip_automations` | body | boolean | no | Set true to suppress contact_created triggers across all records. Strongly recommended for historical imports. |

## Request example

```bash
curl -X POST \
  "https://api.trustpager.com/functions/v1/api/v1/contacts/bulk-create" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "skip_automations": true,
    "records": [
      { "first_name": "Alice", "last_name": "Smith", "email": "alice@example.com" },
      { "first_name": "Bob", "last_name": "Jones", "phone": "+61412345678" }
    ]
  }'
```

## Response example

```json
{
  "data": {
    "created": [
      { "index": 0, "id": "contact-uuid-1", "first_name": "Alice", ... },
      { "index": 1, "id": "contact-uuid-2", "first_name": "Bob", ... }
    ],
    "errors": [],
    "created_count": 2,
    "error_count": 0
  },
  "meta": { "credits_remaining": 9480 }
}
```

---
Base URL: `https://api.trustpager.com/functions/v1/api/v1` — Auth: `Authorization: Bearer YOUR_API_KEY`