CRM
Bulk import records (create or update), optionally into a list
Authorization
Body application/json
createMissingListsbooleanCreate lists rows name that the list owner doesn't have yet, owned by ownerUserId (else the caller).
dryRunbooleanPlan only: return what the import WOULD do (per-row created / updated / failed, lists it would find or create) without writing anything. Always synchronous.
entityTypeenumEntity type for created rows (default per object).
loagentcompanybranchexternalSourcestringSource system the rows' externalIds belong to (e.g. "legacy-mm"). Defaults to "import".
fileNamestringSource file name, shown in import history.
fileRowsintegerData rows in the source file (the client's count, including rows it rejected before sending) — the check report's file rows.
importBatchKeystringThis batch's key within its run (e.g. "2/5"). A batch resent under a key the run already recorded is refused (409).
importRunIdstringImport history run id, minted by the client per run and sent with every batch of it — the batches become one history entry.
listIdstring | nulllistStatusesobjectStatus labels, in order, per list name — the status vocabulary of lists this batch creates (else the default statuses).
Show child attributesHide child attributes
[key: string]string[]objectTypeenumrequiredpeoplecompaniesownerUserIdstringDefault working owner (member userId) for created rows; a row's own ownerUserId overrides it. Both fall back to the caller. Assigning an owner other than the caller requires an org admin.
rowsobject[]requiredShow child attributesHide child attributes
addressstringcitystringcompanystringEmployer override for people rows; ignored on companies imports.
countystringcountyFipsstringcustomValuesobjectShow child attributesHide child attributes
[key: string]objectShow child attributesHide child attributes
boolboolean | nulldateinteger | nullmultistring[] | nullnumnumber | nulltextstring | nullemailstringemailsstring[]Additional emails in submitted order (first non-duplicate becomes primary via oldest-wins).
entityIdstringSet to update an existing record; omit to create one.
externalIdstringThe record's id in the source system (unique per org + batch externalSource). A known id updates that record; an unknown one is stamped on the created record, so re-running an import never duplicates. A record holds at most one id — a different one fails the row with EXTERNAL_ID_CONFLICT.
facebookstringinstagramstringlinkobjectMatch pointer; an MM-sourced link populates the entity mirror.
Show child attributesHide child attributes
entityIdstringrequiredmmaIdstringnmlsIdstringpropertyIdstringsourceenumrequiredmmmanuallinkedinstringlistStatusstringStatus (id or label) within the row's first list; becomes the record's status. Fails the row when it isn't one of that list's.
listsstring[]Lists this row's record joins, by name (case/space-insensitive), among the list owner's lists — the batch ownerUserId, else the caller. A name with no match fails the row unless the batch sets createMissingLists.
locationstringnamestringnotestringPlain-text timeline note appended to the record's activity feed, authored by the importing user. Distinct from notes (the Description scalar).
notesstringownerUserIdstringWorking owner (member userId) for this CREATED record; overrides the batch-level ownerUserId. Ignored on update rows (entityId set) — import never reassigns an existing record's owner. Assigning any owner other than the caller requires an org admin.
phoneobjectShow child attributesHide child attributes
e164stringrequiredrawstringrequiredphonesobject[]Additional phones in submitted order.
Show child attributesHide child attributes
e164stringrequiredrawstringrequiredrealtorstringrejectReasonstringThe client already failed this row (e.g. an undialable phone): it is logged as failed with this reason and never written.
sourceLineintegerThe row's line in the source file; kept in import history so the download points back at the file.
statestringstatusstringsubtitlestringtimelineNotesobject[]Dated note history (e.g. a legacy notes export), appended as plain notes authored by the record's owner. Keyed: a note the record already has (deleted ones included) is skipped, so re-runs never double it. Distinct from note, which is append-only.
Show child attributesHide child attributes
bodystringrequiredkeystringStable id from the source system; absent ⇒ a hash of date + text.
occurredAtstringISO date-time the note was written (the timeline backdates to it); an unreadable date fails the row.
titlestringRole title override for people rows (the record's Title field, column and filter) — distinct from subtitle, the display line under the name. Trimmed; blank reads as absent. Overwrites on update rows. Ignored on companies imports.
websitestringxstringyoutubestringzillowstringzipstringResponses
200objectSmall batch: per-row outcomes plus the batch tally.Show attributesHide attributes
dataobjectrequiredShow child attributesHide child attributes
creatednumberrequireddryRunbooleanenrichJobIdstringfailednumberrequiredlistsobject[]Lists the rows named (row lists), and which this batch created.
Show child attributesHide child attributes
createdbooleanrequiredlistIdstringrequirednamestringrequiredresultsobject[]requiredShow child attributesHide child attributes
codeenumFailure reason on a failed row; drives friendly client copy. Absent on success.
MISSING_NAMERECORD_NOT_FOUNDWRONG_OBJECT_TYPENO_ACCESSUNKNOWN_FIELDEXTERNAL_ID_CONFLICTINVALIDINTERNALentityIdstringerrorstringoutcomeenumrequiredcreatedupdatedfailedrownumberrequiredtotalnumberrequiredupdatednumberrequired202objectLarge batch accepted for asynchronous processing; returns a job handle.Show attributesHide attributes
dataobjectrequiredShow child attributesHide child attributes
jobIdstringrequiredPoll GET /crm/import/{jobId} for progress + per-row errors.
400objectValidation error401objectUnauthorized403objectForbidden (authenticated, but missing required context — e.g. no active organization)404objectNot found409objectThis batch's `importBatchKey` was already recorded on the run — a resend, refused.413objectResponse payload too large — detail endpoint capped to fit Lambda response limits502objectAuth service unavailable (owner-assignment member lookup failed).503objectSearch timed out or the cluster is overloaded — retry after `Retry-After` seconds.