Tickets

The Tickets API allows you to create and manage support tickets programmatically. Use it to integrate Ping's ticketing system into your own applications, CRMs, or internal tools.


POST/v1/api/tickets

Create a ticket

Create a new support ticket for your business.

Required fields

  • Name
    subject
    Type
    string
    Description

    Short summary of the issue.

  • Name
    description
    Type
    string
    Description

    Detailed description of the issue.

Optional fields

  • Name
    priority
    Type
    string
    Description

    Ticket priority: low, medium (default), high, or critical.

  • Name
    category
    Type
    string
    Description

    Issue category (e.g., billing, technical, general).

  • Name
    channel
    Type
    string
    Description

    Source channel: api (default), whatsapp, email, phone, in_store, sms, social_media, live_chat.

  • Name
    country
    Type
    string
    Description

    Country associated with the ticket.

  • Name
    store_region
    Type
    string
    Description

    Store or region for the ticket.

  • Name
    customer_first_name
    Type
    string
    Description

    Customer's first name.

  • Name
    customer_last_name
    Type
    string
    Description

    Customer's last name.

  • Name
    customer_phone
    Type
    string
    Description

    Customer's phone number.

  • Name
    customer_email
    Type
    string
    Description

    Customer's email address.

  • Name
    preferred_language
    Type
    string
    Description

    Customer's preferred language.

  • Name
    custom_fields
    Type
    object
    Description

    Business-specific custom fields (JSON object).

  • Name
    external_ticket_id
    Type
    string
    Description

    Reference ID from an external system.

Request

POST
/v1/api/tickets
curl -X POST https://api.ping.co.zw/v1/api/tickets \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Cannot connect to Starlink",
    "description": "Customer reports intermittent connectivity since yesterday",
    "channel": "phone",
    "country": "Zimbabwe",
    "store_region": "Harare",
    "category": "technical",
    "priority": "high",
    "customer_first_name": "Tendai",
    "customer_last_name": "Moyo",
    "customer_phone": "+263775550142",
    "customer_email": "[email protected]",
    "custom_fields": {
      "starlink_account_email": "[email protected]",
      "customer_type": "SPT Retail"
    }
  }'

Response

{
  "result": "success",
  "message": "Ticket created",
  "ticket": {
    "ticketNumber": "TKT-2026-00042",
    "publicId": "TKT-A1B2C3D4",
    "subject": "Cannot connect to Starlink",
    "description": "Customer reports intermittent connectivity since yesterday",
    "status": "open",
    "priority": "high",
    "category": "technical",
    "channel": "phone",
    "country": "Zimbabwe",
    "storeRegion": "Harare",
    "customerFirstName": "Tendai",
    "customerLastName": "Moyo",
    "customerPhone": "+263775550142",
    "customerEmail": "[email protected]",
    "customFields": {
      "starlink_account_email": "[email protected]",
      "customer_type": "SPT Retail"
    },
    "dateCreated": "2026-05-04T08:00:00"
  }
}

GET/v1/api/tickets

List tickets

Retrieve a paginated list of tickets for your business. Supports filtering by status, priority, category, channel, country, and search.

Query parameters

  • Name
    status
    Type
    string
    Description

    Filter by status: open, in_progress, resolved, closed.

  • Name
    priority
    Type
    string
    Description

    Filter by priority: low, medium, high, critical.

  • Name
    category
    Type
    string
    Description

    Filter by category.

  • Name
    channel
    Type
    string
    Description

    Filter by source channel.

  • Name
    country
    Type
    string
    Description

    Filter by country.

  • Name
    store_region
    Type
    string
    Description

    Filter by store/region.

  • Name
    search
    Type
    string
    Description

    Search subject, description, customer name, email, or phone.

  • Name
    page
    Type
    integer
    Description

    Page number (default: 1).

  • Name
    per_page
    Type
    integer
    Description

    Items per page (default: 50, max: 100).

Request

GET
/v1/api/tickets
curl "https://api.ping.co.zw/v1/api/tickets?status=open&priority=high&page=1&per_page=20" \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx"

Response

{
  "result": "success",
  "tickets": [
    {
      "ticketNumber": "TKT-2026-00042",
      "subject": "Cannot connect to Starlink",
      "status": "open",
      "priority": "high",
      "category": "technical",
      "dateCreated": "2026-05-04T08:00:00"
    }
  ],
  "pagination": {
    "page": 1,
    "perPage": 20,
    "total": 1,
    "totalPages": 1
  }
}

GET/v1/api/tickets/:ticket_number

Get a ticket

Retrieve a single ticket by its ticket number.

Request

GET
/v1/api/tickets/TKT-2026-00042
curl "https://api.ping.co.zw/v1/api/tickets/TKT-2026-00042" \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx"

Response

{
  "result": "success",
  "ticket": {
    "ticketNumber": "TKT-2026-00042",
    "publicId": "TKT-A1B2C3D4",
    "subject": "Cannot connect to Starlink",
    "description": "Customer reports intermittent connectivity since yesterday",
    "status": "open",
    "priority": "high",
    "category": "technical",
    "channel": "phone",
    "country": "Zimbabwe",
    "customerFirstName": "Tendai",
    "customerLastName": "Moyo",
    "dateCreated": "2026-05-04T08:00:00",
    "dateUpdated": "2026-05-04T08:00:00"
  }
}

PUT/v1/api/tickets/:ticket_number

Update a ticket

Update any field on a ticket. Only include the fields you want to change.

Updatable fields

  • Name
    status
    Type
    string
    Description

    Update status: open, in_progress, resolved, closed.

  • Name
    priority
    Type
    string
    Description

    Update priority.

  • Name
    category
    Type
    string
    Description

    Update category.

  • Name
    resolution_notes
    Type
    string
    Description

    Final resolution notes.

  • Name
    action_taken
    Type
    string
    Description

    Description of action taken.

  • Name
    csat_score
    Type
    integer
    Description

    Customer satisfaction score (1-5).

  • Name
    tags
    Type
    string
    Description

    Comma-separated tags.

  • Name
    custom_fields
    Type
    object
    Description

    Update custom fields (merges with existing).

Request

PUT
/v1/api/tickets/TKT-2026-00042
curl -X PUT "https://api.ping.co.zw/v1/api/tickets/TKT-2026-00042" \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "resolved",
    "resolution_notes": "Replaced faulty ethernet adapter",
    "csat_score": 5
  }'

Response

{
  "result": "success",
  "message": "Ticket updated",
  "ticket": {
    "ticketNumber": "TKT-2026-00042",
    "status": "resolved",
    "resolutionNotes": "Replaced faulty ethernet adapter",
    "csatScore": 5,
    "dateUpdated": "2026-05-04T09:30:00"
  }
}

POST/v1/api/tickets/:ticket_number/comments

Add a comment

Add a comment to a ticket. Comments can be internal (agent-only) or customer-visible.

Request body

  • Name
    content
    Type
    string
    Description

    Comment text (required).

  • Name
    is_internal
    Type
    boolean
    Description

    If true, comment is only visible to agents (default: false).

  • Name
    author_type
    Type
    string
    Description

    Who is commenting: admin (default) or customer.

Request

POST
/v1/api/tickets/TKT-2026-00042/comments
curl -X POST "https://api.ping.co.zw/v1/api/tickets/TKT-2026-00042/comments" \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "Customer confirmed the issue is resolved after adapter replacement.",
    "is_internal": false
  }'

Response

{
  "result": "success",
  "message": "Comment added",
  "comment": {
    "publicId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "authorType": "admin",
    "content": "Customer confirmed the issue is resolved after adapter replacement.",
    "isInternal": false,
    "dateCreated": "2026-05-04T09:35:00"
  }
}

GET/v1/api/tickets/:ticket_number/comments

List comments

List all comments on a ticket.

Query parameters

  • Name
    include_internal
    Type
    boolean
    Description

    Include internal-only comments (default: true).

Request

GET
/v1/api/tickets/TKT-2026-00042/comments
curl "https://api.ping.co.zw/v1/api/tickets/TKT-2026-00042/comments" \
  -H "X-Ping-Api-Key: pk_live_xxxxxxxxxxxx"

Response

{
  "result": "success",
  "comments": [
    {
      "publicId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "authorType": "admin",
      "content": "Customer confirmed the issue is resolved.",
      "isInternal": false,
      "dateCreated": "2026-05-04T09:35:00"
    },
    {
      "publicId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
      "authorType": "customer",
      "content": "Yes, everything is working now. Thank you!",
      "isInternal": false,
      "dateCreated": "2026-05-04T09:40:00"
    }
  ]
}

Was this page helpful?