> ## 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.

# List countries

> List every country with its currency, whether a shop there can sell with Etsy Payments and the currency Etsy pays its sellers in.

**Cost:** Free.

```bash
curl -G "https://api.alura.io/v1/etsy/countries" \
  -H "Authorization: Bearer $ALURA_API_KEY" \
  --data-urlencode "limit=100" \
  --data-urlencode "expand=currency"
```

Every ISO 3166-1 country comes in code order, with the source of each fact in `sources`. `etsy_payments` comes from Etsy's list of eligible countries, which Etsy calls complete.

* `name` is the ISO 3166 name, not a display name: `Korea, Republic of`.
* `payout_currency_code` is the currency Etsy pays a seller whose bank account is in the country: USD for Payoneer countries such as `JP`. It is `null` exactly where Etsy Payments isn't available.
* `currency_code` is `null` where ISO 4217 names no currency (such as Antarctica and Palestine), with a `currency_unknown` notice.

## Add related data

`expand` inlines related objects for free, each with its own dates and notices:

| `expand` | Adds | Same as |
| - | - | - |
| `currency` | The country's currency with its USD rate | [Get currency](https://docs.alura.io/api-reference/etsy/currencies/get.md) |
| `fees` | Today's fee schedule for a seller based there | [Get fees](https://docs.alura.io/api-reference/etsy/fees/get.md) with `seller_country` |
| `shipping_carriers` | The carriers for parcels sent from there | [Get shipping carriers](https://docs.alura.io/api-reference/etsy/shippingCarriers/get.md) |

A part Alura can't give is `null` with a notice, never an empty list or a zero.

> [accordion] Notices
>
> | `code` | Meaning |
> | - | - |
> | `new_shops_unavailable` | Etsy says new shops can't open there (China). |
> | `international_sales_only` | Etsy says shops there sell internationally only (India). |
> | `currency_unknown` | ISO 4217 names no currency for the country. |
> | `currency_unsupported` | With `expand=currency`: the country's currency isn't an Etsy Payments currency, so `currency` is `null`. |
> | `shipping_carriers_unknown` | With `expand=shipping_carriers`: Alura has no readable carriers stored for the country, so `shipping_carriers` is `null`. |
>
> New codes may be added.

For one country, use [Get country](https://docs.alura.io/api-reference/etsy/countries/get.md).


## OpenAPI

````yaml /openapi.json get /v1/etsy/countries
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/countries:
    get:
      summary: List countries
      description: >-
        Every ISO 3166-1 country, in code order: its ISO name, its currency,
        whether a shop can sell there with Etsy Payments (from Etsy's list of
        eligible countries, which Etsy calls complete) and the currency Etsy
        pays sellers there in. Every fact cites its source. `expand=` inlines,
        free: `currency` (`GET /v1/etsy/currencies/{currency_code}`, with its
        USD rate), `fees` (`GET /v1/etsy/fees?seller_country={code}` for today)
        and `shipping_carriers` (`GET
        /v1/etsy/shipping-carriers?origin_country={code}`), each with its own
        dates and notices. A part Alura cannot give is null with a notice, never
        an empty list or a zero. A page reads each expanded part once for all
        its countries.


        Cost: free.
      operationId: etsy.countries.list
      parameters:
        - name: limit
          in: query
          required: false
          description: 'Page size: default 25, at most 100.'
          schema:
            type: integer
            minimum: 1
            maximum: 100
        - name: cursor
          in: query
          required: false
          description: >-
            The `next_cursor` of the previous page. Bound to the query, the
            workspace and the key.
          schema:
            type: string
        - name: fields
          in: query
          required: false
          description: >-
            Comma-separated dotted paths to return; `id`, `object` and `as_of`
            always come back.
          schema:
            type: string
        - name: expand
          in: query
          required: false
          description: >-
            Comma-separated related objects to include: `currency`, `fees`,
            `shipping_carriers`. Free.
          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: list
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        object:
                          type: string
                          const: country
                        code:
                          type: string
                          description: ISO 3166-1 alpha-2 code, upper case.
                        name:
                          type: string
                          description: >-
                            ISO 3166's English short name, the standard's name
                            rather than a display name (`United Kingdom of Great
                            Britain and Northern Ireland`, `Korea, Republic
                            of`).
                        currency_code:
                          description: >-
                            The country's currency, ISO 4217 (`EUR`). null where
                            ISO 4217 names no currency (Antarctica, South
                            Georgia and the South Sandwich Islands, Palestine),
                            with a `currency_unknown` notice.
                          type:
                            - string
                            - 'null'
                        payout_currency_code:
                          description: >-
                            The currency Etsy pays sellers in, for a seller
                            whose bank account is in this country (ISO 4217);
                            USD for Payoneer countries (`JP`), EUR in Bulgaria,
                            Croatia, the Czech Republic, Hungary, Poland and
                            Romania. null exactly where Etsy Payments is not
                            available.
                          type:
                            - string
                            - 'null'
                        etsy_payments:
                          description: >-
                            A shop can sell here with Etsy Payments ("Countries
                            Eligible for Etsy Payments", which Etsy calls
                            complete; a shop opens only in one of them). The US
                            territories are true. null where Etsy doesn't say.
                          type:
                            - boolean
                            - '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])))$
                            - type: 'null'
                          description: >-
                            The day these facts took effect (Bulgaria: the euro,
                            2026-01-01); null when they held before Alura's
                            recorded history (2025-10-22).
                        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: >-
                            Etsy's Countries Eligible for Etsy Payments page,
                            and a second Etsy page only for what it doesn't say:
                            the bank-account and euro deposit rules, Payoneer's
                            USD deposits or India's limits. `name` and
                            `currency_code` follow ISO 3166 and ISO 4217, as
                            their descriptions say.
                        notices:
                          type: array
                          items:
                            type: object
                            properties:
                              code:
                                type: string
                                enum:
                                  - new_shops_unavailable
                                  - international_sales_only
                                  - currency_unknown
                                  - currency_unsupported
                                  - shipping_carriers_unknown
                                description: >-
                                  What Etsy says limits selling from the
                                  country: `new_shops_unavailable` (China) and
                                  `international_sales_only` (India), each from
                                  the Etsy page in `sources`.
                                  `currency_unknown`: ISO 4217 names no currency
                                  for it. With `expand`: `currency_unsupported`
                                  (the country's currency is not an Etsy
                                  Payments currency, so `currency` is null) and
                                  `shipping_carriers_unknown` (Alura has no
                                  readable carriers stored for parcels from the
                                  country, so `shipping_carriers` is null, never
                                  an empty list). New codes may be added.
                              detail:
                                type: string
                                description: The notice in one plain sentence.
                            required:
                              - code
                              - detail
                            additionalProperties: false
                          description: >-
                            What limits selling from the country, and why a part
                            is unknown or not inlined; empty when nothing is.
                        currency:
                          x-alura-expansion: currency
                          description: >-
                            With `expand=currency`: `GET
                            /v1/etsy/currencies/{currency_code}`, with its USD
                            rate and `rate_as_of` (its boolean `payout_currency`
                            is the currency's, not this country's
                            `payout_currency_code`). null when it is not an Etsy
                            Payments currency (`currency_unsupported`) or there
                            is none.
                          anyOf:
                            - type: object
                              properties:
                                object:
                                  type: string
                                  const: currency
                                code:
                                  type: string
                                  description: ISO 4217 code, upper case.
                                name:
                                  type: string
                                  description: >-
                                    The name as Etsy writes it; ISO 4217's name
                                    where Etsy gives none (INR).
                                minor_units:
                                  anyOf:
                                    - type: integer
                                    - type: 'null'
                                  description: >-
                                    Digits after the decimal point, from ISO
                                    4217 (Etsy does not state them); null when
                                    unknown.
                                etsy_payments:
                                  type: boolean
                                  description: >-
                                    Buyers can pay in it through Etsy Payments
                                    (Etsy's "Currencies Supported for Etsy
                                    Payments"). INR is false: it is listed only
                                    because Etsy charges Indian sellers' payment
                                    processing fee in it, and Etsy does not pay
                                    out in it either.
                                listing_currency:
                                  description: >-
                                    A shop can price its listings in it. Etsy
                                    confirms only USD, the default shop
                                    currency, and lists no others, so the rest
                                    are null (unknown).
                                  type:
                                    - boolean
                                    - 'null'
                                payout_currency:
                                  description: >-
                                    Etsy deposits sales in it. null where Etsy
                                    does not say (CNY).
                                  type:
                                    - boolean
                                    - '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])))$
                                    - type: 'null'
                                  description: >-
                                    The day these facts took effect; null when
                                    Etsy shows no start date ("from the
                                    beginning").
                                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: >-
                                    Etsy's page for these facts (its list of
                                    Etsy Payments currencies), and a second only
                                    for what it doesn't say: USD as the default
                                    shop currency, INR's deposits.
                                units_per_usd:
                                  description: >-
                                    Units of this currency one US dollar buys,
                                    as Alura last stored it (USD is 1). Divide
                                    by it to convert to USD: at 0.893, 25 EUR /
                                    0.893 = 28.00 USD. null when no usable rate
                                    is stored (`notices` says so), never 1 or 0.
                                  type:
                                    - number
                                    - 'null'
                                rate_as_of:
                                  anyOf:
                                    - type: string
                                      format: date-time
                                      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])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                                    - type: 'null'
                                  description: >-
                                    When that rate was stored (ISO 8601, UTC);
                                    null with `units_per_usd`.
                                notices:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      code:
                                        type: string
                                        description: '`rate_unknown`. New codes may be added.'
                                      detail:
                                        type: string
                                        description: The notice in one plain sentence.
                                    required:
                                      - code
                                      - detail
                                    additionalProperties: false
                                  description: >-
                                    Why a part of the currency is unknown right
                                    now; empty when nothing is.
                              required:
                                - object
                                - code
                                - name
                                - minor_units
                                - etsy_payments
                                - listing_currency
                                - payout_currency
                                - valid_from
                                - sources
                                - units_per_usd
                                - rate_as_of
                                - notices
                              additionalProperties: false
                            - type: 'null'
                        fees:
                          x-alura-expansion: fees
                          description: >-
                            With `expand=fees`: `GET
                            /v1/etsy/fees?seller_country={code}` for today
                            (UTC), with its own `as_of`, `recorded_from` and
                            notices (`etsy_payments_unavailable` where Etsy
                            Payments is not available).
                          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
                        shipping_carriers:
                          x-alura-expansion: shipping_carriers
                          description: >-
                            With `expand=shipping_carriers`: `GET
                            /v1/etsy/shipping-carriers?origin_country={code}`,
                            with its `fetched_at`. Alura stores them for the
                            countries connected shops ship from; elsewhere null
                            with a `shipping_carriers_unknown` notice, never an
                            empty list.
                          anyOf:
                            - type: object
                              properties:
                                object:
                                  type: string
                                  const: shipping_carriers
                                origin_country:
                                  type: string
                                  description: ISO 3166-1 alpha-2 code, upper case.
                                carriers:
                                  type: array
                                  items:
                                    type: object
                                    properties:
                                      id:
                                        type: string
                                        description: Etsy shipping carrier ID, as a string.
                                      name:
                                        type: string
                                        description: >-
                                          The carrier as Etsy names it, such as
                                          `USPS`.
                                      domestic_classes:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            mail_class_key:
                                              type: string
                                              description: Etsy's key for the mail class.
                                            name:
                                              type: string
                                              description: >-
                                                The mail class as Etsy names it, such as
                                                `Priority Mail`.
                                          required:
                                            - mail_class_key
                                            - name
                                          additionalProperties: false
                                        description: >-
                                          Mail classes for shipments inside the
                                          origin country.
                                      international_classes:
                                        type: array
                                        items:
                                          type: object
                                          properties:
                                            mail_class_key:
                                              type: string
                                              description: Etsy's key for the mail class.
                                            name:
                                              type: string
                                              description: >-
                                                The mail class as Etsy names it, such as
                                                `Priority Mail`.
                                          required:
                                            - mail_class_key
                                            - name
                                          additionalProperties: false
                                        description: Mail classes for shipments abroad.
                                    required:
                                      - id
                                      - name
                                      - domestic_classes
                                      - international_classes
                                    additionalProperties: false
                                  description: >-
                                    Empty when Etsy lists no carrier for this
                                    origin.
                                fetched_at:
                                  type: string
                                  description: >-
                                    When Alura last fetched this from Etsy (ISO
                                    8601, UTC).
                              required:
                                - object
                                - origin_country
                                - carriers
                                - fetched_at
                              additionalProperties: false
                            - type: 'null'
                      required:
                        - object
                        - code
                        - name
                        - currency_code
                        - payout_currency_code
                        - etsy_payments
                        - valid_from
                        - sources
                        - notices
                      additionalProperties: false
                  has_more:
                    type: boolean
                  next_cursor:
                    type:
                      - string
                      - 'null'
                  total:
                    type: object
                    properties:
                      value:
                        type: integer
                      relation:
                        type: string
                        enum:
                          - eq
                          - gte
                    required:
                      - value
                      - relation
                    additionalProperties: false
                required:
                  - object
                  - data
                  - has_more
                  - next_cursor
                  - total
                additionalProperties: false
              example:
                object: list
                data:
                  - object: country
                    code: AQ
                    name: Antarctica
                    currency_code: null
                    payout_currency_code: null
                    etsy_payments: false
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                    notices:
                      - code: currency_unknown
                        detail: >-
                          ISO 4217 names no universal currency for this country,
                          so `currency_code` is null.
                  - object: country
                    code: BG
                    name: Bulgaria
                    currency_code: EUR
                    payout_currency_code: EUR
                    etsy_payments: true
                    valid_from: '2026-01-01'
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/360000337767
                        title: Currencies Supported for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-06-16'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: CN
                    name: China
                    currency_code: CNY
                    payout_currency_code: USD
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/16999319005207
                        title: How Do I Use a Payoneer Account With Etsy Payments?
                        publisher: Etsy
                        published_at: '2026-04-22'
                        read_at: '2026-10-22'
                    notices:
                      - code: new_shops_unavailable
                        detail: Etsy says new shops cannot open in China.
                  - object: country
                    code: FR
                    name: France
                    currency_code: EUR
                    payout_currency_code: EUR
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: IN
                    name: India
                    currency_code: INR
                    payout_currency_code: USD
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/6742925359255
                        title: How to Accept Payments as a Seller in India
                        publisher: Etsy
                        published_at: '2025-05-28'
                        read_at: '2026-10-22'
                    notices:
                      - code: international_sales_only
                        detail: >-
                          Etsy says new shops opened in India can only sell
                          internationally.
                  - object: country
                    code: JP
                    name: Japan
                    currency_code: JPY
                    payout_currency_code: USD
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/16999319005207
                        title: How Do I Use a Payoneer Account With Etsy Payments?
                        publisher: Etsy
                        published_at: '2026-04-22'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: NE
                    name: Niger
                    currency_code: XOF
                    payout_currency_code: null
                    etsy_payments: false
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: PL
                    name: Poland
                    currency_code: PLN
                    payout_currency_code: EUR
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/360000337767
                        title: Currencies Supported for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-06-16'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: PR
                    name: Puerto Rico
                    currency_code: USD
                    payout_currency_code: USD
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/360000337767
                        title: Currencies Supported for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-06-16'
                        read_at: '2026-10-22'
                    notices: []
                  - object: country
                    code: US
                    name: United States of America
                    currency_code: USD
                    payout_currency_code: USD
                    etsy_payments: true
                    valid_from: null
                    sources:
                      - url: https://help.etsy.com/hc/en-us/articles/115015710408
                        title: Countries Eligible for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-04-14'
                        read_at: '2026-10-22'
                      - url: https://help.etsy.com/hc/en-us/articles/360000337767
                        title: Currencies Supported for Etsy Payments
                        publisher: Etsy
                        published_at: '2026-06-16'
                        read_at: '2026-10-22'
                    notices: []
                has_more: false
                next_cursor: null
                total:
                  value: 10
                  relation: eq
        '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/countries" \
              -H "Authorization: Bearer $ALURA_API_KEY"
        - lang: typescript
          label: TypeScript
          source: |-
            const res = await fetch('https://api.alura.io/v1/etsy/countries', {
              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/countries",
                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.