Create a contact
External contacts are Project Blue's native contact store for accounts without a connected CRM. They render in the Project Blue app's contact list and details panel.
You can create them explicitly with the endpoints below, or implicitly by passing firstName, lastName, email, and customFields on /send-api-message — those fields persist on the auto-created contact for the recipient.
Required: phone only (plus Authorization: Bearer <api key>). Optional: firstName, lastName, email, customFields.
customFields is a JSON object of key/value pairs, max 10,000 characters when stringified. Omit it entirely if you have none. Same phone for the same API key is an upsert (fills blank names, overwrites email, shallow-merges customFields).
firstNameandlastNameare only filled in when the stored value is empty. Sending a new name for a contact that already has one is silently discarded.emailoverwrites whenever you send a non-empty value.customFieldsis shallow-merged here — the opposite of update, which replaces the whole object. Sending{}changes nothing.
The response is the contact as it was before the merge, so a discarded name is not visible in it. Read the contact back if you need to confirm. The same merge runs when /send-api-message auto-creates a contact.
Request body
phonestringRequiredfirstNamestringlastNamestringemailstringcustomFieldsobjectThe contact object
All three endpoints return the same object. Create and update return it as { contact }; list returns { contacts, pagination }. There is no status envelope.
idstringRequiredfirstNamestring | nullRequiredlastNamestring | nullRequiredphoneNumberstringRequiredemailstring | nullRequiredcustomFieldsobject | nullRequirednotestring | nullRequiredcreatedAtstring (ISO-8601)RequiredupdatedAtstring (ISO-8601)Required