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

# Reopen a support ticket

> Opens a resolved ticket again: `open` where the buyer wrote last, else `answered`. One that is not resolved is left as it is.

Needs the `tickets.write` permission (Answer Support Tickets).



## OpenAPI

````yaml /api-reference/openapi.json post /stores/{storeId}/support-tickets/{ticketId}/reopen
openapi: 3.1.0
info:
  title: Shoply API
  version: '1'
  description: >-
    Everything a store's own server can do with a secret API key: its catalogue,
    orders, customers, marketing, finance and the rest of what the dashboard
    does. And the Customer API, which a buyer's own device asks with a token of
    theirs.
servers:
  - url: https://api.shoply.gg/v1
security:
  - apiKey: []
tags:
  - name: API key
  - name: Store
  - name: Domain
  - name: Payment methods
  - name: Analytics
  - name: Storefronts
  - name: Storefront code
  - name: Payment Routing
  - name: Custom payment methods
  - name: Products
  - name: Product pictures
  - name: Stock
  - name: Categories
  - name: Upsells
  - name: Subscriptions
  - name: Orders
  - name: Invoices
  - name: Reviews
  - name: Coupons
  - name: Coupon categories
  - name: Coupon pop-up
  - name: Sales
  - name: Blog
  - name: Search settings
  - name: Redirects
  - name: Sitemap
  - name: Cart Recovery
  - name: Email Marketing
  - name: Email Templates
  - name: Customers
  - name: Affiliates
  - name: Support Tickets
  - name: Blacklist
  - name: Fraud protection
  - name: Disputes
  - name: Finance
  - name: Tax
  - name: Expenses
  - name: Expense setup
  - name: API requests
  - name: Webhook endpoints
  - name: Webhook deliveries
  - name: Customer API
paths:
  /stores/{storeId}/support-tickets/{ticketId}/reopen:
    post:
      tags:
        - Support Tickets
      summary: Reopen a support ticket
      description: >-
        Opens a resolved ticket again: `open` where the buyer wrote last, else
        `answered`. One that is not resolved is left as it is.


        Needs the `tickets.write` permission (Answer Support Tickets).
      operationId: tickets.reopen
      parameters:
        - name: storeId
          in: path
          required: true
          description: >-
            The store's ID. A key reaches the store it was made in: `GET /key`
            answers which.
          schema:
            type: string
        - name: ticketId
          in: path
          required: true
          description: The ticket, by its ID.
          schema:
            type: string
        - $ref: '#/components/parameters/IdempotencyKey'
      responses:
        '200':
          description: It worked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    nullable: true
                  code:
                    nullable: true
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                      email:
                        type: string
                      customerId:
                        nullable: true
                      orderId:
                        type: string
                      subject:
                        type: string
                      status:
                        type: string
                      messages:
                        type: integer
                      pictures:
                        type: integer
                      lastMessageAt:
                        type: string
                      lastFrom:
                        type: string
                      lastLine:
                        type: string
                      unread:
                        type: boolean
                      firstReplyAt:
                        type: string
                      answeredAt:
                        type: string
                      resolvedAt:
                        nullable: true
                      resolvedBy:
                        nullable: true
                      createdAt:
                        type: string
                      updatedAt:
                        type: string
                      conversation:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            from:
                              type: string
                            body:
                              type: string
                            html:
                              type: string
                            pictures:
                              type:
                                - array
                                - object
                            createdAt:
                              type: string
                      canReopenUntil:
                        nullable: true
                      limits:
                        type: object
                        properties:
                          body:
                            type: integer
                          subject:
                            type: integer
                          picturesPerMessage:
                            type: integer
                          picturesPerTicket:
                            type: integer
                          pictureBytes:
                            type: integer
                      customer:
                        type: object
                        properties:
                          id:
                            nullable: true
                          email:
                            type: string
                          tags:
                            type:
                              - array
                              - object
                      order:
                        type: object
                        properties:
                          id:
                            type: string
                          status:
                            type: string
                          amount:
                            type: string
                      orders:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            status:
                              type: string
                            amount:
                              type: string
                            products:
                              type: array
                              items:
                                type: string
                            createdAt:
                              type: string
                      'on':
                        type: boolean
              example:
                success: true
                message: null
                code: null
                data:
                  id: 8e243e4e-58e7-4d63-a9c3-ef057672a8fd
                  email: grace@example.com
                  customerId: null
                  orderId: bc44febe-0f25-4076-92eb-03a5045a57e7
                  subject: Key says it is already in use
                  status: open
                  messages: 3
                  pictures: 0
                  lastMessageAt: '2026-10-22T16:20:19Z'
                  lastFrom: buyer
                  lastLine: That worked, thank you.
                  unread: false
                  firstReplyAt: '2026-10-22T16:20:19Z'
                  answeredAt: '2026-10-22T16:20:19Z'
                  resolvedAt: null
                  resolvedBy: null
                  createdAt: '2026-10-22T16:20:19Z'
                  updatedAt: '2026-10-22T16:20:19Z'
                  conversation:
                    - id: cc08e8db-7064-4c32-9883-fe156fbe07f1
                      from: buyer
                      body: >-
                        I bought Northwind Pro this morning and the key says it
                        is already in use.
                      html: >-
                        <p>I bought Northwind Pro this morning and the key says
                        it is already in use.</p>
                      pictures: []
                      createdAt: '2026-10-22T16:20:19Z'
                    - id: fb5187b3-26e9-4f1a-bfba-265d93cb8a51
                      from: store
                      body: >-
                        Sorry about that. Open your order in the customer panel
                        and press Reset Key, then try it again.
                      html: >-
                        <p>Sorry about that. Open your order in the customer
                        panel and press Reset Key, then try it again.</p>
                      pictures: []
                      createdAt: '2026-10-22T16:20:19Z'
                  canReopenUntil: null
                  limits:
                    body: 500
                    subject: 100
                    picturesPerMessage: 3
                    picturesPerTicket: 25
                    pictureBytes: 5242880
                  customer:
                    id: null
                    email: grace@example.com
                    tags: []
                  order:
                    id: bc44febe-0f25-4076-92eb-03a5045a57e7
                    status: completed
                    amount: $9.99
                  orders:
                    - id: e9ae5h0p1ye-cd7fded3be6-1006662
                      status: cancelled
                      amount: $9.99
                      products:
                        - Northwind Pro
                      createdAt: '2026-10-22T16:20:19Z'
                    - id: bc44febe-0f25-4076-92eb-03a5045a57e7
                      status: completed
                      amount: $9.99
                      products:
                        - Northwind Pro
                      createdAt: '2026-10-22T16:20:19Z'
                  'on': true
        '401':
          $ref: '#/components/responses/NoKey'
        '403':
          $ref: '#/components/responses/NotAllowed'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Refused'
        '429':
          $ref: '#/components/responses/TooMany'
      x-codeSamples:
        - lang: javascript
          label: Node.js
          source: |
            import Shoply from "@shoplygg/node";

            const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });

            const result = await shoply.tickets.reopen("TICKET_ID");
        - lang: php
          label: PHP
          source: |
            <?php

            require 'vendor/autoload.php';

            $shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);

            $result = $shoply->tickets->reopen('TICKET_ID');
        - lang: python
          label: Python
          source: |
            import shoply

            client = shoply.Client()  # reads SHOPLY_API_KEY

            result = client.tickets.reopen("TICKET_ID")
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        A word of your own for this one change, up to 180 letters, digits, dots,
        dashes, underscores and colons. Sent again with the same key, the
        request is not carried out twice: the first answer comes back, with
        `Idempotent-Replay: true`.
      schema:
        type: string
  responses:
    NoKey:
      description: >-
        No API key was sent, or the one sent is not a live key:
        `api_key_required`, `invalid_api_key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotAllowed:
      description: >-
        The key is real and may not do this: `missing_scope` (with
        `requiredScope`), `ip_not_allowed`, `account_unavailable`, or
        `dashboard_only` for something only a person in the dashboard may do.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotFound:
      description: >-
        There is no such thing in this store: `not_found`. A store that is not
        the key's own is answered the same way.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    Refused:
      description: >-
        The request was understood and not carried out. `validation_failed` says
        what is wrong with each field under `errors`; other codes are the
        route's own.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    TooMany:
      description: >-
        The key has used up its budget for now: `rate_limited`. `Retry-After`
        says how many seconds to wait.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
  schemas:
    Refusal:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          description: What is wrong, in words for a person.
        code:
          type: string
          description: What is wrong, as a word that does not change.
        data:
          nullable: true
        errors:
          type: object
          description: >-
            For `validation_failed`: what is wrong with each field, by the
            field's name.
          additionalProperties:
            type: string
      required:
        - success
        - message
        - code
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        A secret API key, made under Developers in the dashboard:
        `Authorization: Bearer shoply_sk_...`

````

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