Skip to main content
POST
Create Case
Open a support case when you need Zinc’s help with an order: a package that never arrived, a damaged item, a billing question. Zinc support replies on the case, and the whole conversation stays on it. Follow it with Get Case or the case webhooks. The request is a multipart form, not JSON, so photos and PDFs can be attached in the same call:

Request

  • order_id: the order the case is about. Any order your team can see works.
  • reason: one of the reasons below.
  • body: your message, up to 5,000 characters. It can be empty if you attach at least one file.
  • return_request_id (optional): links the case to a return request on the same order. Required when reason is return.
  • files (optional): up to 5 attachments, 25 MB each, as JPEG, PNG, WebP, HEIC or PDF. Repeat the files field once per file.

Reasons

The reason routes the case to the right people. It doesn’t trigger anything automatically: a damaged_or_wrong_item case doesn’t file a return, and a cancellation case doesn’t cancel the order. To start a return, use Create Return Request.

When a case can be opened

  • The order is order_placed, cancelled or cancelled_by_retailer. Otherwise the call fails with 400, code: "case_not_allowed" and details.reason: "order_status".
  • The order is inside the case window: 30 days after the latest delivery or estimated delivery date across its packages, or 90 days after the order was created when it has no tracking yet. Past the window, the call fails with 400, code: "case_not_allowed" and details.reason: "window_closed".
  • The order has no other open case. An order has at most one case that isn’t closed. A second one fails with 409, and details.case_id names the open case, so reply on that one with Post Case Message instead:

Other errors

A failed request saves nothing: no case, message or file.

Response

The new case with status: "open" and your message as the first entry in messages. See Get Case for the full shape.

Authorizations

Authorization
string
header
required

Zinc API key (Bearer zn_...)

Headers

authorization
string | null

Body

multipart/form-data
order_id
string<uuid>
required
reason
enum<string>
required

What a support case is about. Routing and reporting only — no reason triggers automation.

Available options:
not_received,
missing_item,
late,
damaged_or_wrong_item,
cancellation,
address_change,
return,
billing,
other
body
string
default:""
return_request_id
string<uuid> | null
files
file[]

Response

Successful Response

id
string<uuid>
required
order_id
string<uuid>
required
reason
enum<string>
required

What a support case is about. Routing and reporting only — no reason triggers automation.

Available options:
not_received,
missing_item,
late,
damaged_or_wrong_item,
cancellation,
address_change,
return,
billing,
other
status
enum<string>
required

open — waiting on Zinc. waiting_on_customer — Zinc replied and is waiting on you. on_hold — waiting on the retailer or carrier. closed — resolved; replying reopens it within the case window.

Available options:
open,
waiting_on_customer,
on_hold,
closed
created_at
string<date-time>
required
updated_at
string<date-time>
required
return_request_id
string<uuid> | null
credited_amount
integer
default:0

Total wallet credit issued from this case, in cents (net of reversals).

opened_by_name
string | null

Who opened the case: a teammate's name, or Zinc support when Zinc reached out. (The case.created webhook's opened_by is the side instead: customer or zinc.)

closed_at
string<date-time> | null
messages
CaseMessageResponse · object[]