sell_out

Land a retailer's own sell-out report against one named account

Import a retailer report for the explicitly named account_id; the account is never inferred. The account declaration and mapping must be confirmed. Reports without a date require week_start (and week_end where appropriate). Unrecognized formats or incomplete declarations are refused. Existing idempotency and account-bound authorization apply to both input sources. Send original CSV/XLSX/XLS bytes inline (up to 8 MiB), or use /files/presigned-url and send application/json with exactly {"s3_key":"organization/user/uploaded-file.csv"} (up to 100 MiB). Uploaded keys must belong to the authenticated organization; foreign keys and URLs are refused. Both sources use the same native retailer parser and preserve its period and provenance. Use confirm_sell_out_declaration to confirm account answers before importing; use preview_sell_out to inspect the same file without writing. not_matched.by_reason counts every row by resolver outcome, including matches; not_matched.total counts refused rows, and not_matched.by_reason_words explains each outcome. Repeated files report both rows submitted and rows actually changed. Requires Tightly Connect; unavailable plans return 403 plan_excludes.

Scope: sell_out:write, which includes sell_out:read.

post/api/v1/sell-out/import

Request

  • Base URL: https://api.app.tightly.io
  • URL: https://api.app.tightly.io/api/v1/sell-out/import
  • Auth: HTTP bearer

Query parameters

account_idstring required

The account that sent this report. An id, never a name. "Intersport" is a dozen buying groups.

week_startstring date

The week this file covers (YYYY-MM-DD), for the retailers whose export carries no date anywhere in it. Required on those files rather than defaulted: writing "this week" for a file that never said so invents a week nobody reported.

Headers

Tightly-Versionstring
Example:2026-11

The date train to answer on. One train exists today, 2026-11, the one this reference describes and the one every key is minted on, so the call answers on it with or without this header. Send it anyway, so a client built now names its train from the start.

Idempotency-Keystring
Example:b8f1c0d2-6a4e-4f39-9c21-0d5f2e7a1b44

A string of your own, up to 255 characters, that makes this write safe to retry. Send the same key twice and the second request is answered with the first one's status and body instead of writing again, so a client that retried after a timeout ends holding the record's id rather than creating a second one. Reusing a key with a different body, or while the first request is still running, is refused 409. A write that failed releases its key. Keys answer for 24 hours and belong to the API key that used them. A key longer than 255 characters is ignored and the write goes ahead without the guarantee.

Request body

s3_keystring required

Key from the authenticated organization's existing presigned upload flow.

Response

What landed. recognised_as and period, rows_read / rows_written / rows_changed, not_matched (total, by_reason, by_reason_words, examples), the account's confirmed declaration, the we_read_it_as the profile proposed, and reorder_rules where the file carried the retailer's own reorder policy.

messageobject

severity, service and desc.

Changes

No recorded changes to this operation across all 1 revision of this API.