Create or update up to 500 clients in one request and place them on the
input node’s target stage (or on stage_id, if given, within the same
pipeline). The batch form of Ingest a client into a pipeline.
Each row is matched by client_id, then phone number (country-code
tolerant), then email. What happens on a match is set by on_duplicate:
update (the default) merges the row into the existing client — blank
fields never clear stored values, and the phone number is never changed;
skip leaves the client untouched but still places it; fail reports the
row. Note that the single-row endpoint defaults to not updating.
Rows succeed or fail individually — read results[] — unless
all_or_none is set, in which case any failure returns
400 INGEST_ROLLED_BACK with the same per-row detail and nothing is
written. dry_run returns the same shape without writing anything.
UUID of the pipeline's API input node. Copy it from the input node's settings in the Salesflow editor, or read it from List API input nodes of a pipeline.
What to do when a row matches an existing client: update = merge the row into it (default; blank fields never clear values), skip = leave it untouched but still place it on the pipeline, fail = report the row as failed
A row with the same phone as an existing client (or an earlier row) but a different, real identity document: secondary = another person sharing the phone, created as that contact's secondary contact (default; a real document is never overwritten), update = the same person, the row updates that contact and corrects its document. Rows with the same document, or with no real document on either side (blank, all zeros, or the phone itself), always update. Rows may override it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dialtu","description":"Documentación de Dialtu, la plataforma de automatización comercial con IA: guías de producto y referencia de la API pública","colors":{"primary":"#6633FF","light":"#9966FF","dark":"#5229CC"},"logo":{"light":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/light.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=d6c7d6e992583a882baffad77a34e714","dark":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/dark.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=53346d8a0b194cd0f5570ab69399758e","href":"https://www.dialtu.com"},"favicon":"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/favicon.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=0315cca2c3d3b259239699a32b2ba0c2","api":{"openapi":"https://api.dialtu.com/api/v2/public/openapi.json","params":{"expanded":"closed"},"playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["curl","python","javascript"]}},"navbar":{"primary":{"type":"button","label":"Ir al panel","href":"https://app.dialtu.com"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/dialtu"}},"seo":{"metatags":{"og:site_name":"Dialtu Documentation","og:type":"website","twitter:card":"summary_large_image"},"indexing":"navigable"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"es","href":"es/getting-started/what-is-dialtu"},{"language":"en","href":"en/getting-started/what-is-dialtu"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dialtu-0be120d3","hasAudioNarration":false,"actualSubdomain":"dialtu-0be120d3","customDomains":["docs.dialtu.com"],"gitSource":{"type":"github","owner":"davidbo99","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ad1c47d4608008ddf98398c","collectionId":"c9ae7c78-1224-4dac-bb8d-c887c34731cc","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad1c47d4608008ddf98398c"},"feedback":{"edits":false,"issues":false},"entitlements":{},"buildId":"6ad1c47d4608008ddf98398c","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"en","tag":"Guides","count":80},{"language":"es","tag":"Guías","count":80},{"language":"en","tag":"API Reference","count":27},{"language":"es","tag":"Referencia de API","count":27},{"language":"en","tag":"Calendar","count":23},{"language":"en","tag":"Endpoints","count":21},{"language":"es","tag":"Endpoints","count":21},{"language":"es","tag":"Calendario","count":15},{"language":"en","tag":"Salesflow","count":12},{"language":"en","tag":"WhatsApp agents","count":12},{"language":"es","tag":"Salesflow","count":12},{"language":"es","tag":"Agentes de WhatsApp","count":12},{"language":"en","tag":"SMS agents","count":11},{"language":"es","tag":"Agentes de SMS","count":11},{"language":"en","tag":"Organizations","count":9},{"language":"es","tag":"Organizaciones","count":9},{"language":"es","tag":"Calendar","count":8},{"language":"en","tag":"Getting started","count":7},{"language":"en","tag":"Salesflow pipelines","count":7},{"language":"es","tag":"Salesflow pipelines","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline","slug":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline","pageMetadata":{"title":"Batch ingest clients into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}/batch","description":"Create or update up to 500 clients in one request and place them on the\ninput node's target stage (or on `stage_id`, if given, within the same\npipeline). The batch form of *Ingest a client into a pipeline*.\n\nEach row is matched by `client_id`, then phone number (country-code\ntolerant), then email. What happens on a match is set by `on_duplicate`:\n`update` (the default) merges the row into the existing client — blank\nfields never clear stored values, and the phone number is never changed;\n`skip` leaves the client untouched but still places it; `fail` reports the\nrow. Note that the single-row endpoint defaults to *not* updating.\n\nRows succeed or fail individually — read `results[]` — unless\n`all_or_none` is set, in which case any failure returns\n`400 INGEST_ROLLED_BACK` with the same per-row detail and nothing is\nwritten. `dry_run` returns the same shape without writing anything.","href":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n em: \"em\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Create or update up to 500 clients in one request and place them on the\\ninput node’s target stage (or on \", _jsx(_components.code, {\n children: \"stage_id\"\n }), \", if given, within the same\\npipeline). The batch form of \", _jsx(_components.em, {\n children: \"Ingest a client into a pipeline\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Each row is matched by \", _jsx(_components.code, {\n children: \"client_id\"\n }), \", then phone number (country-code\\ntolerant), then email. What happens on a match is set by \", _jsx(_components.code, {\n children: \"on_duplicate\"\n }), \":\\n\", _jsx(_components.code, {\n children: \"update\"\n }), \" (the default) merges the row into the existing client — blank\\nfields never clear stored values, and the phone number is never changed;\\n\", _jsx(_components.code, {\n children: \"skip\"\n }), \" leaves the client untouched but still places it; \", _jsx(_components.code, {\n children: \"fail\"\n }), \" reports the\\nrow. Note that the single-row endpoint defaults to \", _jsx(_components.em, {\n children: \"not\"\n }), \" updating.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rows succeed or fail individually — read \", _jsx(_components.code, {\n children: \"results[]\"\n }), \" — unless\\n\", _jsx(_components.code, {\n children: \"all_or_none\"\n }), \" is set, in which case any failure returns\\n\", _jsx(_components.code, {\n children: \"400 INGEST_ROLLED_BACK\"\n }), \" with the same per-row detail and nothing is\\nwritten. \", _jsx(_components.code, {\n children: \"dry_run\"\n }), \" returns the same shape without writing anything.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Batch ingest clients into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}/batch","description":"Create or update up to 500 clients in one request and place them on the\ninput node's target stage (or on `stage_id`, if given, within the same\npipeline). The batch form of *Ingest a client into a pipeline*.\n\nEach row is matched by `client_id`, then phone number (country-code\ntolerant), then email. What happens on a match is set by `on_duplicate`:\n`update` (the default) merges the row into the existing client — blank\nfields never clear stored values, and the phone number is never changed;\n`skip` leaves the client untouched but still places it; `fail` reports the\nrow. Note that the single-row endpoint defaults to *not* updating.\n\nRows succeed or fail individually — read `results[]` — unless\n`all_or_none` is set, in which case any failure returns\n`400 INGEST_ROLLED_BACK` with the same per-row detail and nothing is\nwritten. `dry_run` returns the same shape without writing anything.","href":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"ingestSalesflowClientsBatch","summary":"Batch ingest clients into a pipeline","parameters":["17d7db50-4ad2-4806-b623-83ad5789b1f4"],"responses":{"200":"5c7acb0a-a04e-4a30-bfaa-444b72383213","400":"c05bc4f3-f0de-4980-b4ff-68662168fcea","401":"a05d20dd-e943-4575-9b3c-3a1c9b9c652a","404":"2e0d87a9-88e4-4e7f-bc31-6a1def952a07","422":"bdea5c9f-8932-4347-b6e2-12764648e720","500":"c1c9d59e-8c3c-4949-ac2e-e77e139bb808"},"description":"Create or update up to 500 clients in one request and place them on the\ninput node's target stage (or on `stage_id`, if given, within the same\npipeline). The batch form of *Ingest a client into a pipeline*.\n\nEach row is matched by `client_id`, then phone number (country-code\ntolerant), then email. What happens on a match is set by `on_duplicate`:\n`update` (the default) merges the row into the existing client — blank\nfields never clear stored values, and the phone number is never changed;\n`skip` leaves the client untouched but still places it; `fail` reports the\nrow. Note that the single-row endpoint defaults to *not* updating.\n\nRows succeed or fail individually — read `results[]` — unless\n`all_or_none` is set, in which case any failure returns\n`400 INGEST_ROLLED_BACK` with the same per-row detail and nothing is\nwritten. `dry_run` returns the same shape without writing anything.","tags":["Salesflow"],"requestBody":"60c325a2-f9a2-4003-aaef-779c50b27834","security":["e97a2e54-91d0-4b3a-a5a6-7377dacb8d1c"],"method":"post","type":"path","servers":["64986e62-6aff-4026-a2be-2361e00f4585","b407c61f-7c82-415e-85d4-7a1b8f2be716"],"path":"/api/v2/public/salesflow/ingest/{input_node_uuid}/batch","baseUrlOptions":["https://api.dialtu.com","https://api.stg.dialtu.com"],"title":"Batch ingest clients into a pipeline","codeSamples":[],"requestExampleLanguages":["bash","python","javascript"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"17d7db50-4ad2-4806-b623-83ad5789b1f4":{"in":"path","name":"input_node_uuid","schema":{"description":"UUID of the pipeline's API input node. Copy it from the input node's settings in the Salesflow editor, or read it from *List API input nodes of a pipeline*.","title":"Input Node Uuid","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string"},"required":true,"description":"UUID of the pipeline's API input node. Copy it from the input node's settings in the Salesflow editor, or read it from *List API input nodes of a pipeline*."}},"requestBody":{"content":{"application/json":{"schema":{"description":"Request body for the batch ingest.","examples":[{"all_or_none":false,"clients":[{"company":"ACME","data":{"plan":"gold","source":"landing-page"},"email":"ana@example.com","external_id":"crm-1001","first_name":"Ana","identity_document_number":"1020304050","identity_document_type":"CC","last_name":"García","phone_number":"+525512345678","tags":[{"name":"spring-campaign"}]},{"client_id":8874,"data":{"plan":"silver"},"external_id":"crm-1002"}],"defaults":{"area_code":"52","data":{"source":"crm-sync"},"tags":[{"name":"imported"}],"timezone":"America/Mexico_City"},"dry_run":false,"on_duplicate":"update","trigger_automations":true}],"properties":{"clients":{"description":"1 to 500 client rows","items":{"description":"One client row. Needs at least one identity: client_id, phone_number or email.\n\nMatching order: client_id → phone (country-code tolerant) → email\n(case-insensitive). What happens on a match is set by the batch-level\n`on_duplicate`.","properties":{"external_id":{"oneOf":[{"type":"string","title":"External Id","description":"Your own identifier for this row; echoed back in results, never stored","uniqueKey":"clients.items.[INDEX].external_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"External Id","description":"Your own identifier for this row; echoed back in results, never stored","uniqueKey":"clients.items.[INDEX].external_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].external_id","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"integer","title":"Client Id","description":"Match an existing client by its Dialtu id","uniqueKey":"clients.items.[INDEX].client_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Client Id","description":"Match an existing client by its Dialtu id","uniqueKey":"clients.items.[INDEX].client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].client_id","typeLabel":"integer | null"},"first_name":{"oneOf":[{"type":"string","title":"First Name","description":"Client first name","uniqueKey":"clients.items.[INDEX].first_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"First Name","description":"Client first name","uniqueKey":"clients.items.[INDEX].first_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","title":"Last Name","description":"Client last name","uniqueKey":"clients.items.[INDEX].last_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Last Name","description":"Client last name","uniqueKey":"clients.items.[INDEX].last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].last_name","typeLabel":"string | null"},"phone_number":{"oneOf":[{"type":"string","title":"Phone Number","description":"Phone number. E.164 preferred (+56912345678); national digits are accepted together with area_code or defaults.area_code","uniqueKey":"clients.items.[INDEX].phone_number.oneOf.0","typeLabel":"string"},{"type":"null","title":"Phone Number","description":"Phone number. E.164 preferred (+56912345678); national digits are accepted together with area_code or defaults.area_code","uniqueKey":"clients.items.[INDEX].phone_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].phone_number","typeLabel":"string | null"},"area_code":{"oneOf":[{"type":"string","title":"Area Code","description":"Country calling code (e.g. '56'); inferred from an E.164 phone","uniqueKey":"clients.items.[INDEX].area_code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Area Code","description":"Country calling code (e.g. '56'); inferred from an E.164 phone","uniqueKey":"clients.items.[INDEX].area_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].area_code","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","title":"Email","description":"Client email","uniqueKey":"clients.items.[INDEX].email.oneOf.0","typeLabel":"string"},{"type":"null","title":"Email","description":"Client email","uniqueKey":"clients.items.[INDEX].email.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].email","typeLabel":"string | null"},"company":{"oneOf":[{"type":"string","title":"Company","description":"Client company","uniqueKey":"clients.items.[INDEX].company.oneOf.0","typeLabel":"string"},{"type":"null","title":"Company","description":"Client company","uniqueKey":"clients.items.[INDEX].company.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].company","typeLabel":"string | null"},"identity_document_type":{"oneOf":[{"type":"string","title":"Identity Document Type","description":"Kind of identity document, case-insensitive: one of CC, CE, NIT, TI, PA, DNI, RUT, SSN, EIN, OTHER (row error `invalid_format` otherwise)","uniqueKey":"clients.items.[INDEX].identity_document_type.oneOf.0","typeLabel":"string"},{"type":"null","title":"Identity Document Type","description":"Kind of identity document, case-insensitive: one of CC, CE, NIT, TI, PA, DNI, RUT, SSN, EIN, OTHER (row error `invalid_format` otherwise)","uniqueKey":"clients.items.[INDEX].identity_document_type.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].identity_document_type","typeLabel":"string | null"},"identity_document_number":{"oneOf":[{"type":"string","title":"Identity Document Number","description":"Identity document number, at most 64 characters (row error `too_long`)","uniqueKey":"clients.items.[INDEX].identity_document_number.oneOf.0","typeLabel":"string"},{"type":"null","title":"Identity Document Number","description":"Identity document number, at most 64 characters (row error `too_long`)","uniqueKey":"clients.items.[INDEX].identity_document_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].identity_document_number","typeLabel":"string | null"},"primary_contact":{"oneOf":[{"type":"string","title":"Primary Contact","description":"Secondary contact: identity document number or phone of the contact whose phone number this person shares (another row of the batch or an existing client). The row is created with no phone of its own and needs an identity_document_number. Rows sharing a phone but carrying different identity documents are linked this way automatically.","uniqueKey":"clients.items.[INDEX].primary_contact.oneOf.0","typeLabel":"string"},{"type":"null","title":"Primary Contact","description":"Secondary contact: identity document number or phone of the contact whose phone number this person shares (another row of the batch or an existing client). The row is created with no phone of its own and needs an identity_document_number. Rows sharing a phone but carrying different identity documents are linked this way automatically.","uniqueKey":"clients.items.[INDEX].primary_contact.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].primary_contact","typeLabel":"string | null"},"shared_phone_different_document":{"oneOf":[{"type":"string","title":"Shared Phone Different Document","description":"Overrides the batch's `shared_phone_different_document` for this row only","enum":["secondary","update"],"uniqueKey":"clients.items.[INDEX].shared_phone_different_document.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Shared Phone Different Document","description":"Overrides the batch's `shared_phone_different_document` for this row only","uniqueKey":"clients.items.[INDEX].shared_phone_different_document.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].shared_phone_different_document","typeLabel":"enum\u003cstring> | null"},"timezone":{"oneOf":[{"type":"string","title":"Timezone","description":"IANA timezone; inferred from the phone number when omitted","uniqueKey":"clients.items.[INDEX].timezone.oneOf.0","typeLabel":"string"},{"type":"null","title":"Timezone","description":"IANA timezone; inferred from the phone number when omitted","uniqueKey":"clients.items.[INDEX].timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].timezone","typeLabel":"string | null"},"data":{"oneOf":[{"type":"object","title":"Data","description":"Custom fields (the client's Data tab). Merged key by key on update; a null value removes that key","additionalProperties":true,"uniqueKey":"clients.items.[INDEX].data.oneOf.0","typeLabel":"Data · object"},{"type":"null","title":"Data","description":"Custom fields (the client's Data tab). Merged key by key on update; a null value removes that key","uniqueKey":"clients.items.[INDEX].data.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].data","typeLabel":"Data · object | null"},"tags":{"oneOf":[{"type":"array","items":{"description":"A tag to attach to a client. Matched by exact name; created if missing.","properties":{"name":{"description":"Tag name (exact match)","maxLength":100,"title":"Name","type":"string","isRequired":true,"uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].name","typeLabel":"string"},"color":{"oneOf":[{"type":"string","title":"Color","description":"Hex colour for a newly created tag","uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].color.oneOf.0","typeLabel":"string"},{"type":"null","title":"Color","description":"Hex colour for a newly created tag","uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].color.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].color","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Description for a newly created tag","uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Description for a newly created tag","uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX].description","typeLabel":"string | null"}},"required":["name"],"title":"SalesflowIngestTagSchema","type":"object","uniqueKey":"clients.items.[INDEX].tags.oneOf.0.items.[INDEX]","typeLabel":"SalesflowIngestTagSchema · object"},"title":"Tags","description":"Tags to add to this client (appended on update)","uniqueKey":"clients.items.[INDEX].tags.oneOf.0","typeLabel":"SalesflowIngestTagSchema · object[]"},{"type":"null","title":"Tags","description":"Tags to add to this client (appended on update)","uniqueKey":"clients.items.[INDEX].tags.oneOf.1","typeLabel":"null"}],"uniqueKey":"clients.items.[INDEX].tags","typeLabel":"SalesflowIngestTagSchema · object[] | null"}},"title":"SalesflowIngestBatchRowSchema","type":"object","uniqueKey":"clients.items.[INDEX]","typeLabel":"SalesflowIngestBatchRowSchema · object"},"maxItems":500,"minItems":1,"title":"Clients","type":"array","isRequired":true,"uniqueKey":"clients","typeLabel":"SalesflowIngestBatchRowSchema · object[]"},"on_duplicate":{"default":"update","description":"What to do when a row matches an existing client: update = merge the row into it (default; blank fields never clear values), skip = leave it untouched but still place it on the pipeline, fail = report the row as failed","enum":["update","skip","fail"],"title":"On Duplicate","type":"string","uniqueKey":"on_duplicate","typeLabel":"enum\u003cstring>"},"shared_phone_different_document":{"default":"secondary","description":"A row with the same phone as an existing client (or an earlier row) but a different, real identity document: secondary = another person sharing the phone, created as that contact's secondary contact (default; a real document is never overwritten), update = the same person, the row updates that contact and corrects its document. Rows with the same document, or with no real document on either side (blank, all zeros, or the phone itself), always update. Rows may override it.","enum":["secondary","update"],"title":"Shared Phone Different Document","type":"string","uniqueKey":"shared_phone_different_document","typeLabel":"enum\u003cstring>"},"all_or_none":{"default":false,"description":"If true, any failed row rolls back the whole batch (400 INGEST_ROLLED_BACK)","title":"All Or None","type":"boolean","uniqueKey":"all_or_none","typeLabel":"boolean"},"dry_run":{"default":false,"description":"Validate and match without writing anything","title":"Dry Run","type":"boolean","uniqueKey":"dry_run","typeLabel":"boolean"},"trigger_automations":{"default":true,"description":"Fire the target stage's on-arrival automations for each placed client","title":"Trigger Automations","type":"boolean","uniqueKey":"trigger_automations","typeLabel":"boolean"},"stage_id":{"oneOf":[{"type":"integer","title":"Stage Id","description":"Override the input node's target stage; must belong to the same pipeline","uniqueKey":"stage_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Stage Id","description":"Override the input node's target stage; must belong to the same pipeline","uniqueKey":"stage_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"stage_id","typeLabel":"integer | null"},"defaults":{"type":"object","title":"SalesflowIngestDefaultsSchema","description":"Batch-wide values applied wherever a row is silent.","properties":{"area_code":{"oneOf":[{"type":"string","title":"Area Code","description":"Country calling code for rows whose phone has none","uniqueKey":"defaults.area_code.oneOf.0","typeLabel":"string"},{"type":"null","title":"Area Code","description":"Country calling code for rows whose phone has none","uniqueKey":"defaults.area_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.area_code","typeLabel":"string | null"},"timezone":{"oneOf":[{"type":"string","title":"Timezone","description":"Timezone for rows where none is given or inferable","uniqueKey":"defaults.timezone.oneOf.0","typeLabel":"string"},{"type":"null","title":"Timezone","description":"Timezone for rows where none is given or inferable","uniqueKey":"defaults.timezone.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.timezone","typeLabel":"string | null"},"tags":{"description":"Tags added to every row","items":{"description":"A tag to attach to a client. Matched by exact name; created if missing.","properties":{"name":{"description":"Tag name (exact match)","maxLength":100,"title":"Name","type":"string","isRequired":true,"uniqueKey":"defaults.tags.items.[INDEX].name","typeLabel":"string"},"color":{"oneOf":[{"type":"string","title":"Color","description":"Hex colour for a newly created tag","uniqueKey":"defaults.tags.items.[INDEX].color.oneOf.0","typeLabel":"string"},{"type":"null","title":"Color","description":"Hex colour for a newly created tag","uniqueKey":"defaults.tags.items.[INDEX].color.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.tags.items.[INDEX].color","typeLabel":"string | null"},"description":{"oneOf":[{"type":"string","title":"Description","description":"Description for a newly created tag","uniqueKey":"defaults.tags.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","description":"Description for a newly created tag","uniqueKey":"defaults.tags.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"defaults.tags.items.[INDEX].description","typeLabel":"string | null"}},"required":["name"],"title":"SalesflowIngestTagSchema","type":"object","uniqueKey":"defaults.tags.items.[INDEX]","typeLabel":"SalesflowIngestTagSchema · object"},"title":"Tags","type":"array","uniqueKey":"defaults.tags","typeLabel":"SalesflowIngestTagSchema · object[]"},"data":{"additionalProperties":true,"description":"Custom fields applied to every row; the row's own keys win","title":"Data","type":"object","uniqueKey":"defaults.data","typeLabel":"Data · object"}},"uniqueKey":"defaults","typeLabel":"SalesflowIngestDefaultsSchema · object"}},"required":["clients"],"title":"SalesflowIngestBatchSchema","type":"object","uniqueKey":"","typeLabel":"SalesflowIngestBatchSchema · object"},"examples":{"Example":{"title":"Example","value":{"all_or_none":false,"clients":[{"company":"ACME","data":{"plan":"gold","source":"landing-page"},"email":"ana@example.com","external_id":"crm-1001","first_name":"Ana","identity_document_number":"1020304050","identity_document_type":"CC","last_name":"García","phone_number":"+525512345678","tags":[{"name":"spring-campaign"}]},{"client_id":8874,"data":{"plan":"silver"},"external_id":"crm-1002"}],"defaults":{"area_code":"52","data":{"source":"crm-sync"},"tags":[{"name":"imported"}],"timezone":"America/Mexico_City"},"dry_run":false,"on_duplicate":"update","trigger_automations":true}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"5c7acb0a-a04e-4a30-bfaa-444b72383213":{"description":"OK","content":{"application/json":{"schema":{"description":"Success response for the batch ingest (rows may still have failed\nindividually unless all_or_none was set).","properties":{"dry_run":{"description":"True when nothing was written","title":"Dry Run","type":"boolean","isRequired":true,"uniqueKey":"dry_run","typeLabel":"boolean"},"input_node_uuid":{"description":"The input node the batch was ingested through","title":"Input Node Uuid","type":"string","isRequired":true,"uniqueKey":"input_node_uuid","typeLabel":"string"},"pipeline_id":{"description":"Pipeline the clients were placed on","title":"Pipeline Id","type":"integer","isRequired":true,"uniqueKey":"pipeline_id","typeLabel":"integer"},"stage_id":{"description":"Stage the clients were placed on","title":"Stage Id","type":"integer","isRequired":true,"uniqueKey":"stage_id","typeLabel":"integer"},"summary":{"properties":{"total":{"default":0,"description":"Rows in the request","title":"Total","type":"integer","uniqueKey":"summary.total","typeLabel":"integer"},"created":{"default":0,"description":"Rows that created a new client","title":"Created","type":"integer","uniqueKey":"summary.created","typeLabel":"integer"},"updated":{"default":0,"description":"Rows merged into an existing client","title":"Updated","type":"integer","uniqueKey":"summary.updated","typeLabel":"integer"},"skipped":{"default":0,"description":"Rows that matched a client left untouched (`on_duplicate: skip`)","title":"Skipped","type":"integer","uniqueKey":"summary.skipped","typeLabel":"integer"},"failed":{"default":0,"description":"Rows rejected — see each row's `errors`","title":"Failed","type":"integer","uniqueKey":"summary.failed","typeLabel":"integer"},"pipeline_added":{"default":0,"description":"Rows placed on the stage (new or reactivated cards)","title":"Pipeline Added","type":"integer","uniqueKey":"summary.pipeline_added","typeLabel":"integer"},"pipeline_already_active":{"default":0,"description":"Rows whose client was already on the pipeline","title":"Pipeline Already Active","type":"integer","uniqueKey":"summary.pipeline_already_active","typeLabel":"integer"},"pipeline_failed":{"default":0,"description":"Rows whose client was written but could not be placed","title":"Pipeline Failed","type":"integer","uniqueKey":"summary.pipeline_failed","typeLabel":"integer"}},"title":"SalesflowIngestBatchSummarySchema","type":"object","description":"Counts over all rows","isRequired":true,"uniqueKey":"summary","typeLabel":"SalesflowIngestBatchSummarySchema · object"},"results":{"description":"One result per request row, in request order","items":{"properties":{"index":{"description":"Position of the row in the request","title":"Index","type":"integer","isRequired":true,"uniqueKey":"results.items.[INDEX].index","typeLabel":"integer"},"status":{"description":"What happened to the client record","enum":["created","updated","skipped","failed"],"title":"Status","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"external_id":{"oneOf":[{"type":"string","title":"External Id","description":"Echo of the row's external_id","uniqueKey":"results.items.[INDEX].external_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"External Id","description":"Echo of the row's external_id","uniqueKey":"results.items.[INDEX].external_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].external_id","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"integer","title":"Client Id","description":"Dialtu client id (created or matched)","uniqueKey":"results.items.[INDEX].client_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Client Id","description":"Dialtu client id (created or matched)","uniqueKey":"results.items.[INDEX].client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].client_id","typeLabel":"integer | null"},"matched_by":{"oneOf":[{"type":"string","title":"Matched By","description":"How an existing client was matched (`secondary` = an existing secondary contact, by its primary and identity document)","enum":["id","phone","email","secondary"],"uniqueKey":"results.items.[INDEX].matched_by.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Matched By","description":"How an existing client was matched (`secondary` = an existing secondary contact, by its primary and identity document)","uniqueKey":"results.items.[INDEX].matched_by.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].matched_by","typeLabel":"enum\u003cstring> | null"},"errors":{"description":"Why the row failed (empty unless status is `failed`)","items":{"properties":{"field":{"description":"Row field the error refers to","title":"Field","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].field","typeLabel":"string"},"code":{"description":"Machine-readable error code","enum":["required","invalid_format","too_long","duplicate_in_batch","not_found","exists","conflict"],"title":"Code","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].code","typeLabel":"enum\u003cstring>"},"message":{"description":"Human-readable explanation","title":"Message","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].message","typeLabel":"string"},"existing_client_id":{"oneOf":[{"type":"integer","title":"Existing Client Id","description":"The client this row matched (exists / conflict)","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].existing_client_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Existing Client Id","description":"The client this row matched (exists / conflict)","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].existing_client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].existing_client_id","typeLabel":"integer | null"},"conflicting_client_id":{"oneOf":[{"type":"integer","title":"Conflicting Client Id","description":"The other client that owns the conflicting phone/email","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].conflicting_client_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Conflicting Client Id","description":"The other client that owns the conflicting phone/email","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].conflicting_client_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].conflicting_client_id","typeLabel":"integer | null"},"duplicate_of_index":{"oneOf":[{"type":"integer","title":"Duplicate Of Index","description":"Index of the earlier row with the same identity (duplicate_in_batch)","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].duplicate_of_index.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Duplicate Of Index","description":"Index of the earlier row with the same identity (duplicate_in_batch)","uniqueKey":"results.items.[INDEX].errors.items.[INDEX].duplicate_of_index.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].errors.items.[INDEX].duplicate_of_index","typeLabel":"integer | null"}},"required":["field","code","message"],"title":"SalesflowIngestBatchRowErrorSchema","type":"object","uniqueKey":"results.items.[INDEX].errors.items.[INDEX]","typeLabel":"SalesflowIngestBatchRowErrorSchema · object"},"title":"Errors","type":"array","uniqueKey":"results.items.[INDEX].errors","typeLabel":"SalesflowIngestBatchRowErrorSchema · object[]"},"pipeline":{"oneOf":[{"type":"object","title":"SalesflowIngestBatchRowPipelineSchema","description":"Pipeline placement outcome for this row","required":["status"],"properties":{"status":{"description":"Pipeline placement outcome for this row","enum":["added","reactivated","already_active","failed","not_attempted"],"title":"Status","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].pipeline.oneOf.0.status","typeLabel":"enum\u003cstring>"},"client_state_id":{"oneOf":[{"type":"integer","title":"Client State Id","description":"The client's card on the pipeline, when placed or already there","uniqueKey":"results.items.[INDEX].pipeline.oneOf.0.client_state_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Client State Id","description":"The client's card on the pipeline, when placed or already there","uniqueKey":"results.items.[INDEX].pipeline.oneOf.0.client_state_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].pipeline.oneOf.0.client_state_id","typeLabel":"integer | null"}},"uniqueKey":"results.items.[INDEX].pipeline.oneOf.0","typeLabel":"SalesflowIngestBatchRowPipelineSchema · object"},{"type":"null","description":"Pipeline placement outcome for this row","uniqueKey":"results.items.[INDEX].pipeline.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].pipeline","typeLabel":"SalesflowIngestBatchRowPipelineSchema · object | null"},"existing_client":{"oneOf":[{"type":"object","title":"Existing Client","description":"dry_run only: snapshot of the matched client before any merge","additionalProperties":true,"uniqueKey":"results.items.[INDEX].existing_client.oneOf.0","typeLabel":"Existing Client · object"},{"type":"null","title":"Existing Client","description":"dry_run only: snapshot of the matched client before any merge","uniqueKey":"results.items.[INDEX].existing_client.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].existing_client","typeLabel":"Existing Client · object | null"},"secondary":{"default":false,"description":"The row is a secondary contact sharing another contact's phone","title":"Secondary","type":"boolean","uniqueKey":"results.items.[INDEX].secondary","typeLabel":"boolean"},"primary_contact_index":{"oneOf":[{"type":"integer","title":"Primary Contact Index","description":"Index of the primary contact's row, when it is in the batch","uniqueKey":"results.items.[INDEX].primary_contact_index.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Primary Contact Index","description":"Index of the primary contact's row, when it is in the batch","uniqueKey":"results.items.[INDEX].primary_contact_index.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].primary_contact_index","typeLabel":"integer | null"},"primary_contact_id":{"oneOf":[{"type":"integer","title":"Primary Contact Id","description":"Client id of the primary contact, once it exists","uniqueKey":"results.items.[INDEX].primary_contact_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Primary Contact Id","description":"Client id of the primary contact, once it exists","uniqueKey":"results.items.[INDEX].primary_contact_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].primary_contact_id","typeLabel":"integer | null"},"warnings":{"description":"Non-blocking notes on a row that was still written","items":{"properties":{"field":{"description":"Row field the warning refers to","title":"Field","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].warnings.items.[INDEX].field","typeLabel":"string"},"code":{"const":"ignored","description":"ignored = the value was not used (e.g. a primary_contact that is a name, not a document or phone); it is kept in the client's data","title":"Code","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].warnings.items.[INDEX].code","typeLabel":"string"},"message":{"description":"Human-readable explanation","title":"Message","type":"string","isRequired":true,"uniqueKey":"results.items.[INDEX].warnings.items.[INDEX].message","typeLabel":"string"}},"required":["field","code","message"],"title":"SalesflowIngestBatchRowWarningSchema","type":"object","uniqueKey":"results.items.[INDEX].warnings.items.[INDEX]","typeLabel":"SalesflowIngestBatchRowWarningSchema · object"},"title":"Warnings","type":"array","uniqueKey":"results.items.[INDEX].warnings","typeLabel":"SalesflowIngestBatchRowWarningSchema · object[]"},"shared_phone_decision":{"oneOf":[{"type":"string","title":"Shared Phone Decision","description":"Same phone as another contact with a different identity document: what was applied. Null for rows outside that case","enum":["secondary","update"],"uniqueKey":"results.items.[INDEX].shared_phone_decision.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Shared Phone Decision","description":"Same phone as another contact with a different identity document: what was applied. Null for rows outside that case","uniqueKey":"results.items.[INDEX].shared_phone_decision.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].shared_phone_decision","typeLabel":"enum\u003cstring> | null"},"shared_phone_holder_index":{"oneOf":[{"type":"integer","title":"Shared Phone Holder Index","description":"Row index of the contact holding the phone, when in the batch","uniqueKey":"results.items.[INDEX].shared_phone_holder_index.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Shared Phone Holder Index","description":"Row index of the contact holding the phone, when in the batch","uniqueKey":"results.items.[INDEX].shared_phone_holder_index.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].shared_phone_holder_index","typeLabel":"integer | null"},"shared_phone_holder_id":{"oneOf":[{"type":"integer","title":"Shared Phone Holder Id","description":"Client id of the existing contact holding the phone","uniqueKey":"results.items.[INDEX].shared_phone_holder_id.oneOf.0","typeLabel":"integer"},{"type":"null","title":"Shared Phone Holder Id","description":"Client id of the existing contact holding the phone","uniqueKey":"results.items.[INDEX].shared_phone_holder_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].shared_phone_holder_id","typeLabel":"integer | null"}},"required":["index","status"],"title":"SalesflowIngestBatchRowResultSchema","type":"object","uniqueKey":"results.items.[INDEX]","typeLabel":"SalesflowIngestBatchRowResultSchema · object"},"title":"Results","type":"array","isRequired":true,"uniqueKey":"results","typeLabel":"SalesflowIngestBatchRowResultSchema · object[]"},"status":{"const":"success","default":"success","description":"Response status","title":"Status","type":"string","uniqueKey":"status","typeLabel":"string"}},"required":["dry_run","input_node_uuid","pipeline_id","stage_id","summary","results"],"title":"SalesflowIngestBatchResponse","type":"object","uniqueKey":"","typeLabel":"SalesflowIngestBatchResponse · object"},"examples":{"Example":{"title":"Example","value":{"dry_run":true,"input_node_uuid":"\u003cstring>","pipeline_id":123,"stage_id":123,"summary":{"total":0,"created":0,"updated":0,"skipped":0,"failed":0,"pipeline_added":0,"pipeline_already_active":0,"pipeline_failed":0},"results":[{"index":123,"status":"created","external_id":"\u003cstring>","client_id":123,"matched_by":"id","errors":[{"field":"\u003cstring>","code":"required","message":"\u003cstring>","existing_client_id":123,"conflicting_client_id":123,"duplicate_of_index":123}],"pipeline":{"status":"added","client_state_id":123},"existing_client":{},"secondary":false,"primary_contact_index":123,"primary_contact_id":123,"warnings":[{"field":"\u003cstring>","code":"ignored","message":"\u003cstring>"}],"shared_phone_decision":"secondary","shared_phone_holder_index":123,"shared_phone_holder_id":123}],"status":"success"}}},"exampleType":"generated"}},"exampleType":"generated"},"c05bc4f3-f0de-4980-b4ff-68662168fcea":{"description":"Bad Request","content":{"application/json":{"schema":{"description":"Error response for Salesflow client ingestion.","properties":{"status":{"const":"error","description":"Error status","title":"Status","type":"string","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"error_code":{"description":"Machine-readable error code","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable error message","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"}},"required":["status","error_code","message"],"title":"SalesflowIngestErrorResponse","type":"object","uniqueKey":"","typeLabel":"SalesflowIngestErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error_code":"\u003cstring>","message":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"a05d20dd-e943-4575-9b3c-3a1c9b9c652a":{"description":"Missing, malformed or revoked API key.","content":{"application/json":{"schema":{"description":"Plain error body: `{\"detail\": \"...\"}`. No `error_code` is included.","properties":{"detail":{"description":"Human-readable reason for the failure.","title":"Detail","type":"string","isRequired":true,"uniqueKey":"detail","typeLabel":"string"}},"required":["detail"],"title":"DetailErrorResponse","type":"object","uniqueKey":"","typeLabel":"DetailErrorResponse · object"},"examples":{"missing_header":{"title":"missing_header","value":{"detail":"Unauthorized"}},"invalid_key":{"title":"invalid_key","value":{"detail":"Invalid or expired API key. Please check your credentials."}}},"exampleType":"examples"}},"exampleType":"examples"},"2e0d87a9-88e4-4e7f-bc31-6a1def952a07":{"description":"Not Found","content":{"application/json":{"schema":{"description":"Error response for Salesflow client ingestion.","properties":{"status":{"const":"error","description":"Error status","title":"Status","type":"string","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"error_code":{"description":"Machine-readable error code","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable error message","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"}},"required":["status","error_code","message"],"title":"SalesflowIngestErrorResponse","type":"object","uniqueKey":"","typeLabel":"SalesflowIngestErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error_code":"\u003cstring>","message":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"bdea5c9f-8932-4347-b6e2-12764648e720":{"description":"The request did not match the documented schema.","content":{"application/json":{"schema":{"title":"RequestValidationError","type":"object","description":"Returned when the request body, query string or path could not be parsed against the documented schema. Fix the listed fields and retry.","properties":{"detail":{"type":"array","title":"Detail","description":"One entry per invalid field.","items":{"title":"RequestValidationErrorItem","type":"object","properties":{"loc":{"type":"array","title":"Loc","description":"Where the problem is: the first element is `body`, `query` or `path`, followed by the field path.","items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Msg","description":"What is wrong with the value.","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Type","description":"Machine-readable validation error type, e.g. `missing` or `int_parsing`.","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"required":["loc","msg","type"],"uniqueKey":"detail.items.[INDEX]","typeLabel":"RequestValidationErrorItem · object"},"isRequired":true,"uniqueKey":"detail","typeLabel":"RequestValidationErrorItem · object[]"}},"required":["detail"],"uniqueKey":"","typeLabel":"RequestValidationError · object"},"example":{"detail":[{"type":"missing","loc":["body","payload","phone_number"],"msg":"Field required"}]},"examples":{"Example":{"title":"Example","value":{"detail":[{"type":"missing","loc":["body","payload","phone_number"],"msg":"Field required"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"c1c9d59e-8c3c-4949-ac2e-e77e139bb808":{"description":"Internal Server Error","content":{"application/json":{"schema":{"description":"Error response for Salesflow client ingestion.","properties":{"status":{"const":"error","description":"Error status","title":"Status","type":"string","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"error_code":{"description":"Machine-readable error code","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"error_code","typeLabel":"string"},"message":{"description":"Human-readable error message","title":"Message","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"details":{"oneOf":[{"type":"object","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","additionalProperties":true,"uniqueKey":"details.oneOf.0","typeLabel":"Details · object"},{"type":"null","title":"Details","description":"Additional error details. For INGEST_ROLLED_BACK: the batch summary and per-row results, so every failing row can be fixed at once.","uniqueKey":"details.oneOf.1","typeLabel":"null"}],"uniqueKey":"details","typeLabel":"Details · object | null"}},"required":["status","error_code","message"],"title":"SalesflowIngestErrorResponse","type":"object","uniqueKey":"","typeLabel":"SalesflowIngestErrorResponse · object"},"examples":{"Example":{"title":"Example","value":{"status":"error","error_code":"\u003cstring>","message":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e97a2e54-91d0-4b3a-a5a6-7377dacb8d1c":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"pk_...","description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","scopes":[],"schemeName":"ApiKeyBearer"}}},"servers":{"64986e62-6aff-4026-a2be-2361e00f4585":{"url":"https://api.dialtu.com","description":"Production"},"b407c61f-7c82-415e-85d4-7a1b8f2be716":{"url":"https://api.stg.dialtu.com","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"pk_...","description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","scopes":[],"schemeName":"ApiKeyBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key created in the dashboard under **Settings → API Keys**. Send it as `Authorization: Bearer pk_...`.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyBearer","name":"Authorization"}],"title":"ApiKeyBearer"}]},"originalFileLocation":"https://api.dialtu.com/api/v2/public/openapi.json"},"subdomain":"dialtu-0be120d3","siteName":"Dialtu","title":"Batch ingest clients into a pipeline - Dialtu","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"es":{"href":"/es/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline","matchLevel":1},"en":{"href":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline","matchLevel":0}}},"lastModified":"2026-09-14T18:31:09.033Z","originalFileLocation":"en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create or update up to 500 clients in one request and place them on the input node\u0026#x27;s target stage (or on stage_id, if given, within the same pipeline). The batch form of Ingest a client into a pipeline. Each row is matched by client_id, then phone number (country-code tolerant), then email. What happens on a match is set by on_duplicate: update (the default) merges the row into the existing client — blank fields never clear stored values, and the phone number is never changed; skip leaves the client untouched but still places it; fail reports the row. Note that the single-row endpoint defaults to not updating. Rows succeed or fail individually — read results[] — unless all_or_none is set, in which case any failure returns 400 INGEST_ROLLED_BACK with the same per-row detail and nothing is written. dry_run returns the same shape without writing anything.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dialtu\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Batch ingest clients into a pipeline - Dialtu\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create or update up to 500 clients in one request and place them on the input node\u0026#x27;s target stage (or on stage_id, if given, within the same pipeline). The batch form of Ingest a client into a pipeline. Each row is matched by client_id, then phone number (country-code tolerant), then email. What happens on a match is set by on_duplicate: update (the default) merges the row into the existing client — blank fields never clear stored values, and the phone number is never changed; skip leaves the client untouched but still places it; fail reports the row. Note that the single-row endpoint defaults to not updating. Rows succeed or fail individually — read results[] — unless all_or_none is set, in which case any failure returns 400 INGEST_ROLLED_BACK with the same per-row detail and nothing is written. dry_run returns the same shape without writing anything.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dialtu Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dialtu-0be120d3.mintlify.app/_mintlify/api/og/v2?division=Salesflow\u0026amp;title=Batch+ingest+clients+into+a+pipeline\u0026amp;description=Create+or+update+up+to+500+clients+in+one+request+and+place+them+on+the%0Ainput+node%27s+target+stage+%28or+on+%60stage_id%60%2C+if+given%2C+within+the+same%0Apipeline%29.+The+ba\u0026amp;theme=2034318531132db55603086e\u0026amp;signature=e342f8148a0dcefc6daeb65711a9534f775fb4611b5aabe3ce40b11c0e30930e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Batch ingest clients into a pipeline - Dialtu\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create or update up to 500 clients in one request and place them on the input node\u0026#x27;s target stage (or on stage_id, if given, within the same pipeline). The batch form of Ingest a client into a pipeline. Each row is matched by client_id, then phone number (country-code tolerant), then email. What happens on a match is set by on_duplicate: update (the default) merges the row into the existing client — blank fields never clear stored values, and the phone number is never changed; skip leaves the client untouched but still places it; fail reports the row. Note that the single-row endpoint defaults to not updating. Rows succeed or fail individually — read results[] — unless all_or_none is set, in which case any failure returns 400 INGEST_ROLLED_BACK with the same per-row detail and nothing is written. dry_run returns the same shape without writing anything.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dialtu-0be120d3.mintlify.app/_mintlify/api/og/v2?division=Salesflow\u0026amp;title=Batch+ingest+clients+into+a+pipeline\u0026amp;description=Create+or+update+up+to+500+clients+in+one+request+and+place+them+on+the%0Ainput+node%27s+target+stage+%28or+on+%60stage_id%60%2C+if+given%2C+within+the+same%0Apipeline%29.+The+ba\u0026amp;theme=2034318531132db55603086e\u0026amp;signature=e342f8148a0dcefc6daeb65711a9534f775fb4611b5aabe3ce40b11c0e30930e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/dialtu-0be120d3/zx4Lw4U-4aE1CF7l/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dialtu\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6633FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline.md\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"en\" href=\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"es\" href=\"https://docs.dialtu.com/es/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\">\u003clink data-mint-head rel=\"alternate\" hreflang=\"x-default\" href=\"https://docs.dialtu.com/es/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dialtu.com/#organization\",\"name\":\"Dialtu\",\"url\":\"https://docs.dialtu.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/dialtu-0be120d3/TUPVgXHfXGujXaJe/logo/light.svg?fit=max\u0026auto=format\u0026n=TUPVgXHfXGujXaJe\u0026q=85\u0026s=d6c7d6e992583a882baffad77a34e714\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dialtu.com#website\",\"name\":\"Dialtu\",\"url\":\"https://docs.dialtu.com\",\"publisher\":{\"@id\":\"https://docs.dialtu.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline#webpage\",\"url\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\",\"name\":\"Batch ingest clients into a pipeline\",\"description\":\"Create or update up to 500 clients in one request and place them on the input node's target stage (or on stage_id, if given, within the same pipeline). The batch form of Ingest a client into a pipeline. Each row is matched by client_id, then phone number (country-code tolerant), then email. What happens on a match is set by on_duplicate: update (the default) merges the row into the existing client — blank fields never clear stored values, and the phone number is never changed; skip leaves the client untouched but still places it; fail reports the row. Note that the single-row endpoint defaults to not updating. Rows succeed or fail individually — read results[] — unless all_or_none is set, in which case any failure returns 400 INGEST_ROLLED_BACK with the same per-row detail and nothing is written. dry_run returns the same shape without writing anything.\",\"dateModified\":\"2026-09-14T18:31:09.033Z\",\"isPartOf\":{\"@id\":\"https://docs.dialtu.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/calls/schedule-a-call\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Salesflow\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/ingest-a-client-into-a-pipeline\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Batch ingest clients into a pipeline\",\"item\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline#apireference\",\"headline\":\"Batch ingest clients into a pipeline\",\"name\":\"Batch ingest clients into a pipeline\",\"description\":\"Create or update up to 500 clients in one request and place them on the input node's target stage (or on stage_id, if given, within the same pipeline). The batch form of Ingest a client into a pipeline. Each row is matched by client_id, then phone number (country-code tolerant), then email. What happens on a match is set by on_duplicate: update (the default) merges the row into the existing client — blank fields never clear stored values, and the phone number is never changed; skip leaves the client untouched but still places it; fail reports the row. Note that the single-row endpoint defaults to not updating. Rows succeed or fail individually — read results[] — unless all_or_none is set, in which case any failure returns 400 INGEST_ROLLED_BACK with the same per-row detail and nothing is written. dry_run returns the same shape without writing anything.\",\"url\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dialtu.com/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline#webpage\"},\"dateModified\":\"2026-09-14T18:31:09.033Z\",\"publisher\":{\"@id\":\"https://docs.dialtu.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dialtu.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dialtu\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Dialtu","nav":{"global":null,"languages":[{"language":"es","pages":[{"title":"es","href":"/es/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline"}]},{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en/getting-started/what-is-dialtu"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Getting started","icon":"rocket","pages":[{"title":"Introduction","icon":"rocket","href":"/en/api-reference/introduction"},{"title":"Authentication","icon":"key","href":"/en/api-reference/authentication"},{"title":"Errors","icon":"triangle-exclamation","href":"/en/api-reference/errors"}]},{"group":"Guides","icon":"book","pages":[{"title":"Sync WhatsApp conversations","icon":"whatsapp","href":"/en/api-reference/guides/whatsapp-conversation-sync"},{"title":"Book calendar appointments","icon":"calendar-check","href":"/en/api-reference/guides/calendar-appointments"},{"title":"Batch ingest clients","icon":"file-import","href":"/en/api-reference/guides/batch-ingest-clients"}]},{"group":"Endpoints","icon":"plug","pages":[{"group":"Calls","pages":[{"title":"Schedule a call","openapi":"POST /api/v2/public/calls/schedule","href":"/en/api-reference/endpoints/calls/schedule-a-call"}]},{"group":"Clients","pages":[{"title":"Create a client","openapi":"POST /api/v2/public/clients","href":"/en/api-reference/endpoints/clients/create-a-client"}]},{"group":"Salesflow","pages":[{"title":"Ingest a client into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}","description":"Push a lead into a Salesflow pipeline through one of its API input nodes.\n\nThe client is looked up by `client_id` or `phone_number` and created when\nit does not exist yet; it then enters the stage the input node points to.\nThe input node must be of type **API** and active. Set `update` to refresh\nthe stored contact fields when the client already exists.","href":"/en/api-reference/endpoints/salesflow/ingest-a-client-into-a-pipeline"},{"title":"Batch ingest clients into a pipeline","openapi":"POST /api/v2/public/salesflow/ingest/{input_node_uuid}/batch","href":"/en/api-reference/endpoints/salesflow/batch-ingest-clients-into-a-pipeline"}]},{"group":"Salesflow pipelines","pages":[{"title":"List pipelines","openapi":"GET /api/v2/public/salesflow/pipelines","description":"List the pipelines visible to this API key, newest first. Deleted\npipelines are excluded. Use the `id` with *List API input nodes of a\npipeline* and *List stages in a pipeline*.","href":"/en/api-reference/endpoints/salesflow-pipelines/list-pipelines"},{"title":"List API input nodes of a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/input-nodes","href":"/en/api-reference/endpoints/salesflow-pipelines/list-api-input-nodes-of-a-pipeline"},{"title":"List stages in a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/stages","href":"/en/api-reference/endpoints/salesflow-pipelines/list-stages-in-a-pipeline"},{"title":"List clients in a pipeline","openapi":"GET /api/v2/public/salesflow/pipelines/{pipeline_id}/clients","href":"/en/api-reference/endpoints/salesflow-pipelines/list-clients-in-a-pipeline"},{"title":"Add clients to a pipeline","openapi":"POST /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/add","href":"/en/api-reference/endpoints/salesflow-pipelines/add-clients-to-a-pipeline"},{"title":"Remove clients from a pipeline","openapi":"POST /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/remove","href":"/en/api-reference/endpoints/salesflow-pipelines/remove-clients-from-a-pipeline"},{"title":"Move a client between stages","openapi":"PATCH /api/v2/public/salesflow/pipelines/{pipeline_id}/clients/{client_id}/move","href":"/en/api-reference/endpoints/salesflow-pipelines/move-a-client-between-stages"}]},{"group":"Calendar","pages":[{"title":"Get bookable capacity per service","openapi":"GET /api/v2/public/calendar/availability","href":"/en/api-reference/endpoints/calendar/get-bookable-capacity-per-service"},{"title":"List bookable services","openapi":"GET /api/v2/public/calendar/services","href":"/en/api-reference/endpoints/calendar/list-bookable-services"},{"title":"Book an appointment","openapi":"POST /api/v2/public/calendar/events","href":"/en/api-reference/endpoints/calendar/book-an-appointment"},{"title":"Add a client to the waiting list","openapi":"POST /api/v2/public/calendar/waitlist/entries","href":"/en/api-reference/endpoints/calendar/add-a-client-to-the-waiting-list"},{"title":"Add many clients to a waiting list","openapi":"POST /api/v2/public/calendar/waitlist/entries/batch","href":"/en/api-reference/endpoints/calendar/add-many-clients-to-a-waiting-list"},{"title":"List waiting-list entries","openapi":"GET /api/v2/public/calendar/waitlist/entries","href":"/en/api-reference/endpoints/calendar/list-waiting-list-entries"},{"title":"Remove a client from the waiting list","openapi":"DELETE /api/v2/public/calendar/waitlist/entries/{entry_id}","href":"/en/api-reference/endpoints/calendar/remove-a-client-from-the-waiting-list"},{"title":"Get waiting-list totals","openapi":"GET /api/v2/public/calendar/waitlist/summary","href":"/en/api-reference/endpoints/calendar/get-waiting-list-totals"}]},{"group":"WhatsApp","pages":[{"title":"List WhatsApp conversations","openapi":"GET /api/v2/public/whatsapp/conversations","href":"/en/api-reference/endpoints/whatsapp/list-whatsapp-conversations"},{"title":"List messages in a WhatsApp conversation","openapi":"GET /api/v2/public/whatsapp/conversations/{session_id}/messages","href":"/en/api-reference/endpoints/whatsapp/list-messages-in-a-whatsapp-conversation"}]}]}]}]}]},"title":"Batch ingest clients into a pipeline - Dialtu","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js","Markdown-3OmurJMP.js","clsx-DMKzROTp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-1ms6tsT-.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Ke9xIMFx.js"]}