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

> Get one currency Etsy supports, with Alura's US dollar exchange rate for it, to convert prices and fees to USD.

**Cost:** Free.

```bash
curl "https://api.alura.io/v1/etsy/currencies/EUR" \
  -H "Authorization: Bearer $ALURA_API_KEY"
```

The code is ISO 4217, in any letter case. The facts are the same as in [List currencies](https://docs.alura.io/api-reference/etsy/currencies/list.md).

## Convert to USD

`units_per_usd` is how many units of the currency one US dollar buys (USD is `1`). Divide by it: at `0.893`, 25 EUR / 0.893 = 28.00 USD. `rate_as_of` says when Alura stored the rate.

> [!NOTE]
>
> With no usable rate stored, `units_per_usd` and `rate_as_of` are `null` and `notices` has `rate_unknown`. The rate is never 1 or 0 by default.

A code Etsy doesn't support answers `404` [`not_found`](https://docs.alura.io/errors/not_found). A code that isn't three letters answers `400`.


## OpenAPI

````yaml /openapi.json get /v1/etsy/currencies/{code}
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/currencies/{code}:
    get:
      summary: Get currency
      description: >-
        One currency Etsy supports, plus `units_per_usd` (units of the currency
        one US dollar buys: 25 EUR / 0.893 = 28.00 USD) and `rate_as_of` (when
        Alura stored that rate). With no usable rate stored, both are null and
        `notices` has `rate_unknown`: the rate is never 1 or 0 by default. A
        code Etsy does not support is 404 `not_found`; a code that is not three
        letters is 400.


        Cost: free.
      operationId: etsy.currencies.get
      parameters:
        - name: code
          in: path
          required: true
          schema:
            description: ISO 4217 code, for example `EUR`; any case.
            type: string
            pattern: ^[A-Za-z]{3}$
            example: EUR
        - 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: 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
              example:
                object: currency
                code: EUR
                name: Euro
                minor_units: 2
                etsy_payments: true
                listing_currency: null
                payout_currency: true
                valid_from: null
                sources:
                  - 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'
                units_per_usd: 0.8927731731
                rate_as_of: '2026-10-21T04:45:57.943Z'
                notices: []
        '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/currencies/EUR" \
              -H "Authorization: Bearer $ALURA_API_KEY"
        - lang: typescript
          label: TypeScript
          source: >-
            const res = await
            fetch('https://api.alura.io/v1/etsy/currencies/EUR', {
              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/currencies/EUR",
                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.