BizKitHub
DocsAPI ReferenceContact/bff/contact/bulk-import
postContactAdmin BFF

/bff/contact/bulk-import

Imports multiple contacts at once. Existing contacts are matched by e-mail (or phone for phone-only entries); their first_name, last_name and internal_note are filled ONLY if currently empty, and any requested tags are additively attached. updated_date is bumped only when at least one field is filled or at least one new tag join is created — otherwise the row is left completely alone.

ContactpostBffContactBulk-import

Parameters

JSON body

Request body

application/json
contactListobject[]Required

List of contacts to import.

Each array item:
emailstringRequired

Contact email address.

The system validates the input as a standard email address and automatically applies normalization and canonicalization.

All API responses return the normalized form, and each email address is unique per organisation within the system.

Phone-only contacts: Since 2026-06-10 a contact may exist without an e-mail when it was registered only by phone (e.g. imports of phone-only records). Responses that expose such contacts use API_EMAIL_NULLABLE instead, where this field can be null. Endpoints that accept e-mail as input still require a valid value here — phone-only creation goes through admin-only import / BFF flows.

Examplejan@barasek.com
namestringRequired

Contact display name.

internalNotestringRequired

Internal note attached to newly-created contacts only. Existing contacts keep their current note.

groupListobject[]Optional

Groups (tags) to additively attach to every imported contact. Never removes existing group joins.

Each array item:
slugstringRequired
namestringRequired
colorstringRequired
countnumberOptional

Response schema

1 status code documented

200Success
successbooleanRequired
Default: true
insertednumberRequired

Brand-new contact rows created.

updatednumberRequired

Existing contacts touched (fill-if-blank metadata or ≥1 new tag attached).

unchangednumberRequired

Existing contacts left untouched — every requested tag already attached and no field needed filling.

skippednumberRequired

Rows dropped because no identifier could be resolved (empty e-mail + unparseable phone).

Response example

application/json
{
  "success": true,
  "inserted": 0,
  "updated": 0,
  "unchanged": 0,
  "skipped": 0
}

Request example

POST /bff/contact/bulk-import

post
curl -X POST "https://api.bizkithub.com/bff/contact/bulk-import" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
  "contactList": [
    {
      "email": "jan@barasek.com",
      "name": "example_name"
    }
  ],
  "internalNote": "example_internalNote",
  "groupList": [
    {
      "slug": "example_slug",
      "name": "example_name",
      "color": "example_color",
      "count": 0
    }
  ]
}'

Need an API key?

All BizKitHub public API endpoints require authentication via API key.

Get API Key