@@ -16321,6 +16321,246 @@ paths:
1632116321 message: Execution result not found
1632216322 schema:
1632316323 "$ref": "#/components/schemas/error"
16324+ "/ecommerce/connectors/{id}/catalog":
16325+ post:
16326+ summary: Upload a product catalog
16327+ parameters:
16328+ - name: Intercom-Version
16329+ in: header
16330+ schema:
16331+ "$ref": "#/components/schemas/intercom_version_preview"
16332+ - name: id
16333+ in: path
16334+ required: true
16335+ description: The unique identifier of the ecommerce connector.
16336+ schema:
16337+ type: string
16338+ example: '42939'
16339+ - name: import_job_id
16340+ in: query
16341+ required: false
16342+ description: |
16343+ The import job ID returned from the first multipart upload request. Required
16344+ when uploading subsequent parts (`part_number` ≥ 2) and when finalizing
16345+ a multipart session (`finalize=true`).
16346+ schema:
16347+ type: string
16348+ example: 'job_01abc123'
16349+ - name: part_number
16350+ in: query
16351+ required: false
16352+ description: |
16353+ The sequential part number for a multipart upload. Must be a positive integer.
16354+ The server returns `next_part_number` in each response to guide the next request.
16355+ Retrying the same `part_number` is safe and idempotent.
16356+ schema:
16357+ type: integer
16358+ example: 2
16359+ - name: finalize
16360+ in: query
16361+ required: false
16362+ description: |
16363+ Set to `true` to finalize a multipart upload session and start the catalog sync.
16364+ No catalog file is required when finalizing. Set to `false` to upload a part in
16365+ a multipart session. Omit entirely for a single-file upload.
16366+ schema:
16367+ type: string
16368+ enum:
16369+ - 'true'
16370+ - 'false'
16371+ example: 'false'
16372+ tags:
16373+ - Ecommerce Connectors
16374+ operationId: uploadEcommerceCatalog
16375+ description: |
16376+ Upload a product catalog to an ecommerce connector. The catalog must be a JSON
16377+ array of product objects. There are two upload modes:
16378+
16379+ **Single-file upload** — POST a single catalog file (up to 99 MB per request).
16380+ Omit `finalize` and `import_job_id`. Returns `202 Accepted` when sync has started.
16381+
16382+ **Multipart upload** — For catalogs that must be split across multiple requests:
16383+
16384+ 1. POST the first part with `finalize=false` (no `import_job_id`). The response
16385+ returns an `import_job_id` and `next_part_number`.
16386+ 2. POST each subsequent part with `finalize=false`, the `import_job_id` from step 1,
16387+ and the `part_number` from the previous response. Each part must be ≤ 99 MB.
16388+ 3. POST with `finalize=true` and the `import_job_id` to complete the upload and
16389+ start the sync. No catalog file is required in the finalization request.
16390+
16391+ Part uploads are idempotent — retrying the same `part_number` does not create
16392+ a duplicate. If a response is lost, retry with the same `part_number`.
16393+ requestBody:
16394+ content:
16395+ multipart/form-data:
16396+ schema:
16397+ type: object
16398+ properties:
16399+ catalog:
16400+ type: string
16401+ format: binary
16402+ description: |
16403+ The catalog JSON file. Required for all requests except finalization
16404+ (`finalize=true`). Must be a valid JSON array of objects. Max 99 MB.
16405+ responses:
16406+ '200':
16407+ description: Multipart catalog part uploaded successfully.
16408+ content:
16409+ application/json:
16410+ examples:
16411+ Part uploaded:
16412+ value:
16413+ import_job_id: 'job_01abc123'
16414+ next_part_number: 2
16415+ schema:
16416+ "$ref": "#/components/schemas/ecommerce_catalog_upload_part_response"
16417+ '202':
16418+ description: Catalog accepted and sync has started.
16419+ content:
16420+ application/json:
16421+ examples:
16422+ Sync started:
16423+ value:
16424+ import_job_id: 'job_01abc123'
16425+ status: processing
16426+ message: Catalog received. Sync has started.
16427+ schema:
16428+ "$ref": "#/components/schemas/ecommerce_catalog_upload_response"
16429+ '400':
16430+ description: Bad request.
16431+ content:
16432+ application/json:
16433+ examples:
16434+ Missing catalog file:
16435+ value:
16436+ type: error.list
16437+ request_id: test-uuid-replacement
16438+ errors:
16439+ - code: parameter_not_found
16440+ message: catalog file is required
16441+ Catalog is not a file:
16442+ value:
16443+ type: error.list
16444+ request_id: test-uuid-replacement
16445+ errors:
16446+ - code: parameter_not_found
16447+ message: catalog must be an uploaded file
16448+ schema:
16449+ "$ref": "#/components/schemas/error"
16450+ '401':
16451+ "$ref": "#/components/responses/Unauthorized"
16452+ '404':
16453+ description: Not found.
16454+ content:
16455+ application/json:
16456+ examples:
16457+ Connector not found:
16458+ value:
16459+ type: error.list
16460+ request_id: test-uuid-replacement
16461+ errors:
16462+ - code: import_source_not_found
16463+ message: No connector found with the provided id.
16464+ Feature not available:
16465+ value:
16466+ type: error.list
16467+ request_id: test-uuid-replacement
16468+ errors:
16469+ - code: not_found
16470+ message: The catalog API is not available for this workspace.
16471+ Upload session not found:
16472+ value:
16473+ type: error.list
16474+ request_id: test-uuid-replacement
16475+ errors:
16476+ - code: upload_session_not_found
16477+ message: No active upload session found for the provided import_job_id.
16478+ schema:
16479+ "$ref": "#/components/schemas/error"
16480+ '409':
16481+ description: Conflict.
16482+ content:
16483+ application/json:
16484+ examples:
16485+ Sync already in progress:
16486+ value:
16487+ type: error.list
16488+ request_id: test-uuid-replacement
16489+ errors:
16490+ - code: sync_in_progress
16491+ message: A catalog upload is already in progress. Please wait for it to complete.
16492+ Multipart session already exists:
16493+ value:
16494+ type: error.list
16495+ request_id: test-uuid-replacement
16496+ errors:
16497+ - code: sync_in_progress
16498+ message: A multipart upload is already in progress. Use import_job_id to continue.
16499+ Session cannot be finalized:
16500+ value:
16501+ type: error.list
16502+ request_id: test-uuid-replacement
16503+ errors:
16504+ - code: upload_session_not_finalizable
16505+ message: Upload session cannot be finalized in its current state.
16506+ schema:
16507+ "$ref": "#/components/schemas/error"
16508+ '422':
16509+ description: Unprocessable content.
16510+ content:
16511+ application/json:
16512+ examples:
16513+ Catalog is not a JSON array:
16514+ value:
16515+ type: error.list
16516+ request_id: test-uuid-replacement
16517+ errors:
16518+ - code: invalid_catalog_format
16519+ message: catalog must be a JSON array
16520+ Catalog items are not objects:
16521+ value:
16522+ type: error.list
16523+ request_id: test-uuid-replacement
16524+ errors:
16525+ - code: invalid_catalog_format
16526+ message: each item in the catalog array must be a JSON object
16527+ Part number is not a positive integer:
16528+ value:
16529+ type: error.list
16530+ request_id: test-uuid-replacement
16531+ errors:
16532+ - code: invalid_part_number
16533+ message: part_number must be a positive integer
16534+ Out-of-sequence part number:
16535+ value:
16536+ type: error.list
16537+ request_id: test-uuid-replacement
16538+ errors:
16539+ - code: invalid_part_number
16540+ message: Expected part 2, got 3
16541+ File exceeds size limit:
16542+ value:
16543+ type: error.list
16544+ request_id: test-uuid-replacement
16545+ errors:
16546+ - code: payload_too_large
16547+ message: catalog file exceeds 99MB limit
16548+ schema:
16549+ "$ref": "#/components/schemas/error"
16550+ '503':
16551+ description: Service unavailable.
16552+ content:
16553+ application/json:
16554+ examples:
16555+ Storage error:
16556+ value:
16557+ type: error.list
16558+ request_id: test-uuid-replacement
16559+ errors:
16560+ - code: internal_error
16561+ message: Failed to store catalog
16562+ schema:
16563+ "$ref": "#/components/schemas/error"
1632416564 "/events":
1632516565 post:
1632616566 summary: Submit a data event
@@ -32894,6 +33134,40 @@ components:
3289433134 example: '5017690'
3289533135 required:
3289633136 - admin_id
33137+ ecommerce_catalog_upload_part_response:
33138+ title: Ecommerce Catalog Upload Part Response
33139+ type: object
33140+ description: Returned after a multipart catalog part is successfully uploaded.
33141+ properties:
33142+ import_job_id:
33143+ type: string
33144+ description: |
33145+ The unique identifier for the active upload session. Pass this as `import_job_id`
33146+ in subsequent part uploads and in the finalization request.
33147+ example: 'job_01abc123'
33148+ next_part_number:
33149+ type: integer
33150+ description: The part number to use in the next upload request.
33151+ example: 2
33152+ ecommerce_catalog_upload_response:
33153+ title: Ecommerce Catalog Upload Response
33154+ type: object
33155+ description: Returned when a catalog upload is accepted and sync has started.
33156+ properties:
33157+ import_job_id:
33158+ type: string
33159+ description: The unique identifier for the import job.
33160+ example: 'job_01abc123'
33161+ status:
33162+ type: string
33163+ description: The current status of the catalog sync.
33164+ enum:
33165+ - processing
33166+ example: processing
33167+ message:
33168+ type: string
33169+ description: A human-readable description of the sync status.
33170+ example: Catalog received. Sync has started.
3289733171 email_address_header:
3289833172 title: Email Address Header
3289933173 type: object
@@ -38118,6 +38392,10 @@ tags:
3811838392 description: Everything about your Data Events
3811938393- name: Data Export
3812038394 description: Export message delivery and engagement statistics (opens, clicks, replies, completions, dismissals, unsubscribes, bounces) for outbound content such as Emails, Posts, Custom Bots, Surveys, Tours, and Series.
38395+ - name: Ecommerce Connectors
38396+ description: |
38397+ Upload and manage product catalogs via ecommerce connectors. Supports single-file
38398+ uploads (up to 99 MB) and multipart uploads for larger catalogs.
3812138399- name: Emails
3812238400 description: Everything about your Emails
3812338401- name: Fin Agent
0 commit comments