curl --request PATCH \
--url https://{host}/v1/sellers/{sellerId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/vnd.api+json' \
--data '
{
"data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Watches of Amsterdam",
"invoiceEmail": "invoices@example.test",
"addressLine1": "Keizersgracht 1",
"zipcode": "1015 CJ",
"city": "Amsterdam",
"country": "NL",
"vat": "NL123456789B01",
"kvk": "14026248",
"acceptsPriceProposals": true,
"maximumDiscount": 15,
"registrations": [
{
"type": "de_lucid",
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30"
},
{
"type": "de_weee_ear",
"declaration": "not_applicable_mechanical"
}
]
}
}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
data: {
type: 'sellers',
id: '42',
attributes: {
name: 'Watches of Amsterdam',
invoiceEmail: 'invoices@example.test',
addressLine1: 'Keizersgracht 1',
zipcode: '1015 CJ',
city: 'Amsterdam',
country: 'NL',
vat: 'NL123456789B01',
kvk: '14026248',
acceptsPriceProposals: true,
maximumDiscount: 15,
registrations: [
{
type: 'de_lucid',
declaration: 'number_provided',
number: 'DE1234567890123',
expiresAt: '2027-06-30'
},
{type: 'de_weee_ear', declaration: 'not_applicable_mechanical'}
]
}
}
})
};
fetch('https://{host}/v1/sellers/{sellerId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/sellers/{sellerId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'type' => 'sellers',
'id' => '42',
'attributes' => [
'name' => 'Watches of Amsterdam',
'invoiceEmail' => 'invoices@example.test',
'addressLine1' => 'Keizersgracht 1',
'zipcode' => '1015 CJ',
'city' => 'Amsterdam',
'country' => 'NL',
'vat' => 'NL123456789B01',
'kvk' => '14026248',
'acceptsPriceProposals' => true,
'maximumDiscount' => 15,
'registrations' => [
[
'type' => 'de_lucid',
'declaration' => 'number_provided',
'number' => 'DE1234567890123',
'expiresAt' => '2027-06-30'
],
[
'type' => 'de_weee_ear',
'declaration' => 'not_applicable_mechanical'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/vnd.api+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://{host}/v1/sellers/{sellerId}"
payload = { "data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Watches of Amsterdam",
"invoiceEmail": "invoices@example.test",
"addressLine1": "Keizersgracht 1",
"zipcode": "1015 CJ",
"city": "Amsterdam",
"country": "NL",
"vat": "NL123456789B01",
"kvk": "14026248",
"acceptsPriceProposals": True,
"maximumDiscount": 15,
"registrations": [
{
"type": "de_lucid",
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30"
},
{
"type": "de_weee_ear",
"declaration": "not_applicable_mechanical"
}
]
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/vnd.api+json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Horlogerie Mertens",
"slug": "horlogerie-mertens",
"city": "Maastricht",
"country": "NL",
"visible": true,
"acceptsPriceProposals": true,
"blocked": false,
"description": "Family-run since 1974, specialising in vintage Rolex and Omega.",
"sellingPoints": [
"Two-year warranty on every watch",
"Free insured shipping within Europe"
],
"respondsWithin": "2 hours",
"webUrl": "https://wristler.eu/nl/juweliers/horlogerie-mertens",
"memberSince": "2019-06-01T08:00:00.000000Z",
"maximumDiscount": 10,
"email": "shop@horlogerie-mertens.example",
"invoiceEmail": "facturen@horlogerie-mertens.example",
"addressLine1": "Grote Staat 14",
"addressLine2": null,
"zipcode": "6211 CW",
"vat": "NL001234567B01",
"kvk": "14026248",
"registrations": [
{
"type": "de_lucid",
"country": "DE",
"name": "LUCID registration number (packaging)",
"description": "Sellers who ship packaged goods to consumers in Germany must be registered in the LUCID packaging register of the Zentrale Stelle Verpackungsregister (ZSVR) and take part in a dual system. The number starts with DE followed by 13 digits.",
"placeholder": "DE1234567890123",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30",
"status": "verified",
"statusMessage": null,
"verifiedAt": "2026-09-02T10:14:00+02:00"
},
{
"type": "de_weee_ear",
"country": "DE",
"name": "WEEE registration number (Stiftung EAR)",
"description": "Sellers who place electrical or electronic equipment, such as quartz or smart watches, on the German market must be registered with Stiftung EAR under the ElektroG. The WEEE-Reg.-Nr. starts with DE followed by 8 digits.",
"placeholder": "DE12345678",
"supportsExpiry": false,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "de_battg",
"country": "DE",
"name": "BattG registration number (batteries)",
"description": "Sellers who place batteries on the German market, including batteries built into watches, must be registered with Stiftung EAR under the Battery Act (BattG). The number starts with DE followed by 8 digits.",
"placeholder": "DE12345678",
"supportsExpiry": false,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": "not_applicable_mechanical",
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_packaging",
"country": "FR",
"name": "UIN packaging (emballages)",
"description": "Sellers who ship packaged goods to consumers in France must join an eco-organisation for packaging (such as Citeo or Léko) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_weee",
"country": "FR",
"name": "UIN electrical equipment (DEEE)",
"description": "Sellers who place electrical or electronic equipment, such as quartz or smart watches, on the French market must join an eco-organisation for WEEE (DEEE, such as ecosystem or Ecologic) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_batteries",
"country": "FR",
"name": "UIN batteries (piles)",
"description": "Sellers who place batteries on the French market, including batteries built into watches, must join an eco-organisation for batteries (piles et accumulateurs, such as Batribox or Screlec) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
}
],
"logo": "https://cdn.wristler.eu/square-medium/horlogerie-mertens-logo.png"
},
"relationships": {
"statistics": {
"links": {
"related": "https://api.wristler.eu/v1/sellers/42/statistics",
"self": "https://api.wristler.eu/v1/sellers/42/relationships/statistics"
}
}
},
"links": {
"self": "https://api.wristler.eu/v1/sellers/42"
}
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}Update business
Scope: business:write
The two pictures. logoHandle and coverHandle: upload to POST /v1/uploads, send
the handle back here, and null removes it. Per picture, so setting one leaves the other
alone.
You read the logo back as logo, a rendered square — what goes in is whatever the seller
had, and some of those were PDFs. The cover comes back as the cover relationship
(include=cover), which carries every size we render: variants.hero is the 1920x384
banner the website draws at the top of a shop page, and the squares are there for a phone.
That crop is fixed, and it is not something this API can change — the sizes are presets on
the image service.
The dashboard’s settings screen: what the shop is called, where it is, where its invoices go, and whether it takes offers.
acceptsPriceProposals turns offers on and off, and maximumDiscount is how
far below the asking price this business will go, as a percentage — it is what
minimumProposal on each listing is worked out from — and that field, not this
percentage, is what a client should read: it is null when offers are impossible and
it rounds the way the rule rounds.
Company details, with the settings form’s rules: name, email, addressLine1,
zipcode, city and country (ISO 3166 alpha-2) cannot be emptied — sending one as
null is a 422 — while a field you leave out is not asked about, so a shop that has
not filled in its address can still be renamed. email may not be another
business’s. vat is checked when it changes, against the country (the one in the
body when you send both); a number already on file is never questioned. kvk is the
chamber of commerce number.
| Attribute | |
|---|---|
name, addressLine1, city | At most 255 characters; cannot be emptied |
zipcode | At most 32 characters; cannot be emptied |
country | ISO 3166 alpha-2; cannot be emptied |
email | An email address no other business has; cannot be emptied |
invoiceEmail | An email address, or null |
addressLine2 | At most 255 characters, or null |
vat, kvk | At most 64 characters, or null |
acceptsPriceProposals | true or false |
maximumDiscount | A whole percentage, 0 to 50 |
logoHandle, coverHandle | A handle from POST /v1/uploads, or null; write-only |
registrations | A list of {type, declaration, number, expiresAt}; see below |
emailConfirmed, invoiceEmailConfirmed | Write-only; see below |
The rest of a shop page (description, sellingPoints, respondsWithin, logo,
visible, blocked …) is not set here, and is ignored when sent — slug is the one
that is refused (422), see below.
An email or invoiceEmail that looks mistyped (gnail.com, a domain that receives
no mail) is a 422 with implausible_email, pointing at that field, with
meta.suggestion. Send it again with emailConfirmed (or invoiceEmailConfirmed)
set to the same address to keep it. An address already on file is not questioned.
maximumDiscount stops at 50 when you change it. A business we set above that keeps
its percentage: sending the stored value back is not refused.
Registrations (see GET): send registrations as a list of
{type, declaration, number, expiresAt}. Only the types you send change; the rest
stay as they are. With number_provided the number is checked against the type’s
format (422 on registrations/{n}/number) and stored in capitals without spaces.
A new or changed number is checked at once: a French UIN is looked up in ADEME’s
register, which can answer verified or invalid straight away (and leaves it
pending when it is not listed yet); any other number starts as pending until we
confirm it. An unchanged one keeps its verification. expiresAt (YYYY-MM-DD) is
kept only for a type with supportsExpiry, and dropped on the others. Any other
declaration clears the number. A declaration left out or null counts as
number_provided. A declaration the type does not offer, a type that does not
exist, or the same type twice is a 422. Sending number_provided without a number
removes the registration, as emptying the field on the settings page does.
slug is ours: it is the shop’s address on the website, and changing it breaks
every link anybody shared. Sending one is refused; leaving it out changes
nothing.
curl --request PATCH \
--url https://{host}/v1/sellers/{sellerId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/vnd.api+json' \
--data '
{
"data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Watches of Amsterdam",
"invoiceEmail": "invoices@example.test",
"addressLine1": "Keizersgracht 1",
"zipcode": "1015 CJ",
"city": "Amsterdam",
"country": "NL",
"vat": "NL123456789B01",
"kvk": "14026248",
"acceptsPriceProposals": true,
"maximumDiscount": 15,
"registrations": [
{
"type": "de_lucid",
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30"
},
{
"type": "de_weee_ear",
"declaration": "not_applicable_mechanical"
}
]
}
}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/vnd.api+json'},
body: JSON.stringify({
data: {
type: 'sellers',
id: '42',
attributes: {
name: 'Watches of Amsterdam',
invoiceEmail: 'invoices@example.test',
addressLine1: 'Keizersgracht 1',
zipcode: '1015 CJ',
city: 'Amsterdam',
country: 'NL',
vat: 'NL123456789B01',
kvk: '14026248',
acceptsPriceProposals: true,
maximumDiscount: 15,
registrations: [
{
type: 'de_lucid',
declaration: 'number_provided',
number: 'DE1234567890123',
expiresAt: '2027-06-30'
},
{type: 'de_weee_ear', declaration: 'not_applicable_mechanical'}
]
}
}
})
};
fetch('https://{host}/v1/sellers/{sellerId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{host}/v1/sellers/{sellerId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'type' => 'sellers',
'id' => '42',
'attributes' => [
'name' => 'Watches of Amsterdam',
'invoiceEmail' => 'invoices@example.test',
'addressLine1' => 'Keizersgracht 1',
'zipcode' => '1015 CJ',
'city' => 'Amsterdam',
'country' => 'NL',
'vat' => 'NL123456789B01',
'kvk' => '14026248',
'acceptsPriceProposals' => true,
'maximumDiscount' => 15,
'registrations' => [
[
'type' => 'de_lucid',
'declaration' => 'number_provided',
'number' => 'DE1234567890123',
'expiresAt' => '2027-06-30'
],
[
'type' => 'de_weee_ear',
'declaration' => 'not_applicable_mechanical'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/vnd.api+json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "https://{host}/v1/sellers/{sellerId}"
payload = { "data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Watches of Amsterdam",
"invoiceEmail": "invoices@example.test",
"addressLine1": "Keizersgracht 1",
"zipcode": "1015 CJ",
"city": "Amsterdam",
"country": "NL",
"vat": "NL123456789B01",
"kvk": "14026248",
"acceptsPriceProposals": True,
"maximumDiscount": 15,
"registrations": [
{
"type": "de_lucid",
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30"
},
{
"type": "de_weee_ear",
"declaration": "not_applicable_mechanical"
}
]
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/vnd.api+json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"data": {
"type": "sellers",
"id": "42",
"attributes": {
"name": "Horlogerie Mertens",
"slug": "horlogerie-mertens",
"city": "Maastricht",
"country": "NL",
"visible": true,
"acceptsPriceProposals": true,
"blocked": false,
"description": "Family-run since 1974, specialising in vintage Rolex and Omega.",
"sellingPoints": [
"Two-year warranty on every watch",
"Free insured shipping within Europe"
],
"respondsWithin": "2 hours",
"webUrl": "https://wristler.eu/nl/juweliers/horlogerie-mertens",
"memberSince": "2019-06-01T08:00:00.000000Z",
"maximumDiscount": 10,
"email": "shop@horlogerie-mertens.example",
"invoiceEmail": "facturen@horlogerie-mertens.example",
"addressLine1": "Grote Staat 14",
"addressLine2": null,
"zipcode": "6211 CW",
"vat": "NL001234567B01",
"kvk": "14026248",
"registrations": [
{
"type": "de_lucid",
"country": "DE",
"name": "LUCID registration number (packaging)",
"description": "Sellers who ship packaged goods to consumers in Germany must be registered in the LUCID packaging register of the Zentrale Stelle Verpackungsregister (ZSVR) and take part in a dual system. The number starts with DE followed by 13 digits.",
"placeholder": "DE1234567890123",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": "number_provided",
"number": "DE1234567890123",
"expiresAt": "2027-06-30",
"status": "verified",
"statusMessage": null,
"verifiedAt": "2026-09-02T10:14:00+02:00"
},
{
"type": "de_weee_ear",
"country": "DE",
"name": "WEEE registration number (Stiftung EAR)",
"description": "Sellers who place electrical or electronic equipment, such as quartz or smart watches, on the German market must be registered with Stiftung EAR under the ElektroG. The WEEE-Reg.-Nr. starts with DE followed by 8 digits.",
"placeholder": "DE12345678",
"supportsExpiry": false,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "de_battg",
"country": "DE",
"name": "BattG registration number (batteries)",
"description": "Sellers who place batteries on the German market, including batteries built into watches, must be registered with Stiftung EAR under the Battery Act (BattG). The number starts with DE followed by 8 digits.",
"placeholder": "DE12345678",
"supportsExpiry": false,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": "not_applicable_mechanical",
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_packaging",
"country": "FR",
"name": "UIN packaging (emballages)",
"description": "Sellers who ship packaged goods to consumers in France must join an eco-organisation for packaging (such as Citeo or Léko) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_weee",
"country": "FR",
"name": "UIN electrical equipment (DEEE)",
"description": "Sellers who place electrical or electronic equipment, such as quartz or smart watches, on the French market must join an eco-organisation for WEEE (DEEE, such as ecosystem or Ecologic) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
},
{
"type": "fr_uin_batteries",
"country": "FR",
"name": "UIN batteries (piles)",
"description": "Sellers who place batteries on the French market, including batteries built into watches, must join an eco-organisation for batteries (piles et accumulateurs, such as Batribox or Screlec) and receive a unique identification number (UIN) from ADEME for this stream. It consists of 15 characters and starts with FR.",
"placeholder": "FR123456_01ABCD",
"supportsExpiry": true,
"declarations": [
{
"value": "number_provided",
"label": "I have a registration number"
},
{
"value": "not_applicable_mechanical",
"label": "Not applicable: I only sell mechanical watches, without electronics or batteries"
},
{
"value": "not_applicable_covered_by_brand",
"label": "Not applicable: the brand or importer is registered and I am not the first to place the watches on this market"
},
{
"value": "pending_registration",
"label": "Not registered yet (registration in progress)"
}
],
"declaration": null,
"number": null,
"expiresAt": null,
"status": null,
"statusMessage": null,
"verifiedAt": null
}
],
"logo": "https://cdn.wristler.eu/square-medium/horlogerie-mertens-logo.png"
},
"relationships": {
"statistics": {
"links": {
"related": "https://api.wristler.eu/v1/sellers/42/statistics",
"self": "https://api.wristler.eu/v1/sellers/42/relationships/statistics"
}
}
},
"links": {
"self": "https://api.wristler.eu/v1/sellers/42"
}
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}{
"errors": [
{
"status": "404",
"code": "watch_reserved",
"title": "Not Found",
"detail": "<string>",
"meta": {},
"source": {
"pointer": "/data/attributes/reference",
"parameter": "<string>"
}
}
],
"jsonapi": {
"version": "1.0"
}
}Authorizations
Headers
Optional. A UUID per logical operation, not per attempt: a retry carrying the same key gets the first attempt's answer back, headers and all, rather than performing the write twice. Honoured for 24 hours.
A refusal is an answer. A 422 is remembered like any other, so sending a
corrected body under the same key answers 422 idempotency_key_reuse rather
than accepting the correction — the point of a key is that one key means one
decision. Use a new key for a new attempt at the request, and keep the old one
only for retrying the same bytes after a timeout.
A 5xx is the exception: nothing was decided, so the key is released and the
same one may be retried.
| Refusal | Status | code |
|---|---|---|
| The same key with a different body | 422 | idempotency_key_reuse |
| The first request with this key is still running | 409 | idempotency_in_progress |
| The key's record vanished between two requests: retry with a new key | 409 | idempotency_conflict |
| A key longer than 191 characters | 400 | idempotency_key_invalid |
A replayed answer carries Idempotent-Replay: true.
191