Repairrabbit API Documentation
API Endpoint
https://demo.repairrabbit.coThis API blueprint is subject to change due to technology restrictions, performance optimizations or changing requirements.
Environments
Our Demo API is located at:
https://demo.repairrabbit.co
Versioning
This API uses versioning as identified in the URI. Newer versions MAY introduce breaking changes.
/api/v2
If you are currently using the
v1of the API, you should read the Upgrade Guide to see what changed.
Authentication
-
This API uses
JWT TOKENauthentication. -
Token MUST be provided for each request that requires authentication.
-
The jwt token will respond for 24 hour after creating.
-
You can request a Token by using api for login (e.g api/v1/login).
Example Header
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlfa2V5IjoiZjE5NzMzODEyNjZjN2NiMTgyZDk5ZDIxZWI2YTUxZDc5MThkZDZiZiIsInN1YiI6MSwiaXNzIjoiaHR0cDovL3JlcGFpcnJhYmJpdC50ZXN0L2FwaS92MS9sb2dpbiIsImlhdCI6MTUyODQ0MDE3NiwiZXhwIjoxNTI4NDQzNzc2LCJuYmYiOjE1Mjg0NDAxNzYsImp0aSI6InRmM215V0ZjbE5KdWlzcFgifQ.xz5wsg41KKO8H82zFzHb4jtYy4aD-PCvVZKKyggemBg
HTTP Methods
This API uses HTTP verbs (methods) as following:
-
GET- Read - used to read (or retrieve) a representation of a resource, -
POST- Create - used to create new resources. -
PUT- Update - used to update an existing resource identified by a URI. -
DELETE- Delete - used to delete a resource identified by a URI.
Media Type
Where applicable this API MUST use the JSON media-type. Requests with a message-body are using plain JSON to set or update resource states.
Content-type: application/json and Accept: application/json headers SHOULD be set on all requests if not stated otherwise.
Notational Conventions
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC2119.
Representatin of Date and Time
All exchange of date and time-related data MUST be done according to ISO 8601 standard and stored in UTC.
When returning date and time-related data YYYY-MM-DDThh:mm:ss.SSSZ format MUST be used.
Status Codes and Errors
This API uses HTTP status codes to communicate with the API consumer.
-
200 OK- Response to a successful GET, PUT, PATCH or DELETE. -
201 Created- Response to a POST that results in a creation. -
204 No Content- Response to a successful request that won’t be returning a body (like a DELETE request). -
400 Bad Request- Malformed request; form validation errors. -
401 Unauthorized- When no or invalid authentication details are provided. -
403 Forbidden- When authentication succeeded but authenticated user doesn’t have access to the resource. -
404 Not Found- When a non-existent resource is requested. -
405 Method Not Allowed- Method not allowed. -
406 Not Acceptable- Could not satisfy the request. -
415 Unsupported Media Type- Unsupported media type in request.
Error response
This API returns both, machine-readable error codes and human-readable error messages in response body when an error is encountered.
Authentication ¶
User login ¶
Get user login.
Headers
Content-Type: application/jsonBody
{
"login": "[email protected]",
"password": "QXR0mi38a2"
}Schema
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"properties": {
"login": {
"type": "string",
"description": "User email address"
},
"password": {
"type": "string",
"description": "User password"
}
},
"required": [
"login",
"password"
]
}Headers
Content-Type: application/jsonBody
{
"success": true,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6Ly9yZXBhaXJyYWJiaXQudGVzdC9hcGkvdjEvbG9naW4iLCJpYXQiOjE1MjY2MzQwMTQsImV4cCI6MTUyNjYzNzYxNCwibmJmIjoxNTI2NjM0MDE0LCJqdGkiOiJnRkVjcUVFS1c0cEFVWTdoIn0.gS3U8tIP-gGNMdevYTn2oPFOlV6XunRESqg3KwKchbQ",
"user_id": 1,
"username": "Admin",
"email": "[email protected]",
"api_key": "f1973381266c7cb182d99d21eb6a51d7918dd6bf",
"role": 1,
"password": true,
"message": "Success",
"href": "api/v1/login"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"email": [
"The email field is required."
],
"password": [
"The password field is required."
]
},
"href": "api/v1/login"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"User not found."
],
"href": "api/v1/login"
}User LoginPOST/api/v1/login
Allows to retrieve a valid jwt token for email and password.
Endpoint information
| Requires authentication | No |
User logout ¶
Get user logout.
Headers
Content-Type: application/jsonHeaders
Content-Type: application/jsonBody
{
"success": true,
"message": "User logged out Successfully",
"href": "api/v1/logout"
}User profile ¶
Get user detail.
Headers
Content-Type: application/jsonHeaders
Content-Type: application/jsonBody
{
"id": 2,
"name": "StoreAdmin",
"role_id": 1,
"email": "[email protected]",
"api_key": "196e4aee9e2348cc9e690af72618a262b6248956",
"created_by": 1,
"modified_by": 1,
"created_at": "2018-05-18 10:44:01",
"updated_at": "2018-05-18 11:37:39"
}User Reset Password ¶
Get user reset password.
Headers
Content-Type: application/jsonBody
{
"current_password": "123245678",
"new_password": "123245679",
"new_password_confirmation": "123245679"
}Schema
{
"type": "object",
"properties": {
"current_password": {
"type": "string",
"description": "The password for the user"
},
"new_password": {
"type": "string",
"description": "The password for the user",
"rule": "The min length is 6 and the max length is 30"
},
"new_password_confirmation": {
"type": "string",
"description": "The password for the user",
"rule": "This must be same as new_password value"
}
},
"required": [
"current_password",
"new_password",
"new_password_confirmation"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlfa2V5IjoiZjE5NzMzODEyNjZjN2NiMTgyZDk5ZDIxZWI2YTUxZDc5MThkZDZiZiIsInN1YiI6MSwiaXNzIjoiaHR0cDovL3JlcGFpcnJhYmJpdC50ZXN0L2FwaS92MS9yZXNldC1wYXNzd29yZCIsImlhdCI6MTUyOTY0ODYwOSwiZXhwIjoxNTI5NzM1MDA5LCJuYmYiOjE1Mjk2NDg2MDksImp0aSI6Img4c21Yd2ozM1czVlhZVjQifQ.lbSgogjdnQP4IS4guleV1P--d-GtvcTtPPv2Q27V6VI",
"message": "Password changed successfully.",
"href": "api/v1/reset-password"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"message": {
"current_password": [
"The current password field is required."
],
"new_password": [
"The new password field is required."
]
},
"href": "api/v1/reset-password"
}User Forgot Password ¶
Update user password.
Headers
Content-Type: application/jsonBody
{
"email": "[email protected]",
}Schema
{
"type": "object",
"properties": {
"email": {
"type": "email",
"description": "The email the employee",
"rule": "The min length is 8 and the max length is 60 and must exists from available users"
}
},
"required": [
"email"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Password updated successfully, please check your mail.",
"href": "api/v1/forgot-password"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"message": {
"email": [
"The email field is required."
]
},
"href": "api/v1/forgot-password"
}Other apis ¶
Gets all device category ¶
Retrieves a list of device_categories
Headers
Content-Type: application/jsonBody
{
"success": true,
"device_categories": {
"current_page": 1,
"data": [
{
"id": 2,
"name": "Samsung",
"description": "Samsung repair",
"image": null,
"created_by": 1,
"created_at": "2018-06-14 15:06:18",
"modified_by": 1,
"updated_at": "2018-06-14 15:06:18",
"image_url": "http://repairrabbit.test/storage/images/device_category_images/demo-reparatie-629ixv.jpg"
},
{
"id": 1,
"name": "iPhone",
"description": "iPhone repair",
"image": null,
"created_by": 1,
"created_at": "2018-06-14 15:06:18",
"modified_by": 1,
"updated_at": "2018-06-14 15:06:18",
"image_url": "http://repairrabbit.test/storage/images/device_category_images/demo-reparatie-624ixv.jpg"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/device_categories",
"per_page": 10,
"prev_page_url": null,
"to": 2,
"total": 2
},
"meta": {
"orderBy": "name",
"sortOrder": "desc",
"items_per_page": 10,
"deviceCategoriesItemList": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/device_categories"
}Gets all device categoryGET/api/v1/admin/device_categories{?order,orderBy,perPage,search,page,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: name, id, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- store_id
number(optional) Example: 1Gives only selected store’s device categories.
Gets all device ¶
Retrieves a list of devices
Headers
Content-Type: application/jsonBody
{
"success": true,
"devices": {
"current_page": 1,
"data": [
{
"id": 2,
"isActive": 1,
"name": "Samsung Galaxy J2",
"description": "Samsung Galaxy",
"repair_duration": 34,
"category_id": 2,
"deviceCategory": "Samsung",
"image_url": "http://repairrabbit.test/storage/images/device_images/device_iphone_test-32DiZ1.jpg",
"is_product_added": true
},
{
"id": 1,
"isActive": 1,
"name": "iPhone 5",
"description": "Apple iPhone 5",
"repair_duration": 30,
"category_id": 1,
"deviceCategory": "iPhone",
"image_url": "http://repairrabbit.test/storage/images/device_images/device_iphone_test-32DiZ1.jpg",
"is_product_added": true
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/devices",
"per_page": 10,
"prev_page_url": null,
"to": 2,
"total": 2
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": 10,
"devicesItemList": [
10,
20,
30,
40,
50
],
"searchString": "",
"device_status_options": [
"All Devices",
"Active",
"Inactive"
],
"device_status_filter_id": ""
},
"message": "",
"href": "api/v1/devices"
}Gets all deviceGET/api/v1/devices{?order,orderBy,perPage,search,page,filterStatus,device_category_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: device_name, category_name, id, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 01 : active status of device & 0 : inactive status of device
- device_category_id
number(optional) Example: 1Gives only selected device_category’s devices.
Gets all store ¶
Retrieves a list of Store
Headers
Content-Type: application/jsonBody
{
"success": true,
"stores": {
"current_page": 1,
"data": [
{
"id": 1,
"address": "Rajkot",
"address_display": "University Road",
"phone": "085-7602727",
"opening_hour": "08:30:00",
"closing_hour": "12:30:00",
"open_days": "1,2,3,4,5,6,7",
"email": "[email protected]",
"address_lat": "52.385991",
"address_lon": "4.838108",
"small_img": "",
"colour": "#3b5998",
"status": 1,
"created_by": 1,
"created_at": "2018-06-11 18:48:35",
"modified_by": null,
"updated_at": "2018-06-11 18:48:35",
"small_image_url": "http://repairrabbit.test/storage/images/store_map_images/maxresdefault-T6nMEj.jpg"
}
],
"from": 1,
"last_page": 2,
"next_page_url": "http://repairrabbit.test/api/v1/stores?page=2",
"path": "http://repairrabbit.test/api/v1/stores",
"per_page": "1",
"prev_page_url": null,
"to": 1,
"total": 2
},
"meta": {
"orderBy": "name",
"sortOrder": "desc",
"items_per_page": "1",
"storeItemListOptions": [
10,
20,
30,
40,
50
],
"searchString": "",
"filterStatus": "",
"store_status_options": [
"All Stores",
"Active",
"Inactive"
],
"device_filter_id": 0,
"device_filter_options": [
{
"id": 75,
"name": "Accessories"
},
{
"id": 1,
"name": "iPhone 5"
},
{
"id": 2,
"name": "Samsung Galaxy J2"
},
{
"id": 3,
"name": "Samsung J5"
}
]
},
"message": "",
"href": "api/v1/stores"
}Gets all Store.GET/api/v1/stores{?order,orderBy,perPage,search,page,filterStatus,device_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: name, email, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 01 : active status of store & 0 : inactive status of store
- device_id
number(optional) Example: 0id of device to get all stores that have this device
Gets all Product ¶
Retrieves a list of Products
Headers
Content-Type: application/jsonBody
{
"success": true,
"products": {
"current_page": 1,
"data": [
{
"id": 2,
"name": "On off switch",
"description": "We also recycle the old broken displays by sending them back to the manufacturer.",
"sku": "A000223",
"price": "99.90",
"buy_price": "100",
"install_fee": "0",
"image": "product_images/product_iphone_test-1XMfm5.jpg",
"image_url": "http://repairrabbit.test/storage/images/product_images/product_iphone_test-1XMfm5.jpg",
"maintain_stock": 1,
"device_id": 2,
"deviceName": "Samsung Galaxy J2"
},
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"description": "We also recycle the old broken displays by sending them back to the manufacturer.",
"sku": "A000210",
"price": "69.90",
"buy_price": "90",
"install_fee": "0",
"image": "product_images/product_iphone_test-1XMfm5.jpg",
"image_url": "http://repairrabbit.test/storage/images/product_images/product_iphone_test-1XMfm5.jpg",
"maintain_stock": 1,
"device_id": 1,
"deviceName": "iPhone 5"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/products",
"per_page": "4",
"prev_page_url": null,
"to": 2,
"total": 2
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": "4",
"productsItemList": [
10,
20,
30,
40,
50
],
"device_filter_id": "2",
"device_filter_options": [
{
"id": 96,
"name": "Accessories"
},
{
"id": 1,
"name": "iPhone 5"
},
{
"id": 2,
"name": "Samsung Galaxy J2"
},
{
"id": 3,
"name": "Samsung J5"
}
],
"searchString": ""
},
"message": "",
"href": "api/v1/products"
}Gets all productGET/api/v1/products{?order,orderBy,perPage,search,page,device_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: name, sku, device_name etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- device_id
number(optional) Example: 0id of device to get products of it
View a store ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"store": {
"id": 1,
"address": "Rajkot",
"address_display": "University Road",
"phone": "085-7602727",
"opening_hour": "08:30:00",
"closing_hour": "12:30:00",
"open_days": {
"1": "Monday",
"3": "Wednesday",
"4": "Thursday",
"6": "Saturday",
"7": "Sunday"
},
"email": "[email protected]",
"address_lat": "52.385991",
"address_lon": "4.838108",
"small_img": "",
"colour": "#3b5998",
"status": 1,
"created_by": 1,
"created_at": "2018-07-05 18:18:54",
"modified_by": null,
"updated_at": "2018-07-06 11:20:14",
"closed_days": {
"2": "Tuesday",
"5": "Friday"
},
"small_image_url": null,
"devices": [
{
"id": 1,
"name": "iPhone 5",
"pivot": {
"store_id": 1,
"device_id": 1
}
}
]
},
"message": "Store detail.",
"href": "api/v1/stores/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/stores/12"
}View a storeGET/api/v1/stores/{store_id}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store.
Get Available time-slots for appointment ¶
Retrieves available time-slots for appointment to repair device
Headers
Content-Type: application/jsonBody
{
"success": true,
"date": "2018-06-29",
"store": "1",
"device": "1",
"timeslots": {
"1": "08:30 - 09:00",
"2": "08:40 - 09:10",
"3": "08:50 - 09:20",
"4": "09:10 - 09:40",
"5": "09:20 - 09:50",
"6": "09:30 - 10:00",
"7": "09:40 - 10:10",
"8": "09:50 - 10:20",
"9": "10:00 - 10:30"
},
"message": "Available timeslots.",
"href": "api/v1/stores/1/devices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"device": [
"The device field is required."
],
"appointment_date": [
"The appointment date field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/stores/1/devices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"date": "2018-06-05",
"store": "1",
"device": "1",
"messages": [
"Available timeslot not found."
],
"href": "api/v1/stores/1/devices/1"
}Get Available time-slots for appointment.GET/api/v1/stores/{store_id}/devices/{device_id}{?appointment_date}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1- device_id
number(required) Example: 1- appointment_date
string(required) Example: 2018-06-29
Check email for users ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"email-status": true,
"message": "A user did not exist with this email.",
"href": "api/v1/employees/email-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"email-status": false,
"message": "A user already exists with this email.",
"href": "api/v1/employees/email-check"
}Check email for usersGET/api/v1/email-check{?email,user_id}
Endpoint information
| Requires authentication | Yes |
string(required) Example: [email protected]Email to check wheather is exists.
- user_id
number(required) Example: 4Id of user required when edit own users’s email in usersdetail.
Appointment ¶
Gets all Appointments ¶
Retrieves a list of all Appointments in the database
Headers
Content-Type: application/jsonBody
{
"success": true,
"appointments": {
"current_page": 1,
"data": [
{
"id": 16,
"user_id": 4,
"device_id": 2,
"store_id": 2,
"defect_description": null,
"date_start_time": "2018-05-30 09:15:00",
"date_end_time": "2018-05-30 09:49:00",
"assigned_to": 3,
"reminder_sent": 0,
"confirmed": 1,
"confirm_url": "vAo6tKxAoMVAU4ygKBcXVAkhtaQRDZmj",
"delete_token": "F05nreSX5vQcygpGWZOUqvbnjFk8OxuD",
"no_show": null,
"imei": "123412341111111",
"retarget": null,
"warranty": null,
"ticket_id": null,
"created_by": 1,
"created_at": "2018-05-25 14:37:09",
"modified_by": null,
"updated_at": "2018-05-25 14:37:09",
"device_name": "Samsung Galaxy J2",
"customer_name": "customer",
"customer_email": "[email protected]",
"employee_name": "employee3",
"store_name": "Rajkot"
},
],
"from": 1,
"last_page": 2,
"next_page_url": "http://repairrabbit.test/api/v1/admin/appointments?page=2",
"path": "http://repairrabbit.test/api/v1/admin/appointments",
"per_page": 10,
"prev_page_url": null,
"to": 10,
"total": 13
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": 10,
"appointmentsItemListOptions": [
10,
20,
30,
40,
50
],
"appointmentConfirmedCount": 4,
"appointmentNoShowCount": 2,
"appointmentRetargetedCount": 2,
"appointmentWarrantyCount": 1,
"appointmentTotalCount": 13,
"searchString": ""
},
"message": "",
"href": "api/v1/admin/appointments"
}Gets all Appointments.GET/api/v1/admin/appointments{?order,orderBy,perPage,filterStatus,search,page,store_id,customer_id,in_progress}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: customer_name, employee_name, device_name, etc.- perPage
number(optional) Default: 10 Example: 3- filterStatus
string(optional) Example: confirmed, no_show, retarget, warranty- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- store_id
number(optional) Example: 1Gives only selected store’s appointment.
- customer_id
number(optional) Example: 1Gives only selected customer’s appointment.
- in_progress
number(optional) Example: 1Gives listing of appointment which has no ticket.
Create an appointment ¶
Headers
Content-Type: application/jsonBody
{
"products": [1], /* product_ids of device */
"userId": 4,
"device": 2,
"store": 2,
"date": "2018-05-30",
"timeSlot": "09:15 - 10:14",
"imei": 123412341111111
}Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"userId": {
"type": "number",
"description": "The Id for the user",
"rule": "The userId must exists from available user as customer role"
},
"device": {
"type": "number",
"description": "The ID of device for the appointment",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when ticket_id not given"
},
"date": {
"type": "date",
"description": "The date for the appointment",
"rule": "The date format must be YYYY-MM-DD",
"required_without": "The value required when ticket_id not given"
},
"timeSlot": {
"type": "time",
"description": "The time slot for the appointment",
"rule": "The value must be in time 24h with regex:/(^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] - ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$)/u",
"required_without": "The value required when ticket_id not given"
},
"store": {
"type": "number",
"description": "The ID of store for the appointment",
"rule": "The max number of digits is 10 and must exists from available stores",
"required_without": "The value required when ticket_id not given"
},
"imei": {
"type": "number",
"description": "The imei of device for the appointment",
"rule": "The value must be between 15 to 16"
}
},
"required": [
"products",
"userId"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 4,
"ticket_id": null,
"user_id": 4,
"assigned_to": 2,
"device_id": 1,
"store_id": 1,
"date_start_time": "2018-07-05 09:00:00",
"date_end_time": "2018-07-05 09:30:00",
"imei": "352091073963244",
"confirmed": 0,
"no_show": 1,
"retarget": 1,
"warranty": 1,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:01:13",
"ticket": null,
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"appointment_id": 4,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 2,
"user_id": 3,
"user": {
"id": 3,
"name": "employee"
}
}
},
"message": "Appointment created successfully.",
"href": "api/v1/admin/appointments"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"userId": [
"The user id field is required."
],
"device": [
"The device field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"date": [
"The date field is required."
],
"timeSlot": [
"The time slot field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/admin/appointments"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Time slot not available"
],
"href": "api/v1/admin/appointments"
}View an appointment ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 4,
"ticket_id": null,
"user_id": 4,
"assigned_to": 2,
"device_id": 1,
"store_id": 1,
"date_start_time": "2018-07-05 09:00:00",
"date_end_time": "2018-07-05 09:30:00",
"imei": "352091073963244",
"confirmed": 0,
"no_show": 1,
"retarget": 1,
"warranty": 1,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:01:13",
"ticket": null,
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"appointment_id": 4,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 2,
"user_id": 3,
"user": {
"id": 3,
"name": "employee"
}
}
},
"message": "Appointment detail.",
"href": "api/v1/admin/appointments/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/admin/appointments/1"
}View an appointmentGET/api/v1/admin/appointments/{appointment_id}
Endpoint information
| Requires authentication | Yes |
- appointment_id
number(required) Example: 1Id of the appointment.
Edit an appointment ¶
Headers
Content-Type: application/jsonBody
{
"products": [1], /* product_ids of device */
"userId": 4,
"device": 2,
"store": 2,
"date": "2018-05-30",
"timeSlot": "08:40 - 09:14",
"imei": "",
"checkTime": 1 /* flag to change assign_to of appointment */
"no_show": "",
"confirmed": "",
"retarget": "",
"warranty": ""
}Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"userId": {
"type": "number",
"description": "The Id for the user",
"rule": "The userId must exists from available user as customer role"
},
"device": {
"type": "number",
"description": "The ID of device for the appointment",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when ticket_id not given"
},
"date": {
"type": "date",
"description": "The date for the appointment",
"rule": "The date format must be YYYY-MM-DD",
"required_without": "The value required when ticket_id not given"
},
"timeSlot": {
"type": "time",
"description": "The time slot for the appointment",
"rule": "The value must be in time 24h with regex:/(^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] - ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$)/u",
"required_without": "The value required when ticket_id not given"
},
"store": {
"type": "number",
"description": "The ID of store for the appointment",
"rule": "The max number of digits is 10 and must exists from available stores",
"required_without": "The value required when ticket_id not given"
},
"imei": {
"type": "number",
"description": "The imei of device for the appointment",
"rule": "The value must be between 15 to 16"
},
"no_show": {
"type": "boolean",
"description": "The no_show status for the appointment",
"rule": "The value must be from 0 or 1"
},
"confirmed": {
"type": "boolean",
"description": "The confirmed status for the appointment",
"rule": "The value must be from 0 or 1"
},
"retarget": {
"type": "boolean",
"description": "The retarget status for the appointment",
"rule": "The value must be from 0 or 1"
},
"warranty": {
"type": "boolean",
"description": "The warranty status for the appointment",
"rule": "The value must be from 0 or 1"
}
},
"required": [
"products",
"userId"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 4,
"ticket_id": null,
"user_id": 4,
"assigned_to": 2,
"device_id": 1,
"store_id": 1,
"date_start_time": "2018-07-05 09:00:00",
"date_end_time": "2018-07-05 09:30:00",
"imei": "352091073963244",
"confirmed": 0,
"no_show": 1,
"retarget": 1,
"warranty": 1,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:01:13",
"ticket": null,
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"appointment_id": 4,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 2,
"user_id": 3,
"user": {
"id": 3,
"name": "employee"
}
}
},
"message": "Appointment updated successfully.",
"href": "api/v1/admin/appointments/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"userId": [
"The user id field is required."
],
"device": [
"The device field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"date": [
"The date field is required."
],
"timeSlot": [
"The time slot field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/admin/appointments/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Time slot not available"
],
"href": "api/v1/admin/appointments/1"
}
or
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/admin/appointments/1"
}Edit an appointmentPUT/api/v1/admin/appointments/{appointment_id}
Endpoint information
| Requires authentication | Yes |
- appointment_id
number(required) Example: 1Id of the appointment.
Delete an appointment ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Appointment deleted successfully.",
"href": "api/v1/admin/appointments/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/admin/appointments/1"
}Delete an appointmentDELETE/api/v1/admin/appointments/{appointment_id}
Endpoint information
| Requires authentication | Yes |
- appointment_id
number(required) Example: 1Id of the appointment.
Ticket ¶
Gets all Tickets ¶
Retrieves a list of all Tickets in the database
Headers
Content-Type: application/jsonBody
{
"success": true,
"tickets": {
"current_page": 1,
"data": [
{
"id": 1,
"friendly_id": "YNT-400",
"user_id": 4,
"serial": "356476062721552",
"device_id": 2,
"store_id": 2,
"employee_id": 3,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2017-07-05 17:33:14",
"shipped_at": "2017-07-16 17:33:14",
"paid_at": "2017-07-25 17:33:14",
"access_code": "2890",
"status_image": null,
"problem_description": "Device picked up and paid at Donald on January 2nd.",
"different_return_address": "Street 12, 80 ft. road\n 9698PA",
"different_return_address_zip": "4878",
"different_return_address_city": "Jamnagar",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"payment_status": 0,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-06-11 14:51:14",
"modified_by": null,
"updated_at": "2018-06-11 14:51:14",
"status_image_url": "http://repairrabbit.test/storage/images/ticket_status_images/test-0rasPF.jpg",
"customer_name": "customer",
"customer_id": 1,
"device_name": "Samsung Galaxy J2",
"status_text": "Waiting for device",
"store_name": "Ahmedabad",
"employee_name": "employee3",
"progress_bar_width": "100",
"progress_bar_color": "progress-bar-danger"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/tickets",
"per_page": "3",
"prev_page_url": null,
"to": 3,
"total": 3
},
"meta": {
"orderBy": "device_name",
"sortOrder": "asc",
"items_per_page": "3",
"ticketsItemListOptions": [
10,
20,
30,
40,
50
],
"waitingDeviceCount": 3,
"inTransitCount": 0,
"repairDoneCount": 0,
"waitingForReplacedDeviceCount": 0,
"deviceSentCount": 0,
"mechanicWaitingCount": 0,
"customerResWaitingCount": 0,
"allTicketCount": 3,
"ticket_status_filter_id": 0,
"ticket_status_options": [
{
"id": 1,
"name": "Waiting for device"
},
{
"id": 2,
"name": "In transit"
},
{
"id": 3,
"name": "Waiting for available mechanic"
},
{
"id": 4,
"name": "Device is investigated"
},
{
"id": 5,
"name": "Waiting for customer's response"
},
{
"id": 9,
"name": "Replacement device in process"
},
{
"id": 10,
"name": "Advanced level research needed"
},
{
"id": 13,
"name": "Device sent"
},
{
"id": 14,
"name": "Repair work done"
},
{
"id": 16,
"name": "Device manufacturer repair support"
}
],
"device_categories": [
{
"id": 1,
"name": "iPhone"
},
{
"id": 2,
"name": "Samsung"
}
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/tickets"
}Gets all Tickets.GET/api/v1/admin/tickets{?order,orderBy,perPage,filterStatus,search,page,store_id,customer_id,in_progress}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: updated_at Example: customer_name, device_name, status, etc.- perPage
number(optional) Default: 10 Example: 3- filterStatus
number(optional) Example: 0status of tickets
- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- store_id
number(optional) Example: 1Gives only selected store’s ticket.
- customer_id
number(optional) Example: 1Gives only selected customer’s ticket.
- in_progress
number(optional) Example: 1Gives listing of ticket which is not completed.
Create a ticket ¶
Headers
Content-Type: multipart/form-dataBody
{
"device": 2
"products": [1], /* product_ids of device */
"userId": 4,
"description": sdsdf,
"serial": 123412341111111,
"access_code": 123123,
"status_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"device": {
"type": "number",
"description": "The ID of device for the ticket",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
},
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"userId": {
"type": "number",
"description": "The Id for the user",
"rule": "The userId must exists from available user as customer role"
},
"description": {
"type": "string",
"description": "The description for the ticket"
},
"serial": {
"type": "number",
"description": "The serial of device for the ticket",
"rule": "The value must be between 15 to 16"
},
"access_code": {
"type": "string",
"description": "The access_code of device for the ticket",
"rule": "The max length is 30",
},
"status_image": {
"type": "file",
"description": "The device status image for the ticket",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
},
"store_id": {
"type": "number",
"description": "The ID of store for the ticket",
"rule": "The max number of digits is 10 and must exists from available active stores"
}
},
"required": [
"userId",
"products",
"device",
"description",
"serial",
"access_code"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 2,
"friendly_id": "XLP-620",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "358829051998292",
"access_code": "2805",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2015-01-26 13:14:44",
"status_image": "ticket_status_images/test-6TSUI1.jpg",
"status_image_url": "http://repairrabbit.test/storage/images/ticket_status_images/test-6TSUI1.jpg",
"problem_description": "Scherm defect.",
"different_return_address": "Gokuldham society\n 9698PA",
"different_return_address_zip": "4578745",
"different_return_address_city": "Patan",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:58:40",
"ticket_status": {
"id": 1,
"name": "Waiting for device"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": null,
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"ticket_id": 2,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": null
},
"message": "Ticket created successfully.",
"href": "api/v1/admin/tickets"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"userId": [
"The user id field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"device": [
"The device field is required."
],
"description": [
"The description field is required."
],
"serial": [
"The serial field is required."
],
"access_code": [
"The access code field is required."
]
},
"href": "api/v1/admin/tickets"
}View a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 2,
"friendly_id": "XJH-856",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "358829051998292",
"access_code": "2805",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2015-01-26 13:14:44",
"status_image": "ticket_status_images/test-6TSUI1.jpg",
"status_image_url": "http://repairrabbit.test/storage/images/ticket_status_images/test-6TSUI1.jpg",
"problem_description": "Scherm defect.",
"different_return_address": "Gokuldham society\n 9698PA",
"different_return_address_zip": "4578745",
"different_return_address_city": "Patan",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:58:40",
"ticket_status": {
"id": 1,
"name": "Waiting for device"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 2,
"name": "Ahmedabad",
"address": "Near City Mall"
},
"products": [
{
"id": 2,
"name": "On off switch",
"pivot": {
"ticket_id": 2,
"product_id": 2
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 3,
"user_id": 6,
"user": {
"id": 6,
"name": "employee3"
}
}
},
"message": "Ticket detail.",
"href": "api/v1/admin/tickets/XLP-620"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/XLP-620"
}View a ticketGET/api/v1/admin/tickets/{ticket_friendly_id}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
Update a ticket ¶
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT",
"device": 2,
"products": [1], /* product_ids of device */
"userId": 4,
"serial": 123412341111111,
"access_code": 123123,
"status_image": "image/path",
"store": 1,
"different_return_address": "sdsf sfse",
"different_return_address_city": "Rajkot",
"different_return_address_zip": "360004",
"stock_deducted_at": "2018-09-03",
"status_id": 5
}Schema
{
"type": "object",
"properties": {
"device": {
"type": "number",
"description": "The ID of device for the ticket",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when stock_deducted_at not given"
},
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products",
"required_without": "The value required when stock_deducted_at not given"
},
"userId": {
"type": "number",
"description": "The Id for the user",
"rule": "The userId must exists from available user as customer role"
},
"serial": {
"type": "number",
"description": "The serial of device for the ticket",
"rule": "The value must be between 15 to 16"
},
"access_code": {
"type": "string",
"description": "The access_code of device for the ticket",
"rule": "The max length is 30",
},
"status_image": {
"type": "file",
"description": "The device status image for the ticket",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
},
"store": {
"type": "number",
"description": "The ID of store for the ticket",
"rule": "The max number of digits is 10 and must exists from available active stores"
},
"different_return_address":{
"type": "string",
"description": "The different_return_address for the ticket's user",
"rule": "The max length is 255"
},
"different_return_address_city": {
"type": "string",
"description": "The different_return_address_city for the ticket's user",
"rule": "The max length is 64"
},
"different_return_address_zip": {
"type": "string",
"description": "The different_return_address_zip for the ticket's user",
"rule": "The max length is 16"
},
"stock_deducted_at": {
"type": "date",
"description": "The date for the ticket's stock deducted",
"rule": "The date format must be YYYY-MM-DD"
}
"status_id": {
"type": "number",
"description": "The ID of ticket_status for the ticket",
"rule": "The value must exists from available ticket_status"
},
"status_image": {
"type": "file",
"description": "The device status image for the ticket",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"userId",
"serial",
"access_code",
"store"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 2,
"friendly_id": "XLP-620",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "358829051998292",
"access_code": "2805",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2015-01-26 13:14:44",
"status_image": "ticket_status_images/test-6TSUI1.jpg",
"status_image_url": "http://repairrabbit.test/storage/images/ticket_status_images/test-6TSUI1.jpg",
"problem_description": "Scherm defect.",
"different_return_address": "Gokuldham society\n 9698PA",
"different_return_address_zip": "4578745",
"different_return_address_city": "Patan",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 17:01:13",
"modified_by": null,
"updated_at": "2018-07-05 17:58:40",
"ticket_status": {
"id": 5,
"name": "Waiting for customer's response"
},
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"ticket_id": 1,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": null
},
"message": "Ticket updated successfully.",
"href": "api/v1/admin/tickets/YNT-400"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"userId": [
"The user id field is required."
],
"device": [
"The device field is required when stock deducted at is not present."
],
"products": [
"The products field is required when stock deducted at is not present."
],
"serial": [
"The serial field is required."
],
"access_code": [
"The access code field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/admin/tickets/YNT-400"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/YNT-400"
}Update a ticketPOST/api/v1/admin/tickets/{ticket_friendly_id}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
Delete a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Ticket deleted successfully.",
"href": "api/v1/admin/tickets/XLP-620"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/XJH-856"
}Delete a ticketDELETE/api/v1/admin/tickets/{ticket_friendly_id}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: ZQK-195FId of the ticket.
Deduct stock for a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"friendly_id": "JCD-748",
"message": "Stock deducted successfully for ticket.",
"href": "api/v1/admin/tickets/JCD-748/deduct-stock"
}
or
{
"success": true,
"friendly_id": "JCD-748",
"message": "Stock already deducted for ticket.",
"href": "api/v1/admin/tickets/JCD-748/deduct-stock"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/JCD-748/deduct-stock"
}
or
{
"success": false,
"friendly_id": "JCD-748",
"message": [
"Please update ticket with available store."
],
"href": "api/v1/admin/tickets/JCD-748/deduct-stock"
}Deduct stock for a ticketPUT/api/v1/admin/tickets/{ticket_friendly_id}/deduct-stock'
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
Revert stock for a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": false,
"friendly_id": "JCD-748",
"message": "Stock reverted successfully for ticket.",
"href": "api/v1/admin/tickets/JCD-748/revert-stock"
}
or
{
"success": true,
"friendly_id": "JCD-748",
"message": "Stock was not deducted for ticket.",
"href": "api/v1/admin/tickets/JCD-748/revert-stock"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/JCD-748/revert-stock"
}
or
{
"success": false,
"friendly_id": "JCD-748",
"message": [
"Please update ticket with available store."
],
"href": "api/v1/admin/tickets/JCD-748/revert-stock"
}Revert stock for a ticketPUT/api/v1/admin/tickets/{ticket_friendly_id}/revert-stock
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
Restore a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 3,
"friendly_id": "JCD-748",
"user_id": 4,
"serial": "324892343594395",
"device_id": 1,
"store_id": 1,
"employee_id": 2,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2015-01-26 13:14:44",
"shipped_at": "2014-12-23 21:59:15",
"paid_at": "2014-12-29 15:52:09",
"access_code": "2805",
"status_image": null,
"problem_description": "Scherm defect.",
"different_return_address": "Hoofdweg Wedderveer 17\n 9698PA",
"different_return_address_zip": "232439",
"different_return_address_city": "Wedde",
"status": 1,
"custom_message": "Toestel gerepareerd. Zodra de betaling binnen is sturen wij het toestel retour.",
"internal_message": null,
"payment_status": 0,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 3,
"created_at": "2018-06-06 14:09:32",
"modified_by": null,
"updated_at": "2018-06-06 15:38:51"
},
"message": "Ticket restored successfully.",
"href": "api/v1/admin/restore-ticket/JCD-748"
}
or
{
"success": true,
"ticket": {
"id": 1,
"friendly_id": "JCD-748",
"user_id": 4,
"serial": "356476062721552",
"device_id": 2,
"store_id": 2,
"employee_id": 1,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2017-07-05 17:33:14",
"shipped_at": "2017-07-16 17:33:14",
"paid_at": "2017-07-25 17:33:14",
"access_code": "2890",
"status_image": null,
"problem_description": "Device picked up and paid at Donald on January 2nd.",
"different_return_address": "Street 12, 80 ft. road\n 9698PA",
"different_return_address_zip": "4878",
"different_return_address_city": "Jamnagar",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"payment_status": 0,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-06-06 16:17:30",
"modified_by": null,
"updated_at": "2018-06-06 16:20:49"
},
"message": "Ticket was already stored.",
"href": "api/v1/admin/restore-ticket/JCD-748"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/JCD-748/restore"
}Restore a ticketPUT/api/v1/admin/tickets/{ticket_friendly_id}/restore
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: JCD-748FriendlyId of the ticket.
Add product damage reason for a ticket ¶
Headers
Content-Type: application/jsonBody
{
"product": 1,
"ticket_friendly_id": "MCD-748",
"reason": "Screen damaged"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": "JCD-748",
"message": "Damaged reason added successfully for product of given ticket.",
"href": "api/v1/admin/tickets/damage-product"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"product": [
"The product field is required."
],
"ticket_friendly_id": [
"The ticket friendly id field is required."
],
"reason": [
"The reason field is required."
]
},
"href": "api/v1/admin/tickets/damage-product"
}
or
{
"success": false,
"data": null,
"messages": [
"Given product is not associated with the given ticket."
],
"href": "api/v1/admin/tickets/damage-product"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Please update ticket with available store."
],
"href": "api/v1/admin/tickets/damage-product"
}
or
{
"success": false,
"messages": [
"Please assign ticket with available employee."
],
"href": "api/v1/admin/tickets/damage-product"
}Add product damage reason for a ticketPOST/api/v1/admin/tickets/damage-product
Endpoint information
| Requires authentication | Yes |
Generate ticket from an appointment ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 6,
"friendly_id": "KWW-487",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "352091073963244",
"access_code": null,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2018-07-05 18:07:08",
"status_image": null,
"status_image_url": null,
"problem_description": null,
"different_return_address": null,
"different_return_address_zip": null,
"different_return_address_city": null,
"status": 3,
"custom_message": null,
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 18:07:08",
"modified_by": null,
"updated_at": "2018-07-05 18:07:08",
"ticket_status": {
"id": 3,
"name": "Waiting for available mechanic"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 2,
"name": "Ahmedabad",
"address": "Near City Mall"
},
"products": [
{
"id": 2,
"name": "On off switch",
"pivot": {
"ticket_id": 6,
"product_id": 2
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 3,
"user_id": 6,
"user": {
"id": 6,
"name": "employee3"
}
}
},
"message": "Ticket Generated Successfully for this appointment.",
"href": "api/v1/admin/appointments/3/tickets"
}
or
{
"success": true,
"ticket": {
"id": 6,
"friendly_id": "KWW-487",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "352091073963244",
"access_code": null,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2018-07-05 18:07:08",
"status_image": null,
"status_image_url": null,
"problem_description": null,
"different_return_address": null,
"different_return_address_zip": null,
"different_return_address_city": null,
"status": 3,
"custom_message": null,
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 18:07:08",
"modified_by": null,
"updated_at": "2018-07-05 18:07:08",
"ticket_status": {
"id": 3,
"name": "Waiting for available mechanic"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 2,
"name": "Ahmedabad",
"address": "Near City Mall"
},
"products": [
{
"id": 2,
"name": "On off switch",
"pivot": {
"ticket_id": 6,
"product_id": 2
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 3,
"user_id": 6,
"user": {
"id": 6,
"name": "employee3"
}
}
},
"message": "Ticket already generated for this appointment.",
"href": "api/v1/admin/appointments/3/tickets"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/admin/appointments/3/tickets"
}Ticket from an appointmentPOST/api/v1/admin/appointments/{appointment_id}/tickets
Endpoint information
| Requires authentication | Yes |
- appointment_id
string(required) Example: 3Id of an appointment.
Get ticket history ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket_friendly_id": "YNT-400",
"ticket_history": {
"current_page": 1,
"data": [
{
"ticket_friendly_id": "YNT-400",
"id": 2,
"paid_at": "2017-07-25 17:33:14",
"ticket_id": 1,
"status": "1",
"device_id": 2,
"store_id": null,
"product": "",
"employee_id": 6,
"serial": null,
"access_code": null,
"customer_reference": null,
"customer_reference_from": null,
"status_image": null,
"problem_description": "thick point",
"custom_message": "Too many damages!!",
"polis_number": null,
"internal_message": null,
"different_return_address": null,
"different_return_address_zip": null,
"different_return_address_city": null,
"created_by": 1,
"created_at": "2018-06-07 14:49:11",
"modified_by": null,
"updated_at": "2018-06-07 14:49:11",
"status_name": "Waiting for device",
"status_last_changed_at": "2017-07-05 17:33:14",
"device_name": "Samsung Galaxy J2",
"updatedBy_name": null,
"employee_name": "employee3",
"store_address": null,
"createdBy_name": "Admin"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/tickets/YNT-400/history",
"per_page": "3",
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "status",
"sortOrder": "asc",
"items_per_page": "3",
"tickethistorysItemListOptions": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/tickets/YNT-400/history"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/admin/tickets/YNT-400/history"
}Get ticket historyGET/api/v1/admin/tickets/{ticket_friendly_id}/history{?order,orderBy,perPage,filterStatus,search,page}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: updated_at Example: customer_name, device_name, store_name, employee_name, updatedBy_name, status, etc.- perPage
number(optional) Default: 10 Example: 3- filterStatus
number(optional) Example: 0status of tickets
- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Customer ¶
Gets all customers ¶
Retrieves a list of Customers
Headers
Content-Type: application/jsonBody
{
"success": true,
"customers": {
"current_page": 1,
"data": [
{
"user_id": 5,
"salutation": "mr",
"customer_name": "customer1",
"customer_email": "[email protected]",
"dob": "2017-05-20",
"phone": "0633367813",
"company_name": "MI care",
"purpose": "business",
"extra_instructions": null,
"address": "150 ft. ring road",
"address_zip": "1424PNsfw",
"address_city": "Ahmedabad",
"payment_exception": 0
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/customers",
"per_page": 10,
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "user_id",
"sortOrder": "desc",
"items_per_page": 10,
"customersItemListOptions": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/customers"
}Gets all Customers.GET/api/v1/admin/customers{?order,orderBy,perPage,search,page}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: user_id Example: name, email, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Create a customer ¶
Headers
Content-Type: application/jsonBody
{
"name": "Irving I Jama",
"email": "[email protected]",
"password": "123456",
"phone": "006-317-1399",
"address": "Marimbalaan 92",
"address_zip": "3438 GB",
"address_city": "Nieuwegein",
"salutation": "er",
"dob": "2018-06-10",
"purpose": "business",
"company_name": "Delchamps",
"extra_instructions": "adaadsdasdasdsx",
"payment_exception": "1"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the customer",
"rule": "The max length is 250"
},
"email": {
"type": "email",
"description": "The email the customer",
"rule": "The max length is 60 and must be unique"
},
"password": {
"type": "string",
"description": "The password for the customer",
"rule": "The min length is 6 and the max length is 30"
},
"phone": {
"type": "number",
"description": "The phone for the customer",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address": {
"type": "string",
"description": "The address for the customer",
"rule": "The min length is 10 amd the max length is 150 with regex:/(^[a-zA-Z0-9\s,.-]*$)/"
},
"address_zip": {
"type": "string",
"description": "The address_zip for the customer",
"rule": "The min length is 3 amd the max length is 16"
},
"address_city": {
"type": "string",
"description": "The address_city for the customer",
"rule": "The min length is 3 amd the max length is 60 regex:/(^[a-zA-Z]+(?:[\s-.][a-zA-Z]+)*$)/"
},
"salutation": {
"type": "string",
"description": "The salutation for the customer",
"rule": "The max length is 32"
},
"dob": {
"type": "date",
"description": "The dob for the customer",
"rule": "The date format must be YYYY-MM-DD and must be date before current date"
},
"purpose": {
"type": "string",
"description": "The purpose for the customer",
"rule": "The value must be from business,consumer"
},
"company_name": {
"type": "string",
"description": "The company_name for the customer",
"rule": "The max length is 100",
"required_if": "The purpose is business"
},
"extra_instructions": {
"type": "string",
"description": "The extra_instructions for the customer",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"payment_exception": {
"type": "string",
"description": "The payment_exception for the customer",
"rule": "The value must be from 0,1"
}
},
"required": [
"name",
"email",
"password"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"customer": {
"id": 17,
"user_id": 22,
"salutation": "er",
"company_name": "Delchamps",
"purpose": "business",
"extra_instructions": "adaadsdasdasdsx",
"address": "Marimbalaan 92",
"address_zip": "3438 GB",
"address_city": "Nieuwegein",
"dob": "2018-06-10",
"phone": "006-317-1399",
"payment_exception": 1,
"created_by": 3,
"created_at": "2018-06-11 11:31:33",
"modified_by": null,
"updated_at": "2018-06-11 11:31:33",
"user": {
"id": 22,
"name": "Irving I Jama",
"role_id": 4,
"email": "[email protected]",
"api_key": null,
"created_by": 3,
"modified_by": null,
"created_at": "2018-06-11 11:31:33",
"updated_at": "2018-06-11 11:31:33"
}
},
"message": "Customer created successfully.",
"href": "api/v1/admin/customers"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": {
"name": [
"The name field is required."
],
"email": [
"The email has already been taken."
]
},
"href": "api/v1/admin/customers"
}View a customer ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"customer": {
"id": 1,
"user_id": 4,
"salutation": "testing",
"company_name": "Samsung Service Center",
"purpose": "business",
"extra_instructions": null,
"address": "Street 5, M.G road",
"address_zip": "1424PN",
"address_city": "Rajkot",
"dob": "2017-05-30",
"phone": "0633836781",
"payment_exception": 0,
"created_by": 1,
"created_at": "2018-06-11 10:43:53",
"modified_by": 1,
"updated_at": "2018-06-11 10:43:53",
"user": {
"id": 4,
"name": "customer",
"role_id": 4,
"email": "[email protected]",
"api_key": "c6c587bbc6893c6cb2417547647854bb2d4ff2a0",
"created_by": 1,
"modified_by": 1,
"created_at": "2018-06-11 10:43:53",
"updated_at": "2018-06-11 10:43:53"
}
},
"message": "Customer detail.",
"href": "api/v1/admin/customers/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Customer not found."
],
"href": "api/v1/admin/customers/112"
}View a customerGET/api/v1/admin/customers/{customer_id}
Endpoint information
| Requires authentication | Yes |
- customer_id
number(required) Example: 1Id of the customer.
Update a customer ¶
Headers
Content-Type: application/jsonBody
{
"name": "Irving I Jama",
"email": "[email protected]",
"password": "",
"phone": "006-317-1399",
"address": "Marimbalaangggg 92",
"address_zip": "",
"address_city": "",
"salutation": "",
"dob": "",
"purpose": "",
"company_name": "",
"extra_instructions": "",
"payment_exception": "1"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the customer",
"rule": "The max length is 250"
},
"email": {
"type": "email",
"description": "The email the customer",
"rule": "The max length is 60 and must be unique"
},
"password": {
"type": "string",
"description": "The password for the customer",
"rule": "The min length is 6 and the max length is 30"
},
"phone": {
"type": "number",
"description": "The phone for the customer",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address": {
"type": "string",
"description": "The address for the customer",
"rule": "The min length is 10 amd the max length is 150 with regex:/(^[a-zA-Z0-9\s,.-]*$)/"
},
"address_zip": {
"type": "string",
"description": "The address_zip for the customer",
"rule": "The min length is 3 amd the max length is 16"
},
"address_city": {
"type": "string",
"description": "The address_city for the customer",
"rule": "The min length is 3 amd the max length is 60 regex:/(^[a-zA-Z]+(?:[\s-.][a-zA-Z]+)*$)/"
},
"salutation": {
"type": "string",
"description": "The salutation for the customer",
"rule": "The max length is 32"
},
"dob": {
"type": "date",
"description": "The dob for the customer",
"rule": "The date format must be YYYY-MM-DD and must be date before current date"
},
"purpose": {
"type": "string",
"description": "The purpose for the customer",
"rule": "The value must be from business,consumer"
},
"company_name": {
"type": "string",
"description": "The company_name for the customer",
"rule": "The max length is 100",
"required_if": "The purpose is business"
},
"extra_instructions": {
"type": "string",
"description": "The extra_instructions for the customer",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"payment_exception": {
"type": "string",
"description": "The payment_exception for the customer",
"rule": "The value must be from 0,1"
}
},
"required": [
"name",
"email",
"password"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"customer": {
"id": 1,
"user_id": 4,
"salutation": "testing",
"company_name": "Samsung Service Center",
"purpose": "business",
"extra_instructions": null,
"address": "Marimbalaangggg 92",
"address_zip": "1424PN",
"address_city": "Rajkot",
"dob": "2017-05-30",
"phone": "006-317-1399",
"payment_exception": 1,
"created_by": 1,
"created_at": "2018-06-11 11:34:04",
"modified_by": 3,
"updated_at": "2018-06-11 11:48:17",
"user": {
"id": 4,
"name": "Irving I Jama",
"role_id": 4,
"email": "[email protected]",
"api_key": "c6c587bbc6893c6cb2417547647854bb2d4ff2a0",
"created_by": 1,
"modified_by": 3,
"created_at": "2018-06-11 11:34:04",
"updated_at": "2018-06-11 11:48:17"
}
},
"message": "Customer updated successfully.",
"href": "api/v1/admin/customers/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": {
"name": [
"The name field is required."
],
"email": [
"The email field is required."
]
},
"href": "api/v1/admin/customers/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Customer not found."
],
"href": "api/v1/admin/customers/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Customer [email protected] already exists."
],
"href": "api/v1/admin/customers/1"
}Update a customerPUT/api/v1/admin/customers/{customer_id}
Endpoint information
| Requires authentication | Yes |
- customer_id
number(required) Example: 1Id of the customer.
Delete a customer ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Customer deleted successfully.",
"href": "api/v1/admin/customers/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Customer not found."
],
"href": "api/v1/admin/customers/24"
}Delete a customerDELETE/api/v1/admin/customers/{customer_id}
Endpoint information
| Requires authentication | Yes |
- customer_id
string(required) Example: ZQK-195Id of the customer.
Check email for customer ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"email-status": true,
"message": "A user did not exist with this email.",
"href": "api/v1/admin/customers/email-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"email-status": false,
"message": "A user already exists with this email.",
"href": "api/v1/admin/customers/email-check"
}Check email for customerGET/api/v1/admin/customers/email-check{?email,user_id}
Endpoint information
| Requires authentication | Yes |
number(required) Example: [email protected]Email to check wheather is exists.
- user_id
number(required) Example: 4Id of user required when edit own email in customer profile.
Send password to customer ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Password send Successfully.",
"href": "api/v1/admin/customers/send-password"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": {
"email": [
"The selected email is invalid."
]
},
"href": "api/v1/admin/customers/send-password"
}Send password to customerPUT/api/v1/admin/customers/send-password
Endpoint information
| Requires authentication | Yes |
number(required) Example: [email protected]Email to send password for that user.
Import Sample Cutomer Data ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"messages": "File Imported successfully.",
"href": "api/v1/admin/customers/import-excel"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"import_file": [
"The import file field is required."
]
},
"href": "api/v1/admin/customers/import-excel"
}Import Sample Cutomer DataPOST/api/v1/admin/customers/import-excel
Endpoint information
| Requires authentication | Yes |
- import_file
file(required) Example: CustomerData.csvFile to import customer data.
Export Sample Cutomer Data ¶
Headers
Content-Type: multipart/form-dataBody
{
"success": true,
"data": "\"user_id\",\"customer_name\",\"customer_email\",\"id\",\"salutation\",\"company_name\",\"purpose\",\"extra_instructions\",\"address\",\"address_zip\",\"address_city\",\"dob\",\"phone\",\"payment_exception\",\"created_by\",\"created_at\",\"modified_by\",\"updated_at\",\"deleted_by\",\"deleted_at\"\n\"72\",\"customer\",\"[email protected]\",\"1\",\"Mrs.\",\"Bradtke-Kovacek\",\"business\",\"\",\"47038 Rene Mountain Suite 588\nNorth Myriamport, NV 67720-9871\",\"87216\",\"Jenniferside\",\"2012-03-24\",\"1-951-601-5251 x226\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"78\",\"Adrian Macejkovic\",\"[email protected]\",\"2\",\"Mrs.\",\"Dietrich, Gislason and Senger\",\"business\",\"\",\"5497 Brant Junction\nWest Kaycee, NJ 07069\",\"82769-7573\",\"New Javon\",\"1943-01-08\",\"767-280-1002 x29204\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"33\",\"Mrs. Alicia Funk DDS\",\"[email protected]\",\"3\",\"Mrs.\",\"Wiza-Lemke\",\"business\",\"\",\"979 Cathryn Creek Apt. 290\nPort Izabellamouth, MT 41146\",\"93305-6996\",\"Port Tre\",\"1919-07-25\",\"1-246-201-1769 x94646\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"94\",\"Lilly Effertz II\",\"[email protected]\",\"4\",\"Ms.\",\"Thiel LLC\",\"business\",\"\",\"17713 Sylvan Plaza Suite 808\nHauckhaven, ND 64276\",\"20155-9140\",\"Kunzetown\",\"1999-12-29\",\"1-607-979-2933 x700\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"37\",\"Jovany Kub\",\"[email protected]\",\"5\",\"Mrs.\",\"Towne, Predovic and Wisoky\",\"business\",\"\",\"26217 Lubowitz Lake\nMontyborough, IN 68888\",\"33995\",\"South Marcellusfort\",\"1959-08-14\",\"789.813.0515\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"42\",\"Dewayne Kunze DVM\",\"[email protected]\",\"6\",\"Mr.\",\"Bauch, Rogahn and Gorczany\",\"business\",\"\",\"996 Margot Stream Suite 969\nSadiemouth, AL 13902\",\"79212\",\"East Enricomouth\",\"2015-07-11\",\"485-955-9632 x880\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"75\",\"Brain Romaguera\",\"[email protected]\",\"7\",\"Ms.\",\"Streich-Krajcik\",\"business\",\"\",\"223 Mann Orchard\nStokesbury, KS 64170\",\"68498-6876\",\"Johnsonhaven\",\"1994-11-01\",\"405.416.1068\",\"\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"41\",\"Luisa Treutel\",\"[email protected]\",\"8\",\"Mr.\",\"Casper-Medhurst\",\"business\",\"\",\"89450 Lexie Extension Apt. 077\nNikoshire, OK 88892\",\"50761-5874\",\"Douglasland\",\"1940-09-22\",\"761.675.4022\",\"\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"77\",\"Jennyfer Koch\",\"[email protected]\",\"9\",\"Mr.\",\"Sanford Group\",\"business\",\"\",\"66150 Deshawn Track\nVeumland, TN 88082\",\"57858\",\"East Deronland\",\"1968-05-16\",\"734.959.9092\",\"\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\"33\",\"Jakob Graham\",\"[email protected]\",\"10\",\"Mr.\",\"Streich Inc\",\"business\",\"\",\"8379 Kihn Lock\nWalkerberg, KY 55968-7683\",\"69151-3980\",\"Tesstown\",\"1964-10-12\",\"(327) 636-7181\",\"1\",\"1\",\"2017-10-10 08:08:23\",\"\",\"2017-10-10 13:38:23\",\"\",\"\"\n\n",
"href": "api/v1/admin/customers/download/sample"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": "File not found.",
"href": "api/v1/admin/customers/download/sample"
}Export Sample Cutomer DataGET/api/v1/admin/customers/download/sample
Endpoint information
| Requires authentication | Yes |
- import_file
file(required) Example: CustomerData.csvFile to import customer data.
Store ¶
Create a store ¶
Headers
Content-Type: multipart/form-dataBody
{
"store_name": "qwe121",
"address": "Utreate", /* product_ids of device */
"phone": 1231233211,
"address_lat": 12,
"address_lon": 121,
"opening_hour": "9:00",
"closing_hour": "18:00",
"working_days": [1,2,3,4,5],
"email": '[email protected]',
"colour": "#121313",
"map_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"store_name": {
"type": "string",
"description": "The name for the store",
"rule": "The min length is 3 and the max length is 50"
},
"address": {
"type": "string",
"description": "The address for the store",
"rule": "The regex is /([- ,\/0-9a-zA-Z]+)/"
},
"phone": {
"type": "number",
"description": "The phone for the store",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address_lat": {
"type": "number",
"description": "The address latitude for the store",
"rule": "The regex is /(^(+|-)?(?:90(?:(?:.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:.[0-9]{1,6})?))$)/u"
},
"address_lon": {
"type": "number",
"description": "The address longitude for the store",
"rule": "The regex is /(^(+|-)?(?:90(?:(?:.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:.[0-9]{1,6})?))$)/u"
},
"opening_hour": {
"type": "time",
"description": "The opening hours for the store",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"closing_hour": {
"type": "time",
"description": "The closing hours for the store",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"working_days": {
"type": "array",
"description": "The working days for the store",
"rule": "The days must be from [1,2,3,4,5,6,7]"
},
"email": {
"type": "email",
"description": "The email the store",
"rule": "The min length is 8 and the max length is 60"
},
"colour": {
"type": "string",
"description": "The colour for the store",
"rule": "The regex is /(^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$)/u"
},
"map_image": {
"type": "file",
"description": "The map image for the store",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
},
"status": {
"type": "number",
"description": "The status for the store",
"rule": "The status from value true:1 or false:0"
},
"devices": {
"type": "array",
"description": "The ID of devices for the store",
"rule": "The device id must be number and exists from devices"
}
},
"required": [
"store_name",
"email",
"address",
"phone",
"opening_hour",
"closing_hour",
"working_days"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"store": {
"id": 3,
"address": "qwe",
"address_display": "qweqwe",
"phone": "1231231231",
"opening_hour": "09:00:00",
"closing_hour": "18:00:00",
"open_days": "1",
"email": "[email protected]",
"address_lat": "12.000000",
"address_lon": "123.000000",
"small_img": "store_map_images/maxresdefault-i0xwnd.jpg",
"colour": "#121313",
"status": 1,
"created_by": 1,
"created_at": "2018-06-12 11:00:24",
"modified_by": null,
"updated_at": "2018-06-12 11:00:24",
"open_day_string": {
"1": "Monday"
},
"small_image_url": "http://repairrabbit.test/storage/images/store_map_images/p2-nHYY6T.jpg",
"devices": [
{
"id": 1,
"name": "iPhone 5",
"pivot": {
"store_id": 1,
"device_id": 1
}
}
]
},
"message": "Store created successfully.",
"href": "api/v1/admin/stores"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"store_name": [
"The store name has already been taken."
],
"email": [
"The email field is required."
],
"phone": [
"The phone field is required."
],
"address": [
"The address field is required."
],
"opening_hour": [
"The opening hour field is required."
],
"closing_hour": [
"The closing hour field is required."
],
"working_days": [
"The working days field is required."
],
"colour": [
"The colour field is required."
]
},
"href": "api/v1/admin/stores"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Store name 'qwe12134e' already exists."
],
"href": "api/v1/admin/stores"
}Update a store ¶
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT",
"store_name": "qwe121",
"address": "Utreate",
"phone": 1231233211,
"address_lat": 12,
"address_lon": 121,
"opening_hour": "9:00",
"closing_hour": "18:00",
"working_days": [1,2,3,4,5],
"email": '[email protected]',
"colour": "#121313",
"map_image": "image/path",
"status": 1,
"devices": [1],
"sell_accessories": "yes"
}Schema
{
"type": "object",
"properties": {
"store_name": {
"type": "string",
"description": "The name for the store",
"rule": "The min length is 3 and the max length is 50"
},
"address": {
"type": "string",
"description": "The address for the store",
"rule": "The regex is /([- ,\/0-9a-zA-Z]+)/"
},
"phone": {
"type": "number",
"description": "The phone for the store",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address_lat": {
"type": "number",
"description": "The address latitude for the store",
"rule": "The regex is /(^(+|-)?(?:90(?:(?:.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:.[0-9]{1,6})?))$)/u"
},
"address_lon": {
"type": "number",
"description": "The address longitude for the store",
"rule": "The regex is /(^(+|-)?(?:90(?:(?:.0{1,6})?)|(?:[0-9]|[1-8][0-9])(?:(?:.[0-9]{1,6})?))$)/u"
},
"opening_hour": {
"type": "time",
"description": "The opening hours for the store",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"closing_hour": {
"type": "time",
"description": "The closing hours for the store",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"working_days": {
"type": "array",
"description": "The working days for the store",
"rule": "The days must be from [1,2,3,4,5,6,7]"
},
"email": {
"type": "email",
"description": "The email the store",
"rule": "The min length is 8 and the max length is 60"
},
"colour": {
"type": "string",
"description": "The colour for the store",
"rule": "The regex is /(^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$)/u"
},
"map_image": {
"type": "file",
"description": "The map image for the store",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
},
"status": {
"type": "number",
"description": "The status for the store",
"rule": "The status from value true:1 or false:0"
},
"devices": {
"type": "array",
"description": "The ID of devices for the store",
"rule": "The device id must be number and exists from devices"
},
"sell_accessories" {
"type": "number",
"description": "The sell_accessories status for the store",
"rule": "The status from value true:1 or false:0"
}
},
"required": [
"store_name",
"email",
"address",
"phone",
"opening_hour",
"closing_hour",
"working_days",
"sell_accessories"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"store": {
"id": 1,
"address": "qwe1sdf2134eqedssaasdd",
"address_display": "qweqwe",
"phone": "1231231231",
"opening_hour": "09:00:00",
"closing_hour": "18:00:00",
"open_days": "1,2,4",
"email": "[email protected]",
"address_lat": "12.000000",
"address_lon": "123.000000",
"small_img": "",
"colour": "#121313",
"status": 1,
"created_by": 1,
"created_at": "2018-06-12 11:42:09",
"modified_by": 1,
"updated_at": "2018-06-12 15:14:09",
"open_day_string": {
"1": "Monday",
"2": "Tuesday",
"4": "Thursday"
},
"small_image_url": "http://repairrabbit.test/storage/images/store_map_images/maxresdefault-T6nMEj.jpg",
"devices": [
{
"id": 1,
"name": "iPhone 5",
"pivot": {
"store_id": 1,
"device_id": 1
}
}
]
},
"message": "Store updated successfully.",
"href": "api/v1/admin/stores/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/admin/stores/12"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Store name Rajkot already exists."
],
"href": "api/v1/admin/customers/1"
}Update a storeGET/api/v1/admin/stores/{store_id}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store.
Delete a store ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Store deleted successfully with their employees and holidays.",
"href": "api/v1/admin/stores/1"
}
or
{
"success": false,
"message": "Sorry! To delete this item make sure to delete all the associated entities first.",
"data": {
"tickets": [
{
"ticket_friendly_id": "JCD-748"
}
],
"appointments": [
{
"appointment_id": 4
}
]
},
"href": "api/v1/admin/stores/active/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/admin/stores/112"
}Delete a storeDELETE/api/v1/admin/stores/{store_id}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 112Id of the store.
Check name for store ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": true,
"message": "A store did not exist with this name.",
"href": "api/v1/admin/customers/name-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": false,
"message": "A store already exists with this name.",
"href": "api/v1/admin/stores/name-check"
}Check name for storeGET/api/v1/admin/stores/name-check{?name,store_id}
Endpoint information
| Requires authentication | Yes |
- name
string(required) Example: AhmedabadName to check wheather is exists.
- store_id
number(required) Example: 4Id of store required when edit own store’name in store detail.
Change status of store to activate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Store activated successfully.",
"href": "api/v1/admin/stores/1/active"
}
or
{
"success": true,
"message": "Store already activated.",
"href": "api/v1/admin/stores/1/active"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/admin/stores/1/active"
}Activate storePUT/api/v1/admin/stores/{store_id}/active
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 4Id of store required to change status of it.
Change status of store to deactivate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Store deactivated successfully.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": true,
"message": "Store already deactivated.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": false,
"message": "Sorry! To deactivate, you need to clear all entities associated with it.",
"data": {
"tickets": [
{
"ticket_friendly_id": "JCD-748"
}
],
"appointments": [
{
"appointment_id": 4
}
]
},
"href": "api/v1/admin/stores/1/deactive"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/admin/stores/1/deactive"
}Deactivate storePUT/api/v1/admin/stores/{store_id}/deactive
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 4Id of store required to change status of it.
Employee ¶
Gets all employee ¶
Retrieves a list of Store
Headers
Content-Type: application/jsonBody
{
"success": true,
"employees": {
"current_page": 1,
"data": [
{
"employee_id": 4,
"email": "[email protected]",
"name": "StoreAdmin",
"role_id": 2,
"user_id": 2,
"store_id": 1,
"isActive": 0,
"address": "Rajkot",
"work_start_time": "08:30:00",
"work_end_time": "12:30:00",
"break_start_time": "09:00:00",
"break_end_time": "09:05:00",
"work_days": "1,2,3,4,5,6,7"
},
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/employees",
"per_page": 10,
"prev_page_url": null,
"to": 3,
"total": 3
},
"meta": {
"orderBy": "name",
"sortOrder": "desc",
"items_per_page": 10,
"employeeListOptions": [
10,
20,
30,
40,
50
],
"searchString": "",
"filterStatus": "",
"employee_status_options": [
"All Employees",
"Active",
"Inactive"
]
},
"message": "",
"href": "api/v1/admin/employees"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Sorry! There are no employee in the system. Please create a store and add employee to it."
],
"href": "api/v1/admin/employees"
}Gets all employee.GET/api/v1/admin/employees{?order,orderBy,perPage,search,page,filterStatus,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: name, email, store_name etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 01 : active status of employee & 0 : inactive status of employee
- store_id
number(optional) Example: 1Gives only selected store’s employee.
Create a employee ¶
Headers
Content-Type: application/jsonBody
{
"name": "gret",
"store": "1", /* id of store */
"email": "[email protected]",
"password": "123456",
"work_start_hrs": "09:00",
"work_close_hrs": "12:00",
"break_start_hrs": "10:00",
"break_close_hrs": "10:30",
"working_days": [4],
"admin_privileges": "employee" /* ex: system_admin,store_admin,employee */
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the employee",
"rule": "The min length is 3 and the max length is 50"
},
"store": {
"type": "number",
"description": "The ID of store for the employee",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"email": {
"type": "email",
"description": "The email the employee",
"rule": "The min length is 8 and the max length is 60 and must be unique"
},
"password": {
"type": "string",
"description": "The password for the employee",
"rule": "The min length is 6 and the max length is 30"
},
"work_start_hrs": {
"type": "time",
"description": "The work start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store opening hours"
},
"work_close_hrs": {
"type": "time",
"description": "The work close time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store closing hours"
},
"break_start_hrs": {
"type": "time",
"description": "The break start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store opening hours"
},
"break_close_hrs": {
"type": "time",
"description": "The break start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store closing hours"
},
"working_days": {
"type": "array",
"description": "The working days for the employee",
"rule": "The days must be from [1,2,3,4,5,6,7]"
},
"admin_privileges": {
"type": "string",
"description": "The admin privileges for the employee",
"rule": "The admin privileges must be from system_admin,store_admin, employee"
}
},
"required": [
"name",
"store",
"email",
"password",
"work_start_hrs",
"work_close_hrs",
"break_start_hrs",
"break_close_hrs",
"working_days",
"admin_privileges"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"employee": {
"id": 16,
"user_id": 19,
"store_id": 1,
"work_start_time": "09:00:00",
"work_end_time": "12:00:00",
"work_days": "4",
"IsActive": 1,
"break_start_time": "10:00:00",
"break_end_time": "10:30:00",
"restrict_calendar": 0,
"created_by": 1,
"created_at": "2018-06-13 12:18:29",
"modified_by": null,
"updated_at": "2018-06-13 12:18:29",
"work_day_string": {
"4": "Thursday"
},
"user": {
"id": 19,
"name": "gret",
"email": "[email protected]"
},
"store": {
"id": 1,
"address": "Rajkot"
}
},
"message": "Employee created successfully.",
"href": "api/v1/admin/employees"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"email": [
"The email field is required."
],
"password": [
"The password field is required."
],
"work_start_hrs": [
"The work start hrs field is required."
],
"work_close_hrs": [
"The work close hrs field is required."
],
"break_start_hrs": [
"The break start hrs field is required."
],
"break_close_hrs": [
"The break close hrs field is required."
],
"working_days": [
"The working days field is required."
],
"role_id": [
"The role id field is required."
]
},
"href": "api/v1/admin/employees"
}
or
{
"success": false,
"data": null,
"messages": [
"Please enter store to add employee."
],
"href": "api/v1/admin/employees"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Store not found"
],
"href": "api/v1/admin/employees"
}View a employee ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"employee": {
"id": 1,
"user_id": 1,
"store_id": 1,
"work_start_time": "08:30:00",
"work_end_time": "12:30:00",
"work_days": "1,2,3,4,5,6,7",
"IsActive": 1,
"break_start_time": "09:00:00",
"break_end_time": "09:30:00",
"restrict_calendar": 1,
"created_by": 1,
"created_at": "2018-06-13 11:16:39",
"modified_by": null,
"updated_at": "2018-06-13 11:16:39",
"work_day_string": {
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday",
"7": "Sunday"
},
"user": {
"id": 1,
"name": "Admin",
"email": "[email protected]"
},
"store": {
"id": 1,
"address": "Rajkot"
}
},
"message": "Employee detail.",
"href": "api/v1/admin/employees/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Employee not found."
],
"href": "api/v1/admin/employees/123"
}View a employeeGET/api/v1/admin/employees/{employee_id}
Endpoint information
| Requires authentication | Yes |
- employee_id
number(required) Example: 1Id of the employee.
Update a employee ¶
Headers
Content-Type: application/jsonBody
{
"name": "gret",
"store": "1", /* id of store */
"email": "[email protected]",
"work_start_hrs": "09:30",
"work_close_hrs": "12:00",
"break_start_hrs": "10:00",
"break_close_hrs": "10:30",
"working_days": [1,2,3,4,5],
"admin_privileges": "employee"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the employee",
"rule": "The min length is 3 and the max length is 50"
},
"store": {
"type": "number",
"description": "The ID of store for the employee",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"email": {
"type": "email",
"description": "The email the employee",
"rule": "The min length is 8 and the max length is 60 and must be unique"
},
"password": {
"type": "string",
"description": "The password for the employee",
"rule": "The min length is 6 and the max length is 30"
},
"work_start_hrs": {
"type": "time",
"description": "The work start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store opening hours"
},
"work_close_hrs": {
"type": "time",
"description": "The work close time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store closing hours"
},
"break_start_hrs": {
"type": "time",
"description": "The break start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store opening hours"
},
"break_close_hrs": {
"type": "time",
"description": "The break start time for the employee",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from store closing hours"
},
"working_days": {
"type": "array",
"description": "The working days for the employee",
"rule": "The days must be from [1,2,3,4,5,6,7]"
},
"admin_privileges": {
"type": "string",
"description": "The admin privileges for the employee",
"rule": "The admin privileges must be from system_admin,store_admin, employee"
}
},
"required": [
"name",
"store",
"email",
"password",
"work_start_hrs",
"work_close_hrs",
"break_start_hrs",
"break_close_hrs",
"working_days",
"admin_privileges"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"employee": {
"id": 1,
"user_id": 1,
"store_id": 1,
"work_start_time": "09:00:00",
"work_end_time": "12:00:00",
"work_days": "4",
"IsActive": 1,
"break_start_time": "10:00:00",
"break_end_time": "10:30:00",
"restrict_calendar": 1,
"created_by": 1,
"created_at": "2018-06-13 13:01:47",
"modified_by": 1,
"updated_at": "2018-06-13 13:07:04",
"work_day_string": {
"4": "Thursday"
},
"user": {
"id": 1,
"name": "gret",
"email": "[email protected]"
},
"store": {
"id": 1,
"address": "Rajkot"
}
},
"message": "Employee updated successfully.",
"href": "api/v1/admin/employees/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"email": [
"The email field is required."
],
"work_start_hrs": [
"The work start hrs field is required."
],
"work_close_hrs": [
"The work close hrs field is required."
],
"break_start_hrs": [
"The break start hrs field is required."
],
"break_close_hrs": [
"The break close hrs field is required."
],
"admin_privileges": [
"The admin privileges field is required."
]
},
"href": "api/v1/admin/employees/2"
}
or
{
"success": false,
"data": null,
"messages": [
"Please enter store to update employee."
],
"href": "api/v1/admin/employees"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Employee not found."
],
"href": "api/v1/admin/employees/12"
}
or
{
"success": false,
"data": null,
"messages": [
"Store not found"
],
"href": "api/v1/admin/employees"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Employee [email protected] already exists."
],
"href": "api/v1/admin/employees/2"
}Update a employeePUT/api/v1/admin/employees/{employee_id}
Endpoint information
| Requires authentication | Yes |
- employee_id
number(required) Example: 1Id of the employee.
Delete a employee ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Employee deleted successfully.",
"href": "api/v1/admin/employees/2"
}
or
{
"success": false,
"message": "Sorry! To delete this item make sure to delete all the associated entities first.",
"data": {
"tickets": [
{
"f_id": "JCD-748"
}
],
"appointments": [
{
"appointmentId": 4
}
]
},
"href": "api/v1/admin/employees/2"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Employee not found."
],
"href": "api/v1/admin/employees/223"
}Delete a employeeDELETE/api/v1/admin/employees/{employee_id}
Endpoint information
| Requires authentication | Yes |
- employee_id
string(required) Example: 3Id of the employee.
Send password to employee ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Password send Successfully.",
"href": "api/v1/admin/employees/send-password"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": {
"email": [
"The selected email is invalid."
]
},
"href": "api/v1/admin/employees/send-password"
}Send password to employeePUT/api/v1/admin/employees/send-password
Endpoint information
| Requires authentication | Yes |
number(required) Example: [email protected]Email to send password for that employee.
Change status of employee to activate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Employee activated successfully.",
"href": "api/v1/admin/stores/1/active"
}
or
{
"success": true,
"message": "Employee already activated.",
"href": "api/v1/admin/stores/1/active"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Employee not found."
],
"href": "api/v1/admin/stores/1/active"
}Activate employeePUT/api/v1/admin/employees/{employee_id}/active
Endpoint information
| Requires authentication | Yes |
- employee_id
number(required) Example: 4Id of employee required to change status of it.
Change status of employee to deactivate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Employee deactivated successfully.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": true,
"message": "Employee already deactivated.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": false,
"message": "Sorry! To deactivate, you need to clear all entities associated with it.",
"data": {
"tickets": [
{
"ticket_friendly_id": "JCD-748"
}
],
"appointments": [
{
"appointment_id": 4
}
]
},
"href": "api/v1/admin/stores/1/deactive"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Employee not found."
],
"href": "api/v1/admin/stores/1/deactive"
}Deactivate employeePUT/api/v1/admin/employees/{employee_id}/deactive
Endpoint information
| Requires authentication | Yes |
- employee_id
number(required) Example: 4Id of employee required to change status of it.
Gets all employee leave ¶
Retrieves a list of Holidays
Headers
Content-Type: application/jsonBody
{
"success": true,
"employeeLeaves": {
"current_page": 1,
"data": [
{
"id": 2,
"date": "2018-07-05",
"start_time": "14:00:00",
"end_time": "22:00:00",
"employee_id": 1,
"employee_name": "Admin",
"store_id": 1,
"store_name": "Rajkot",
"reason": "reason for testing"
},
{
"id": 1,
"date": "2017-07-05",
"start_time": "09:00:00",
"end_time": "12:00:00",
"employee_id": 2,
"employee_name": "employee",
"store_id": 1,
"store_name": "Rajkot",
"reason": "testing"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/leaves",
"per_page": "2",
"prev_page_url": null,
"to": 2,
"total": 2
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": "2",
"leavesItemList": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/leaves"
}Gets all employee leaveGET/api/v1/admin/leaves{?order,orderBy,perPage,search,page,store_id,employee_id,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: id, store_name, employee_name, store_id, date etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- store_id
number(required) Example: 1Id of the store.
- employee_id
number(required) Example: 1Id of the employee.
Create an employee leave ¶
Headers
Content-Type: application/jsonBody
{
"date": "2018-08-15,2018-08-16",
"start_time": "09:20",
"end_time": "10:30",
"reason": "sdsdfsdfssfsdf",
"employee_id": "3"
}Schema
{
"type": "object",
"properties": {
"date": {
"type": "date",
"description": "The date for the employee leave",
"rule": "The date format must be YYYY-MM-DD"
},
"start_time": {
"type": "time",
"description": "The start time for the employee leave",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from employee working time"
},
"end_time": {
"type": "time",
"description": "The end time for the employee leave",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm and must be from employee working time"
},
"reason": {
"type": "string",
"description": "The reason for the employee leave",
"rule": "The min length is 10 and the max length is 255"
},
"employee_id": {
"type": "number",
"description": "The employee id to add leave",
"rule": "The max number of digits is 10 and must exists from available employees"
}
},
"required": [
"date",
"start_time",
"end_time",
"reason",
"employee_id"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"leaves": [
{
"id": 41,
"date": "2018-08-15",
"start_time": "09:20:00",
"end_time": "10:30:00",
"employee_id": 1,
"employee_name": "Admin",
"store_id": 1,
"store_name": "Rajkot",
"reason": "sdsdfsdfssfsdf"
},
{
"id": 42,
"date": "2018-08-16",
"start_time": "09:20:00",
"end_time": "10:30:00",
"employee_id": 1,
"employee_name": "Admin",
"store_id": 1,
"store_name": "Rajkot",
"reason": "sdsdfsdfssfsdf"
}
],
"message": "Leave created successfully.",
"href": "api/v1/admin/leaves"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"reason": [
"The reason field is required."
],
"date": [
"The date field is required."
],
"start_time": [
"The start time field is required."
],
"end_time": [
"The end time field is required."
]
},
"href": "api/v1/admin/leaves"
}
or
{
"success": false,
"data": null,
"messages": [
"Please enter employee to add leave."
],
"href": "api/v1/admin/leaves"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Employee not found"
],
"href": "api/v1/admin/leaves"
}View an employee leave ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"leave": {
"id": 4,
"date": "2018-08-15",
"start_time": "09:20:00",
"end_time": "10:30:00",
"employee_id": 1,
"employee_name": "Admin",
"store_id": 1,
"store_name": "Rajkot",
"reason": "sdsdfsdfssfsdf"
},
"message": "Leave detail.",
"href": "api/v1/admin/leaves/4"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Leave not found."
],
"href": "api/v1/admin/leaves/43"
}View an employee leaveGET/api/v1/admin/leaves/{leave_id}
Endpoint information
| Requires authentication | Yes |
- leave_id
number(required) Example: 1Id of the leave.
Update an employee leave ¶
Headers
Content-Type: application/jsonBody
{
"date": "2018-08-15",
"start_time": "09:20",
"end_time": "10:30",
"reason": "sdsdfsdfssfsdf",
"employee_id": "3"
}Schema
{
"type": "object",
"properties": {
"date": {
"type": "date",
"description": "The date for the employee leave",
"rule": "The date format must be YYYY-MM-DD"
},
"start_time": {
"type": "time",
"description": "The start time for the employee leave",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"end_time": {
"type": "time",
"description": "The end time for the employee leave",
"rule": "The time is in 24 hour and the format must be HH:mm - HH:mm"
},
"reason": {
"type": "string",
"description": "The reason for the employee leave",
"rule": "The min length is 10 and the max length is 255"
},
"employee_id": {
"type": "number",
"description": "The employee id to add leave",
"rule": "The max number of digits is 10 and must exists from available employees"
}
},
"required": [
"date",
"start_time",
"end_time",
"reason",
"employee_id"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"leave": {
"id": 4,
"date": "2018-08-15",
"start_time": "09:20:00",
"end_time": "10:30:00",
"employee_id": 1,
"employee_name": "Admin",
"store_id": 1,
"store_name": "Rajkot",
"reason": "sdsdfsdfssfsdf"
},
"message": "Leave updated successfully.",
"href": "api/v1/admin/leaves/4"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"reason": [
"The reason field is required."
],
"date": [
"The date field is required."
],
"start_time": [
"The start time field is required."
],
"end_time": [
"The end time field is required."
]
},
"href": "api/v1/admin/leaves"
}
or
{
"success": false,
"data": null,
"messages": [
"Please enter employee to update leave."
],
"href": "api/v1/admin/leaves/4"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Employee not found"
],
"href": "api/v1/admin/leaves/4"
}
or
{
"success": false,
"messages": [
"Leave not found."
],
"href": "api/v1/admin/leaves/412"
}Update an employee leavePUT/api/v1/admin/leaves/{leave_id}
Endpoint information
| Requires authentication | Yes |
- leave_id
number(required) Example: 1Id of the leave.
Delete an employee leave ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Leave deleted successfully.",
"href": "api/v1/admin/leaves/4"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Leave not found."
],
"href": "api/v1/admin/leaves/412"
}Delete an employee leaveDELETE/api/v1/admin/leaves/{leave_id}
Endpoint information
| Requires authentication | Yes |
- leave_id
string(required) Example: 11Id of the leave.
Holiday ¶
Gets all holiday ¶
Retrieves a list of Holidays
Headers
Content-Type: application/jsonBody
{
"success": true,
"holidays": {
"current_page": 1,
"data": [
{
"id": 4,
"store_id": 1,
"title": "picnic",
"date": "2018-09-15",
"address": "Rajkot"
},
{
"id": 5,
"store_id": 1,
"title": "independant day",
"date": "2018-08-15",
"address": "Rajkot"
}
],
"from": 1,
"last_page": 3,
"next_page_url": "http://repairrabbit.test/api/v1/admin/holidays?page=2",
"path": "http://repairrabbit.test/api/v1/admin/holidays",
"per_page": "4",
"prev_page_url": null,
"to": 4,
"total": 9
},
"meta": {
"orderBy": "store",
"sortOrder": "desc",
"items_per_page": "4",
"holidaysItemList": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/holidays"
}Gets all holidayGET/api/v1/admin/holidays{?order,orderBy,perPage,search,page,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: title, date, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- store_id
number(optional) Example: 1Gives only selected store’s ticket.
Create a holiday ¶
Headers
Content-Type: application/jsonBody
{
"holidayDate": "2018-08-15",
"store_id": "1",
"title": "independant day"
}Schema
{
"type": "object",
"properties": {
"holidayDate": {
"type": "date",
"description": "The date for the holiday",
"rule": "The date format must be YYYY-MM-DD"
},
"title": {
"type": "string",
"description": "The title for the holiday",
"rule": "The max length is 255"
},
"store_id": {
"type": "number",
"description": "The store for the holiday to add",
"rule": "The max number of digits is 10 and must exists from available stores"
}
},
"required": [
"holidayDate",
"title",
"store_id"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"holiday": {
"id": 10,
"store_id": 1,
"title": "independant day",
"date": "2018-08-15",
"created_by": 1,
"created_at": "2018-06-13 14:17:13",
"modified_by": null,
"updated_at": "2018-06-13 14:17:13",
"store": {
"id": 1,
"address": "Rajkot"
}
},
"message": "Holiday created successfully.",
"href": "api/v1/admin/holidays"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"holidayDate": [
"The holiday date field is required."
],
"title": [
"The title field is required."
],
"store_id": [
"The store id field is required."
]
},
"href": "api/v1/admin/holidays"
}View a holiday ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"holiday": {
"id": 1,
"store_id": 2,
"title": "republic day",
"date": "2018-01-26",
"created_by": 1,
"created_at": "2018-06-06 16:34:23",
"modified_by": null,
"updated_at": "2018-06-13 14:17:10",
"store": {
"id": 2,
"address": "Ahmedabad"
}
},
"message": "Holiday detail.",
"href": "api/v1/admin/holidays/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Holiday not found."
],
"href": "api/v1/admin/holidays/15"
}View a holidayGET/api/v1/admin/holidays/{holiday_id}
Endpoint information
| Requires authentication | Yes |
- holiday_id
number(required) Example: 1Id of the holiday.
Update a holiday ¶
Headers
Content-Type: application/jsonBody
{
"holidayDate": "2018-01-26",
"store_id": "2",
"title": "republic day"
}Schema
{
"type": "object",
"properties": {
"holidayDate": {
"type": "date",
"description": "The date for the holiday",
"rule": "The date format must be YYYY-MM-DD"
},
"title": {
"type": "string",
"description": "The title for the holiday",
"rule": "The max length is 255"
},
"store_id": {
"type": "number",
"description": "The store for the holiday to add",
"rule": "The max number of digits is 10 and must exists from available stores"
}
},
"required": [
"holidayDate",
"title",
"store_id"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"holiday": {
"id": 1,
"store_id": 2,
"title": "republic day",
"date": "2018-01-26",
"created_by": 1,
"created_at": "2018-06-06 16:34:23",
"modified_by": null,
"updated_at": "2018-06-13 14:17:10",
"store": {
"id": 2,
"address": "Ahmedabad"
}
},
"message": "Holiday updated successfully.",
"href": "api/v1/admin/holidays/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"holidayDate": [
"The holiday date field is required."
],
"title": [
"The title field is required."
],
"store_id": [
"The store id field is required."
]
},
"href": "api/v1/admin/holidays"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Holiday not found."
],
"href": "api/v1/admin/holidays/16"
}Update a holidayPUT/api/v1/admin/holidays/{holiday_id}
Endpoint information
| Requires authentication | Yes |
- holiday_id
number(required) Example: 1Id of the holiday.
Delete a holiday ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Holiday deleted successfully.",
"href": "api/v1/admin/holidays/6"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Holiday not found."
],
"href": "api/v1/admin/holidays/15"
}Delete a holidayDELETE/api/v1/admin/holidays/{holiday_id}
Endpoint information
| Requires authentication | Yes |
- holiday_id
number(required) Example: 112Id of the holiday.
Device ¶
Create a device ¶
Headers
Content-Type: multipart/form-dataBody
{
"name": "iphone SE",
"duration": "120",
"description": "device of iphone category",
"deviceCategory": 1, /* id of device_category */
"device_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the device",
"rule": "The min length is 3 and the max length is 64"
},
"duration": {
"type": "number",
"description": "The duration for the device",
"rule": "The max value is 120"
},
"description": {
"type": "string",
"description": "The description for the device",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"deviceCategory": {
"type": "number",
"description": "The device category of device",
"rule": "The max number of digits is 10 and must exists from available device_categories"
},
"device_image": {
"type": "file",
"description": "The image for the device",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"duration",
"deviceCategory"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"devices": {
"id": 121,
"name": "iphone SE",
"description": "device of iphone category",
"category_id": 1,
"repair_duration": 30,
"isActive": 1,
"image": "device_images/maxresdefault-x4FKp9.jpg",
"created_by": 1,
"created_at": "2018-06-14 12:12:35",
"modified_by": null,
"updated_at": "2018-06-14 12:12:35",
"image_url": "http://repairrabbit.test/storage/images/device_images/p2-YomrfU.jpg",
"category": {
"id": 1,
"name": "iPhone"
}
},
"message": "Device created successfully.",
"href": "api/v1/admin/devices"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"duration": [
"The duration field is required."
],
"deviceCategory": [
"The device category field is required."
]
},
"href": "api/v1/admin/devices"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device iphonew already exists for the selected device category."
],
"href": "api/v1/admin/devices"
}View a device ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"device": {
"id": 1,
"name": "iPhone 5",
"description": "Apple iPhone 5",
"category_id": 1,
"repair_duration": 30,
"isActive": 1,
"image": null,
"created_by": 1,
"created_at": "2018-06-14 13:16:08",
"modified_by": 1,
"updated_at": "2018-06-14 13:16:08",
"image_url": "http://repairrabbit.test/storage/images/device_images/p2-YomrfU.jpg",
"category": {
"id": 1,
"name": "iPhone"
}
},
"message": "Device detail.",
"href": "api/v1/admin/devices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device not found."
],
"href": "api/v1/admin/holidays/15"
}View a deviceGET/api/v1/admin/devices/{device_id}
Endpoint information
| Requires authentication | Yes |
- device_id
number(required) Example: 1Id of the device.
Update a device ¶
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT"
"name": "iphone SE",
"duration": "120",
"description": "device of iphone category",
"deviceCategory": 1, /* id of device_category */
"device_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the device",
"rule": "The min length is 3 and the max length is 64"
},
"duration": {
"type": "number",
"description": "The duration for the device",
"rule": "The max value is 120"
},
"description": {
"type": "string",
"description": "The description for the device",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"deviceCategory": {
"type": "number",
"description": "The device category of device",
"rule": "The max number of digits is 10 and must exists from available device_categories"
},
"device_image": {
"type": "file",
"description": "The image for the device",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"duration",
"deviceCategory"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"devices": {
"id": 2,
"name": "iPhone 5",
"description": "device of iphone category",
"category_id": 1,
"repair_duration": 30,
"isActive": 1,
"image": "device_images/maxresdefault-lZhNoS.jpg",
"created_by": 1,
"created_at": "2018-06-13 18:32:38",
"modified_by": 1,
"updated_at": "2018-06-14 12:27:38",
"image_url": "http://repairrabbit.test/storage/images/device_images/p2-YomrfU.jpg",
"category": {
"id": 1,
"name": "iPhone"
}
},
"message": "Device updated successfully.",
"href": "api/v1/admin/devices/2"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"duration": [
"The duration field is required."
],
"deviceCategory": [
"The device category field is required."
]
},
"href": "api/v1/admin/devices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device not found."
],
"href": "api/v1/admin/devices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device iphonew already exists for the selected device category."
],
"href": "api/v1/admin/devices/1"
}Update a devicePOST/api/v1/admin/devices/{device_id}
Endpoint information
| Requires authentication | Yes |
- device_id
number(required) Example: 1Id of the device.
Delete a device ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Device deleted successfully.",
"href": "api/v1/admin/devices/120"
}
or
{
"success": false,
"message": "Sorry! To delete this item make sure to delete all the associated entities first.",
"data": {
"tickets": [
{
"friendly_id": "YNT-400"
},
{
"friendly_id": "XLP-620"
}
],
"appointments": [
{
"appointment_id": 1
},
{
"appointment_id": 3
}
],
"products": [
{
"id": 1
}
]
},
"href": "api/v1/admin/devices/2"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device not found."
],
"href": "api/v1/admin/devices/15"
}Delete a deviceDELETE/api/v1/admin/devices/{device_id}
Endpoint information
| Requires authentication | Yes |
- device_id
number(required) Example: 112Id of the device.
Check name for device ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": true,
"message": "A device did not exist with this name.",
"href": "api/v1/admin/customers/name-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": false,
"message": "A device already exists with this name.",
"href": "api/v1/admin/stores/name-check"
}Check name for deviceGET/api/v1/admin/devices/name-check{?name,device_id,category_id}
Endpoint information
| Requires authentication | Yes |
- name
string(required) Example: iphoneName to check wheather is exists.
- device_id
number(required) Example: 4Id of device required when edit own device’name in device detail.
- category_id
number(required) Example: 4Id of device category required.
Change status of device to activate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Device activated successfully.",
"href": "api/v1/admin/devices/1/active"
}
or
{
"success": true,
"message": "Device already activated.",
"href": "api/v1/admin/devices/1/active"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device not found."
],
"href": "api/v1/admin/devices/1/active"
}Activate devicePUT/api/v1/admin/devices/{device_id}/active
Endpoint information
| Requires authentication | Yes |
- device_id
number(required) Example: 4Id of device required to change status of it.
Change status of device to deactivate ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Device deactivated successfully.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": true,
"message": "Device already deactivated.",
"href": "api/v1/admin/stores/1/deactive"
}
or
{
"success": false,
"message": "Sorry! To deactivate, you need to clear all entities associated with it.",
"data": {
"tickets": [
{
"ticket_friendly_id": "JCD-748"
}
],
"appointments": [
{
"appointment_id": 4
}
]
},
"href": "api/v1/admin/stores/1/deactive"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device not found."
],
"href": "api/v1/admin/stores/1/deactive"
}Deactivate devicePUT/api/v1/admin/devices/{device_id}/deactive
Endpoint information
| Requires authentication | Yes |
- device_id
number(required) Example: 4Id of store required to change status of it.
Device Category ¶
Create a device category ¶
Headers
Content-Type: multipart/form-dataBody
{
"name": "iphone",
"description": "device category of iphone",
"category_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the device category",
"rule": "The min length is 3 and the max length is 64"
},
"description": {
"type": "string",
"description": "The description for the device category",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"category_image": {
"type": "file",
"description": "The image for the device category",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"device_category": {
"id": 197,
"name": "oneplus",
"description": "oneplue category of mobile",
"image": "device_category_images/maxresdefault-lFPHfs.jpg",
"created_by": 1,
"created_at": "2018-06-14 15:38:21",
"modified_by": null,
"updated_at": "2018-06-14 15:38:21",
"image_url": "http://repairrabbit.test/storage/images/device_category_images/p2-97loeU.jpg"
},
"message": "Device category created successfully.",
"href": "api/v1/admin/device_categories"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
]
}
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device category oneplus already exists."
],
"href": "api/v1/admin/device_categories"
}Create a device categoryPOST/api/v1/admin/device_categories
Endpoint information
| Requires authentication | Yes |
View a device category ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"device_category": {
"id": 1,
"name": "iPhone",
"description": "iPhone repair",
"image": null,
"created_by": 1,
"created_at": "2018-06-14 15:06:18",
"modified_by": 1,
"updated_at": "2018-06-14 15:06:18",
"image_url": "http://repairrabbit.test/storage/images/device_category_images/demo-reparatie-624ixv.jpg"
},
"message": "Device category detail.",
"href": "api/v1/admin/device_categories/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device category not found."
],
"href": "api/v1/admin/device_categories/134"
}View a device categoryGET/api/v1/admin/device_categories/{device_category_id}
Endpoint information
| Requires authentication | Yes |
- device_category_id
number(required) Example: 1Id of the device category.
Update a device ¶
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT",
"name": "iphone",
"description": "device category of iphone",
"device_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the device category",
"rule": "The min length is 3 and the max length is 64"
},
"description": {
"type": "string",
"description": "The description for the device category",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"category_image": {
"type": "file",
"description": "The image for the device category",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"device_category": {
"id": 1,
"name": "oneplus6",
"description": "oneplue category of mobile",
"image": null,
"created_by": 1,
"created_at": "2018-06-14 15:06:18",
"modified_by": 1,
"updated_at": "2018-06-14 15:55:19",
"image_url": null
},
"message": "Device category updated successfully.",
"href": "api/v1/admin/device_categories/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
]
},
"href": "api/v1/admin/device_categories/134"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device category not found."
],
"href": "api/v1/admin/device_categories/2324"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Device category oneplus already exists."
],
"href": "api/v1/admin/device_categories/134"
}Update a devicePOST/api/v1/admin/device_categories/{device_category_id}
Endpoint information
| Requires authentication | Yes |
- device_category_id
number(required) Example: 1Id of the device category.
Delete a device category ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Device category deleted successfully.",
"href": "api/v1/admin/device_categories/197"
}
or
{
"success": false,
"message": "Sorry! To delete this item make sure to delete all the associated entities first.",
"data": {
"devices": [
{
"id": 208
}
]
},
"href": "api/v1/admin/device_categories/197"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Device category not found."
],
"href": "api/v1/admin/device_categories/2123"
}Delete a device categoryDELETE/api/v1/admin/device_categories/{device_category_id}
Endpoint information
| Requires authentication | Yes |
- device_category_id
number(required) Example: 112Id of the device category.
Check name for device category ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": true,
"message": "A device category did not exist with this name.",
"href": "api/v1/admin/customers/name-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": false,
"message": "A device category already exists with this name.",
"href": "api/v1/admin/stores/name-check"
}Check name for device categoryGET/api/v1/admin/device_categories/name-check{?name,device_category_id}
Endpoint information
| Requires authentication | Yes |
- name
string(required) Example: iphoneName to check wheather is exists.
- device_category_id
number(required) Example: 112Id of the device category.
Product ¶
Create a product ¶
Headers
Content-Type: multipart/form-dataBody
{
"name": "iPhone Charger",
"sku": "dsfgsd3",
"price": 120,
"buy_price": 90
"description": "Charger of iphone",
"install_fee": 909,
"device": 1,
"maintain_stock": 0,
"product_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the product",
"rule": "The min length is 3 and the max length is 64"
},
"sku": {
"type": "number",
"description": "The sku for the product",
"rule": "The max length is 50"
},
"price": {
"type": "number",
"description": "The price for the product",
"rule": "The price with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"buy_price": {
"type": "number",
"description": "The buy price for the product",
"rule": "The bye price with regex:/(^\d{1,10}$)/"
},
"description": {
"type": "string",
"description": "The description for the product",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"install_fee": {
"type": "number",
"description": "The install fee for the product",
"rule": "The install fee with regex:/(^\d{1,10}$)/"
},
"device": {
"type": "number",
"description": "The ID of device for the product",
"rule": "The max number of digits is 10 and must exists from available devices"
},
"maintain_stock": {
"type": "number",
"description": "The status for maintain stock of the product",
"rule": "The status from value true:1 or false:0"
},
"product_image": {
"type": "file",
"description": "The product image for the product",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"sku",
"price",
"buy_price",
"install_fee",
"device",
"maintain_stock"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"products": {
"id": 8,
"name": "iPhone Charger",
"sku": "dsfgsd3",
"price": "120.00",
"install_fee": "909",
"buy_price": "90",
"description": "Charger of iphone",
"device_id": 1,
"maintain_stock": 0,
"image": null,
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-14 15:42:38",
"modified_by": null,
"updated_at": "2018-06-14 15:42:38",
"image_url": "http://repairrabbit.test/storage/images/product_images/maxresdefault-IieYH0.jpg",
"device": {
"id": 1,
"name": "iPhone 5"
}
},
"message": "Product created successfully.",
"href": "api/v1/admin/products"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"sku": [
"The sku field is required."
],
"price": [
"The price field is required."
],
"buy_price": [
"The buy price field is required."
],
"install_fee": [
"The install fee field is required."
],
"device": [
"The device field is required."
]
},
"href": "api/v1/admin/products"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Product iPhone 9 already exists for the selected device."
],
"href": "api/v1/admin/products"
}View a product ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"product": {
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"sku": "A000210",
"price": "69.90",
"install_fee": "0",
"buy_price": "0",
"description": "We also recycle the old broken displays by sending them back to the manufacturer.",
"device_id": 1,
"maintain_stock": 1,
"image": "",
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-14 16:30:52",
"modified_by": null,
"updated_at": "2018-06-14 16:30:52",
"image_url": "http://repairrabbit.test/storage/images/product_images/maxresdefault-IieYH0.jpg",
"device": {
"id": 1,
"name": "iPhone 5"
}
},
"message": "Product detail.",
"href": "api/v1/admin/products/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Product not found."
],
"href": "api/v1/admin/products/14"
}View a productGET/api/v1/admin/products/{product_id}
Endpoint information
| Requires authentication | Yes |
- product_id
number(required) Example: 1Id of the product.
Update a Product ¶
Headers
Content-Type: multipart/form-dataBody
{
"name": "iph charger",
"sku": "A2132",
"price": 120,
"buy_price": 90
"description": "",
"install_fee": 909,
"device": 1,
"maintain_stock": 1,
"product_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the product",
"rule": "The min length is 3 and the max length is 64"
},
"sku": {
"type": "number",
"description": "The sku for the product",
"rule": "The max length is 50"
},
"price": {
"type": "number",
"description": "The price for the product",
"rule": "The price with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"buy_price": {
"type": "number",
"description": "The buy price for the product",
"rule": "The bye price with regex:/(^\d{1,10}$)/"
},
"description": {
"type": "string",
"description": "The description for the product",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"install_fee": {
"type": "number",
"description": "The install fee for the product",
"rule": "The install fee with regex:/(^\d{1,10}$)/"
},
"device": {
"type": "number",
"description": "The ID of device for the product",
"rule": "The max number of digits is 10 and must exists from available devices"
},
"maintain_stock": {
"type": "number",
"description": "The status for maintain stock of the product",
"rule": "The status from value true:1 or false:0"
},
"product_image": {
"type": "file",
"description": "The product image for the product",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"sku",
"price",
"buy_price",
"install_fee",
"device",
"maintain_stock"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"products": {
"id": 1,
"name": "iph charger",
"sku": "A2132",
"price": "25.00",
"install_fee": "56",
"buy_price": "123",
"description": "We also recycle the old broken displays by sending them back to the manufacturer.",
"device_id": 1,
"maintain_stock": 1,
"image": "",
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-06 16:34:23",
"modified_by": 1,
"updated_at": "2018-06-14 16:10:01",
"image_url": "http://repairrabbit.test/storage/images/product_images/maxresdefault-IieYH0.jpg",
"device": {
"id": 1,
"name": "iPhone 5"
}
},
"message": "Product updated successfully.",
"href": "api/v1/admin/products/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"sku": [
"The sku field is required."
],
"price": [
"The price field is required."
],
"buy_price": [
"The buy price field is required."
],
"install_fee": [
"The install fee field is required."
],
"device": [
"The device field is required."
]
},
"href": "api/v1/admin/products/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Product not found."
],
"href": "api/v1/admin/products/57"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Product On off switch already exists for the selected device."
],
"href": "api/v1/admin/products/1"
}Update a productPOST/api/v1/admin/products/{product_id}
Endpoint information
| Requires authentication | Yes |
- product_id
number(required) Example: 1Id of the product.
Delete a product ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Product deleted successfully.",
"href": "api/v1/admin/products/3"
}
or
{
"success": false,
"message": "Sorry! To delete this item make sure to delete all the associated entities first.",
"data": {
"tickets": [
{
"friendly_id": "JCD-748"
},
{
"friendly_id": "MCD-748"
}
],
"appointments": [
{
"appointment_id": 2
},
{
"appointment_id": 4
}
]
},
"href": "api/v1/admin/products/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Product not found."
],
"href": "api/v1/admin/products/3"
}Delete a productDELETE/api/v1/admin/products/{product_id}
Endpoint information
| Requires authentication | Yes |
- product_id
string(required) Example: 3Id of the product.
Check name for product ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": true,
"message": "A product did not exist with this name.",
"href": "api/v1/admin/products/name-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": false,
"message": "A product already exists with this name.",
"href": "api/v1/admin/products/name-check"
}Check name for productGET/api/v1/admin/products/name-check{?name,device_id,product_id}
Endpoint information
| Requires authentication | Yes |
- name
string(required) Example: iphone chargerName to check wheather is exists.
- product_id
number(required) Example: 4Id of product required when edit own product’name in product detail.
- device_id
number(required) Example: 4Device id of product required.
Accessory ¶
Gets all Accessory ¶
Retrieves a list of Accessory
Headers
Content-Type: application/jsonBody
{
"success": true,
"accessories": {
"current_page": 1,
"data": [
{
"id": 9,
"price": "80.00",
"sku": "A0002189",
"name": "charger",
"image": null,
"install_fee": "90",
"buy_price": "90",
"maintain_stock": 1,
"description": null,
"deviceId": 365,
"deviceName": "Accessories"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/accessories",
"per_page": "4",
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": "4",
"accessoriesItemList": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/admin/accessories"
}Gets all accessoryGET/api/v1/admin/accessories{?order,orderBy,perPage,search,page}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: name, sku, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Create a accessory ¶
Headers
Content-Type: multipart/form-dataBody
{
"name": "Charger nokia",
"sku": "A123",
"price": 120,
"buy_price": 90
"install_fee": 909,
"maintain_stock": 0,
"accessories_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the accessory",
"rule": "The min length is 3 and the max length is 64"
},
"sku": {
"type": "number",
"description": "The sku for the accessory",
"rule": "The max length is 50"
},
"price": {
"type": "number",
"description": "The price for the accessory",
"rule": "The price with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"buy_price": {
"type": "number",
"description": "The buy price for the accessory",
"rule": "The bye price with regex:/(^\d{1,10}$)/"
},
"description": {
"type": "string",
"description": "The description for the accessory",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"install_fee": {
"type": "number",
"description": "The install fee for the accessory",
"rule": "The install fee with regex:/(^\d{1,10}$)/"
},
"maintain_stock": {
"type": "number",
"description": "The status for maintain stock of the accessory",
"rule": "The status from value true:1 or false:0"
},
"accessories_image": {
"type": "file",
"description": "The accessory image for the accessory",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"sku",
"price",
"buy_price",
"install_fee",
"maintain_stock"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"accessories": {
"id": 15,
"name": "Charger nokia",
"sku": "A123",
"price": "100.00",
"install_fee": "80",
"buy_price": "50",
"description": null,
"device_id": 365,
"maintain_stock": 0,
"image": null,
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-14 18:29:31",
"modified_by": null,
"updated_at": "2018-06-14 18:29:31"
},
"message": "Accessories created successfully.",
"href": "api/v1/admin/accessories"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"sku": [
"The sku field is required."
],
"price": [
"The price field is required."
],
"buy_price": [
"The buy price field is required."
],
"install_fee": [
"The install fee field is required."
]
},
"href": "api/v1/admin/accessories"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Accessories Charger nokia already exists."
],
"href": "api/v1/admin/accessories"
}View a accessory ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"accessories": {
"id": 9,
"name": "charger",
"sku": "A0002189",
"price": "80.00",
"install_fee": "90",
"buy_price": "90",
"description": null,
"device_id": 365,
"maintain_stock": 1,
"image": null,
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-14 17:49:27",
"modified_by": null,
"updated_at": "2018-06-14 17:49:27"
},
"message": "Accessories detail.",
"href": "api/v1/admin/accessories/9"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Accessories not found."
],
"href": "api/v1/admin/accessories/3"
}View a accessoryGET/api/v1/admin/accessories/{access_id}
Endpoint information
| Requires authentication | Yes |
- access_id
number(required) Example: 1Id of the accessory.
Update a Accessory ¶
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT",
"name": "iph charger",
"sku": "A2132",
"price": 25,
"buy_price": 123
"description": "",
"install_fee": 56,
"maintain_stock": 1,
"accessories_image": "image/path"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the accessory",
"rule": "The min length is 3 and the max length is 64"
},
"sku": {
"type": "number",
"description": "The sku for the accessory",
"rule": "The max length is 50"
},
"price": {
"type": "number",
"description": "The price for the accessory",
"rule": "The price with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"buy_price": {
"type": "number",
"description": "The buy price for the accessory",
"rule": "The bye price with regex:/(^\d{1,10}$)/"
},
"description": {
"type": "string",
"description": "The description for the accessory",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
},
"install_fee": {
"type": "number",
"description": "The install fee for the accessory",
"rule": "The install fee with regex:/(^\d{1,10}$)/"
},
"maintain_stock": {
"type": "number",
"description": "The status for maintain stock of the accessory",
"rule": "The status from value true:1 or false:0"
},
"accessories_image": {
"type": "file",
"description": "The accessory image for the accessory",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
}
},
"required": [
"name",
"sku",
"price",
"buy_price",
"install_fee",
"maintain_stock"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"accessories": {
"id": 9,
"name": "iph charger",
"sku": "A2132",
"price": "25.00",
"install_fee": "56",
"buy_price": "123",
"description": null,
"device_id": 365,
"maintain_stock": 1,
"image": null,
"stuurop_only": 0,
"admin_only": 0,
"advanced_time": null,
"created_by": 1,
"created_at": "2018-06-14 17:49:27",
"modified_by": 1,
"updated_at": "2018-06-15 10:26:40"
},
"message": "Accessory updated successfully.",
"href": "api/v1/admin/accessories/9"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
],
"sku": [
"The sku field is required."
],
"price": [
"The price field is required."
],
"buy_price": [
"The buy price field is required."
],
"install_fee": [
"The install fee field is required."
]
},
"href": "api/v1/admin/accessories/9"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Accessories not found."
],
"href": "api/v1/admin/accessories/56"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Accessories Charger nokia already exists."
],
"href": "api/v1/admin/accessories/9"
}Update a accessoryPOST/api/v1/admin/accessories/{access_id}
Endpoint information
| Requires authentication | Yes |
- access_id
number(required) Example: 1Id of the accessory.
Delete a accessory ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Accessory deleted successfully.",
"href": "api/v1/admin/accessories/9"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Accessories not found."
],
"href": "api/v1/admin/accessories/9"
}Delete a accessoryDELETE/api/v1/admin/accessories/{access_id}
Endpoint information
| Requires authentication | Yes |
- access_id
string(required) Example: 3Id of the accessory.
Check name for accessory ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": true,
"message": "A accessory did not exist with this name.",
"href": "api/v1/admin/accessories/name-check"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"name-status": false,
"message": "A accessory already exists with this name.",
"href": "api/v1/admin/accessories/name-check"
}Check name for accessoryGET/api/v1/admin/accessories/name-check{?name,access_id,device_id}
Endpoint information
| Requires authentication | Yes |
- name
string(required) Example: chargerName to check wheather is exists.
- access_id
number(required) Example: 4Id of accessory required when edit own accessory’name in accessory detail.
- device_id
number(required) Example: 365Device id of accessory required.
Stock ¶
Gets all Stock ¶
Retrieves a list of stocks
Headers
Content-Type: application/jsonBody
{
"success": true,
"stocks": {
"current_page": 1,
"data": [
{
"device": "iPhone 5",
"store": "Rajkot",
"storeId": 1,
"productId": 1,
"product": "Display (LCD) damage, glass broken black",
"sku": "A000210",
"quantity": 40,
"price": "69.90",
"install_fee": "0"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/stocks",
"per_page": "2",
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "install_fee",
"sortOrder": "desc",
"items_per_page": "2",
"stockListOptions": [
10,
20,
30,
40,
50
],
"device_options": [
{
"id": 1,
"isActive": 1,
"device_name": "iPhone 5"
},
{
"id": 2,
"isActive": 1,
"device_name": "Samsung Galaxy J2"
},
{
"id": 3,
"isActive": 1,
"device_name": "Samsung J5"
}
],
"device_filter_id": "",
"searchString": ""
},
"message": "",
"href": "api/v1/admin/stocks"
}Gets all stockGET/api/v1/admin/products{?order,orderBy,perPage,search,page,filterStatus,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: device_name, product_name, sku, price, install_fee, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 0id of active device to get filter
- store_id
number(optional) Example: 1Gives only selected store’s stock
Add stock in store ¶
Headers
Content-Type: application/jsonBody
{
"store": 1, /* id of the store to add stock in that store. */
"stocks": [
{
"productId": 1,
"quantity": 1,
"reason": "required stock"
},
{
"productId": 2,
"quantity": 1,
"reason": "stock reason"
}
]
}Schema
{
"type": "object",
"properties": {
"store": {
"type": "number",
"description": "The ID of store for the stock",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"stocks": {
"type": "array",
"description": "The product's id array",
"subproperties": {
"productId": {
"type": "number",
"description": "The ID of product for the stock",
"rule": "The max number of digits is 10 and must exists from available products",
"required": "true"
},
"quantity": {
"type": "number",
"description": "The quantity of product for the stock",
"rule": "The max number of digits 11 are allowed",
"required": "true"
},
"reason": {
"type": "string",
"description": "The reason for the stock to add",
"rule": "The reason max length is 250"
}
}
}
},
"required": [
"store",
"stocks"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Stock added successfully to store.",
"href": "api/v1/admin/stocks"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"stocks": [
"The stocks field is required."
]
},
"href": "api/v1/admin/stocks"
}Transfer stock in store ¶
Headers
Content-Type: application/jsonBody
{
"source_store": 1, /* id of the store from that the stock transfer into another. */
"target_store": 2, /* id of the store to get stock transfers. */
"stocks": [
{
"productId": 1,
"quantity": 1,
"reason": "Stock transfered"
},
{
"productId": 2,
"quantity": 1,
"reason": "Stock transfered because of needs"
}
]
}Schema
{
"type": "object",
"properties": {
"source_store": {
"type": "number",
"description": "The source store id to transfer products",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"target_store": {
"type": "number",
"description": "The target store id to get transfer products",
"rule": "The max number of digits is 10 and must exists from available stores and must be different from source_store"
},
"stocks": {
"type": "array",
"description": "The product's id array",
"subproperties": {
"productId": {
"type": "number",
"description": "The ID of product for the stock",
"rule": "The max number of digits is 10 and must exists from available products",
"required": "true"
},
"quantity": {
"type": "number",
"description": "The quantity of product for the stock",
"rule": "The max number of digits 11 are allowed and it can not be greater than source_store's stock",
"required": "true"
},
"reason": {
"type": "string",
"description": "The reason for the stock to add",
"rule": "The reason max length is 250"
}
}
}
},
"required": [
"source_store",
"target_store",
"stocks"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Stock transfered successfully.",
"href": "api/v1/admin/stocks"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"stocks": [
"The stocks field is required."
]
},
"href": "api/v1/admin/stocks"
}Return stock from store ¶
Headers
Content-Type: application/jsonBody
{
"store": 1, /* id of the store from that the stock return. */
"stocks": [
{
"productId": 1,
"quantity": 1,
"reason": "Stock return"
},
{
"productId": 2,
"quantity": 1,
"reason": "Stock return because of damage"
}
]
}Schema
{
"type": "object",
"properties": {
"store": {
"type": "number",
"description": "The ID of store for the stock",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"stocks": {
"type": "array",
"description": "The product's id array",
"subproperties": {
"productId": {
"type": "number",
"description": "The ID of product for the stock",
"rule": "The max number of digits is 10 and must exists from available products",
"required": "true"
},
"quantity": {
"type": "number",
"description": "The quantity of product for the stock",
"rule": "The max number of digits 11 are allowed and it can not be greater than store's stock",
"required": "true"
},
"reason": {
"type": "string",
"description": "The reason for the stock to add",
"rule": "The reason max length is 250"
}
}
}
},
"required": [
"store",
"stocks"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Stock returned successfully.",
"href": "api/v1/admin/stocks"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"stocks": [
"The stocks field is required."
]
},
"href": "api/v1/admin/stocks"
}Gets all Stock History ¶
Retrieves a list of stock history
Headers
Content-Type: application/jsonBody
{
"success": true,
"stocks_histories": {
"current_page": 1,
"data": [
{
"employee": "employee",
"ticket_friendly_id": "JCD-748",
"ticket_id": 3,
"reason": "device used in ticket JCD-748",
"diff": -1,
"old_diff": 38,
"new_diff": 37,
"productId": 1,
"sku": "A000210",
"product": "Display (LCD) damage, glass broken black",
"storeId": 1,
"store_name": "Rajkot",
"updated_at": "2018-06-18 10:38:08"
},
{
"employee": null,
"ticket_friendly_id": null,
"ticket_id": null,
"reason": "initial stock",
"diff": 10,
"old_diff": 10,
"new_diff": 20,
"productId": 1,
"sku": "A000210",
"product": "Display (LCD) damage, glass broken black",
"storeId": 2,
"store_name": "Ahmedabad",
"updated_at": "2018-06-15 18:26:10"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/stocks/history",
"per_page": 10,
"prev_page_url": null,
"to": 7,
"total": 7
},
"meta": {
"orderBy": "updated_at",
"sortOrder": "desc",
"items_per_page": 10,
"stockHistoryListOptions": [
10,
20,
30,
40,
50
],
"stock_history_options": [
"All Reasons",
"Added",
"Return",
"Transfer",
"Repaired",
"Damaged",
"Ticket Closed"
],
"stock_history_filter_id": "",
"searchString": ""
},
"message": "",
"href": "api/v1/admin/stocks/history"
}Gets all stock historyGET/api/v1/admin/stocks/history{?order,orderBy,perPage,search,page,filterStatus,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: employee, product_name, store_name, sku, ticket_fid, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 0id of stock history options to get filter like add, return, transfer, etc.
- store_id
number(optional) Example: 1Gives selected store’s stock history
Gets Product Stock History ¶
Retrieves a list of product stock history
Headers
Content-Type: application/jsonBody
{
"success": true,
"product_history": {
"current_page": 1,
"data": [
{
"employee": "Admin",
"product": "Display (LCD) damage, glass broken black",
"diff": 20,
"created_by": 1,
"reason": "initial stock",
"updated_at": "2018-06-18 10:55:35"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/stocks/products/1/history/1",
"per_page": 10,
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "updated_at",
"sortOrder": "desc",
"items_per_page": 10,
"productHistoryListOptions": [
10,
20,
30,
40,
50
],
"product_history_options": [
"all",
"added",
"return",
"transfer",
"repaired",
"damaged",
"tickets closed"
],
"product_history_filter_id": "",
"searchString": "",
"provisionalQty": 1,
"productInfo": {
"product": "Display (LCD) damage, glass broken black",
"store": "Rajkot",
"availableQty": 40,
"productId": 1,
"storeId": 1
}
},
"message": "",
"href": "api/v1/admin/stocks/products/1/history/1"
}Gets product stock historyGET/api/v1/admin/stocks/products/{product_id}/history/{store_id}{?order,orderBy,perPage,search,page,filterStatus}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: employee, updated_at, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 0id of product history options to get filter like add, return, transfer, etc.
- store_id
number(required) Example: 1Gives selected store’s product history
- product_id
number(required) Example: 1Gives selected product’s history
Gets Required Stock Products ¶
Retrieves a list of required stock product
Headers
Content-Type: application/jsonBody
{
"success": true,
"required_products": {
"current_page": 1,
"data": [
{
"provisional_qty": 2,
"available_qty": 1,
"product_id": 2,
"name": "On off switch",
"sku": "A000223",
"price": "99.90",
"install_fee": "10",
"store_id": 2,
"device_name": "Samsung Galaxy J2",
"store_name": "Ahmedabad"
},
{
"provisional_qty": 1,
"available_qty": -1,
"product_id": 1,
"name": "Display (LCD) damage, glass broken black",
"sku": "A000210",
"price": "69.90",
"install_fee": "0",
"store_id": 1,
"device_name": "iPhone 5",
"store_name": "Rajkot"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/stocks/required-products",
"per_page": 10,
"prev_page_url": null,
"to": 2,
"total": 2
},
"meta": {
"orderBy": "provisional_qty",
"sortOrder": "desc",
"items_per_page": 10,
"stockProductListOptions": [
10,
20,
30,
40,
50
],
"device_options": [
{
"id": 1,
"isActive": 1,
"device_name": "iPhone 5"
},
{
"id": 2,
"isActive": 1,
"device_name": "Samsung Galaxy J2"
},
{
"id": 3,
"isActive": 1,
"device_name": "Samsung J5"
}
],
"device_filter_id": "",
"searchString": ""
},
"message": "",
"href": "api/v1/admin/stocks/required-products"
}Gets required stock productGET/api/v1/admin/stocks/required-products/{?order,orderBy,perPage,search,page,filterStatus,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: device_name, product_name, install_fee, sku, price, store_name, available_qty, provisional_qty, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- filterStatus
number(optional) Example: 0id of device options to get filter
- store_id
number(optional) Example: 1Gives selected store’s required products
Invoice ¶
Gets all Invoice ¶
Retrieves a list of all invoice.
Headers
Content-Type: application/jsonBody
{
"success": true,
"invoices": {
"current_page": 1,
"data": [
{
"id": 3,
"friendly_id": 17000012,
"ticket_id": null,
"user_id": 4,
"store_id": 1,
"discount_description": "17000012",
"amount": "199.80",
"vat_percentage": "21.00",
"vat_amount": "24.26",
"discount": "0.00",
"discount_amount": "0.00",
"discount_in": "amount",
"payment_mode": "card",
"on_account": null,
"generated_by": 2,
"invoice_description": "test 123",
"created_by": 1,
"created_at": "2018-06-15 12:38:41",
"modified_by": null,
"updated_at": "2018-06-15 12:38:41",
"store_name": "Rajkot",
"ticket_fid": null
},
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/admin/invoices",
"per_page": "3",
"prev_page_url": null,
"to": 3,
"total": 3
},
"meta": {
"orderBy": "id",
"sortOrder": "desc",
"items_per_page": "3",
"start_date": "2018-05-15",
"end_date": "2018-06-15",
"cashPayment": 99.9,
"cardPayment": 299.7,
"invoiceAmount": 399.6,
"dateFilterLabel": "Last 30 days",
"searchString": "",
"invoiceListOptions": [
10,
20,
30,
40,
50
]
},
"message": "",
"href": "api/v1/admin/invoices"
}Gets all invoice.GET/api/v1/admin/invoices{?order,orderBy,perPage,search,page,customer_id,start_date,end_date,label,store_id}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: customer_name, employee_name, device_name, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
- customer_id
number(optional) Example: 1Gives only selected customer’s invoice.
- start_date
number(optional) Example: 2018-05-19Date in formate of Y-m-d to get data from that starting date.
- end_date
number(optional) Example: 2018-06-19Date in formate of Y-m-d to get data from that ending date.
- label
string(optional) Example: last 30 DaysLabel selected for calendar.
- store_id
number(optional) Example: 1Gives only selected store’s ticket.
Create an invoice ¶
Headers
Content-Type: application/jsonBody
{
"products": [
{
"product_id": 1,
"quantity": 1,
"item_type": "product"
},
{
"product_id": 2,
"quantity": 1,
"item_type": "product"
}
],
"store": 1,
"customer_id": 4,
"invoice_description": "test invoice",
"wants_in_mail": 0,
"discount_description": "",
"discount": 0,
"discount_option": "amount",
"payment_mode": "cash",
"on_account": 0
}Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"description": "The product's id array",
"subproperties": {
"product_id": {
"type": "number",
"description": "The ID of product for the invoice",
"rule": "The max number of digits is 10 and must exists from available products",
"required": "true"
},
"quantity": {
"type": "number",
"description": "The quantity of product for the invoice",
"rule": "Product's quantity can not be greater than the max quantity added in stock of store",
"required": "true"
},
"item_type": {
"type": "string",
"description": "The type of product for the invoice",
"rule": "The type must be from product or accessory"
}
}
},
"store": {
"type": "number",
"description": "The ID of store for the invoice",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"customer_id": {
"type": "number",
"description": "The ID of customer for the invoice",
"rule": "The max number of digits is 10 and must exists from available customers"
},
"invoice_description": {
"type": "string",
"description": "The description for the invoice"
},
"wants_in_mail": {
"type": "string",
"description": "The status to get invoice in mail",
"rule": "The value must be from 0 or 1"
},
"discount_description": {
"type": "string",
"description": "The discount_description for the invoice"
"rule": "The discount_description max length is 100"
},
"discount": {
"type": "email",
"description": "The discount for the invoice",
"rule": "The discount with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"discount_option": {
"type": "string",
"description": "The discount_option for the invoice",
"rule": "The discount_option must be from percent,amount"
},
"payment_mode": {
"type": "string",
"description": "The payment_mode for the invoice",
"rule": "The payment_mode must be from cash,card"
},
"on_account": {
"type": "string",
"description": "The count of days with that the amount of invocie is paid",
"rule": "The on_account must be from 0,7,14,21,45,60"
}
},
"required": [
"customer_id",
"store",
"invoice_description",
"products"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"invoice": [
{
"id": 9,
"friendly_id": 18008745,
"ticket_id": null,
"user_id": 4,
"store_id": 1,
"discount_description": null,
"amount": "169.80",
"vat_percentage": "21.00",
"vat_amount": "29.47",
"discount": "0.00",
"discount_amount": "0.00",
"discount_in": "amount",
"payment_mode": "cash",
"on_account": 0,
"generated_by": 1,
"invoice_description": "test invoice",
"created_by": 1,
"created_at": "2018-06-15 16:38:35",
"modified_by": null,
"updated_at": "2018-06-15 16:38:35"
}
],
"meta": {
"invoiceProducts": [
{
"name": "Display (LCD) damage, glass broken black",
"sku": "A000210",
"product_id": 1,
"unit_price": "99.90",
"quantity": 40,
"price": "69.90"
},
{
"name": "iphone charger",
"sku": "A000123",
"product_id": 2,
"unit_price": "99.90",
"quantity": 1,
"price": "99.90"
}
],
"total_price": 2895.9,
"vat_divisor": 1.21
},
"message": "Invoice created successfully.",
"href": "api/v1/admin/invoices"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"customer_id": [
"The customer id field is required."
],
"store": [
"The store field is required."
],
"invoice_description": [
"The invoice description field is required."
],
"products": [
"The products field is required."
],
},
"href": "api/v1/admin/invoices"
}View an invoice ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"invoice": {
"id": 1,
"friendly_id": 17028744,
"ticket_id": null,
"user_id": 4,
"store_id": 2,
"discount_description": "17028744",
"amount": "99.90",
"vat_percentage": "21.00",
"vat_amount": "17.34",
"discount": "0.00",
"discount_amount": "0.00",
"discount_in": "amount",
"payment_mode": "card",
"on_account": null,
"generated_by": 2,
"invoice_description": "test Description",
"created_by": 1,
"created_at": "2018-06-15 12:38:41",
"modified_by": null,
"updated_at": "2018-06-15 12:38:41",
"user": {
"id": 4,
"name": "customer",
"customer": {
"id": 1,
"user_id": 4
}
},
"store": {
"id": 2,
"address": "Ahmedabad"
}
},
"meta": {
"invoiceProducts": [
{
"name": "Display (LCD) damage, glass broken black",
"sku": "A000210",
"product_id": 1,
"unit_price": "99.90",
"quantity": 2,
"price": "69.90",
"quantity_price": 199.8
}
],
"total_price": 99.9,
"total_product_price": 99.9,
"total_price_extraItems": 0,
"extraInvoiceItems": [],
"vat_divisor": 1.21,
"on_account_day_list": [
0,
7,
14,
21,
45,
60
]
},
"message": "Invoice detail.",
"href": "api/v1/admin/invoices/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Invoice not found."
],
"href": "api/v1/admin/invoices/14"
}View an invoiceGET/api/v1/admin/invoices/{invoice_id}
Endpoint information
| Requires authentication | Yes |
- invoice_id
number(required) Example: 1Id of the invoice.
Delete an invoice ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"message": "Invoice deleted successfully.",
"href": "api/v1/admin/invoices/2"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Invoice not found."
],
"href": "api/v1/admin/invoices/14"
}Delete an invoiceDELETE/api/v1/admin/invoices/{invoice_id}
Endpoint information
| Requires authentication | Yes |
- invoice_id
number(required) Example: 1Id of the invoice.
List of store product with accessories ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"products": [
{
"productId": 1,
"product_name": "Display (LCD) damage, glass broken black",
"price": "69.90",
"sku": "A000210",
"quantity": 26,
"maintain_stock": 1,
"device_name": "iPhone 5"
}
],
"accessories": [
{
"productId": 4,
"product_name": "iphone charger",
"price": "99.90",
"sku": "A000123",
"maintain_stock": 1,
"quantity": 10,
"device_name": "Accessories"
}
],
"href": "api/v1/admin/store/1/products-with-accessories"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Store not found."
],
"href": "api/v1/admin/store/198/products-with-accessories"
}List of store product with accessoriesGET/api/v1/admin/store/{store_id}/products-with-accessories{?fromDirectInvoice}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 4Id of store for get list of product or accessories.
- fromDirectInvoice
number(required) Example: 0Flag required for generate invoice from ticket and display only accessories if store contains.
Generate an invoice from ticket ¶
Headers
Content-Type: application/jsonBody
{
"accessories": [
{
"product_id": 17,
"quantity": 1,
"item_type": "accessories"
},
],
"store": 1,
"customer_id": 4,
"invoice_description": "",
"wants_in_mail": 0,
"discount_description": "",
"discount": 0,
"discount_option": "amount",
"payment_mode": "cash",
"on_account": 0
}Schema
{
"type": "object",
"properties": {
"accessories": {
"type": "array",
"description": "The accessory's id array",
"subproperties": {
"product_id": {
"type": "number",
"description": "The ID of product for the invoice",
"rule": "The max number of digits is 10 and must exists from available products",
"required": "true"
},
"quantity": {
"type": "number",
"description": "The quantity of product for the invoice",
"rule": "Product's quantity can not be greater than the max quantity added in stock of store",
"required": "true"
},
"item_type": {
"type": "string",
"description": "The type of product for the invoice",
"rule": "The type must be from product or accessory"
}
}
},
"store": {
"type": "number",
"description": "The ID of store for the invoice",
"rule": "The max number of digits is 10 and must exists from available stores"
},
"customer_id": {
"type": "number",
"description": "The ID of customer for the invoice",
"rule": "The max number of digits is 10 and must exists from available customers"
},
"invoice_description": {
"type": "string",
"description": "The description for the invoice"
},
"wants_in_mail": {
"type": "string",
"description": "The status to get invoice in mail",
"rule": "The value must be from 0 or 1"
},
"discount_description": {
"type": "string",
"description": "The discount_description for the invoice"
"rule": "The discount_description max length is 100"
},
"discount": {
"type": "email",
"description": "The discount for the invoice",
"rule": "The discount with regex:/(^\d{1,10}(.\d{1,2})?$)/"
},
"discount_option": {
"type": "string",
"description": "The discount_option for the invoice",
"rule": "The discount_option must be from percent,amount"
},
"payment_mode": {
"type": "string",
"description": "The payment_mode for the invoice",
"rule": "The payment_mode must be from cash,card"
},
"on_account": {
"type": "string",
"description": "The count of days with that the amount of invocie is paid",
"rule": "The on_account must be from 0,7,14,21,45,60"
},
"extra_items": {
"type": "array",
"description": "The extra_items for the invoice",
"subproperties": {
"sku": {
"type": "string",
"description": "The sku of the extra item for the invoice",
"rule": "The sku max length is 64",
"required": "true"
},
"name": {
"type": "number",
"description": "The name of extra item for the invoice",
"rule": "The name max length is 96",
"required": "true"
},
"description": {
"type": "string",
"description": "The description of extra item for the invoice",
},
"price": {
"type": "string",
"description": "The type of product for the invoice",
"rule": "The price with regex:/(^\d{1,10}(.\d{1,2})?$)/",
"required": "true"
}
}
}
},
"required": [
"invoice_description"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"invoice": [
{
"id": 32,
"friendly_id": 18018747,
"ticket_id": 1,
"user_id": 4,
"store_id": 1,
"discount_description": null,
"amount": "179.90",
"vat_percentage": "21.00",
"vat_amount": "31.22",
"discount": "0.00",
"discount_amount": "0.00",
"discount_in": "amount",
"payment_mode": "cash",
"on_account": 0,
"generated_by": 1,
"invoice_description": "test",
"created_by": 1,
"created_at": "2018-06-19 18:15:01",
"modified_by": null,
"updated_at": "2018-06-19 18:15:01",
"ticket_fid": "YNT-400"
}
],
"meta": {
"invoiceProducts": [
{
"id": 2,
"product_id": 2,
"product_name": "On off switch",
"sku": "A000223",
"product_price": "99.90",
"install_fee": "20",
"deviceDelete": null,
"device_name": "Samsung Galaxy J2"
}
],
"accessories": [],
"extraInvoiceItems": [
{
"name": "1sdfsdf2",
"sku": "swdfsd",
"price": "123.00",
"description": "accessoriesfcsdfdf"
}
],
"total_price": 222.9,
"total_product_price": 99.9,
"total_price_extraItems": 123,
"vat_divisor": 1.21
},
"message": "Invoice created successfully.",
"href": "api/v1/admin/tickets/1/invoice"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"invoice_description": [
"The invoice description field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/admin/tickets/1/invoice"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": {
"id": 34,
"friendly_id": 18018747,
"ticket_id": 1,
"user_id": 4,
"store_id": 1,
"discount_description": null,
"amount": "179.90",
"vat_percentage": "21.00",
"vat_amount": "31.22",
"discount": "0.00",
"discount_amount": "0.00",
"discount_in": "amount",
"payment_mode": "cash",
"on_account": 0,
"generated_by": 1,
"invoice_description": "test",
"created_by": 1,
"created_at": "2018-06-19 18:21:31",
"modified_by": null,
"updated_at": "2018-06-19 18:21:31"
},
"messages": "Invocie already generated for this ticket.For any change in this invocie please delete this.",
"href": "api/v1/admin/tickets/1/invoice"
}Generate an invoice from ticketPOST/api/v1/admin/tickets/{ticket_id}/invoice
Endpoint information
| Requires authentication | Yes |
- ticket_id
number(required) Example: 1Id of ticket for generate invoice for that ticket.
Dashboard ¶
Gets dashboard data ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"appointmentsToday": [],
"stores": [
{
"address": "Rajkot",
"id": 1
}
],
"stocks": [
{
"productId": 1,
"product_name": "Display (LCD) damage, glass broken black",
"quantity": "40",
"total_price": "400"
}
],
"ytdConfirmedAppointments": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"ytdPrevYearConfirmedAppointments": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"ytdUnconfirmedAppointments": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"PrevYearUnconfirmedAppointments": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"activeEmployees": 3,
"deactiveEmployees": 0,
"activeStores": 1,
"deactiveStores": 0,
"ytdClosedTickets": [
{
"id": 6,
"short_name": "Jun",
"count": 1
},
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"ytdPrevYearClosedTickets": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"ytdStartTickets": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"PrevYearStartTickets": [
{
"id": 1,
"short_name": "Jan",
"count": 0
},
{
"id": 2,
"short_name": "Feb",
"count": 0
},
{
"id": 3,
"short_name": "Mar",
"count": 0
},
{
"id": 4,
"short_name": "Apr",
"count": 0
},
{
"id": 5,
"short_name": "May",
"count": 0
},
{
"id": 6,
"short_name": "Jun",
"count": 0
},
{
"id": 7,
"short_name": "Jul",
"count": 0
},
{
"id": 8,
"short_name": "Aug",
"count": 0
},
{
"id": 9,
"short_name": "Sep",
"count": 0
},
{
"id": 10,
"short_name": "Oct",
"count": 0
},
{
"id": 11,
"short_name": "Nov",
"count": 0
},
{
"id": 12,
"short_name": "Dec",
"count": 0
}
],
"requiredProducts": 1,
"meta": {
"store_id": "1",
"start_date": "2018-06-14",
"end_date": "2018-06-24"
},
"message": "",
"href": "api/v1/admin/dashboard"
}Gets dashboard dataGET/api/v1/admin/dashboard{?store_id}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store to get data of one store.
Gets count of total repairs ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticketCount": [
{
"date": "2018-06-18",
"count": 1
}
],
"totalRepairCount": 1,
"meta": {
"store_id": "1",
"employee_id": "2",
"start_date": "2018-05-19",
"end_date": "2018-06-19"
},
"message": "",
"href": "api/v1/admin/dashboard/tickets/count"
}Gets count of total repairsGET/api/v1/admin/tickets/count{?store_id,employee_id,start_date,end_date}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store to get data of one store.
- employee_id
number(required) Example: 1Id of the employee to get data of one employee.
- start_date
number(required) Example: 2018-05-19Date in formate of Y-m-d to get data from that starting date.
- end_date
number(required) Example: 2018-06-19Date in formate of Y-m-d to get data from that ending date.
Gets stock total price ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"stocksTotalPrice": 400,
"stocksTotalQuantity": 40,
"meta": {
"store_id": "1",
"product_id": "1"
},
"message": "",
"href": "api/v1/admin/dashboard/stocks/total-price"
}Gets stock total priceGET/api/v1/admin/stocks/total-price{?store_id,product_id}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store to get data of one store.
- product_id
number(required) Example: 1Id of the product to get data of one product.
Gets invoice total amount ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"invoiceFinalAmount": 299.7,
"invoiceAmounts": [
{
"store_id": 1,
"address": "Rajkot",
"total_amount": "299.70"
}
],
"currency": "€",
"meta": {
"store_id": "1",
"start_date": "2018-05-19",
"end_date": "2018-06-19"
},
"message": "",
"href": "api/v1/admin/dashboard/invoices/total-amount"
}Gets invoice total amountGET/api/v1/admin/invoices/total-amount{?store_id,start_date,end_date}
Endpoint information
| Requires authentication | Yes |
- store_id
number(required) Example: 1Id of the store to get data of one store.
- start_date
number(required) Example: 2018-05-19Date in formate of Y-m-d to get data from that starting date.
- end_date
number(required) Example: 2018-06-19Date in formate of Y-m-d to get data from that ending date.
Agenda ¶
Gets data of agenda ¶
Retrieves data of Agenda
Headers
Content-Type: application/jsonBody
{
"success": true,
"agenda": {
"appointments": [
{
"id": 4,
"title": "iPhone 5 - Display (LCD) damage, glass broken black ",
"start": "2018-06-21T17:58:47+05:30",
"end": "2018-06-21T17:58:47+05:30",
"allDay": false,
"type": "appointment",
"borderColor": "#ffffff",
"backgroundColor": "#102929",
"textColor": "#FFF"
}
],
"employeeLeaves": [
{
"id": "0",
"title": "employee",
"start": "2017-07-05T09:00:00+05:30",
"end": "2017-07-05T12:00:00+05:30",
"allDay": false,
"type": "on_leave",
"borderColor": "rgb(41, 161, 230)",
"backgroundColor": "rgb(41, 161, 230)",
"textColor": "#fff"
},
{
"id": "0",
"title": "Admin",
"start": "2017-07-05T14:00:00+05:30",
"end": "2017-07-05T22:00:00+05:30",
"allDay": false,
"type": "on_leave",
"borderColor": "rgb(41, 161, 230)",
"backgroundColor": "rgb(41, 161, 230)",
"textColor": "#fff"
}
],
"storeHoliday": [
{
"title": "Diwali ( Rajkot ) ",
"start": "2017-08-20T00:00:00+05:30",
"allDay": true,
"type": "holiday",
"borderColor": "#fff",
"backgroundColor": "#ffc266",
"textColor": "#fff"
},
{
"title": "vacation ( Ahmedabad ) ",
"start": "2017-09-10T00:00:00+05:30",
"allDay": true,
"type": "holiday",
"borderColor": "#fff",
"backgroundColor": "#ffc266",
"textColor": "#fff"
}
]
},
"meta": {
"start_date": "2018-05-21",
"end_date": "2018-06-21"
},
"message": "Agenda details",
"href": "api/v1/admin/agenda"
}Gets data of agendaGET/api/v1/admin/agenda{?start_date,end_date,store_id}
Endpoint information
| Requires authentication | Yes |
- start_date
number(optional) Example: 2018-05-19Date in formate of Y-m-d to get appointment data from that starting date.
- end_date
number(optional) Example: 2018-06-19Date in formate of Y-m-d to get appointment data from that ending date.
- store_id
number(optional) Example: 1Gives only selected store’s data.
Email Template ¶
Gets all email template ¶
Retrieves a list of email template
Headers
Content-Type: application/jsonBody
{
"success": true,
"email-templates": [
{
"id": 1,
"status": 0,
"name": "Appointment status says \"customer didn't appear\"",
"subject": "We missed you!"
}
],
"meta": {
"email_status_options": [
"All Templates",
"Active",
"Inactive"
],
"email_status_filter_id": ""
},
"message": "",
"href": "api/v1/admin/email-templates"
}Gets all email templateGET/api/v1/admin/email-templates{?filterStatus}
Endpoint information
| Requires authentication | Yes |
- filterStatus
number(optional) Example: 01 : active status of email template & 0 : inactive status of email template
View an email-template ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"email-template": {
"id": 1,
"name": "Appointment status says \"customer didn't appear\"",
"status": 0,
"subject": "We missed you!",
"plaintext_content": "Dear (full_name),\n\n You have made an appointment on (appointment_datetime) at (store_name) but you forgot to appear. Do you still need a repair? Simply create a New Appointment.\n (store_address)",
"html_content": "<p>Dear (full_name),</p>\n\n <p>You have made an appointment on (appointment_datetime) at (store_name) but you forgot to appear. Do you still need a repair? Simply create a <a href=\"(new_appointment_url)\">New Appointment</a>.</p>\n\n <p><strong>(store_address)</strong></p>"
},
"message": "Email template detail.",
"href": "api/v1/admin/email-templates/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Email template not found."
],
"href": "api/v1/admin/email-templates/1123"
}View an email-templateGET/api/v1/admin/email-templates/{email_template_id}
- Here (variable_name) that are exists with
double curly bracesin database.
Endpoint information
| Requires authentication | Yes |
- email_template_id
number(required) Example: 1Id of the email template.
Update an email template ¶
Headers
Content-Type: application/jsonBody
{
"name": "ticket update",
"status": 1,
"subject": "ticket update",
"htmlContent": "<b>(sdcszdcs) dsfc dfsdf defsdef desdf \n edfsdf desdfs</b>"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the email-template",
"rule": "The min length is 3 and the max length is 100"
},
"status": {
"type": "number",
"description": "The status for the email-template",
"rule": "The status from value true:1 or false:0"
},
"subject": {
"type": "string",
"description": "The subject for the email-template",
"rule": "The min length is 10 and the max length is 150"
}
},
"required": [
"name"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"email-template": {
"id": 1,
"name": "ticket update",
"status": 0,
"subject": "ticket update",
"plaintext_content": "(full_name) ticket updated",
"html_content": "<b>(full_name) ticket updated</b>",
"default_content": "",
"created_by": 1,
"created_at": "2018-06-19 17:18:17",
"modified_by": 1,
"updated_at": "2018-06-19 18:04:37"
},
"message": "Email template updated successfully.",
"href": "api/v1/admin/email-templates/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"name": [
"The name field is required."
]
},
"href": "api/v1/admin/email-templates/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Email template not found."
],
"href": "api/v1/admin/email-templates/12312"
}Update an email templatePUT/api/v1/admin/email-templates/{email_template_id}
- Add (variable_name) with
double curly bracesin request body.
Endpoint information
| Requires authentication | Yes |
- email_template_id
number(required) Example: 1Id of the email template.
Change an email template status ¶
Headers
Content-Type: application/jsonBody
{
"status": 1
}Schema
{
"type": "object",
"properties": {
"status": {
"type": "number",
"description": "The status for email-template",
"rule": "The status from value true:1 or false:0"
}
},
"required": [
"status"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Email template status updated successfully.",
"href": "api/v1/admin/email-templates/1/change-status"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"status": [
"The selected status is invalid."
]
},
"href": "api/v1/admin/email-templates/1/change-status"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Email template not found."
],
"href": "api/v1/admin/email-templates/12312"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Please check your mail configuration from settings to enable mail."
],
"href": "api/v1/admin/email-templates/1/change-status"
}Change an email template statusPUT/api/v1/admin/email-templates/{email_template_id}/change-status
Endpoint information
| Requires authentication | Yes |
- email_template_id
number(required) Example: 1Id of the email template to change status.
Customer Profile ¶
Customer Register ¶
Get customer register.
Headers
Content-Type: application/jsonBody
{
"name": "john deon",
"email": "[email protected]",
"password": "abcxyz",
"salutation": "Mr",
"company_name": "",
"purpose": "consumer",
"extra_instructions": "",
"address": "",
"address_zip": "",
"address_city": "",
"dob": "",
"phone": ""
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the user",
"rule": "The max length is 250"
},
"email": {
"type": "email",
"description": "The email the user",
"rule": "The min length is 8 and the max length is 60 and must be unique"
},
"password": {
"type": "string",
"description": "The password for the customer",
"rule": "The min length is 6 and the max length is 30"
},
"phone": {
"type": "number",
"description": "The phone for the user",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address": {
"type": "string",
"description": "The address for the user",
"rule": "The min length is 10 amd the max length is 150 with regex:/(^[a-zA-Z0-9\s,.-]*$)/"
},
"address_zip": {
"type": "string",
"description": "The address_zip for the user",
"rule": "The min length is 3 amd the max length is 16"
},
"address_city": {
"type": "string",
"description": "The address_city for the user",
"rule": "The min length is 3 amd the max length is 60 regex:/(^[a-zA-Z]+(?:[\s-.][a-zA-Z]+)*$)/"
},
"salutation": {
"type": "string",
"description": "The salutation for the user",
"rule": "The max length is 32"
},
"dob": {
"type": "date",
"description": "The dob for the user",
"rule": "The date format must be YYYY-MM-DD and must be date before current date"
},
"purpose": {
"type": "string",
"description": "The purpose for the user",
"rule": "The value must be from business,consumer"
},
"company_name": {
"type": "string",
"description": "The company_name for the user",
"rule": "The max length is 100",
"required_if": "The purpose is business"
},
"extra_instructions": {
"type": "string",
"description": "The extra_instructions for the user",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
}
},
"required": [
"name",
"email",
"password"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"user": {
"id": 12,
"name": "john deon",
"role_id": 4,
"email": "[email protected]",
"api_key": null,
"created_by": null,
"modified_by": null,
"created_at": "2018-06-20 15:14:26",
"updated_at": "2018-06-20 15:14:26",
"customer": {
"id": 6,
"user_id": 12,
"salutation": "Mr",
"company_name": null,
"purpose": "consumer",
"extra_instructions": null,
"address": null,
"address_zip": null,
"address_city": null,
"dob": null,
"phone": null,
"payment_exception": null,
"created_by": null,
"created_at": "2018-06-20 15:14:26",
"modified_by": null,
"updated_at": "2018-06-20 15:14:26"
}
},
"message": "Customer registered Successfully.",
"href": "api/v1/register"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"message": {
"name": [
"The name field is required."
],
"email": [
"The email field is required."
],
"password": [
"The password field is required."
]
},
"href": "api/v1/register"
}Customer Profile ¶
Get customer profile.
Headers
Content-Type: application/jsonBody
{
"success": true,
"user": {
"id": 6,
"name": "john deon",
"role_id": 4,
"email": "[email protected]",
"api_key": null,
"password": "$2y$10$b1wLnd8v0lv0wTmQOgf.7eC/NS8imXOQd/xTBNzbWChaNH9TlMPMq",
"created_by": null,
"modified_by": null,
"remember_token": null,
"created_at": "2018-06-20 15:14:26",
"updated_at": "2018-06-20 15:14:26",
"user_id": 12,
"salutation": "Mr",
"company_name": null,
"purpose": "consumer",
"extra_instructions": null,
"address": null,
"address_zip": null,
"address_city": null,
"dob": null,
"phone": null,
"payment_exception": null
},
"meta": {
"total_appointments": 0,
"total_tickets": 0
},
"message": "Customer profile data.",
"href": "api/v1/customers/profile"
}Customer Profile Update ¶
Update customer profile.
Headers
Content-Type: application/jsonBody
{
"name": "john deon",
"email": "[email protected]",
"salutation": "Mr",
"company_name": "",
"purpose": "consumer",
"extra_instructions": "",
"address": "",
"address_zip": "",
"address_city": "",
"dob": "",
"phone": "7896541230"
}Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name for the user",
"rule": "The max length is 250"
},
"email": {
"type": "email",
"description": "The email the user",
"rule": "The min length is 8 and the max length is 60 and must be unique"
},
"phone": {
"type": "number",
"description": "The phone for the user",
"rule": "The regex is /^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"address": {
"type": "string",
"description": "The address for the user",
"rule": "The min length is 10 amd the max length is 150 with regex:/(^[a-zA-Z0-9\s,.-]*$)/"
},
"address_zip": {
"type": "string",
"description": "The address_zip for the user",
"rule": "The min length is 3 amd the max length is 16"
},
"address_city": {
"type": "string",
"description": "The address_city for the user",
"rule": "The min length is 3 amd the max length is 60 regex:/(^[a-zA-Z]+(?:[\s-.][a-zA-Z]+)*$)/"
},
"salutation": {
"type": "string",
"description": "The salutation for the user",
"rule": "The max length is 32"
},
"dob": {
"type": "date",
"description": "The dob for the user",
"rule": "The date format must be YYYY-MM-DD and must be date before current date"
},
"purpose": {
"type": "string",
"description": "The purpose for the user",
"rule": "The value must be from business,consumer"
},
"company_name": {
"type": "string",
"description": "The company_name for the user",
"rule": "The max length is 100",
"required_if": "The purpose is business"
},
"extra_instructions": {
"type": "string",
"description": "The extra_instructions for the user",
"rule": "The min length is 10 and the max length is 255 with regex:/(^[a-zA-Z0-9][\s\d-_\w\/\,=;@#$.^*&!+]*$)/"
}
},
"required": [
"name",
"email"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"customer": {
"id": 6,
"user_id": 12,
"salutation": "Mr",
"company_name": null,
"purpose": "consumer",
"extra_instructions": null,
"address": "",
"address_zip": "",
"address_city": "",
"dob": null,
"phone": "7896541230",
"payment_exception": null,
"created_by": null,
"created_at": "2018-06-20 15:14:26",
"modified_by": 12,
"updated_at": "2018-06-20 15:23:07",
"user": {
"id": 12,
"name": "john deon",
"email": "[email protected]"
}
},
"message": "Customer profile updated successfully.",
"href": "api/v1/customers/profile/edit"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": {
"name": [
"The name field is required."
],
"email": [
"The email field is required."
]
},
"href": "api/v1/customers/profile/edit"
}Customer Profile UpdatePUT/api/v1/customers/profile/edit
Endpoint information
| Requires authentication | No |
Customer Ticket ¶
Gets all Tickets ¶
Retrieves a list of all Tickets in the database
Headers
Content-Type: application/jsonBody
{
"success": true,
"tickets": {
"current_page": 1,
"data": [
{
"id": 1,
"friendly_id": "YNT-400",
"user_id": 4,
"serial": "356476062721552",
"device_id": 2,
"store_id": 2,
"employee_id": 3,
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2017-07-05 17:33:14",
"shipped_at": "2017-07-16 17:33:14",
"paid_at": "2017-07-25 17:33:14",
"access_code": "2890",
"status_image": null,
"problem_description": "Device picked up and paid at Donald on January 2nd.",
"different_return_address": "Street 12, 80 ft. road\n 9698PA",
"different_return_address_zip": "4878",
"different_return_address_city": "Jamnagar",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"payment_status": 0,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-06-20 16:23:33",
"modified_by": null,
"updated_at": "2018-06-20 16:23:33",
"status_image_url": "http://repairrabbit.test/storage/images/ticket_status_images/test-0rasPF.jpg",
"device_name": "Samsung Galaxy J2",
"status_text": "Waiting for device",
"invoiceId": null,
"progress_bar_width": "25",
"progress_bar_color": "progress-bar-danger"
}
],
"from": 1,
"last_page": 5,
"next_page_url": "http://repairrabbit.test/api/v1/customers/tickets?page=2",
"path": "http://repairrabbit.test/api/v1/customers/tickets",
"per_page": "1",
"prev_page_url": null,
"to": 1,
"total": 5
},
"meta": {
"orderBy": "updated_at",
"sortOrder": "desc",
"items_per_page": "1",
"ticketsItemList": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/customers/tickets"
}Gets all Tickets.GET/api/v1/tickets{?order,orderBy,perPage,search,page}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: updated_at Example: device_name, id, created_at etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Create a ticket ¶
Headers
Content-Type: multipart/form-dataBody
{
"device": 1,
"products": [1], /* product_ids of device */
"serial": "123456789087906",
"description": "test ticket",
"access_code": "123456789087906"
}Schema
{
"type": "object",
"properties": {
"device": {
"type": "number",
"description": "The ID of device for the ticket",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices"
},
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"serial": {
"type": "number",
"description": "The serial of device for the ticket",
"rule": "The value must be between 15 to 16"
},
"description": {
"type": "string",
"description": "The description for the ticket"
},
"access_code": {
"type": "string",
"description": "The access_code of device for the ticket",
"rule": "The max length is 30",
},
"polis_number": {
"type": "number",
"description": "The polis_number of device for the ticket",
"rule": "The max length is 32",
}
},
"required": [
"device",
"products",
"serial",
"description",
"access_code"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 10,
"friendly_id": "JBG-888",
"user_id": 4,
"employee_id": null,
"device_id": 1,
"store_id": null,
"serial": "123456789087906",
"access_code": "123456789087906",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2018-07-05 18:43:59",
"status_image": null,
"status_image_url": null,
"problem_description": "test ticket",
"different_return_address": null,
"different_return_address_zip": null,
"different_return_address_city": null,
"status": 2,
"custom_message": null,
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 4,
"created_at": "2018-07-05 18:43:59",
"modified_by": null,
"updated_at": "2018-07-05 18:43:59",
"ticket_status": {
"id": 2,
"name": "In transit"
},
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": null,
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"ticket_id": 10,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": null
},
"message": "Ticket created successfully.",
"href": "api/v1/customers/tickets"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"device": [
"The device field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"serial": [
"The serial field is required."
],
"description": [
"The description field is required."
],
"access_code": [
"The access code field is required."
]
},
"href": "api/v1/customers/tickets"
}View a ticket ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 1,
"friendly_id": "YNT-400",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "356476062721552",
"access_code": "2890",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2017-07-05 17:33:14",
"status_image": null,
"status_image_url": null,
"problem_description": "Device picked up and paid at Donald on January 2nd.",
"different_return_address": "Street 12, 80 ft. road\n 9698PA",
"different_return_address_zip": "4878",
"different_return_address_city": "Jamnagar",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 18:18:54",
"modified_by": null,
"updated_at": "2018-07-05 18:18:54",
"ticket_status": {
"id": 1,
"name": "Waiting for device"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 2,
"name": "Ahmedabad",
"address": "Near City Mall"
},
"products": [
{
"id": 2,
"name": "On off switch",
"pivot": {
"ticket_id": 1,
"product_id": 2
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 3,
"user_id": 6,
"user": {
"id": 6,
"name": "employee3"
}
}
},
"message": "Ticket detail.",
"href": "api/v1/customers/tickets/HNB-891"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/customers/tickets/avc-400"
}View a ticketGET/api/v1/customers/tickets/{ticket_friendly_id}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: YNT-400FriendlyId of the ticket.
Update a ticket ¶
Headers
Content-Type: application/jsonBody
{
"device": 1, /* id of device*/
"products": [1], /* id of products*/
"serial": "1231231212312378",
"access_code": "1231312",
"polis_number": "",
"stock_deducted_at": "2018-06-21 16:40:37"
}Schema
{
"type": "object",
"properties": {
"device": {
"type": "number",
"description": "The ID of device for the ticket",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when stock_deducted_at not given"
},
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products",
"required_without": "The value required when stock_deducted_at not given"
},
"serial": {
"type": "number",
"description": "The serial of device for the ticket",
"rule": "The value must be between 15 to 16"
},
"access_code": {
"type": "string",
"description": "The access_code of device for the ticket",
"rule": "The max length is 30",
},
"polis_number": {
"type": "number",
"description": "The polis_number of device for the ticket",
"rule": "The max length is 32",
},
"stock_deducted_at": {
"type": "date",
"description": "The date for the ticket's stock deducted",
"rule": "The date format must be YYYY-MM-DD"
}
},
"required": [
"serial",
"access_code"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket": {
"id": 1,
"friendly_id": "YNT-400",
"user_id": 4,
"employee_id": 3,
"device_id": 2,
"store_id": 2,
"serial": "356476062721552",
"access_code": "2890",
"customer_reference": null,
"customer_reference_from": null,
"status_last_changed_at": "2017-07-05 17:33:14",
"status_image": null,
"status_image_url": null,
"problem_description": "Device picked up and paid at Donald on January 2nd.",
"different_return_address": "Street 12, 80 ft. road\n 9698PA",
"different_return_address_zip": "4878",
"different_return_address_city": "Jamnagar",
"status": 1,
"custom_message": "Device repaired. Once the payment is received, we will send the device back.",
"internal_message": null,
"polis_number": null,
"stock_deducted_at": null,
"created_by": 1,
"created_at": "2018-07-05 18:18:54",
"modified_by": null,
"updated_at": "2018-07-05 18:18:54",
"ticket_status": {
"id": 1,
"name": "Waiting for device"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 2,
"name": "Ahmedabad",
"address": "Near City Mall"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"ticket_id": 1,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 3,
"user_id": 6,
"user": {
"id": 6,
"name": "employee3"
}
}
},
"message": "Ticket updated successfully.",
"href": "api/v1/customers/tickets/HNB-891"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"device": [
"The device field is required when stock deducted at is not present."
],
"products": [
"The products field is required when stock deducted at is not present."
],
"serial": [
"The serial field is required."
],
"access_code": [
"The access code field is required."
]
},
"href": "api/v1/customers/tickets/HNB-891"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/customers/tickets/HNB-891"
}Update a ticketPUT/api/v1/customers/tickets/{ticket_friendly_id}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: HNB-891FriendlyId of the ticket.
Get ticket history ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"ticket_friendly_id": "YNT-400",
"ticket_history": {
"current_page": 1,
"data": [
{
"ticket_friendly_id": "YNT-400",
"id": 2,
"paid_at": "2017-07-25 17:33:14",
"ticket_id": 1,
"status": "1",
"device_id": 2,
"store_id": null,
"product": "",
"employee_id": 6,
"serial": null,
"access_code": null,
"customer_reference": null,
"customer_reference_from": null,
"status_image": null,
"problem_description": "thick point",
"custom_message": "Too many damages!!",
"polis_number": null,
"internal_message": null,
"different_return_address": null,
"different_return_address_zip": null,
"different_return_address_city": null,
"created_by": 1,
"created_at": "2018-06-21 17:38:47",
"modified_by": null,
"updated_at": "2018-06-21 17:38:47",
"status_name": "Waiting for device",
"status_last_changed_at": "2017-07-05 17:33:14",
"device_name": "Samsung Galaxy J2",
"updatedBy_name": null,
"employee_name": "employee3",
"store_address": null,
"createdBy_name": "Admin"
}
],
"from": 1,
"last_page": 1,
"next_page_url": null,
"path": "http://repairrabbit.test/api/v1/customers/tickets/YNT-400/history",
"per_page": "3",
"prev_page_url": null,
"to": 1,
"total": 1
},
"meta": {
"orderBy": "updated_at",
"sortOrder": "asc",
"items_per_page": "3",
"tickethistorysItemListOptions": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/customers/tickets/YNT-400/history"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Ticket not found."
],
"href": "api/v1/customers/tickets/YNT-400/history"
}Get ticket historyGET/api/v1/tickets/{ticket_friendly_id}/history{?order,orderBy,perPage,filterStatus,search,page}
Endpoint information
| Requires authentication | Yes |
- ticket_friendly_id
string(required) Example: XJH-856FriendlyId of the ticket.
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: updated_at Example: customer_name, device_name, store_name, employee_name, updatedBy_name, status, etc.- perPage
number(optional) Default: 10 Example: 3- filterStatus
number(optional) Example: 0status of tickets
- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Customer Appointment ¶
Gets all Appointments ¶
Retrieves a list of all Appointments of customer
Headers
Content-Type: application/jsonBody
{
"success": true,
"appointments": {
"current_page": 1,
"data": [
{
"id": 1,
"tickets_fid": "XLP-620",
"device_name": "Samsung Galaxy J2",
"user_id": 4,
"device_id": 2,
"store_id": 1,
"defect_description": "Display",
"date_start_time": "2016-01-25 14:00:00",
"date_end_time": "2016-01-25 14:30:00",
"assigned_to": 1,
"reminder_sent": 0,
"confirmed": 1,
"confirm_url": "B1JFfDV6Xpewo74xUST4pOGuaTv9wmqg",
"delete_token": null,
"no_show": 0,
"imei": "352091073963244",
"retarget": 0,
"warranty": 0,
"ticket_id": 2,
"created_by": 1,
"created_at": "2018-06-20 15:23:10",
"modified_by": null,
"updated_at": "2018-06-20 15:23:10",
"employee_name": "Admin",
"is_confrim": "ok",
"confrim_color": "text-success"
}
],
"from": 1,
"last_page": 4,
"next_page_url": "http://repairrabbit.test/api/v1/customers/appointments?page=2",
"path": "http://repairrabbit.test/api/v1/customers/appointments",
"per_page": "1",
"prev_page_url": null,
"to": 1,
"total": 4
},
"meta": {
"orderBy": "id",
"sortOrder": "asc",
"items_per_page": "1",
"appointmentsItemListOptions": [
10,
20,
30,
40,
50
],
"searchString": ""
},
"message": "",
"href": "api/v1/customers/appointments"
}Gets all Appointments.GET/api/v1/customers/appointments{?order,orderBy,perPage,search,page}
Endpoint information
| Requires authentication | Yes |
- order
string(optional) Default: desc Example: asc, desc- orderBy
string(optional) Default: id Example: tickets_fid, employee_name, device_name, etc.- perPage
number(optional) Default: 10 Example: 3- search
string(optional)- page
number(optional) Default: 1 Example: 3page number to get data
Create an appointment ¶
Headers
Content-Type: application/jsonBody
{
"products": [1], /* id of product */
"device": 1, /* id of device */
"store": 1, /* id of store */
"date": "2018-07-03",
"timeSlot": "09:15 - 10:14",
"imei": ""
}Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"device": {
"type": "number",
"description": "The ID of device for the appointment",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when ticket_id not given"
},
"date": {
"type": "date",
"description": "The date for the appointment",
"rule": "The date format must be YYYY-MM-DD",
"required_without": "The value required when ticket_id not given"
},
"timeSlot": {
"type": "time",
"description": "The time slot for the appointment",
"rule": "The value must be in time 24h with regex:/(^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] - ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$)/u",
"required_without": "The value required when ticket_id not given"
},
"store": {
"type": "number",
"description": "The ID of store for the appointment",
"rule": "The max number of digits is 10 and must exists from available stores",
"required_without": "The value required when ticket_id not given"
},
"imei": {
"type": "number",
"description": "The imei of device for the appointment",
"rule": "The value must be between 15 to 16"
}
},
"required": [
"products"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 7,
"ticket_id": null,
"user_id": 4,
"assigned_to": 2,
"device_id": 1,
"store_id": 1,
"date_start_time": "2018-06-03 09:15:00",
"date_end_time": "2018-06-03 09:45:00",
"imei": null,
"confirmed": 0,
"no_show": null,
"retarget": null,
"warranty": null,
"created_by": 4,
"created_at": "2018-07-05 18:38:59",
"modified_by": null,
"updated_at": "2018-07-05 18:38:59",
"ticket": null,
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"appointment_id": 7,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 2,
"user_id": 3,
"user": {
"id": 3,
"name": "employee"
}
}
},
"message": "Appointment created successfully.",
"href": "api/v1/customers/appointments"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"device": [
"The device field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"date": [
"The date field is required."
],
"timeSlot": [
"The time slot field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/customers/appointments"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Time slot not available"
],
"href": "api/v1/customers/appointments"
}Create an appointmentPOST/api/v1/customers/appointments
Endpoint information
| Requires authentication | Yes |
View an appointment ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 1,
"ticket_id": 2,
"user_id": 4,
"assigned_to": 1,
"device_id": 2,
"store_id": 1,
"date_start_time": "2016-01-25 14:00:00",
"date_end_time": "2016-01-25 14:30:00",
"imei": "352091073963244",
"confirmed": 1,
"no_show": 0,
"retarget": 0,
"warranty": 0,
"created_by": 1,
"created_at": "2018-07-05 18:18:54",
"modified_by": null,
"updated_at": "2018-07-05 18:18:54",
"ticket": {
"id": 2,
"friendly_id": "XLP-620"
},
"device": {
"id": 2,
"name": "Samsung Galaxy J2"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 2,
"name": "On off switch",
"pivot": {
"appointment_id": 1,
"product_id": 2
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 1,
"user_id": 1,
"user": {
"id": 1,
"name": "Admin"
}
}
},
"message": "Appointment detail.",
"href": "api/v1/customers/appointments/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/customers/appointments/1"
}View an appointmentGET/api/v1/customers/appointments/{appointment_id}
Endpoint information
| Requires authentication | Yes |
- appointment_id
number(required) Example: 1Id of the appointment.
Edit an appointment ¶
Headers
Content-Type: application/jsonBody
{
"products": [1], /* id of products */
"device": 1, /* id of device */
"store": 1, /* id of store */
"date": "2018-06-03",
"timeSlot": "09:15 - 10:14",
"imei": "",
"checkTime": 1 /* flag to change assign_to of appointment */
}Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"description": "The product's id array",
"rule": "The product id must be in number and at least 1 required and exists from available products"
},
"device": {
"type": "number",
"description": "The ID of device for the appointment",
"rule": "The max number of digits is 10 and it must be active and must exists from available devices",
"required_without": "The value required when ticket_id not given"
},
"date": {
"type": "date",
"description": "The date for the appointment",
"rule": "The date format must be YYYY-MM-DD",
"required_without": "The value required when ticket_id not given"
},
"timeSlot": {
"type": "time",
"description": "The time slot for the appointment",
"rule": "The value must be in time 24h with regex:/(^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9] - ([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$)/u",
"required_without": "The value required when ticket_id not given"
},
"store": {
"type": "number",
"description": "The ID of store for the appointment",
"rule": "The max number of digits is 10 and must exists from available stores",
"required_without": "The value required when ticket_id not given"
},
"imei": {
"type": "number",
"description": "The imei of device for the appointment",
"rule": "The value must be between 15 to 16"
},
"checkTime": {
"type": "boolean",
"description": "The checkTime status for the appointment wheather the time of appointment changed or not",
"rule": "The value must be from 0 or 1"
},
},
"required": [
"products"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"appointment": {
"id": 1,
"ticket_id": null,
"user_id": 4,
"assigned_to": 4,
"device_id": 1,
"store_id": 1,
"date_start_time": "2018-06-03 09:15:00",
"date_end_time": "2018-06-03 09:45:00",
"imei": "352091073963244",
"confirmed": 0,
"no_show": 1,
"retarget": 0,
"warranty": 1,
"created_by": 1,
"created_at": "2018-07-05 18:18:54",
"modified_by": 4,
"updated_at": "2018-07-05 18:39:43",
"ticket": null,
"device": {
"id": 1,
"name": "iPhone 5"
},
"store": {
"id": 1,
"name": "Rajkot",
"address": "University Road"
},
"products": [
{
"id": 1,
"name": "Display (LCD) damage, glass broken black",
"pivot": {
"appointment_id": 3,
"product_id": 1
}
}
],
"user": {
"id": 4,
"name": "customer",
"email": "[email protected]",
"customer": {
"id": 1,
"user_id": 4,
"phone": "0633836781",
"company_name": "Samsung Service Center",
"address_zip": "1424PN",
"address_city": "Rajkot"
}
},
"employee": {
"id": 4,
"user_id": 2,
"user": {
"id": 2,
"name": "StoreAdmin"
}
}
},
"message": "Appointment updated successfully.",
"href": "api/v1/customers/appointments/3"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"device": [
"The device field is required."
],
"products": [
"The products must be an array.",
"The products must have at least 1 items."
],
"date": [
"The date field is required."
],
"timeSlot": [
"The time slot field is required."
],
"store": [
"The store field is required."
]
},
"href": "api/v1/customers/appointments/3"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Time slot not available"
],
"href": "api/v1/customers/appointments/3"
}
or
{
"success": false,
"messages": [
"Appointment not found."
],
"href": "api/v1/customers/appointments/3"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"messages": [
"Appointment not editable because work already started on this."
],
"href": "api/v1/customers/appointments/1"
}Edit an appointmentPUT/api/v1/customers/appointments/{appointment_id}
Endpoint information
| Requires authentication | Yes |
- appointment_id
number(required) Example: 1Id of the appointment.
Settings ¶
View all settings data ¶
Headers
Content-Type: application/jsonBody
{
"success": true,
"settings": {
"app": {
"name": "RepairRabbit",
"logo": "images/pw-logo.png",
"currency": "€"
},
"company": {
"name": "Improwised123",
"phone": "1231231231",
"email_support": "[email protected]",
"email_info": "[email protected]",
"website": "www.improwised.com",
"email_policy": "[email protected]"
},
"accessories": "1",
"mail": {
"driver": "smtp",
"from_name": "bhumi",
"from_address": "[email protected]",
"reply_name": "bhumika",
"reply_address": "[email protected]",
"host": "smtp.gmail.com",
"port": "587",
"username": "",
"password": "qweqwe123",
"encryption": "tls"
},
"send_logs": 0,
"vat": "21",
"social_media_detail": {
"facebook_link": "",
"linkedin_link": "",
"twitter_link": ""
}
},
"message": "Settings for application.",
"href": "api/v1/admin/settings"
}Update settings ¶
- Update application settings.
Headers
Content-Type: multipart/form-dataBody
{
"_method": "PUT",
"app_name": 2,
"app_currency": "$"
"company_name": "",
"company_phone": "",
"company_email_info": "",
"company_email_support": "",
"company_website": "",
"logo": "",
"mail_driver": "smtp"
"host": "",
"port": 587
"from_name": "",
"from_address": "",
"reply_name": "",
"reply_address": "",
"username": "",
"password": "",
"mailgun_domain": "",
"mailgun_key": "",
"companyPolicy_service": "",
"facebook_link": "",
"linkedin_link": "",
"twitter_link": "",
"accessories_switch": "",
"send_logs": "",
"vat": ""
}Schema
{
"type": "object",
"properties": {
"app_name": {
"type": "string",
"description": "The name for the application",
"rule": "The min length is 3 and the max length is 22"
},
"app_currency": {
"type": "string",
"description": "The currency for the application",
"rule": "The value must be from €,₹,$,£"
},
"company_name": {
"type": "string",
"description": "The name for the company"
},
"company_phone": {
"type": "string",
"description": "The phone number for the company",
"rule": "The phone with regex:/^(?([0-9]{3}))?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/"
},
"company_email_info": {
"type": "email",
"description": "The information email for the company",
"rule": "The min length is 8 and the max length is 60"
},
"company_email_support": {
"type": "email",
"description": "The support email for the company",
"rule": "The min length is 8 and the max length is 60"
},
"company_website": {
"type": "number",
"description": "The website for the company",
"rule": "The website for company with regex:/^(http(s)?:\/\/)?(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/"
},
"logo": {
"type": "string",
"description": "The company logo for the company",
"rule": "The max size is 1MB with type of jpeg or jpg or png"
},
"mail_driver": {
"type": "string",
"description": "The mail driver for the application",
"rule": "The mail driver must be from smtp,mailgun"
},
"host": {
"type": "string",
"description": "The mail host for the application",
"rule": "The mail host max length is 250 and with regex:/(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$)/u"
},
"port": {
"type": "number",
"description": "The mail port for the application",
"rule": "The mail port max length is 20"
},
"from_name": {
"type": "string",
"description": "The mail from_name for the application",
"rule": "The mail from_name max length is 250"
},
"from_address": {
"type": "email",
"description": "The mail from_address for the application",
"rule": "The mail from_address min length is 8 and max length is 60"
},
"reply_name": {
"type": "string",
"description": "The mail reply_name for the application",
"rule": "The mail reply_name max length is 250"
},
"reply_address": {
"type": "email",
"description": "The mail reply_address for the application",
"rule": "The mail reply_address min length is 8 and max length is 60"
},
"username": {
"type": "string",
"description": "The mail username for the application",
"rule": "The mail username max length is 250"
},
"password": {
"type": "string",
"description": "The mail password for the application",
"rule": "The mail username max length is 250"
},
"mailgun_domain": {
"type": "string",
"description": "The mailgun_domain for the application",
"rule": "The mailgun_domain with regex:/(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$)/u"
},
"mailgun_key": {
"type": "string",
"description": "The mailgun_key for the application",
"rule": "The mail mailgun_key max length is 250"
},
"companyPolicy_service": {
"type": "email",
"description": "The companyPolicy_service for the company",
"rule": "The companyPolicy_service min length is 8 and max length is 60"
},
"facebook_link": {
"type": "string",
"description": "The facebook_link for the application",
"rule": "The facebook_link with regex:/^(http(s)?:\/\/)(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/"
},
"linkedin_link": {
"type": "string",
"description": "The linkedin_link for the application",
"rule": "The linkedin_link with regex:/^(http(s)?:\/\/)(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/"
},
"twitter_link": {
"type": "string",
"description": "The twitter_link for the application",
"rule": "The twitter_link with regex:/^(http(s)?:\/\/)(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/"
},
"twitter_link": {
"type": "string",
"description": "The twitter_link for the application",
"rule": "The twitter_link with regex:/^(http(s)?:\/\/)(www.)?[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/"
},
"accessories_switch": {
"type": "boolean",
"description": "The accessories_switch status for the application",
"rule": "The accessories_switch status must be boolean"
},
"send_logs": {
"type": "boolean",
"description": "The send_logs for the application",
"rule": "The send_logs status must be boolean"
},
"vat": {
"type": "number",
"description": "The send_logs for the application",
"rule": "The vat must be from 0 to 100."
}
},
"required": [
"app_name",
"app_currency",
"mail_driver",
"port"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Settings updated successfully.",
"href": "api/v1/admin/settings"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"app_name": [
"The app name field is required."
],
"app_currency": [
"The app currency field is required."
],
"mail_driver": [
"The mail driver field is required."
],
"vat": [
"Vat must be from 0 to 100."
]
}
}Check mail settings ¶
- Check mail settings in application.
Headers
Content-Type: multipart/form-dataBody
{
"to_mail": "[email protected]",
"mail_driver": "smtp"
"host": "",
"port": 587
"from_name": "",
"from_address": "",
"reply_name": "",
"reply_address": "",
"username": "",
"password": "",
"mailgun_domain": "",
"mailgun_key": ""
}Schema
{
"type": "object",
"properties": {
"mail_driver": {
"type": "string",
"description": "The mail driver for the application",
"rule": "The mail driver must be from smtp,mailgun"
},
"host": {
"type": "string",
"description": "The mail host for the application",
"rule": "The mail host max length is 250 and with regex:/(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$)/u",
"required_if": "The mail_driver is smtp"
},
"port": {
"type": "number",
"description": "The mail port for the application",
"rule": "The mail port max length is 20",
"required_if": "The mail_driver is smtp"
},
"from_name": {
"type": "string",
"description": "The mail from_name for the application",
"rule": "The mail from_name max length is 250"
},
"from_address": {
"type": "email",
"description": "The mail from_address for the application",
"rule": "The mail from_address min length is 8 and max length is 60"
},
"reply_name": {
"type": "string",
"description": "The mail reply_name for the application",
"rule": "The mail reply_name max length is 250"
},
"reply_address": {
"type": "email",
"description": "The mail reply_address for the application",
"rule": "The mail reply_address min length is 8 and max length is 60"
},
"username": {
"type": "string",
"description": "The mail username for the application",
"rule": "The mail username max length is 250",
"required_if": "The mail_driver is smtp"
},
"password": {
"type": "string",
"description": "The mail password for the application",
"rule": "The mail username max length is 250",
"required_if": "The mail_driver is smtp"
},
"mailgun_domain": {
"type": "string",
"description": "The mailgun_domain for the application",
"rule": "The mailgun_domain with regex:/(^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]).)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]*[A-Za-z0-9])$)/u",
"required_if": "The mail_driver is mailgun"
},
"mailgun_key": {
"type": "string",
"description": "The mailgun_key for the application",
"rule": "The mail mailgun_key max length is 250",
"required_if": "The mail_driver is mailgun"
}
},
"required": [
"to_mail",
"mail_driver",
"from_name",
"from_address",
"reply_name",
"reply_address"
],
"$schema": "http://json-schema.org/draft-04/schema#"
}Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Mail sent successfully.",
"href": "api/v1/admin/settings/testmail"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": {
"username": [
"The username field is required when mail driver is smtp."
],
"password": [
"The password field is required when mail driver is smtp."
]
}
}Check mail settingsPOST/api/v1/admin/settings/testmail
Endpoint information
| Requires authentication | Yes |
Change Accessories sell settings ¶
- Change Accessories sell settings in application.
Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Accessories status changed successfully.",
"href": "api/v1/admin/settings/change-accessories-status/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"Accessories status must be either 0 or 1."
],
"href": "api/v1/admin/settings/change-accessories-status/21312"
}Change Accessories sell settingsPUT/api/v1/admin/settings/change-accessories-status/{status}
Endpoint information
| Requires authentication | Yes |
- status
string(required) Example: 0Change the status of selling accessories either 0 or 1.
Change Send log settings ¶
- Change Send log settings from application.
Headers
Content-Type: application/jsonBody
{
"success": true,
"data": null,
"message": "Send logs status changed successfully.",
"href": "api/v1/admin/settings/change-sendLogs-status/1"
}Headers
Content-Type: application/jsonBody
{
"success": false,
"data": null,
"messages": [
"SendLogs status must be either 0 or 1."
],
"href": "api/v1/admin/settings/change-sendLogs-status/34sdfdxv"
}Change Send log settingsPUT/api/v1/admin/settings/change-sendLogs-status/{status}
Endpoint information
| Requires authentication | Yes |
- status
string(required) Example: 0Change the status of sendLogs either 0 or 1.
Generated by aglio on 14 Sep 2018