Service Call & Job Card API

Clarion IT ERP — full process APIs for bots / website / integrations.

Also see: All API links · Service Call (legacy create) · Challan API · User Manual

Base URL
https://erp.clarionit.in/api

Auth (all endpoints):

Authorization: Bearer YOUR_BOT_API_TOKEN
# or
X-Api-Key: YOUR_BOT_API_TOKEN

Token = .env → BOT_API_TOKEN

Process overview

  1. Service call create → Fresh
  2. Assign engineer(s) → service visit Assigned
  3. Assign pickup / drop → separate vendor trip (does not close the call)
  4. Update visit status → Working / Pending / Complete / Cancel
  5. Complete pickup / drop → parent service call stays open
  6. Complete → create / update Delivery Challan
  7. Job card create → auto syncs linked service call + assignment

Helpers

GET /api/sales-people

GET /api/engineers

Service Calls

MethodEndpointPurpose
GET/api/service-callsList (filters: status, search, sales_person_id, phone, limit)
POST/api/service-callsCreate
GET/api/service-calls/{id}Detail + visits
POST/api/service-calls/{id}/assignAssign engineer(s) to a service visit
POST/api/service-calls/{id}/pickup-dropAssign engineer for vendor pickup / drop
GET/api/service-calls/{id}/visitsVisit list (?visit_type=pickup_drop)
GET/api/visitsEngineer visits (engineer_id, visit_type, open=1)
POST/api/visits/{id}/statusUpdate visit or pickup/drop status
GET/api/service-calls/{id}/challansLinked challans
Create
curl -X POST "https://erp.clarionit.in/api/service-calls" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "name": "Customer",
    "phone": "98XXXXXXXX",
    "address": "Raipur",
    "requirement": "Printer issue",
    "notes": "Morning prefer",
    "source": "whatsapp",
    "sales_person_id": 13
  }'

Company call: omit sales_person_id (or send 0 / "company").

Assign engineers
curl -X POST "https://erp.clarionit.in/api/service-calls/1396/assign" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "engineer_id": [25, 31],
    "date": "2026-09-05",
    "visit_type": "service_call"
  }'
Update visit status
curl -X POST "https://erp.clarionit.in/api/visits/816/status" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "status": 3,
    "remark": "Work done",
    "travel_engg_id": 25,
    "returnoffice": false
  }'

Visit status: 0 Assigned · 1 Working · 2 Pending & Return · 3 Complete · -1 Canceled

Assign pickup / drop (vendor trip — Engineer 2). Does not close the service call.
curl -X POST "https://erp.clarionit.in/api/service-calls/1399/pickup-drop" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "engineer_id": [42],
    "date": "2026-09-15",
    "pickup_drop_kind": "pickup",
    "vendor_name": "ABC CCTV Supplier",
    "vendor_address": "Pandri, Raipur",
    "remark": "4 cameras + 1 DVR"
  }'

pickup_drop_kind: pickup · drop · both

Same payload also works on POST /api/service-calls/{id}/assign with "visit_type": "pickup_drop".

Telegram: Pickup / Drop Assigned (not a service-call assign).

Engineer 2 — list open pickup / drop tasks
curl "https://erp.clarionit.in/api/visits?engineer_id=42&visit_type=pickup_drop&open=1" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Accept: application/json"
Engineer 2 — complete pickup / drop
curl -X POST "https://erp.clarionit.in/api/visits/900/status" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "status": 3,
    "remark": "4 cameras picked from vendor",
    "travel_engg_id": 42,
    "returnoffice": true
  }'

Response next.action = pickup_drop_done (no challan). Parent call stays open.

Telegram: Pickup / Drop Update with Type + Vendor (not a generic Status Update).

Job Cards

MethodEndpointPurpose
GET/api/job-cardsList (status, employee_id, sales_person_id, search, limit)
POST/api/job-cardsCreate (+ Telegram + service-call sync)
GET/api/job-cards/{id}Detail
PUT/PATCH/api/job-cards/{id}Update (+ re-sync)
POST/api/job-cards/{id}/statusChange status
DELETE/api/job-cards/{id}Delete
Create job card
curl -X POST "https://erp.clarionit.in/api/job-cards" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "job_date": "2026-09-05",
    "client_name": "Customer",
    "client_address": "Raipur",
    "contact_details": "98XXXXXXXX",
    "employee_id": 25,
    "sales_person_id": 13,
    "problem_description": "Laptop not powering on",
    "brand_name": "HP",
    "model_no": "15s",
    "serial_no": "ABC123",
    "accessories": "Charger",
    "remarks": "Urgent",
    "expected_date": "2026-09-10",
    "status": 0
  }'

Creates linked service call + assignment automatically (unless employee_id = -1 Client Self).

Job card status
curl -X POST "https://erp.clarionit.in/api/job-cards/691/status" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ "status": 1 }'

Statuses: 0 Open · 1 In Progress · 2 Transfer Out · 3 Ready · 4 Delivered · 5 Transfer In · -1 Cancelled

Delivery Challans

MethodEndpointPurpose
GET/api/challansList
POST/api/challansCreate (visit_id + items)
GET/PUT/DELETE/api/challans/{id}Detail / update / delete
POST/api/challans/{id}/accountAccount bill update
GET/api/challans/{id}/pdfPDF URL

Full docs: /docs/challan-api

Create challan
curl -X POST "https://erp.clarionit.in/api/challans" \
  -H "Authorization: Bearer YOUR_BOT_API_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "visit_id": 816,
    "remark": "Done",
    "items": [
      { "description": "Service", "machine_no": "", "qty": 1, "rate": 500, "billable": 1 }
    ]
  }'