Skip to content

API Reference

This document provides a comprehensive API reference for the Merq platform. The full OpenAPI specification is available in the backend at /api/docs (when running locally).

EnvironmentURL
Developmenthttp://localhost:8080/api
Productionhttps://api.merq.io/api

All API requests require authentication via JWT token.

POST /auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "your-password"
}
{
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"email": "user@example.com",
"name": "John Doe"
}
}
}

Include the token in the Authorization header:

Authorization: Bearer <your-token>
MethodEndpointDescription
POST/auth/loginUser login
POST/auth/registerUser registration
POST/auth/refreshRefresh token
POST/auth/forgot-passwordRequest password reset
POST/auth/reset-passwordReset password

All office endpoints require office/v1/ prefix.

MethodEndpointDescription
GET/office/v1/outlet-visitsList visits
POST/office/v1/outlet-visitsCreate visit
POST/office/v1/outlet-visits/bulkBulk create visits
POST/office/v1/outlet-visits/importImport from CSV
GET/office/v1/outlet-visits/exportExport to CSV
POST/office/v1/outlet-visits/send-to-fieldSend to field staff
GET/office/v1/outlet-visits/:idGet visit detail
PUT/office/v1/outlet-visits/:id/force-closeForce close visit
PUT/office/v1/outlet-visits/:id/cancelCancel visit
POST/office/v1/outlet-visits/:visit_id/assign-usersAssign users
MethodEndpointDescription
GET/office/v1/outlet-visits/submissionsList submissions
GET/office/v1/outlet-visits/submissions/:idGet submission
POST/office/v1/outlet-visits/submissions/:id/approvalApprove/reject
MethodEndpointDescription
GET/office/v1/outletsList outlets
POST/office/v1/outletsCreate outlet
GET/office/v1/outlets/:idGet outlet
PUT/office/v1/outlets/:idUpdate outlet
DELETE/office/v1/outlets/:idDelete outlet
MethodEndpointDescription
GET/office/v1/usersList users
POST/office/v1/usersCreate user
GET/office/v1/users/:idGet user
PUT/office/v1/users/:idUpdate user
DELETE/office/v1/users/:idDelete user
MethodEndpointDescription
GET/office/v1/teamsList teams
POST/office/v1/teamsCreate team
GET/office/v1/teams/:idGet team
PUT/office/v1/teams/:idUpdate team
DELETE/office/v1/teams/:idDelete team
MethodEndpointDescription
GET/office/v1/projectsList projects
POST/office/v1/projectsCreate project
GET/office/v1/projects/:idGet project
PUT/office/v1/projects/:idUpdate project
DELETE/office/v1/projects/:idDelete project
MethodEndpointDescription
GET/office/v1/productsList products
POST/office/v1/productsCreate product
GET/office/v1/products/:idGet product
PUT/office/v1/products/:idUpdate product
DELETE/office/v1/products/:idDelete product
MethodEndpointDescription
GET/office/v1/principalsList principals
POST/office/v1/principalsCreate principal
GET/office/v1/principals/:idGet principal
PUT/office/v1/principals/:idUpdate principal
DELETE/office/v1/principals/:idDelete principal
MethodEndpointDescription
GET/office/v1/formsList forms
POST/office/v1/formsCreate form
GET/office/v1/forms/:idGet form
PUT/office/v1/forms/:idUpdate form
DELETE/office/v1/forms/:idDelete form
MethodEndpointDescription
GET/office/v1/attendancesList attendances
POST/office/v1/attendancesRecord attendance
GET/office/v1/attendances/:idGet attendance
MethodEndpointDescription
GET/office/v1/dashboard/metricsDashboard metrics
GET/office/v1/dashboard/summarySummary data
MethodEndpointDescription
GET/office/v1/notificationsList notifications
GET/office/v1/notifications/unread-countUnread count
PUT/office/v1/notifications/:id/readMark as read
PUT/office/v1/notifications/read-allMark all read
MethodEndpointDescription
GET/office/v1/export/submissions/csvExport submissions CSV
GET/office/v1/export/submissions/pdfExport submissions PDF
GET/office/v1/export/jobsList export jobs
GET/office/v1/export/jobs/:idGet export job status
GET/office/v1/export/jobs/:id/downloadDownload export file

All mobile endpoints require app/v1/ prefix.

MethodEndpointDescription
GET/app/v1/outlet-visitsList user’s visits
POST/app/v1/outlet-visitsCreate self-assigned visit
GET/app/v1/outlet-visits/:idGet visit detail
POST/app/v1/outlet-visits/:id/check-inCheck in to visit
POST/app/v1/outlet-visits/:id/check-outCheck out from visit
POST/app/v1/outlet-visits/:id/submit-formSubmit form
GET/app/v1/outlet-visits/active-visitGet active visit
MethodEndpointDescription
GET/app/v1/outlet-visits/submissionsList submissions
GET/app/v1/outlet-visits/submissions/:idGet submission
MethodEndpointDescription
GET/app/v1/profileGet profile
PUT/app/v1/profileUpdate profile
PUT/app/v1/profile/passwordChange password
MethodEndpointDescription
GET/app/v1/notificationsList notifications
PUT/app/v1/notifications/:id/readMark as read
POST/app/v1/notifications/tokensRegister FCM token

Common query parameters for list endpoints:

ParameterTypeDefaultDescription
pageinteger1Page number
limitinteger10Items per page
keywordstring-Search keyword
sort_bystringcreated_atSort field
sort_orderstringdescSort direction (asc/desc)
{
"success": true,
"message": "Success",
"code": "SUCCESS",
"data": { ... }
}
{
"success": true,
"message": "Success",
"code": "LIST_OK",
"data": [ ... ],
"meta": {
"page": 1,
"limit": 10,
"total": 100,
"total_pages": 10
}
}
{
"success": false,
"message": "Error message",
"code": "ERROR_CODE",
"errors": { ... }
}

See Rate Limiting for details.

WebSocket is available for real-time features:

wss://api.merq.io/ws

Requires authentication token in query string:

wss://api.merq.io/ws?token=<jwt-token>

A Postman collection is available for testing. Import from:

merq-backend/docs/merq-api-collection.json