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

> Get one Etsy News article by its slug: the whole story in markdown, with Etsy's pages as sources and every correction made after publishing.

**Cost:** Free.

```bash
curl "https://api.alura.io/v1/etsy/news/us-entry-type-13-postal" \
  -H "Authorization: Bearer $ALURA_API_KEY"
```

`body` is the story in markdown, 250 to 600 words: what changed, who it affects, what it costs, what to do and what isn't known yet. `url` is the article's page on alura.io.

* `published_at` is the story's date: the day Etsy announced the change. `created_at` is when Alura published the article, which can be much later for an older change.
* `corrections` lists every correction made after publishing, oldest first. A correction moves `updated_at`.
* `update_ids` are the [Etsy updates](https://docs.alura.io/api-reference/etsy/updates/get.md) the article explains, the main one first.

To find articles, use [List news](https://docs.alura.io/api-reference/etsy/news/list.md).


## OpenAPI

````yaml /openapi.json get /v1/etsy/news/{slug}
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/news/{slug}:
    get:
      summary: Get article
      description: >-
        One Etsy News article by its slug (its id): the whole story in markdown,
        its dates, topics, the Etsy updates it explains, Etsy's own pages as
        `sources`, and every correction made after publishing. Free.


        Cost: free.
      operationId: etsy.news.get
      parameters:
        - name: slug
          in: path
          required: true
          schema:
            type: string
            maxLength: 80
            pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
            description: >-
              The article slug (its id), such as
              `regulatory-operating-fee-june-2026`.
            example: us-entry-type-13-postal
        - 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.news_article
                  id:
                    type: string
                    description: >-
                      The article ID: its slug, such as
                      `regulatory-operating-fee-june-2026` (`GET
                      /v1/etsy/news/{slug}`).
                  slug:
                    type: string
                    description: Its permanent address, the same as `id`.
                  title:
                    type: string
                    description: What changed, in one line.
                  dek:
                    type: string
                    description: 'One sentence: who is affected and from when.'
                  url:
                    description: >-
                      The article's page on alura.io
                      (`https://www.alura.io/news/{slug}`).
                    type:
                      - string
                      - 'null'
                  published_at:
                    type: string
                    description: >-
                      The story's date: the day Etsy announced the change it
                      covers, `YYYY-MM-DD`.
                  created_at:
                    type: string
                    description: >-
                      When Alura published the article (ISO 8601, UTC); a
                      backfilled story is published long after its date.
                  updated_at:
                    type: string
                    description: >-
                      When Alura last changed the article (ISO 8601, UTC); a
                      correction moves it.
                  topics:
                    minItems: 1
                    maxItems: 7
                    type: array
                    items:
                      type: string
                      enum:
                        - fees
                        - listing_rules
                        - policies
                        - search
                        - programs
                        - payments
                        - shipping
                    description: >-
                      The areas of selling on Etsy it covers, as Etsy update
                      kinds.
                  update_ids:
                    minItems: 1
                    maxItems: 20
                    type: array
                    items:
                      type: string
                    description: >-
                      The Etsy updates it explains (`GET
                      /v1/etsy/updates/{id}`), the main one first.
                  author:
                    type: string
                    description: The byline (`Alura`).
                  body:
                    type: string
                    description: >-
                      The story in markdown, 250 to 600 words: what changed, who
                      it affects, what it costs, what to do, and what is not
                      known yet.
                  sources:
                    minItems: 1
                    maxItems: 8
                    type: array
                    items:
                      type: object
                      properties:
                        url:
                          type: string
                          maxLength: 500
                          description: >-
                            Etsy's page: etsy.com, or its help, investors, blog
                            or community site; a later source may be a
                            web.archive.org copy of one.
                        title:
                          type: string
                          description: The page's title, as Etsy wrote it.
                        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 own pages every claim comes from, the main one
                      first.
                  corrections:
                    maxItems: 20
                    type: array
                    items:
                      type: object
                      properties:
                        at:
                          type: string
                          description: When it was corrected (ISO 8601, UTC).
                        note:
                          type: string
                          description: What was wrong, or what changed.
                      required:
                        - at
                        - note
                      additionalProperties: false
                    description: >-
                      Every correction made after publishing, oldest first;
                      empty when there was none.
                required:
                  - object
                  - id
                  - slug
                  - title
                  - dek
                  - url
                  - published_at
                  - created_at
                  - updated_at
                  - topics
                  - update_ids
                  - author
                  - body
                  - sources
                  - corrections
                additionalProperties: false
              example:
                object: etsy.news_article
                id: us-entry-type-13-postal
                slug: us-entry-type-13-postal
                title: >-
                  US requires Entry Type 13 customs filing for postal parcels
                  worth $2,500 or less from January 20, 2027
                dek: >-
                  From January 20, 2027, sellers outside the US who post orders
                  to US buyers need shipment-level customs data on each parcel,
                  or it may be held or returned.
                url: https://www.alura.io/news/us-entry-type-13-postal
                published_at: '2026-10-19'
                created_at: '2026-10-22T09:00:00.000Z'
                updated_at: '2026-10-22T09:00:00.000Z'
                topics:
                  - shipping
                  - policies
                update_ids:
                  - 2026-10-19-us-entry-type-13
                author: Alura
                body: >-
                  Starting January 20, 2027, international postal packages
                  valued at $2,500 USD or less that enter the US "must be filed
                  electronically" in US Customs and Border Protection's ACE
                  system. Etsy [announced the change on October 19,
                  2026](https://community.etsy.com/forum/announcements-290/topic/new-us-customs-postal-entry-requirements-for-international-sellers-190423/).
                  The filing goes through a new process called Entry Type 13.
                  Each entry needs shipment-level customs data, plus any
                  information or documents that US agencies such as the FDA or
                  CPSC require. Your postal carrier collects it.


                  ## Who it affects


                  Etsy's post is addressed to sellers who ship to US buyers from
                  outside the US. The rule covers postal shipments only. Etsy
                  says express carriers like FedEx, UPS and DHL "already collect
                  this information."


                  The agency rules reach many product types. Etsy's examples are
                  food, supplements, candles, toys, children's clothing, certain
                  jewelry, and items with animal materials (feathers, shells,
                  bone, leather) or plant materials (wood, cork, botanicals).
                  Products applied to the skin are also on the list. Depending
                  on what you sell, you may need extra documents such as
                  compliance certificates. Etsy says: "You'll need to determine
                  if the items you sell are affected."


                  ## What it means


                  After January 20, 2027, a parcel posted without the required
                  data can stop at the border. Etsy's wording: "If required
                  customs information isn't provided, your package may be held
                  or returned."


                  For children's products and other CPSC-regulated goods, this
                  builds on a rule already in force. Etsy's [Help
                  Center](https://help.etsy.com/hc/en-us/articles/41840762260759)
                  says that from July 8, 2026, importers of certain consumer
                  products must submit safety certificate information
                  electronically. Children's products need a Children's Product
                  Certificate. For goods sent by postal mail, Etsy says using
                  the CPSC Product Registry "is required." The Registry issues a
                  reference ID that you include with the shipment's customs
                  information.


                  Etsy hasn't put a price on any of this. The post mentions no
                  Etsy fee.


                  ## What to do


                  - List which of your products fall into the categories above,
                  and gather any certificates you hold for them.

                  - Etsy recommends connecting your shop to a free Zonos
                  Verified Account to check whether items can ship to the US or
                  need more documents. To connect, Etsy says to go to the
                  Channels page in the Zonos Dashboard, select Add channel,
                  choose Etsy, then select Connect and approve Zonos' request to
                  access your orders and catalog. Zonos is a separate company,
                  and Etsy notes that your use of it "is governed by the
                  applicable Zonos terms."

                  - If you post CPSC-regulated items, register them in the CPSC
                  Product Registry now. Etsy's Help Center already lists it as
                  required for postal imports under the eFiling rule.

                  - Ask your postal carrier what data it will need from you and
                  how you will submit it.


                  ## What we don't know yet


                  Etsy hasn't said which data fields postal carriers will ask
                  for. It also hasn't said whether shipping labels bought on
                  Etsy will pass the data automatically, or what happens to
                  parcels already in transit on January 20, 2027. Etsy says it
                  is "monitoring developments leading up to the January
                  compliance date" and will update its post as it learns more.
                sources:
                  - url: >-
                      https://community.etsy.com/forum/announcements-290/topic/new-us-customs-postal-entry-requirements-for-international-sellers-190423/
                    title: >-
                      New US customs postal entry requirements for international
                      sellers
                    publisher: Etsy
                    published_at: '2026-10-19'
                    read_at: null
                  - url: https://help.etsy.com/hc/en-us/articles/41840762260759
                    title: How to Comply with US CPSC eFiling Requirements
                    publisher: Etsy
                    published_at: '2026-07-09'
                    read_at: null
                corrections: []
        '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/news/us-entry-type-13-postal" \
              -H "Authorization: Bearer $ALURA_API_KEY"
        - lang: typescript
          label: TypeScript
          source: >-
            const res = await
            fetch('https://api.alura.io/v1/etsy/news/us-entry-type-13-postal', {
              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/news/us-entry-type-13-postal",
                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.