> For the complete documentation index, see [llms.txt](https://flapjax.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://flapjax.gitbook.io/docs/rest-api/reference/people-events/batch-create-people.md).

# Batch Create People

## Batch create people

> Creates up to \*\*100 people\*\* in a single request. Each person is processed independently — partial success is possible. The response contains a result object per person indicating success or failure.<br>

```json
{"openapi":"3.0.3","info":{"title":"Listener API","version":"1.0.0"},"tags":[{"name":"batch-create-people"}],"servers":[{"url":"https://{domain}/v1","variables":{"domain":{"default":"your-domain","description":"Your deployment domain"}}}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"JWT token with the required scope for the endpoint. Pass via the `Authorization: Bearer <token>` header.\n"}},"schemas":{"CreatePersonRequest":{"type":"object","description":"Request body for creating a new person. All fields are optional. Consent fields default to `false` if not provided.\n","properties":{"external_id":{"type":"string","description":"External identifier for the person. Must be unique within your organization."},"first_name":{"type":"string","description":"First name."},"last_name":{"type":"string","description":"Last name."},"email":{"type":"string","format":"email","description":"Email address."},"mobile_prefix":{"type":"string","description":"Mobile phone country prefix (e.g. `+1`, `+44`)."},"mobile_number":{"type":"string","description":"Mobile phone number (without country prefix)."},"date_of_birth":{"type":"string","description":"Date of birth."},"language":{"type":"string","description":"Preferred language code."},"email_consent":{"type":"boolean","description":"Email channel consent. Defaults to `false`. This is a summary of the person's consent answers on the email channel: `false` refuses every consent purpose on the channel, `true` grants only the purpose marked as that channel's default and leaves the other purposes on their own defaults.\n","default":false},"sms_consent":{"type":"boolean","description":"SMS channel consent. Defaults to `false`. Behaves like `email_consent` on the SMS channel.\n","default":false},"push_notification_consent":{"type":"boolean","description":"Push notification consent. Defaults to `false`. A plain flag — consent purposes only apply to the `email` and `sms` channels.\n","default":false},"attribute_values":{"type":"object","description":"Custom attribute key-value pairs. Keys must match attribute keys configured on your organization's person attributes. Relationship attributes (Person-type and Stack-type) accept plain values which are automatically normalized to `{\"external_id\": \"...\"}` format.\n","additionalProperties":true}}},"BatchResult":{"type":"object","description":"Result of a single record in a batch operation.","properties":{"index":{"type":"integer","description":"Zero-based index of the record in the request array."},"success":{"type":"boolean","description":"Whether the operation succeeded for this record."},"error":{"type":"string","nullable":true,"description":"Error message if the operation failed (null on success)."}}},"ErrorResponse":{"type":"object","description":"Standard error response envelope.","properties":{"error":{"type":"string","description":"Machine-readable error type. Use this for programmatic error handling.\n","enum":["operation_failed","failed_binding_json","invalid_json","invalid_parameter","not_found","duplicate_entry","rate_limit_exceeded"]},"errorstack":{"type":"object","nullable":true,"description":"Detailed error stack (only present for server errors)."}}}}},"paths":{"/people/batch":{"post":{"summary":"Batch create people","operationId":"batchCreatePeople","tags":["batch-create-people"],"description":"Creates up to **100 people** in a single request. Each person is processed independently — partial success is possible. The response contains a result object per person indicating success or failure.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","minItems":1,"maxItems":100,"items":{"$ref":"#/components/schemas/CreatePersonRequest"}}}}},"responses":{"201":{"description":"Batch processed. Each element reports its own success/failure.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BatchResult"}}}}},"400":{"description":"Request body is invalid or empty.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```
