Create customer
externalId is a hard dedupe key (same contract as issues’ externalRef): when a customer with the same externalId exists the call returns that customer with 200 instead of creating a duplicate. Pass dedupe=block to get 409 with the existing record in details.customer instead — the hard guarantee importers need.
POST
/workspaces/{organizationId}/customersAuthorization
AuthorizationBearer token · headerrequiredWorkspace API key (Authorization: Bearer <key>). Issue keys under Settings → Developer or POST /workspaces/{organizationId}/tokens.
Path parameters
organizationIdstringrequiredQuery parameters
dedupestringAllowed:
warnblockRequest body
application/jsonnamestringrequiredmin length 1
urlstringdomainstringbookingUrlstring | nullnotesstring | nulllogoUrlstringexternalIdstringmin length 1 · max length 255
phonestringaddressstringverticalstringneighborhoodstringsourcestringreadinessstringnextActionstringfitstringfitScorenumberfitStatusstringprocessorstringevidenceUristringtierIdstringstatusIdstringownerIdstringnextStepTextstring | nullnextStepDueAtstring | nullneedsHumanboolean | nullneedsHumanReasonstring | nullpriorityScorenumber | nullcustomFieldsobjectResponses
200
Existing customer with the same externalId (idempotent create)
idstringrequiredorganizationIdstringrequirednamestringrequiredurlstring | nullrequireddomainstring | nullrequiredbookingUrlstring | nullrequirednotesstring | nullrequiredlogoUrlstring | nullrequiredexternalIdstring | nullrequiredphonestring | nullrequiredaddressstring | nullrequiredverticalstring | nullrequiredneighborhoodstring | nullrequiredsourcestring | nullrequiredsourceSessionIdstring | nullrequiredsourceAgentSlugstring | nullrequiredreadinessstring | nullrequirednextActionstring | nullrequiredfitstring | nullrequiredfitScorenumber | nullrequiredfitStatusstring | nullrequiredprocessorstring | nullrequiredevidenceUristring | nullrequiredtierIdstring | nullrequiredstatusIdstring | nullrequiredownerIdstring | nullrequirednextStepTextstring | nullrequirednextStepDueAtstring | nullrequiredneedsHumanboolean | nullrequiredneedsHumanReasonstring | nullrequiredpriorityScorenumber | nullrequiredcustomFieldsobjectrequiredcreatedAtstringrequiredupdatedAtstringrequired201
Customer created
idstringrequiredorganizationIdstringrequirednamestringrequiredurlstring | nullrequireddomainstring | nullrequiredbookingUrlstring | nullrequirednotesstring | nullrequiredlogoUrlstring | nullrequiredexternalIdstring | nullrequiredphonestring | nullrequiredaddressstring | nullrequiredverticalstring | nullrequiredneighborhoodstring | nullrequiredsourcestring | nullrequiredsourceSessionIdstring | nullrequiredsourceAgentSlugstring | nullrequiredreadinessstring | nullrequirednextActionstring | nullrequiredfitstring | nullrequiredfitScorenumber | nullrequiredfitStatusstring | nullrequiredprocessorstring | nullrequiredevidenceUristring | nullrequiredtierIdstring | nullrequiredstatusIdstring | nullrequiredownerIdstring | nullrequirednextStepTextstring | nullrequirednextStepDueAtstring | nullrequiredneedsHumanboolean | nullrequiredneedsHumanReasonstring | nullrequiredpriorityScorenumber | nullrequiredcustomFieldsobjectrequiredcreatedAtstringrequiredupdatedAtstringrequired409
dedupe=block and externalId is already used