HelpDeskz User Guide

Welcome to HelpDeskZ

HelpDeskZ is a free PHP based software which allows you to manage your site’s support with a web-based support ticket system.

HelpDeskZ is developed with CodeIgniter PHP framework 4

Server Requirements

  • PHP version 7.2 or newer is required

  • intl extension, mbstring extension and imap extension installed.

  • MySQL (5.1+) via the MySQLi driver

Fresh Installation

Note

Be sure that your server meets the HelpDeskZ requirements.

Configuration file

  • Unzip the HelpDeskZ script package.

  • Browse to directory /hdz/app/Config/ and rename the file Helpdesk.new.php to Helpdesk.php.

  • Edit this file and complete the required information (Site URL, database information, etc).

Install it!

  • Connect with FTP to the public folder of your server.

  • Upload all HelpDeskZ in the directory that you will install it (domain directory or subdomain).

  • Open /install in your browser, for example http://support.mysite.com/install (modify your URL).

  • The HelpDeskZ setup script will run. Click INSTALL HELPDESKZ and follow the instructions through installation wizard.

  • Now it’s time to setup your help desk! Open the staff panel in your browser, for example: http://support.mysite.com/staff Use the login details that you entered in the installation process.

  • Take some time and get familiar with all the available settings. Most should be self-explanatory.

  • Thanks for using HelpDeskZ!

Note

If you want to make a new installation again, then be sure you removed the file /hdz/writable/cache/instal.config to unlock the installation wizard.

Upgrading from previous version

Please read the upgrade notes corresponding to the version you are upgrading from.

Upgrading from 1.x to 2.0

Note

v2.x was rewritten from scratch so the attachments from tickets will be lost in this new version.

The upgrade process is very simple and just follow these steps:

Configuration file

  • Unzip the HelpDeskZ script package.

  • Browse to directory /hdz/app/Config/ and rename the file Helpdesk.new.php to Helpdesk.php.

  • Edit this file and complete the required information (Site URL, database information, etc).

Update your site

  • Upload all files of v2.x to your HelpDeskZ directory.

  • Open /install in your browser, for example http://support.mysite.com/install (modify your URL).

  • The HelpDeskZ setup script will run. Click UPGRADE HELPDESKZ and follow the instructions through upgrade wizard.

  • Now it’s time to setup your help desk! Open the staff panel in your browser, for example: http://support.mysite.com/staff

  • Take some time and get familiar with all the available settings. Most should be self-explanatory.

  • Thanks for using HelpDeskZ!

Upgrading from 2.0 to 2.0.1

The upgrade process is very simple and just upload these files:

  • /index.php

  • /hdz/*.*

Update your site

  • Open /install in your browser, for example http://support.mysite.com/install (modify your URL).

  • The HelpDeskZ setup script will run. Click `Upgrade my HelpDeskZ´ and follow the instructions through upgrade wizard.

  • Thanks for using HelpDeskZ!

HelpDeskZ Repositories

The HelpDeskZ is an open source project and repository is hosted in Github

Email Piping

HelpDeskZ supports email piping, this allows the auto-creation of tickets from incoming emails to a set email address.

Email configuration

  • In Staff Panel, go to Setup -> Email addresses.

  • Add a new email address or edit the email for Piping configuraiton.

  • Go to Incoming tab and select Pipe

Email forwarding

  • In your hosting panel, go to email forwarding.

  • Enter the email address that you configured in your staff panel.

  • For destination, select Pipe

  • Enter the path to pipe.php, for example /public_html/helpdeskz/pipe.php

Note

To make it work correctly, verify that pipe.php has executable permissions (CHMOD 755)

IMAP Fetching

HelpDeskZ supports IMAP fetching, this allows the auto-creation of tickets from incoming emails to a set email address.

Email configuration

  • In Staff Panel, go to Setup -> Email addresses.

  • Add a new email address or edit the email for IMAP configuration.

  • Go to Incoming tab and select IMAP

  • Complete your configuration with the Host, Port, Username and Password

Cron configuration

  • Add a cron job to execute your command every minute or 5 minutes. It depends the timeframe you want to check emails.

  • Command: /usr/local/bin/php /PATH_TO_HELPDESK/index.php imap_fetcher

Note

Many hosts uses the IMAP port 993 by default

API activation

  • In Staff Panel, go to Setup -> API configuraiton.

  • Create a new API.

  • Select the permissions for your new API.

  • Enter the IP that will connect with your API.

  • After creation, the system will generate your API token.

Authentication and authorization

All endpoints require authentication.

Token

The Authorization HTTP header can be specified with Token: <your-access-token>.

Users

Create a new user

POST /api/users/create
Query Parameters
  • fullname (string) – Client’s Full Name

  • email (string) – Client’s Email address

  • notify (boolean) – 1 = Client will receive an email with login information

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/users/ \
-F 'fullname="John Doe"' \
-F 'email="[email protected]"' \
-F 'notify="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'http://helpdeskz.web/api/users/create',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('fullname' => 'John Doe','email' => '[email protected]','notify' => '1'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "user_id": 1,
    "message": "User account was created."
}

Retrieve a list of all users

GET /api/users/
Query Parameters
  • email (string) – Find a client by email

  • page (numeric) – Page query is used to view next page

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/users

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/users',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "total_users": 2,
    "total_pages": 1,
    "users": [
        {
            "id": "2",
            "fullname": "John Doe",
            "email": "[email protected]"
        },
        {
            "id": "1",
            "fullname": "John Doe",
            "email": "[email protected]"
        }
    ]
}

Retrieve details of user by ID

GET /api/users/show/<user_id>

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/users/show/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/users/show/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "user_data": {
        "id": "1",
        "fullname": "John Doe",
        "email": "[email protected]"
    }
}

Update user account

POST /api/users/update/<user_id>
Query Parameters
  • new_email (string) – New client’s email address

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/users/update/1 \
-F 'new_email="[email protected]"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/users/update/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('new_email' => '[email protected]'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Email was changed."
}

Delete user account

POST /api/users/delete/<user_id>

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/users/delete/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/users/delete/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Account was removed."
}

Departments

Create a new department

POST /api/departments/create
Query Parameters
  • name (string) – Department name

  • private (boolean) – 0=public department, 1=private department

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/departments/create/ \
-F 'name="Bug report"' \
-F 'private="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments/create/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('name' => 'Bug report','private' => '0'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "department_id": 4,
    "message": "Department was created."
}

Retrieve a list of all departments

GET /api/departments/

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/departments

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "departments": [
        {
            "id": "1",
            "name": "General",
            "private": "0"
        },
        {
            "id": "2",
            "name": "Advertising",
            "private": "0"
        },
        {
            "id": "3",
            "name": "Sales",
            "private": "0"
        },
        {
            "id": "4",
            "name": "Bug report",
            "private": "0"
        }
    ]
}

Retrieve details of department by ID

GET /api/departments/show/<user_id>

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/departments/show/4

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments/show/4',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "department": {
        "id": "4",
        "name": "Bug report",
        "private": "0"
    }
}

Update department

POST /api/departments/update/<department_id>
Query Parameters
  • name (string) – New department name

  • private (boolean) – 0=public department, 1=private department

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/departments/update/4 \
-F 'name="Issues report"'
-F 'private="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments/update/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('name' => 'Issues report', 'private' => '0'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Department was updated."
}

Delete department

POST /api/departments/delete/<department_id>

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/departments/delete/4

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments/delete/4',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Department and its tickets were removed."
}

Note

With this action, all tickets from this department will be removed.

Support Tickets

Create a new ticket

POST /api/tickets/create
Query Parameters
  • opener (string) – [user,staff] The person who is opening this ticket

  • user_id (numeric) – User ID

  • staff_id (numeric) – Staff ID, it is required if opener is `staff´

  • department_id (numeric) – Department ID

  • subject (string) – Ticket subject

  • body (string) – Ticket message

  • attachment[] (file) – (optional) Attachment file

  • notify (boolean) – 1=User will receive an email with ticket information

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/tickets/create/ \
-F 'opener="staff"' \
-F 'user_id="1"' \
-F 'staff_id="1"' \
-F 'department_id="4"' \
-F 'subject="Hello world"' \
-F 'body="This is a test message."' \
-F 'attachment[][email protected]"/home/andres/Images/hdz.png"' \
-F 'notify="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'ttps://demo.helpdeskz.com/api/tickets/create/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('opener' => 'user','user_id' => '1','staff_id' => '1','department_id' => '4','subject' => 'Hello world','body' => 'This is a test message.','attachment[]'=> new CURLFILE('/home/andres/Images/hdz.png'),'notify' => '0'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "ticket_id": 1,
    "message": "Ticket was created."
}

Retrieve a list of all tickets

GET /api/tickets/
Query Parameters
  • department_id (numeric) – (optional) Department ID

  • user_id (numeric) – (optional) User ID

  • status_id (numeric) – (optional) 1: Open, 2: Answered, 3: Awaiting reply, 4: In progress, 5: Closed

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/tickets

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/tickets',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "total_tickets": 1,
    "pages": 1,
    "tickets": [
        {
            "id": "1",
            "user_id": "1",
            "department_id": "4",
            "subject": "Hello world",
            "date": "1611619574",
            "last_update": "1611619936",
            "status": "4",
            "replies": "0",
            "user_fullname": "John Doe",
            "department_name": "Issues report"
        }
    ]
}

Retrieve details of ticket by ID

GET /api/tickets/show/<ticket_id>

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/tickets/show/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/tickets/show/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "ticket": {
        "id": "1",
        "user_id": "1",
        "department_id": "4",
        "subject": "Hello world",
        "date": "1611619574",
        "last_update": "1611619574",
        "status": "1",
        "replies": "0",
        "user_fullname": "John Doe",
        "department_name": "Issues report"
    }
}

Update ticket

POST /api/tickets/update/<ticket_id>
Query Parameters
  • department_id (numeric) – (optional) Department ID

  • status_id (numeric) – (optional) 1: Open, 2: Answered, 3: Awaiting reply, 4: In progress, 5: Closed

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/tickets/update/1 \
-F 'name="Issues report"'
-F 'private="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/departments/update/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('name' => 'Issues report', 'private' => '0'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Ticket was updated."
}

Delete department

POST /api/tickets/delete/<ticket_id>

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/tickets/delete/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/tickets/delete/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Ticket was removed."
}

Note

With this action, ticket and its messages and attachments will be be removed.

Ticket Messages

Add a new message

POST /api/messages/create
Query Parameters
  • ticket_id (numeric) – Ticket ID

  • replier (string) – [staff,user] The person who is replying this ticket

  • staff_id (numeric) – Staff ID, required only if replier is `staff´

  • message (string) – Message content

  • attachment[] (file) – (optional) Attachment file

  • close (boolean) – 1=Close ticket after reply, this is only valid if replier is `staff´

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/messages/create/ \
-F 'ticket_id="1"' \
-F 'replier="staff"' \
-F 'staff_id="1"' \
-F 'message="Answering a ticket."' \
-F 'attachment[][email protected]"/home/andres/Images/homebg.jpg"' \
-F 'close="0"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'ttps://demo.helpdeskz.com/api/messages/create/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('ticket_id' => '1','replier' => 'staff','staff_id' => '1','message' => 'Answering a ticket','attachment[]'=> new CURLFILE('/home/andres/Images/homebg.jpg'),'close' => '0'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "Message was created and added to ticket."
}

Retrieve messages from a ticket

GET /api/messages/show/<ticket_id>/

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/messages/show/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/messages/show/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "pages": 1,
    "total_replies": 3,
    "messages": [
        {
            "id": "3",
            "date": "1611619936",
            "customer": "1",
            "staff_id": "0",
            "message": "This is user answer"
        },
        {
            "id": "2",
            "date": "1611619889",
            "customer": "0",
            "staff_id": "1",
            "message": "Answering a ticket"
        },
        {
            "id": "1",
            "date": "1611619574",
            "customer": "1",
            "staff_id": "0",
            "message": "This is a test message."
        }
    ]
}

Attachments

Retrieve list of attachments

GET /api/attachments/
Query Parameters
  • ticket_id (numeric) – (optional) Ticket ID

  • msg_id (numeric) – (optional) Message ID

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/attachments/

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/attachments/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "files": [
        {
            "id": "2",
            "name": "homebg.jpg",
            "filetype": "image/jpeg",
            "msg_id": "2",
            "size": "116748"
        },
        {
            "id": "3",
            "name": "homebg.jpg",
            "filetype": "image/jpeg",
            "msg_id": "3",
            "size": "116748"
        }
    ]
}

Retrieve file content from an attachment

GET /api/attachments/show/<attachment_id>

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/attachments/show/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/attachments/show/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "name": "hdz.png",
    "filetype": "image/png",
    "size": "13497",
    "content": "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"
}

Delete attachment

POST /api/attachments/delete/<attachment_id>

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/attachments/delete/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/attachments/delete/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "File was removed from servers."
}

Staff

Retrieve a list of all staff users

GET /api/staff/
Query Parameters
  • username (string) – Find a user by username

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/staff

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/staff',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "users": [
        {
            "id": "1",
            "username": "admin",
            "fullname": "Andres Mendoza",
            "email": "[email protected]",
            "registration": "1611613586",
            "last_login": "1611618058"
        }
    ]
}

Retrieve details of staff user by ID

GET /api/staff/show/<staff_id>

Example request:

cURL

curl \
-H 'Token: <token>' https://demo.helpdeskz.com/api/staff/show/1

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/staff/show/1',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "staff_data": {
        "id": "1",
        "username": "admin",
        "fullname": "Andres Mendoza",
        "email": "[email protected]",
        "registration": "1611613586",
        "last_login": "1611618058"
    }
}

Staff Authentication

POST /api/staff/auth
Query Parameters
  • username (string) – Staff username

  • password (string) – Staff password

  • two_factor (numeric) – Two-Factor Authentication code, this is required if two-factor authentication is active in account

  • ip_address (string) – IP Address of client

Example request:

cURL

curl \
-X POST \
-H 'Token: <token>' https://demo.helpdeskz.com/api/staff/auth/ \
-F 'username="admin"' \
-F 'password="demo123"' \
-F 'two_factor="815435"' \
-F 'ip_address="127.0.0.1"'

PHP

<?php
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://demo.helpdeskz.com/api/staff/auth/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => array('username' => 'admin','password' => 'demo123','two_factor' => '815435','ip_address' => '127.0.0.1'),
  CURLOPT_HTTPHEADER => array(
    'Token: <token>'
  ),
));
$response = curl_exec($curl);
curl_close($curl);

Example response:

{
    "success": 1,
    "message": "You have been logged in."
}

Last revision: January 26th, 2021