GPSR Economic Operators Tutorial#
Economic operators are the manufacturer and EU responsible person records that the EU General Product Safety Regulation (GPSR) asks sellers to attach to the products they sell to EU buyers. This guide explains how to manage economic operators through the API, how to attach them to listings, who has to do so, and which validation rules apply. It covers the Shop Economic Operators endpoints together with the gpsr_* fields on the ShopListing endpoints (createDraftListing, updateListing, and every endpoint that returns a ShopListing).
info
What's new
- Four endpoints to manage the economic operators of a shop: getShopEconomicOperators, getShopEconomicOperator, createShopEconomicOperator, and updateShopEconomicOperator.
- Six GPSR fields on listings:
gpsr_manufacturer_type,gpsr_manufacturer_id,gpsr_responsible_person_type,gpsr_responsible_person_id,gpsr_serial_number, andgpsr_safety_warnings. - GPSR requirements will be enforced on February 1, 2027. The endpoints and fields are available to use now, so you have the full notice period to update your integration.
Timeline: available now, required later#
| Period | What happens |
|---|---|
| Now, until enforcement | The endpoints and fields are live. Every GPSR field is optional. Listings that do not include them keep being created, updated, and activated exactly as before. |
| Always, including now | Any GPSR value you do send is validated against the rules below. A value that breaks a rule is rejected immediately; it does not wait for the enforcement date. |
| From enforcement | For listings of traders that sell into the EU the manufacturer and the EU responsible person must be set for certain categories. Listings that are missing them will be rejected. |
Who is affected, and which listings#
Whether a listing needs GPSR information depends on the shop and on the listing, not on where the shop is located.
- The shop must be a trader. A trader is a shop that identifies itself in Etsy's Shop Home editor as a professional seller or as an incorporated business. Individual (non-trader) sellers can fill in the GPSR fields but are never required to.
- The shop must sell into the EEA. Shops can opt out of selling physical items, digital items, or both into the EEA. A shop that has opted out is not affected for that kind of listing. A shop based outside the EU that sells into the EU is affected in the same way as an EU-based shop.
- The listing must be in a category that requires GPSR information. This is decided by the listing's
taxonomy_id. See Categories requiring GPSR information for the full list.
You can send the GPSR fields on any listing, eligible or not. They are stored and returned as you sent them. Only listings of eligible traders are checked for completeness once enforcement starts.
If any of these three conditions does not apply to your shop or listing, you do not need to change anything. If all three apply, read on.
Required changes#
To keep creating and updating listings for eligible traders after the enforcement date, you must make the following changes.
If you create or update listings:#
- Create the economic operators you'll need for the GPSR compliance with
createShopEconomicOperator. Or use existing ones. - Send the GPSR fields when you create or update listings.
- Back-fill existing listings during the notice period, so nothing is blocked on the enforcement date.
How the data fits together#
- An economic operator is a reusable record that belongs to one shop. It holds a name, an email address, a postal address, a phone number, and an optional trademark name. Create it once and reference it from as many listings as you like.
- Every listing has two roles: the manufacturer and the EU responsible person. For each role, you choose a type:
seller: your own shop fills the role. No economic operator record is needed. For the EU responsible person this is only allowed when the shop's legal address (or, if there is none, the address on file) is in the European Union.economic_operator: a record fills the role. You also send the record'seconomic_operator_id.
- The same economic operator can be the manufacturer on some listings and the EU responsible person on others.
- Two further fields are optional free text:
gpsr_serial_number(up to 255 characters) andgpsr_safety_warnings(up to 102,400 characters).
Step by step#
1. Decide who fills each role. For each product, work out who the manufacturer is and who the EU responsible person is. If it is your shop, use seller. If it is a third party (a supplier, a workshop, or an EU-based representative), you need an economic operator for it.
2. Create the economic operators you need with createShopEconomicOperator (POST /v3/application/shops/{shop_id}/economic-operators, scope listings_w). operator_name, email, first_line, city, zip, country_iso, and phone are required. trademark_name, second_line, and phone_country_iso are optional. state is required only if the country_iso is in the Countries requiring a state table below, and optional otherwise. The response contains the economic_operator_id you will use on listings. You can list the operators you already have with getShopEconomicOperators, or fetch one with getShopEconomicOperator.
3. Set the GPSR fields on the listing, either when creating it (createDraftListing) or later (updateListing).
4. Read the listing back. Every endpoint that returns a ShopListing includes the gpsr_* fields that have a value.
5. Keep your operators up to date with updateShopEconomicOperator (PATCH, scope listings_w). Only the fields you send are changed. The change applies to every listing that references the operator.
6. Removing economic operators. There is no DELETE endpoint, because removing an operator that active listings still reference would leave those listings non-compliant. To retire an operator, update the listings that reference it first and then edit or stop using the operator. An economic operator can be deleted from the Shop Manager only if it is not associated to a listing.
For examples of complete requests and responses for each step, see Examples.
Economic operator fields#
| Field | Create | Update | Notes |
|---|---|---|---|
operator_name | Required | Optional | Cannot be blank. Maximum 50 characters. |
email | Required | Optional | Valid email address. Maximum 255 characters. |
trademark_name | Optional | Optional | Maximum 255 characters. null on update clears it. |
first_line | Required | Optional | Cannot be blank. Maximum 50 characters (95 in a few countries, such as India, Brazil, and Japan). |
second_line | Optional | Optional | Same maximum as first_line. null on update clears it. |
city | Required | Optional | Cannot be blank. Same maximum as first_line. |
state | Required if the country_iso requires a state, otherwise optional | Optional | Same maximum as first_line. See Countries requiring a state. null on update clears it (not allowed for those countries). |
zip | Required | Optional | Cannot be blank. |
country_iso | Required | Optional | ISO 3166-1 alpha-2 code, for example DE. Not case-sensitive on input. |
phone | Required | Optional | Cannot be blank. Digits, spaces, and ( ) . - + # only. |
phone_country_iso | Optional | Optional | Country the phone number belongs to. When sent, phone is validated as a number of that country. null on update clears it. |
The response (ShopEconomicOperator) also contains economic_operator_id, shop_id, create_date, and update_date (Unix timestamps).
Countries requiring a state#
Like origin_postal_code on shipping profiles, state depends on the country. Addresses in the countries below cannot be written without a state, province, prefecture, or equivalent, so state is required when country_iso is one of these codes, and the request is rejected with 400 if it is missing. For any other country state is optional.
- The value is free text. Send the name or the usual abbreviation, for example
CAorCaliforniafor the United States.
country_iso | Country |
|---|---|
AS | American Samoa |
AU | Australia |
BR | Brazil |
CA | Canada |
CO | Colombia |
CR | Costa Rica |
ES | Spain |
FM | Micronesia (Federated States of) |
ID | Indonesia |
IN | India |
IT | Italy |
JP | Japan |
KR | South Korea |
MH | Marshall Islands |
MP | Northern Mariana Islands |
MX | Mexico |
PW | Palau |
RU | Russia |
US | United States |
VI | U.S. Virgin Islands |
GPSR fields on listings#
These fields are accepted by createDraftListing and updateListing, and returned by every endpoint that returns a ShopListing. All of them are optional until enforcement.
| Field | Type | Allowed values | Notes |
|---|---|---|---|
gpsr_manufacturer_type | string or null | seller, economic_operator | Who the manufacturer is. Any other value is rejected as invalid input. Required for eligible traders once enforced. |
gpsr_manufacturer_id | integer or null | An economic_operator_id of your shop | Required when the type is economic_operator; must not be sent otherwise. |
gpsr_responsible_person_type | string or null | seller, economic_operator | Who the EU responsible person is. Any other value is rejected as invalid input. Required for eligible traders once enforced. |
gpsr_responsible_person_id | integer or null | An economic_operator_id of your shop, located in the EU | Required when the type is economic_operator; must not be sent otherwise. |
gpsr_serial_number | string or null | Up to 255 characters | Optional serial, batch, or lot identifier. |
gpsr_safety_warnings | string or null | Up to 102,400 characters | Optional safety information shown to buyers. |
note
The Manufacturers field in the listing form was deprecated. Use the structured fields Product manufacturer and EU responsible person (gpsr_manufacturer_type, gpsr_manufacturer_id, gpsr_responsible_person_type, and gpsr_responsible_person_id) instead.
How requests are read:
- To clear a field, send it as
null. Becausenullcannot be expressed in a form-encoded body, send the request asapplication/jsonwhen you need to clear a field. - On
updateListing(aPATCH), fields you leave out are not changed. A request is judged only on what it sends. - A type and its id are checked as a pair. If you send only the id, it is checked against the type already stored on the listing. If you send only the type, the id already stored is checked against it.
- If you change a type to
sellerwithout sending the id, the stored id is cleared for you. If you send both a conflicting type and an id, you get an error instead of a silent correction. - Where the
economic_operatortype is used, the id must belong to the same shop as the listing and must not be deleted.
The who_made and gpsr_manufacturer_type rule#
who_made tells buyers who made an item and takes i_did, collective, or someone_else. (On updateListing, who_made has to be sent together with when_made and is_supply, as it always has been.) Your shop cannot be the manufacturer of something that someone else made, so:
- When
who_madeissomeone_else,gpsr_manufacturer_typemust not beseller. Set it toeconomic_operatorand reference an economic operator that represents the real manufacturer or leave it unset if not required. - When
who_madeisi_didorcollective,sellerandeconomic_operatorare both allowed.
The rule applies in both directions. If you send who_made: "someone_else" on a listing that already has gpsr_manufacturer_type: "seller", the request is rejected, even though you did not send the manufacturer fields. A request that sends both values is checked the same way. To fix it, either change the manufacturer to an economic operator, or change who_made if it was set incorrectly.
Categories requiring GPSR information#
Once enforcement starts, listings of eligible traders whose taxonomy_id is one of the categories below must have the manufacturer and the EU responsible person set. Listings in any other category are not checked for completeness. You can retrieve the full seller taxonomy tree with getSellerTaxonomyNodes.
note
This list can change over time as categories are added, removed, or reorganized.
| Taxonomy ID | Taxonomy path |
|---|---|
838 | electronics_and_accessories > cameras_and_equipment |
840 | electronics_and_accessories > cameras_and_equipment > cameras |
841 | electronics_and_accessories > cameras_and_equipment > flashes_and_lighting |
850 | electronics_and_accessories > computers_and_peripherals |
851 | electronics_and_accessories > computers_and_peripherals > computers |
886 | electronics_and_accessories > tv_and_projection |
887 | electronics_and_accessories > tv_and_projection > projectors |
888 | electronics_and_accessories > tv_and_projection > televisions |
889 | electronics_and_accessories > tv_and_projection > video_players |
892 | home_and_living > home_appliances |
895 | home_and_living > home_appliances > fans_and_heaters |
896 | home_and_living > home_appliances > irons_and_steamers |
897 | home_and_living > home_appliances > large_appliances |
1086 | home_and_living > lighting |
1088 | home_and_living > lighting > light_fixtures |
1089 | home_and_living > lighting > lamps_shades_and_bases |
1091 | home_and_living > lighting > light_fixtures > wall_lights > electric_lanterns |
1093 | home_and_living > lighting > light_fixtures > wall_lights > night_lights |
1094 | home_and_living > lighting > light_fixtures > wall_lights > sconces |
1117 | home_and_living > lighting > light_fixtures > garden_and_string_lights |
1906 | electronics_and_accessories > computers_and_peripherals > monitors |
1911 | home_and_living > home_appliances > fans_and_heaters > fans |
1912 | home_and_living > home_appliances > fans_and_heaters > heaters |
1913 | home_and_living > home_appliances > irons_and_steamers > irons |
1914 | home_and_living > home_appliances > irons_and_steamers > steamers |
2195 | home_and_living > lighting > light_fixtures > ceiling_lights > chandeliers |
2196 | home_and_living > lighting > light_fixtures > ceiling_lights > pendant_lights |
2813 | home_and_living > lighting > lamps_shades_and_bases > lamps > desk_lamps |
2814 | home_and_living > lighting > lamps_shades_and_bases > lamps > floor_lamps |
2815 | home_and_living > lighting > lamps_shades_and_bases > lamps > table_lamps |
2914 | home_and_living > lighting > lamps_shades_and_bases > lamps > accent_lamps |
6225 | electronics_and_accessories > cameras_and_equipment > slides_and_accessories > slide_viewers |
6226 | craft_supplies_and_tools > imaging_and_lighting > lighting |
6331 | craft_supplies_and_tools > imaging_and_lighting > lighting > studio_lighting |
6333 | craft_supplies_and_tools > imaging_and_lighting > lighting > flashlights |
6334 | craft_supplies_and_tools > imaging_and_lighting > lighting > lightboxes_and_tables |
6336 | home_and_living > lighting > light_fixtures > garden_and_string_lights > string_lights |
9139 | craft_supplies_and_tools > imaging_and_lighting |
10809 | home_and_living > home_improvement > lighting_parts |
10811 | home_and_living > home_improvement > lighting_parts > lamp_bases_and_parts |
10812 | home_and_living > home_improvement > lighting_parts > light_bulbs |
10813 | home_and_living > home_improvement > lighting_parts > light_sockets |
10814 | home_and_living > home_improvement > lighting_parts > plugs_and_cords |
10816 | home_and_living > home_improvement > lighting_parts > light_switches |
12348 | home_and_living > lighting > light_fixtures > ceiling_lights |
12349 | home_and_living > lighting > light_fixtures > wall_lights |
12351 | home_and_living > lighting > lamps_shades_and_bases > lamps |
12352 | home_and_living > lighting > lamps_shades_and_bases > lamps > lamp_sets |
12353 | home_and_living > lighting > lamps_shades_and_bases > lamps > lava_lamps |
12357 | home_and_living > lighting > lamps_shades_and_bases > lamps > salt_lamps |
12358 | home_and_living > lighting > ceiling_fans |
12361 | home_and_living > lighting > light_fixtures > wall_lights > picture_lights |
12362 | home_and_living > lighting > light_fixtures > wall_lights > vanity_lights |
12410 | home_and_living > lighting > light_fixtures > garden_and_string_lights > garden_lights |
Examples#
Create an economic operator:
Response 200 OK:
Set the manufacturer to that operator, and the shop itself as the EU responsible person, on an existing listing:
The ShopListing in the response contains the stored values:
Clear the serial number and move the manufacturer back to the seller (use a JSON body so null can be sent):
Update only the email address of an economic operator: