> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alura.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get fees

> Get Etsy's fee schedule for a seller's country on any day, past or future: every fee with its rate or amount, what it is charged on and the Etsy page that states it.

**Cost:** Free.

```bash
curl -G "https://api.alura.io/v1/etsy/fees" \
  -H "Authorization: Bearer $ALURA_API_KEY" \
  --data-urlencode "seller_country=FR" \
  --data-urlencode "as_of=2026-10-22"
```

`seller_country` is where the seller is based: their bank account's country for Etsy Payments. Without it, you get only the fees that are the same everywhere, and `requires_seller_country` names the fee keys left out.

`as_of` defaults to today (UTC). Etsy's announced changes are stored with their future dates, so any day, past or future, gets an answer.

## Read a fee row

Each row in `fees` is one fee for one group of sellers or orders:

| Field | Meaning |
| - | - |
| `key` | A stable fee ID, such as `transaction`, `payment_processing` or `listing.renewal`. |
| `audience` | Which row of a key: `all`, or for a key with several rows `domestic`, `international`, `domestic_and_us`, `under_threshold`, `over_threshold`, `texas` or `other_states`. `applies_when` says it in words. New values may be added. |
| `kind` | `percent` is `rate` percent of `basis`. `fixed` is `amount` in `currency`. `percent_plus_fixed` is both. |
| `rate` | A percent: `6.5` means 6.5%. |
| `valid_from`, `valid_to` | The first day the row applies, and the first day it no longer does. `null` means from the beginning, or still current. |

> [!NOTE]
>
> A fee Etsy doesn't publish for the country is `null` with a `fee_unknown` notice, never `0`. Treat it as unknown, not as free.

## Estimate what Etsy takes from an order

There is no estimate endpoint. Read the rows for the seller's country on the order's date, and let T be the item price plus shipping plus gift wrap, in the listing currency. Then add:

| `key` | When | How much |
| - | - | - |
| `transaction` | Every order | `rate`% of T |
| `regulatory_operating` | Every order (0 outside its countries) | `rate`% of T |
| `payment_processing` | Every order | `rate`% of the order total, including any sales tax or VAT the buyer pays, plus `amount` in `currency` (the seller country's currency). Use the row whose `audience` fits the order: `domestic` (Canada: `domestic_and_us`), `international` or `all`. |
| `offsite_ads` | Only an order from an Offsite Ad | `rate`% of T, at most `max_amount`. Use the `under_threshold` or `over_threshold` row by the shop's sales. |
| `currency_conversion` | The listing currency differs from the payment account's currency | `rate`% of the sale |
| `listing` | The listing that sold | `amount`, plus the `listing.multi_quantity` `amount` for each extra unit in the order |
| `vat_on_seller_fees`, `sales_tax_on_seller_fees` | Where such a row applies | Tax on the fees its `basis` and `note` name. A `null` rate is unknown: say so, never assume 0. |

Then subtract `share_and_save_refund` (`rate`% of T) for an order from the seller's own Share & Save link.

Convert every amount in another currency to one currency at the market rate before adding: the USD caps and listing fees, and the fixed part of the processing fee. Etsy converts its USD fees at the market rate too. [Get currency](https://docs.alura.io/api-reference/etsy/currencies/get.md) has Alura's USD rates.

> [accordion] A worked example
>
> With the example response's rows for a seller in France: an order of 20 EUR plus 5 EUR shipping, with 5 EUR VAT paid by the buyer, from a listing priced in EUR. T is 25 EUR.
>
> * `transaction`: 6.5% of 25 = 1.625 EUR
> * `regulatory_operating`: 1.14% of 25 = 0.285 EUR
> * `payment_processing`: 4% of 30 = 1.20, plus 0.30 = 1.50 EUR
> * `listing`: 0.20 USD, at 0.893 EUR to the dollar = 0.179 EUR
>
> That's about 3.59 EUR, plus VAT on those fees. `vat_on_seller_fees` has a `null` rate (Etsy doesn't publish it), so the VAT part is unknown.

## Notices

| `code` | Meaning |
| - | - |
| `fee_unknown` | Etsy doesn't publish this fee for the country. `key` and `audience` name the row. |
| `etsy_payments_unavailable` | Etsy doesn't list Etsy Payments for the seller's country. |
| `before_recorded_history` | `as_of` is before `recorded_from`, the earliest day Alura's fee history covers. Rows without a start date are served as they are today and may not be what applied then. |

> [accordion] Where each fee comes from
>
> `sources` holds the one Etsy page that states the fee, and a second only for what the first doesn't say, such as a note, the start date or an earlier rate.

To see when a fee changed and why, use [List updates](https://docs.alura.io/api-reference/etsy/updates/list.md) with `kind=fees`. [List countries](https://docs.alura.io/api-reference/etsy/countries/list.md) with `expand=fees` gives today's schedule for many countries at once.


## OpenAPI

````yaml /openapi.json get /v1/etsy/fees
openapi: 3.1.0
info:
  title: Alura API
  version: 1.0.0
  description: Etsy market research for scripts and AI assistants.
servers:
  - url: https://api.alura.io
security:
  - apiKey: []
paths:
  /v1/etsy/fees:
    get:
      summary: Get fees
      description: >-
        Etsy's fee schedule for a seller based in `seller_country` on `as_of`
        (default today, UTC): every fee Etsy charges with its rate or amount,
        what it is charged on (`basis`), who it is for (`applies_when`), its
        dates and the Etsy pages it comes from. Announced changes have future
        dates, so `as_of` answers for any day. Without `seller_country` it lists
        the fees that are the same everywhere and names the others in
        `requires_seller_country`. A fee Etsy does not publish for the country
        is null with a `fee_unknown` notice, never 0. A country where Etsy
        Payments is not available gets an `etsy_payments_unavailable` notice.


        To estimate what Etsy takes from one order (there is no estimate tool),
        read the rows for the seller country and order date, and let T = item
        price + shipping + gift wrap in the listing currency. Add: `transaction`
        (`rate`% of T); `regulatory_operating` (`rate`% of T; 0 outside its
        countries); `payment_processing` (`rate`% of the order total including
        any sales tax or VAT the buyer pays, plus `amount` in `currency`, the
        seller country's currency; pick the row whose `audience` fits the order:
        `domestic` (Canada: `domestic_and_us`), `international` or `all`);
        `offsite_ads` only for an order from an Offsite Ad (the
        `under_threshold` or `over_threshold` row by the shop's sales, `rate`%
        of T, at most `max_amount`); `currency_conversion` (`rate`% of the sale)
        when the listing currency differs from the payment account currency; the
        `listing` fee `amount` (and `listing.multi_quantity` per extra unit
        sold); VAT or sales tax on these fees where a `vat_on_seller_fees` or
        `sales_tax_on_seller_fees` row applies (its `basis` and `note` say on
        what; a null rate is unknown: say so, never assume 0). Subtract
        `share_and_save_refund` (`rate`% of T) for an order from the seller's
        own Share & Save link. Convert every amount in another currency (USD
        caps and listing fees, the processing fee's fixed part) to one currency
        at the market rate before adding; Etsy converts its USD fees at the
        market rate too.


        Cost: free.
      operationId: etsy.fees.get
      parameters:
        - name: seller_country
          in: query
          required: false
          description: >-
            Where the seller is based (their bank account's country for Etsy
            Payments), ISO 3166-1 alpha-2 such as `FR`, in any letter case.
            Without it, only the fees that are the same everywhere.
          schema:
            description: >-
              Where the seller is based (their bank account's country for Etsy
              Payments), ISO 3166-1 alpha-2 such as `FR`, in any letter case.
              Without it, only the fees that are the same everywhere.
            type: string
            pattern: ^[A-Za-z]{2}$
            example: FR
        - name: as_of
          in: query
          required: false
          description: >-
            The day to answer for, YYYY-MM-DD, past or future (announced changes
            are dated). Default: today (UTC).
          schema:
            description: >-
              The day to answer for, YYYY-MM-DD, past or future (announced
              changes are dated). Default: today (UTC).
            type: string
            format: date
            pattern: >-
              ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
            example: '2026-10-22'
        - name: fields
          in: query
          required: false
          description: >-
            Comma-separated dotted paths to return; `id`, `object` and `as_of`
            always come back.
          schema:
            type: string
      responses:
        '200':
          description: OK
          headers:
            Request-Id:
              $ref: '#/components/headers/Request-Id'
            Alura-Credits-Cost:
              $ref: '#/components/headers/Alura-Credits-Cost'
            Alura-Credits-Remaining:
              $ref: '#/components/headers/Alura-Credits-Remaining'
          content:
            application/json:
              schema:
                type: object
                properties:
                  object:
                    type: string
                    const: etsy_fees
                  seller_country:
                    description: ISO 3166-1 alpha-2, upper case; null when none was given.
                    type:
                      - string
                      - 'null'
                  as_of:
                    type: string
                    format: date
                    pattern: >-
                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                    description: The day the schedule is for.
                  recorded_from:
                    type: string
                    format: date
                    pattern: >-
                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                    description: >-
                      The earliest day Alura's recorded fee history covers.
                      Before it, rows without a start date are today's values,
                      and a `before_recorded_history` notice says so.
                  fees:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: >-
                            Stable fee id: `listing`, `transaction`,
                            `payment_processing`, `regulatory_operating`,
                            `offsite_ads`, `currency_conversion`,
                            `vat_on_seller_fees`, `share_and_save_refund`,
                            `etsy_plus`, and narrower ones such as
                            `listing.renewal` or `deposit`. A key can have
                            several rows (domestic and international orders, the
                            two Offsite Ads rates); `applies_when` tells them
                            apart.
                        seller_country:
                          description: >-
                            The seller country this row is for; null when it is
                            the same for every seller country without a row of
                            its own.
                          type:
                            - string
                            - 'null'
                        audience:
                          type: string
                          description: >-
                            Which sellers or orders the row is for, as a short
                            id: `all`, or for a key with several rows
                            `domestic`, `international`, `domestic_and_us`,
                            `under_threshold`, `over_threshold`, `texas`,
                            `other_states`. New values may be added.
                        kind:
                          type: string
                          enum:
                            - percent
                            - fixed
                            - percent_plus_fixed
                          description: >-
                            `percent`: `rate` of `basis`. `fixed`: `amount`.
                            `percent_plus_fixed`: both.
                        rate:
                          description: >-
                            A percent: 6.5 means 6.5%. null for a fixed fee, or
                            when Etsy does not publish it (a `fee_unknown`
                            notice says so; never 0 for unknown).
                          type:
                            - number
                            - 'null'
                        amount:
                          anyOf:
                            - type: string
                              description: A decimal string in `currency`.
                            - type: 'null'
                          description: >-
                            The fixed amount in `currency`. null for a percent
                            fee, or when Etsy does not publish it.
                        currency:
                          description: >-
                            ISO 4217 code of `amount`, `min_amount` and
                            `max_amount`; null when the fee has none (a percent
                            is in the currency of what it is charged on).
                          type:
                            - string
                            - 'null'
                        min_amount:
                          anyOf:
                            - type: string
                              description: A decimal string in `currency`.
                            - type: 'null'
                          description: >-
                            The least the fee can be, in `currency`; null when
                            Etsy sets none.
                        max_amount:
                          anyOf:
                            - type: string
                              description: A decimal string in `currency`.
                            - type: 'null'
                          description: >-
                            The most the fee can be, in `currency` (Offsite Ads:
                            100 USD per order); null when Etsy sets none.
                        basis:
                          type: string
                          description: What it is charged on.
                        applies_when:
                          description: >-
                            Who or which orders the row is for, when not every
                            one.
                          type:
                            - string
                            - 'null'
                        note:
                          description: >-
                            What the numbers don't say, such as why a fee is
                            unknown; null when nothing needs saying.
                          type:
                            - string
                            - 'null'
                        valid_from:
                          anyOf:
                            - type: string
                              format: date
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                              description: YYYY-MM-DD.
                            - type: 'null'
                          description: 'The first day it applies; null: from the beginning.'
                        valid_to:
                          anyOf:
                            - type: string
                              format: date
                              pattern: >-
                                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                              description: YYYY-MM-DD.
                            - type: 'null'
                          description: >-
                            The day the next row replaces it (it no longer
                            applies that day); null while current.
                        sources:
                          type: array
                          items:
                            type: object
                            properties:
                              url:
                                type: string
                                description: >-
                                  The page that states the fact: Etsy's Help
                                  Center, Seller Handbook, Open API
                                  documentation, Etsy News or an Etsy staff post
                                  (or ISO 4217 for currency minor units).
                              title:
                                type: string
                                description: The page's title.
                              publisher:
                                type: string
                                enum:
                                  - Etsy
                                  - ISO 4217
                                description: >-
                                  `Etsy` for Etsy-owned pages; `ISO 4217` for
                                  currency minor units, the one source that is
                                  not Etsy.
                              published_at:
                                anyOf:
                                  - type: string
                                    format: date
                                    pattern: >-
                                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                                  - type: 'null'
                                description: >-
                                  When the page was published or last edited
                                  (YYYY-MM-DD); null when it does not say.
                              read_at:
                                anyOf:
                                  - type: string
                                    format: date
                                    pattern: >-
                                      ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
                                  - type: 'null'
                                description: >-
                                  When Alura read the page (YYYY-MM-DD); null
                                  when not recorded.
                            required:
                              - url
                              - title
                              - publisher
                              - published_at
                              - read_at
                            additionalProperties: false
                          description: >-
                            The one Etsy page that states this fee, and a second
                            only for what the first doesn't say (a note, the
                            start date or an earlier rate).
                      required:
                        - key
                        - seller_country
                        - audience
                        - kind
                        - rate
                        - amount
                        - currency
                        - min_amount
                        - max_amount
                        - basis
                        - applies_when
                        - note
                        - valid_from
                        - valid_to
                        - sources
                      additionalProperties: false
                    description: >-
                      The fee rows in effect on `as_of` for `seller_country`;
                      without it, only the fees that are the same everywhere.
                  requires_seller_country:
                    type: array
                    items:
                      type: string
                    description: >-
                      The fee keys that depend on the seller country, left out
                      until `seller_country` is given; empty when it is.
                  notices:
                    type: array
                    items:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                            - fee_unknown
                            - etsy_payments_unavailable
                            - before_recorded_history
                          description: >-
                            `fee_unknown`: Etsy does not publish this fee for
                            the country, so it is null (unknown, not 0).
                            `etsy_payments_unavailable`: Etsy does not list Etsy
                            Payments for the seller country.
                            `before_recorded_history`: `as_of` is before
                            `recorded_from`, so rows without a start date are
                            served as they are today and may not be what applied
                            then.
                        key:
                          description: >-
                            The fee key it is about; null for the whole
                            schedule.
                          type:
                            - string
                            - 'null'
                        audience:
                          description: >-
                            The row's `audience` when the notice is about one
                            row; null otherwise.
                          type:
                            - string
                            - 'null'
                        detail:
                          type: string
                          description: The notice in one plain sentence.
                      required:
                        - code
                        - key
                        - audience
                        - detail
                      additionalProperties: false
                    description: >-
                      Why a fee is unknown or the schedule may be incomplete;
                      empty when nothing is.
                required:
                  - object
                  - seller_country
                  - as_of
                  - recorded_from
                  - fees
                  - requires_seller_country
                  - notices
                additionalProperties: false
              example:
                object: etsy_fees
                seller_country: FR
                as_of: '2026-10-22'
                recorded_from: '2025-10-22'
                fees:
                  - key: listing
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.20'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: >-
                      Each listing you publish on Etsy.com or the Etsy apps,
                      whether or not it sells. A listing lasts 4 months.
                    applies_when: null
                    note: >-
                      Etsy's fixed fees are in USD and converted to your payment
                      account's currency at the market rate.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115014483627
                        title: What are the Fees and Taxes for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2026-10-07'
                        read_at: '2026-10-22'
                  - key: listing.renewal
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.20'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: >-
                      Each renewal, manual or automatic, which starts another 4
                      months.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000344368
                        title: How to Renew or Hide Your Listings
                        publisher: Etsy
                        published_at: '2023-04-18'
                        read_at: '2026-10-22'
                  - key: listing.auto_renew_sold
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.20'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: >-
                      When an item sells and quantity remains, the listing
                      renews automatically.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000344908
                        title: Fees and Listing Multiple Quantities
                        publisher: Etsy
                        published_at: '2024-01-31'
                        read_at: '2026-10-22'
                  - key: listing.multi_quantity
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.20'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: Each extra unit sold in one order.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000344908
                        title: Fees and Listing Multiple Quantities
                        publisher: Etsy
                        published_at: '2024-01-31'
                        read_at: '2026-10-22'
                  - key: listing.private
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.20'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: A private (custom) listing, charged only when it sells.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115014483627
                        title: What are the Fees and Taxes for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2026-10-07'
                        read_at: '2026-10-22'
                  - key: listing.edit
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.00'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: Editing a listing.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000344908
                        title: Fees and Listing Multiple Quantities
                        publisher: Etsy
                        published_at: '2024-01-31'
                        read_at: '2026-10-22'
                  - key: listing.pattern_only
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '0.00'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: A listing only on your Pattern site.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000337067
                        title: Pricing and Fees for Pattern
                        publisher: Etsy
                        published_at: '2025-09-30'
                        read_at: '2026-10-22'
                  - key: transaction
                    seller_country: null
                    audience: all
                    kind: percent
                    rate: 6.5
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      The price you show for the item plus what you charge for
                      shipping and gift wrap (and paid personalization), in your
                      listing currency.
                    applies_when: null
                    note: >-
                      US sellers: not charged on sales tax. Elsewhere it applies
                      to the price as displayed, including any tax in it.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115014483627
                        title: What are the Fees and Taxes for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2026-10-07'
                        read_at: '2026-10-22'
                      - url: https://www.etsy.com/legal/fees/
                        title: Fees & Payments Policy
                        publisher: Etsy
                        published_at: '2026-10-05'
                        read_at: '2026-10-22'
                  - key: transaction.pattern
                    seller_country: null
                    audience: all
                    kind: percent
                    rate: 0
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: Sales on your Pattern site.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000337067
                        title: Pricing and Fees for Pattern
                        publisher: Etsy
                        published_at: '2025-09-30'
                        read_at: '2026-10-22'
                  - key: payment_processing
                    seller_country: FR
                    audience: all
                    kind: percent_plus_fixed
                    rate: 4
                    amount: '0.30'
                    currency: EUR
                    min_amount: null
                    max_amount: null
                    basis: >-
                      The order's total sale price, including shipping and any
                      sales tax.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015628847
                        title: What are Payment Processing Fees for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2025-10-23'
                        read_at: '2026-10-22'
                  - key: regulatory_operating
                    seller_country: FR
                    audience: all
                    kind: percent
                    rate: 1.14
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      The item price plus shipping and gift wrap (and
                      personalization), not counting tax Etsy collects.
                    applies_when: null
                    note: null
                    valid_from: '2026-06-22'
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/1500011073202
                        title: What is a Regulatory Operating Fee?
                        publisher: Etsy
                        published_at: '2026-06-22'
                        read_at: '2026-10-22'
                      - url: >-
                          https://community.etsy.com/forum/announcements-290/topic/regulatory-operating-fee-updates-for-some-markets-181930/
                        title: Regulatory Operating Fee updates for some markets
                        publisher: Etsy
                        published_at: '2026-04-22'
                        read_at: '2026-10-22'
                  - key: offsite_ads
                    seller_country: null
                    audience: under_threshold
                    kind: percent
                    rate: 15
                    amount: null
                    currency: USD
                    min_amount: null
                    max_amount: '100.00'
                    basis: >-
                      Each order attributed to an Offsite Ad (the buyer clicked
                      the ad and ordered within 30 days), at most 100 USD per
                      order.
                    applies_when: >-
                      Shops that have never made 10,000 USD in sales in any 365
                      days, checked on the 1st of each month. These shops can
                      opt out.
                    note: >-
                      If the buyer's last click was on an Etsy Ad, only the Etsy
                      Ads fee applies.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000338367
                        title: How Etsy's Offsite Ads Work
                        publisher: Etsy
                        published_at: '2026-06-22'
                        read_at: '2026-10-22'
                      - url: https://www.etsy.com/legal/fees/
                        title: Fees & Payments Policy
                        publisher: Etsy
                        published_at: '2026-10-05'
                        read_at: '2026-10-22'
                  - key: offsite_ads
                    seller_country: null
                    audience: over_threshold
                    kind: percent
                    rate: 12
                    amount: null
                    currency: USD
                    min_amount: null
                    max_amount: '100.00'
                    basis: >-
                      Each order attributed to an Offsite Ad (the buyer clicked
                      the ad and ordered within 30 days), at most 100 USD per
                      order.
                    applies_when: >-
                      Shops that have ever made 10,000 USD or more in sales in
                      365 days. They take part for the life of the shop.
                    note: >-
                      If the buyer's last click was on an Etsy Ad, only the Etsy
                      Ads fee applies.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000338367
                        title: How Etsy's Offsite Ads Work
                        publisher: Etsy
                        published_at: '2026-06-22'
                        read_at: '2026-10-22'
                      - url: https://www.etsy.com/legal/fees/
                        title: Fees & Payments Policy
                        publisher: Etsy
                        published_at: '2026-10-05'
                        read_at: '2026-10-22'
                  - key: currency_conversion
                    seller_country: null
                    audience: all
                    kind: percent
                    rate: 2.5
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      The sale amount, when your listing currency differs from
                      your payment account currency.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000344668
                        title: Currency Conversion Fees
                        publisher: Etsy
                        published_at: '2023-08-14'
                        read_at: '2026-10-22'
                  - key: vat_on_seller_fees
                    seller_country: FR
                    audience: all
                    kind: percent
                    rate: null
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      Etsy's fees, which Etsy lists without VAT, including the
                      payment processing, regulatory operating and deposit fees.
                    applies_when: Unless you've added your VAT ID to your Etsy account.
                    note: Etsy doesn't publish the VAT rate it charges on its fees.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360040584433
                        title: How VAT Is Collected on Seller Fees
                        publisher: Etsy
                        published_at: '2026-06-26'
                        read_at: '2026-10-22'
                      - url: https://www.etsy.com/legal/fees/
                        title: Fees & Payments Policy
                        publisher: Etsy
                        published_at: '2026-10-05'
                        read_at: '2026-10-22'
                  - key: share_and_save_refund
                    seller_country: null
                    audience: all
                    kind: percent
                    rate: 6.5
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      A refund to you: a share of the eligible order total (the
                      transaction fee's basis), for orders placed within 30 days
                      of a click on your Share & Save link.
                    applies_when: null
                    note: Etsy's holiday offer, through January 4, 2027.
                    valid_from: '2026-10-20'
                    valid_to: '2027-01-05'
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/16981332744087
                        title: How to Save on Etsy Fees with the Share & Save Program
                        publisher: Etsy
                        published_at: '2026-10-20'
                        read_at: '2026-10-22'
                      - url: >-
                          https://community.etsy.com/forum/announcements-290/topic/our-share-save-holiday-gift-to-you-190476/
                        title: Our Share & Save holiday gift to you
                        publisher: Etsy
                        published_at: '2026-10-20'
                        read_at: '2026-10-22'
                  - key: etsy_plus
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '10.00'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: >-
                      Each month of the optional subscription. It includes 15
                      listing credits and a 5 USD Etsy Ads credit. Local taxes
                      may apply.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360001589928
                        title: What is Etsy Plus?
                        publisher: Etsy
                        published_at: '2026-08-04'
                        read_at: '2026-10-22'
                  - key: etsy_ads
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: >-
                      Clicks on your Etsy Ads, within the daily budget you set.
                      Bids are in USD.
                    applies_when: null
                    note: >-
                      Etsy Ads is an auction: you set a daily budget at or above
                      Etsy's minimum, so Etsy publishes no fixed fee.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://www.etsy.com/legal/fees/
                        title: Fees & Payments Policy
                        publisher: Etsy
                        published_at: '2026-10-05'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/115014483627
                        title: What are the Fees and Taxes for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2026-10-07'
                        read_at: '2026-10-22'
                  - key: pattern
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: '15.00'
                    currency: USD
                    min_amount: null
                    max_amount: null
                    basis: Each month after a 30-day free trial. Taxes may apply.
                    applies_when: null
                    note: null
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/360000337067
                        title: Pricing and Fees for Pattern
                        publisher: Etsy
                        published_at: '2025-09-30'
                        read_at: '2026-10-22'
                  - key: set_up
                    seller_country: null
                    audience: all
                    kind: fixed
                    rate: null
                    amount: null
                    currency: null
                    min_amount: null
                    max_amount: null
                    basis: Once, when you open a shop. Not refundable.
                    applies_when: null
                    note: >-
                      Etsy doesn't publish the amount: it varies by location and
                      is shown when you set up your shop.
                    valid_from: null
                    valid_to: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115014483627
                        title: What are the Fees and Taxes for Selling on Etsy?
                        publisher: Etsy
                        published_at: '2026-10-07'
                        read_at: '2026-10-22'
                requires_seller_country: []
                notices:
                  - code: fee_unknown
                    key: vat_on_seller_fees
                    audience: all
                    detail: Etsy doesn't publish the VAT rate it charges on its fees.
                  - code: fee_unknown
                    key: etsy_ads
                    audience: all
                    detail: >-
                      Etsy Ads is an auction: you set a daily budget at or above
                      Etsy's minimum, so Etsy publishes no fixed fee.
                  - code: fee_unknown
                    key: set_up
                    audience: all
                    detail: >-
                      Etsy doesn't publish the amount: it varies by location and
                      is shown when you set up your shop.
        '400':
          $ref: '#/components/responses/Problem400'
        '401':
          $ref: '#/components/responses/Problem401'
        '402':
          $ref: '#/components/responses/Problem402'
        '403':
          $ref: '#/components/responses/Problem403'
        '404':
          $ref: '#/components/responses/Problem404'
        '405':
          $ref: '#/components/responses/Problem405'
        '429':
          $ref: '#/components/responses/Problem429'
        '500':
          $ref: '#/components/responses/Problem500'
        '503':
          $ref: '#/components/responses/Problem503'
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >-
            curl
            "https://api.alura.io/v1/etsy/fees?seller_country=FR&as_of=2026-10-22"
            \
              -H "Authorization: Bearer $ALURA_API_KEY"
        - lang: typescript
          label: TypeScript
          source: >-
            const res = await
            fetch('https://api.alura.io/v1/etsy/fees?seller_country=FR&as_of=2026-10-22',
            {
              headers: {
                Authorization: `Bearer ${process.env.ALURA_API_KEY}`,
              },
            });

            console.log(await res.json());
        - lang: python
          label: Python
          source: |-
            import json
            import os
            import urllib.request

            request = urllib.request.Request(
                "https://api.alura.io/v1/etsy/fees?seller_country=FR&as_of=2026-10-22",
                headers={
                    "Authorization": f"Bearer {os.environ['ALURA_API_KEY']}",
                },
            )
            with urllib.request.urlopen(request) as response:
                print(json.load(response))
components:
  headers:
    Request-Id:
      description: '`req_` + ULID; quote it when reporting a problem.'
      schema:
        type: string
    Alura-Credits-Cost:
      description: API credits this call cost.
      schema:
        type: integer
    Alura-Credits-Remaining:
      description: >-
        API credits left in the workspace's monthly allowance, counting calls
        still in flight. Absent when it cannot be read right now.
      schema:
        type: integer
  responses:
    Problem400:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/invalid_request
            title: Invalid request
            status: 400
            code: invalid_request
            detail: Invalid request
            suggestion: Fix the request as the detail says, then send it again.
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem401:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/unauthorized
            title: Unauthorized
            status: 401
            code: unauthorized
            detail: Unauthorized
            suggestion: 'Send a valid API key as `Authorization: Bearer alura_sk_...`.'
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem402:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/credits_exhausted
            title: API credits exhausted
            status: 402
            code: credits_exhausted
            detail: API credits exhausted
            suggestion: Upgrade the plan or wait for the monthly reset.
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem403:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/plan_required
            title: Plan required
            status: 403
            code: plan_required
            detail: Plan required
            suggestion: Upgrade the workspace plan to use this operation.
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem404:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/not_found
            title: Not found
            status: 404
            code: not_found
            detail: Not found
            suggestion: Check the ID, or search for it first.
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem405:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/method_not_allowed
            title: Method not allowed
            status: 405
            code: method_not_allowed
            detail: Method not allowed
            suggestion: Use one of the methods in the Allow header.
            retryable: false
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem429:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/rate_limited
            title: Rate limited
            status: 429
            code: rate_limited
            detail: Rate limited
            suggestion: Wait for Retry-After, then retry.
            retryable: true
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem500:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/internal_error
            title: Internal error
            status: 500
            code: internal_error
            detail: Internal error
            suggestion: Retry; if it keeps failing, report the request_id.
            retryable: true
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
    Problem503:
      description: Error
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://docs.alura.io/errors/credits_unavailable
            title: API credits unavailable
            status: 503
            code: credits_unavailable
            detail: API credits unavailable
            suggestion: Retry shortly.
            retryable: true
            request_id: req_01JQ5W3H8M2N4P6R8T0V2X4Z6B
  schemas:
    Problem:
      type: object
      description: RFC 9457 problem details.
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        code:
          type: string
          description: A code from the error catalog; new codes may be added.
          x-extensible-enum:
            - invalid_request
            - unknown_parameter
            - invalid_cursor
            - cursor_window_exceeded
            - invalid_reference
            - id_type_mismatch
            - invalid_keyword
            - shop_id_required
            - listing_not_publishable
            - sales_window_not_covered
            - unauthorized
            - credits_exhausted
            - plan_required
            - insufficient_scope
            - workspace_required
            - workspace_locked
            - your_shop_unavailable
            - writes_suspended
            - browser_refused
            - role_required
            - impersonation_refused
            - recent_sign_in_required
            - etsy_scope_required
            - etsy_partner_required
            - not_found
            - not_collected
            - not_found_on_etsy
            - shop_opted_out
            - method_not_allowed
            - conflict
            - key_limit_reached
            - reconnect_required
            - settings_not_fetched
            - listing_busy
            - settings_busy
            - shop_create_busy
            - idempotency_partial_unverifiable
            - listing_has_variations
            - changed_since
            - change_not_revertable
            - listing_in_ab_test
            - activation_skipped
            - idempotency_processing
            - confirmation_required
            - test_shop_active_cap
            - write_outcome_unknown
            - unprocessable
            - listing_removed_on_etsy
            - endpoint_removed
            - rate_limited
            - throttled
            - daily_credit_cap_exceeded
            - credits_reserved
            - fetch_limit_reached
            - write_rate_limited
            - sync_cooldown
            - shop_write_budget_exhausted
            - internal_error
            - write_misconfigured
            - upstream_unavailable
            - credits_unavailable
            - service_unavailable
            - fetch_unavailable
            - create_lock_unavailable
            - writes_paused
            - etsy_capacity
            - upstream_timeout
        detail:
          type: string
        suggestion:
          type: string
        retryable:
          type: boolean
        request_id:
          type: string
        upgrade_url:
          type: string
          format: uri
          description: 'credits_exhausted and plan_required: where to upgrade the plan.'
        credits_needed:
          type: integer
          description: 'API credit refusals: what the call needed.'
        credits_remaining:
          type: integer
          description: >-
            API credit refusals: what is left (of the month, or of the day for
            daily_credit_cap_exceeded).
        resets_at:
          type: string
          format: date-time
          description: >-
            credits_exhausted and daily_credit_cap_exceeded: when the limit
            resets.
      required:
        - type
        - title
        - status
        - code
        - detail
        - suggestion
        - retryable
        - request_id
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'An API key: `Authorization: Bearer alura_sk_...`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.