Biklo for developersTESTsandbox-api.biklo.comchange

14 September 2026 productsaddressesnew-endpoint

Where a product says it is, and where the courier actually collects it, are now the same thing by construction. They were not before.

What changed#

When you create or update a product without a city_id, the listing takes the city, county and street of the seller's default shipping address.

It used to take the city of the company's registered address, and failing that the city of any listing the seller already had. Meanwhile the parcel's origin was built from the default shipping address — a different row, which can name a different county. A seller whose warehouse was not their registered office published a catalogue that said Cluj while every waybill was raised in Ilfov, and nothing reconciled the two.

The street is new as well: partner-written listings carried no address text at all.

It is re-read on every write#

Not copied once at creation. A stock-only PUT re-syncs the location, so a seller who changes their default address sees their catalogue follow on the next push, and listings created before this rule repair themselves the first time you touch them.

This is the same self-healing behaviour ship_with_us already had.

city_id still overrides, for a real second location#

Send city_id (and optionally county_id) when the item genuinely ships from somewhere else. The override sets the city and county and deliberately leaves the street empty — putting the default address's street under a different city would name a place that does not exist.

If you have been sending city_id on every product out of habit, stop. You will get a more accurate listing by leaving it out.

Addresses are now part of the API#

Shipped in the same release: /v1/addresses — list, create, update, delete, and POST /v1/addresses/{id}/default. Under the Company profile permission group, so an existing key with company write access already has it.

curl -X POST https://api.biklo.com/v1/addresses \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"city_id": 1, "street": "Bulevardul Decebal 14", "postal_code": "200001"}'

Your first address becomes the default automatically. GET /v1/addresses is worth making the first call of your setup routine: an account with no address publishes a perfectly valid catalogue and then cannot fulfil a single order, and nothing warns you until the first real sale.

Two deletes are refused on purpose. 409 last_address when it is your only one, and 409 default_address when it is the default and you have others — in both cases removing it would leave future orders with no origin while your listings stayed up.

Two things the endpoint decides for you: addresses are always company addresses, and they never modify your company profile. If you need to change the company's registered details, that is PUT /v1/company.

If the account still has no address, creating a product falls back to the company city or an existing listing as before, and the error now names what is actually missing rather than asking for a city_id.