Beta

The Partner Trading API v1 is in beta — endpoints and response shapes may still change.

Developers
Cru World Wine
API v1 · REST & MCP
Your addresses

Add an inbond address

Save an inbond address on your account: an inbond warehouse from GET /warehouses/inbond, and your bond account number there.

POST/addresses/inbondLIVE
Required scopeaddresses:writeAuthentication required
Never your default address

It is saved as the Cru website’s address form saves one with “In bond” ticked, at the warehouse’s own address, and is never made your default. A warehouse Cru does not list has to be added by Cru first: suggest it with POST /warehouses/inbond if Cru has granted you warehouses:suggest, or the customer emails [email protected].

How this write runs

inbond_address.add
Partner credentialCLIENT-KEY · CLIENT-SECRET Executes at once and answers 201. The body must carry a reference: send the identical request again after a timeout and Cru replays the first outcome instead of acting twice.
Connected appAuthorization: Bearer Answers 202 with a confirmation code and does nothing else. It runs only when the app calls POST /confirmations/{code} within 15 minutes, after the customer agrees.

Writes & confirmations, in full →

Request body

APPLICATION/JSON
FIELDDESCRIPTION
referencestring · 1–50 chars · partners: requiredYour idempotency key: letters and digits, then . _ : or - allowed. Required on a partner credential’s write and kept for good, so a retry with it can never act twice. Ignored for connected apps.
inbond_address_idinteger · ≥ 1 · requiredA bonded warehouse from GET /warehouses/inbond: not one of the duty-paid ones, whose is_bonded is false.
account_numberstring · ≤ 50 chars · requiredYour bond account number at that warehouse.
site_codestring · ≤ 50 chars · optionalYour site code or sub-account there, if the warehouse uses one.
nicknamestring · ≤ 50 chars · optionalYour own name for the address.

Any other field is refused with VALIDATION_UNKNOWN_PARAMETER / 400.

Response fields

201 Created · 202 Accepted

A partner credential gets 201 and the address saved. A connected app gets 202 and a confirmation.

Executed 201

actionstring

The action that ran, such as bid.place.

statusstring

completed.

inbond_addressobject

The address, as GET /addresses/inbond lists it.

Staged 202

confirmation.codestring

cnf_ and 43 more characters. A secret: the only handle on the instruction, valid for 15 minutes, once.

confirmation.actionstring

The action staged, such as bid.place.

confirmation.statusstring

pending.

confirmation.expires_atdatetime

RFC 3339 UTC.

confirmation.previewobject

summary, inbond_address_id, name, city, country, account_number, site_code and nickname — null when not given.

Errors

An inbond_address_id GET /warehouses/inbond does not list, a duty-paid one, an account_number already saved at that warehouse, or a field over its length returns VALIDATION_INVALID_VALUE / 422. A warehouse whose full address Cru does not have yet — one suggested without its street, city and postcode — is TRADE_REFUSED / 422 when the address is saved, and so is one Cru stopped listing before then, as between a connected app’s preview and its confirmation. Missing or invalid credentials return AUTH_INVALID_CREDENTIALS / 401. A credential without addresses:write gets AUTH_INSUFFICIENT_SCOPE / 403. View all error codes →

UP NEXT Remove an inbond address

API credentials

Enter the client key and secret issued by Cru. They are kept for this browser tab’s session — a reload keeps them, closing the tab or clearing them ends them.

Credentials are never included in copied examples, and are redacted from anything the console prints back.

Request API access

Tell us who you are and what you want to build. Cru issues a client key and secret for your organisation, scoped to what you need.

Markets you trade in (choose one or more)

We use what you send here to reply about API access, and for nothing else. Cloudflare Turnstile checks the form for bots (privacy policy).