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

# Reply as Staff

> Send a reply to a ticket as a staff member

<Warning>
  **Requires Premium or Enterprise subscription**
</Warning>

## Overview

Send a reply to a ticket as a staff member. The ticket must be claimed by you before you can reply.

**Important Notes:**

* You must claim the ticket before replying
* Cannot reply to game reports
* The reply is added to the ticket's content with type "staff\_message"

## Path Parameters

<ParamField path="ticketId" type="string" required>
  Ticket ID
</ParamField>

## Request Body

<ParamField body="content" type="string" required>
  Reply message content
</ParamField>

<ParamField body="staffUserId" type="integer" required>
  UserId of the staff member sending the reply
</ParamField>

## Response

<ResponseField name="success" type="boolean">
  Whether the request was successful
</ResponseField>

<ResponseField name="data" type="object">
  <Expandable title="properties">
    <ResponseField name="message" type="string">
      Success message
    </ResponseField>
  </Expandable>
</ResponseField>

## Example

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST "https://api.series.hr/tickets/TICKET-1234567890-ABCD/reply" \
    -H "apikey: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "content": "I'll help you with your ranking. Please join the training center.",
      "staffUserId": 987654321
    }'
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch('https://api.series.hr/tickets/TICKET-1234567890-ABCD/reply', {
    method: 'POST',
    headers: {
      'apikey': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      content: "I'll help you with your ranking. Please join the training center.",
      staffUserId: 987654321
    })
  });

  const data = await response.json();
  ```

  ```lua Lua (Roblox) theme={null}
  local HttpService = game:GetService("HttpService")

  local response = HttpService:RequestAsync({
      Url = "https://api.series.hr/tickets/TICKET-1234567890-ABCD/reply",
      Method = "POST",
      Headers = {
          ["apikey"] = "YOUR_API_KEY",
          ["Content-Type"] = "application/json"
      },
      Body = HttpService:JSONEncode({
          content = "I'll help you with your ranking. Please join the training center.",
          staffUserId = 987654321
      })
  })

  local data = HttpService:JSONDecode(response.Body)
  ```

  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.series.hr/tickets/TICKET-1234567890-ABCD/reply',
      headers={
          'apikey': 'YOUR_API_KEY',
          'Content-Type': 'application/json'
      },
      json={
          'content': "I'll help you with your ranking. Please join the training center.",
          'staffUserId': 987654321
      }
  )

  data = response.json()
  ```
</CodeGroup>

## Response Example

```json theme={null}
{
  "success": true,
  "data": {
    "message": "Reply sent successfully"
  }
}
```

## Error Responses

<AccordionGroup>
  <Accordion title="400 - Not Claimed">
    ```json theme={null}
    {
      "success": false,
      "error": {
        "code": 400,
        "message": "You must claim this ticket before replying"
      }
    }
    ```
  </Accordion>

  <Accordion title="403 - Game Report">
    ```json theme={null}
    {
      "success": false,
      "error": {
        "code": 403,
        "message": "Cannot reply to game reports"
      }
    }
    ```
  </Accordion>

  <Accordion title="403 - Premium Required">
    ```json theme={null}
    {
      "success": false,
      "error": {
        "code": 403,
        "message": "Tickets module requires a Premium or Enterprise subscription"
      }
    }
    ```
  </Accordion>

  <Accordion title="404 - Ticket Not Found">
    ```json theme={null}
    {
      "success": false,
      "error": {
        "code": 404,
        "message": "Ticket not found"
      }
    }
    ```
  </Accordion>
</AccordionGroup>

## Rate Limit

**25 requests per second** per API key


## OpenAPI

````yaml POST /tickets/{ticketId}/reply
openapi: 3.0.0
info:
  title: Series API
  version: 1.0.0
  description: >-
    Series API — a free REST API by Sailboat Games, LLC that lets Roblox
    communities programmatically manage workspaces, staff, sessions, time-off
    and activity data.
  contact:
    name: Sailboat Games, LLC.
    email: admin@sailboatgames.com
servers:
  - url: https://api.series.hr
    description: Production API
security:
  - ApiKeyAuth: []
paths:
  /tickets/{ticketId}/reply:
    post:
      tags:
        - Tickets
      summary: Reply as staff
      description: >-
        Send a reply to a ticket as a staff member. Ticket must be claimed
        first. Requires Premium or Enterprise subscription.
      parameters:
        - name: ticketId
          in: path
          required: true
          schema:
            type: string
          description: Ticket ID
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - content
                - staffUserId
              properties:
                content:
                  type: string
                  description: Reply message content
                staffUserId:
                  type: integer
                  description: UserId of the staff member
      responses:
        '200':
          description: Reply sent successfully
        '400':
          description: Ticket not claimed or invalid request
        '401':
          description: API key is required
        '403':
          description: Cannot reply to game reports or insufficient permissions
        '404':
          description: Ticket not found
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: >-
        Pass your API key in the `apikey` header. Alternatively, the `x-api-key`
        header is also accepted.

````