Developers
Contents
On this page

Reference

API reference

Every endpoint of the public API and every webhook event, generated from the same schemas the API checks requests against.

Base URL https://business.linemeup.in/api/v1. Every request sends a key as Authorization: Bearer … — see Authentication. This page describes version 0.0.0 of the document.

Sample builder#

Choose an endpoint and fill in what you have. The request is written here and never sent — run it from your own system, with your key in LINEMEUP_API_KEY.

Business#

The fields and recipes are on the Business page.

GET /business #

The business this key belongs to — its name, category, time zone and today.

Needs the read scope · v1.business

Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
slugrequiredstring
categoryrequiredenumOne of "healthcare", "beauty_personal_care", "automotive", "food_beverage", "other"
timeZonerequiredstring
todayrequiredstring
clockFormatrequiredenumOne of "12h", "24h"
Example request

curl

curl "https://business.linemeup.in/api/v1/business" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/business", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/business",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/business");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "Sunrise Clinic",
  "slug": "sunrise-clinic",
  "category": "healthcare",
  "timeZone": "Asia/Kolkata",
  "today": "2026-10-30",
  "clockFormat": "12h"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

Lines#

The fields and recipes are on the Lines page.

GET /lines #

Every line this key may see, with how many are waiting on each.

Needs the read scope · v1.lines

Response (200)
FieldTypeNotes
datarequiredarray of object
data[].idrequiredstring
data[].namerequiredstring
data[].coderequiredstring
data[].typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data[].pausedrequiredboolean
data[].waitingrequiredinteger
data[].avgServiceMinutesrequiredinteger
data[].maxCapacityrequiredinteger
data[].descriptionrequiredstring | null
data[].locationrequiredstring | null
data[].callGraceMinutesrequiredinteger
data[].appointmentGraceBeforeMinutesrequiredinteger
data[].maxLateArrivalMinutesrequiredinteger
data[].autoNoShowEnabledrequiredboolean
Example request

curl

curl "https://business.linemeup.in/api/v1/lines" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/lines",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "data": [
    {
      "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "General",
      "code": "GEN",
      "type": "walk_in",
      "paused": false,
      "waiting": 4,
      "avgServiceMinutes": 10,
      "maxCapacity": 60,
      "description": "Walk-ins for a first visit",
      "location": "Ground floor",
      "callGraceMinutes": 5,
      "appointmentGraceBeforeMinutes": 10,
      "maxLateArrivalMinutes": 15,
      "autoNoShowEnabled": true
    },
    {
      "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "X-ray",
      "code": "XR",
      "type": "scheduled_walk_in",
      "paused": false,
      "waiting": 1,
      "avgServiceMinutes": 15,
      "maxCapacity": 30,
      "description": null,
      "location": "First floor, room 4",
      "callGraceMinutes": 5,
      "appointmentGraceBeforeMinutes": 10,
      "maxLateArrivalMinutes": 10,
      "autoNoShowEnabled": true
    }
  ]
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

PUT /lines #

Make a line, every setting said; refused to a key limited to some lines.

Needs the lines:manage scope · v1.lineCreate

Request body
FieldTypeNotes
namerequiredstringAt least 1 characters. Up to 60 characters
codeoptionalstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
avgServiceMinutesrequiredintegerAt least 1. At most 720
maxCapacityrequiredintegerAt least 1. At most 9999
descriptionoptionalstring | nullUp to 280 characters
locationoptionalstring | nullUp to 120 characters
callGraceMinutesrequiredintegerAt least 0. At most 120
appointmentGraceBeforeMinutesrequiredintegerAt least 0. At most 240
maxLateArrivalMinutesrequiredintegerAt least 0. At most 240
autoNoShowEnabledrequiredboolean
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
coderequiredstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
pausedrequiredboolean
waitingrequiredinteger
avgServiceMinutesrequiredinteger
maxCapacityrequiredinteger
descriptionrequiredstring | null
locationrequiredstring | null
callGraceMinutesrequiredinteger
appointmentGraceBeforeMinutesrequiredinteger
maxLateArrivalMinutesrequiredinteger
autoNoShowEnabledrequiredboolean
Example request

curl

curl -X PUT "https://business.linemeup.in/api/v1/lines" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Vaccinations","code":"VAC","type":"walk_in","avgServiceMinutes":5,"maxCapacity":80,"description":"Walk in for a scheduled vaccine","location":"Ground floor, room 2","callGraceMinutes":5,"appointmentGraceBeforeMinutes":0,"maxLateArrivalMinutes":0,"autoNoShowEnabled":true}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name": "Vaccinations",
    "code": "VAC",
    "type": "walk_in",
    "avgServiceMinutes": 5,
    "maxCapacity": 80,
    "description": "Walk in for a scheduled vaccine",
    "location": "Ground floor, room 2",
    "callGraceMinutes": 5,
    "appointmentGraceBeforeMinutes": 0,
    "maxLateArrivalMinutes": 0,
    "autoNoShowEnabled": true
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.put(
    "https://business.linemeup.in/api/v1/lines",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={
        "name": "Vaccinations",
        "code": "VAC",
        "type": "walk_in",
        "avgServiceMinutes": 5,
        "maxCapacity": 80,
        "description": "Walk in for a scheduled vaccine",
        "location": "Ground floor, room 2",
        "callGraceMinutes": 5,
        "appointmentGraceBeforeMinutes": 0,
        "maxLateArrivalMinutes": 0,
        "autoNoShowEnabled": True,
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "PUT",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "name" => 'Vaccinations',
        "code" => 'VAC',
        "type" => 'walk_in',
        "avgServiceMinutes" => 5,
        "maxCapacity" => 80,
        "description" => 'Walk in for a scheduled vaccine',
        "location" => 'Ground floor, room 2',
        "callGraceMinutes" => 5,
        "appointmentGraceBeforeMinutes" => 0,
        "maxLateArrivalMinutes" => 0,
        "autoNoShowEnabled" => true,
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000003",
  "name": "Vaccinations",
  "code": "VAC",
  "type": "walk_in",
  "avgServiceMinutes": 5,
  "maxCapacity": 80,
  "description": "Walk in for a scheduled vaccine",
  "location": "Ground floor, room 2",
  "callGraceMinutes": 5,
  "appointmentGraceBeforeMinutes": 0,
  "maxLateArrivalMinutes": 0,
  "autoNoShowEnabled": true,
  "paused": false,
  "waiting": 0
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

GET /lines/{lineId} #

One line and its settings; 404 for a line this key may not see.

Needs the read scope · v1.line

Parameters
NameInTypeNotes
lineIdrequiredpathstring
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
coderequiredstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
pausedrequiredboolean
waitingrequiredinteger
avgServiceMinutesrequiredinteger
maxCapacityrequiredinteger
descriptionrequiredstring | null
locationrequiredstring | null
callGraceMinutesrequiredinteger
appointmentGraceBeforeMinutesrequiredinteger
maxLateArrivalMinutesrequiredinteger
autoNoShowEnabledrequiredboolean
Example request

curl

curl "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "General",
  "code": "GEN",
  "type": "walk_in",
  "paused": false,
  "waiting": 4,
  "avgServiceMinutes": 10,
  "maxCapacity": 60,
  "description": "Walk-ins for a first visit",
  "location": "Ground floor",
  "callGraceMinutes": 5,
  "appointmentGraceBeforeMinutes": 10,
  "maxLateArrivalMinutes": 15,
  "autoNoShowEnabled": true
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

PUT /lines/{lineId} #

Replace a line's settings, every one said.

Needs the lines:manage scope · v1.lineReplace

Parameters
NameInTypeNotes
lineIdrequiredpathstring
Request body
FieldTypeNotes
namerequiredstringAt least 1 characters. Up to 60 characters
codeoptionalstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
avgServiceMinutesrequiredintegerAt least 1. At most 720
maxCapacityrequiredintegerAt least 1. At most 9999
descriptionoptionalstring | nullUp to 280 characters
locationoptionalstring | nullUp to 120 characters
callGraceMinutesrequiredintegerAt least 0. At most 120
appointmentGraceBeforeMinutesrequiredintegerAt least 0. At most 240
maxLateArrivalMinutesrequiredintegerAt least 0. At most 240
autoNoShowEnabledrequiredboolean
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
coderequiredstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
pausedrequiredboolean
waitingrequiredinteger
avgServiceMinutesrequiredinteger
maxCapacityrequiredinteger
descriptionrequiredstring | null
locationrequiredstring | null
callGraceMinutesrequiredinteger
appointmentGraceBeforeMinutesrequiredinteger
maxLateArrivalMinutesrequiredinteger
autoNoShowEnabledrequiredboolean
Example request

curl

curl -X PUT "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"General","code":"GEN","type":"walk_in","avgServiceMinutes":12,"maxCapacity":50,"description":"Walk-ins for a first visit","location":"Ground floor","callGraceMinutes":5,"appointmentGraceBeforeMinutes":10,"maxLateArrivalMinutes":15,"autoNoShowEnabled":true}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name": "General",
    "code": "GEN",
    "type": "walk_in",
    "avgServiceMinutes": 12,
    "maxCapacity": 50,
    "description": "Walk-ins for a first visit",
    "location": "Ground floor",
    "callGraceMinutes": 5,
    "appointmentGraceBeforeMinutes": 10,
    "maxLateArrivalMinutes": 15,
    "autoNoShowEnabled": true
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.put(
    "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={
        "name": "General",
        "code": "GEN",
        "type": "walk_in",
        "avgServiceMinutes": 12,
        "maxCapacity": 50,
        "description": "Walk-ins for a first visit",
        "location": "Ground floor",
        "callGraceMinutes": 5,
        "appointmentGraceBeforeMinutes": 10,
        "maxLateArrivalMinutes": 15,
        "autoNoShowEnabled": True,
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "PUT",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "name" => 'General',
        "code" => 'GEN',
        "type" => 'walk_in',
        "avgServiceMinutes" => 12,
        "maxCapacity" => 50,
        "description" => 'Walk-ins for a first visit',
        "location" => 'Ground floor',
        "callGraceMinutes" => 5,
        "appointmentGraceBeforeMinutes" => 10,
        "maxLateArrivalMinutes" => 15,
        "autoNoShowEnabled" => true,
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "General",
  "code": "GEN",
  "type": "walk_in",
  "paused": false,
  "waiting": 4,
  "avgServiceMinutes": 12,
  "maxCapacity": 50,
  "description": "Walk-ins for a first visit",
  "location": "Ground floor",
  "callGraceMinutes": 5,
  "appointmentGraceBeforeMinutes": 10,
  "maxLateArrivalMinutes": 15,
  "autoNoShowEnabled": true
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /lines/{lineId}/pause #

Pause a line: nobody new joins it until it is resumed.

Needs the lines:manage scope · v1.linePause

Parameters
NameInTypeNotes
lineIdrequiredpathstring
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
coderequiredstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
pausedrequiredboolean
waitingrequiredinteger
avgServiceMinutesrequiredinteger
maxCapacityrequiredinteger
descriptionrequiredstring | null
locationrequiredstring | null
callGraceMinutesrequiredinteger
appointmentGraceBeforeMinutesrequiredinteger
maxLateArrivalMinutesrequiredinteger
autoNoShowEnabledrequiredboolean
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/pause" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/pause", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/pause",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={},
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/pause");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(new stdClass()),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "General",
  "code": "GEN",
  "type": "walk_in",
  "paused": true,
  "waiting": 4,
  "avgServiceMinutes": 10,
  "maxCapacity": 60,
  "description": "Walk-ins for a first visit",
  "location": "Ground floor",
  "callGraceMinutes": 5,
  "appointmentGraceBeforeMinutes": 10,
  "maxLateArrivalMinutes": 15,
  "autoNoShowEnabled": true
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /lines/{lineId}/resume #

Resume a paused line.

Needs the lines:manage scope · v1.lineResume

Parameters
NameInTypeNotes
lineIdrequiredpathstring
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
coderequiredstring
typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
pausedrequiredboolean
waitingrequiredinteger
avgServiceMinutesrequiredinteger
maxCapacityrequiredinteger
descriptionrequiredstring | null
locationrequiredstring | null
callGraceMinutesrequiredinteger
appointmentGraceBeforeMinutesrequiredinteger
maxLateArrivalMinutesrequiredinteger
autoNoShowEnabledrequiredboolean
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/resume" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/resume", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/resume",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={},
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/lines/line-0193f2a1-7c4e-7a10-9b2e-000000000001/resume");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(new stdClass()),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "General",
  "code": "GEN",
  "type": "walk_in",
  "paused": false,
  "waiting": 4,
  "avgServiceMinutes": 10,
  "maxCapacity": 60,
  "description": "Walk-ins for a first visit",
  "location": "Ground floor",
  "callGraceMinutes": 5,
  "appointmentGraceBeforeMinutes": 10,
  "maxLateArrivalMinutes": 15,
  "autoNoShowEnabled": true
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

Services#

The fields and recipes are on the Services page.

GET /services #

The menu — every service on the lines this key may see.

Needs the read scope · v1.services

Response (200)
FieldTypeNotes
datarequiredarray of object
data[].idrequiredstring
data[].namerequiredstring
data[].parentIdrequiredstring | null
data[].lineIdrequiredstring
data[].selectablerequiredboolean
data[].activerequiredboolean
data[].durationMinutesrequiredinteger | null
data[].pricePaiserequiredinteger | null
Example request

curl

curl "https://business.linemeup.in/api/v1/services" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/services", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/services",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/services");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "data": [
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "Consultations",
      "parentId": null,
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "selectable": false,
      "active": true,
      "durationMinutes": null,
      "pricePaise": null
    },
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "General consultation",
      "parentId": "svc-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "selectable": true,
      "active": true,
      "durationMinutes": 15,
      "pricePaise": 50000
    },
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000003",
      "name": "Chest X-ray",
      "parentId": null,
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "selectable": true,
      "active": true,
      "durationMinutes": 20,
      "pricePaise": 120000
    }
  ]
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

Desks#

The fields and recipes are on the Desks page.

GET /desks #

Every desk this key may see, and what state each is in.

Needs the read scope · v1.desks

Response (200)
FieldTypeNotes
datarequiredarray of object
data[].idrequiredstring
data[].namerequiredstring
data[].typerequiredenumOne of "person", "counter"
data[].publicLabelrequiredstring | null
data[].activerequiredboolean
data[].staterequiredenumOne of "offline", "available", "called", "busy", "break"
data[].lineIdsrequiredarray of string
Example request

curl

curl "https://business.linemeup.in/api/v1/desks" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/desks", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/desks",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/desks");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "data": [
    {
      "id": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "Dr Mehta",
      "type": "person",
      "publicLabel": "Room 1",
      "active": true,
      "state": "available",
      "lineIds": [
        "line-0193f2a1-7c4e-7a10-9b2e-000000000001"
      ]
    },
    {
      "id": "sta-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "X-ray counter",
      "type": "counter",
      "publicLabel": "Counter 2",
      "active": true,
      "state": "busy",
      "lineIds": [
        "line-0193f2a1-7c4e-7a10-9b2e-000000000002"
      ]
    }
  ]
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /desks/{deskId}/call-next #

Call the next visit to a desk, as its own Call next would.

Needs the desks:operate scope · v1.deskCallNext

Parameters
NameInTypeNotes
deskIdrequiredpathstring
Response (200)
FieldTypeNotes
visitrequiredobject | null
visit.idrequiredstring
visit.journeyIdrequiredstring
visit.tokenrequiredstring
visit.lineIdrequiredstring
visit.statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
visit.bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
visit.priorityrequiredboolean
visit.noterequiredstring | null
visit.customerrequiredobject
visit.customer.namerequiredstring | null
visit.customer.phonerequiredstring | null
visit.servicesrequiredarray of object
visit.services[].idrequiredstring
visit.services[].namerequiredstring
visit.deskIdrequiredstring | null
visit.positionrequiredinteger | null
visit.slotAtrequiredstring (date-time) | null
visit.createdAtrequiredstring (date-time)
visit.calledAtrequiredstring (date-time) | null
visit.startedAtrequiredstring (date-time) | null
visit.endedAtrequiredstring (date-time) | null
visit.updatedAtrequiredstring (date-time)
waitingrequiredinteger
heldrequiredinteger
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/call-next" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/call-next", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/call-next",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={},
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/call-next");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(new stdClass()),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "visit": {
    "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
    "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
    "token": "GEN-20261030-014",
    "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
    "status": "called",
    "bookingType": "walk_in",
    "priority": false,
    "note": "First visit",
    "customer": {
      "name": "Asha Rao",
      "phone": "+919000000001"
    },
    "services": [
      {
        "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
        "name": "General consultation"
      }
    ],
    "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
    "position": null,
    "slotAt": null,
    "createdAt": "2026-10-30T04:12:00.000Z",
    "calledAt": "2026-10-30T04:31:00.000Z",
    "startedAt": null,
    "endedAt": null,
    "updatedAt": "2026-10-30T04:31:00.000Z"
  },
  "waiting": 3,
  "held": 0
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

PUT /desks/{deskId}/status #

Start a desk's shift, put it on a break, or end it.

Needs the desks:operate scope · v1.deskStatus

Parameters
NameInTypeNotes
deskIdrequiredpathstring
Request body
FieldTypeNotes
staterequiredenumOne of "available", "break", "offline"
reasonoptionalenumOne of "theatre", "rounds", "emergency_call", "break", "meal", "away", "other"
backAtoptionalstring (date-time)
Response (200)
FieldTypeNotes
idrequiredstring
namerequiredstring
typerequiredenumOne of "person", "counter"
publicLabelrequiredstring | null
activerequiredboolean
staterequiredenumOne of "offline", "available", "called", "busy", "break"
lineIdsrequiredarray of string
Example request

curl

curl -X PUT "https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/status" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state":"available"}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/status", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "state": "available"
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.put(
    "https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/status",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={
        "state": "available",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/desks/sta-0193f2a1-7c4e-7a10-9b2e-000000000001/status");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "PUT",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "state" => 'available',
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "name": "Dr Mehta",
  "type": "person",
  "publicLabel": "Room 1",
  "active": true,
  "state": "available",
  "lineIds": [
    "line-0193f2a1-7c4e-7a10-9b2e-000000000001"
  ]
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

Visits#

The fields and recipes are on the Visits page.

GET /visits #

Visits, newest first, by cursor — filtered by status, line, day or change.

Needs the read scope · v1.visits

Parameters
NameInTypeNotes
cursoroptionalquerystring
limitoptionalqueryinteger
statusoptionalqueryarray of enum
lineIdoptionalqueryarray of string
fromoptionalquerystring
tooptionalquerystring
updatedSinceoptionalquerystring (date-time)
Response (200)
FieldTypeNotes
datarequiredarray of object
data[].idrequiredstring
data[].journeyIdrequiredstring
data[].tokenrequiredstring
data[].lineIdrequiredstring
data[].statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data[].bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data[].priorityrequiredboolean
data[].noterequiredstring | null
data[].customerrequiredobject
data[].customer.namerequiredstring | null
data[].customer.phonerequiredstring | null
data[].servicesrequiredarray of object
data[].services[].idrequiredstring
data[].services[].namerequiredstring
data[].deskIdrequiredstring | null
data[].positionrequiredinteger | null
data[].slotAtrequiredstring (date-time) | null
data[].createdAtrequiredstring (date-time)
data[].calledAtrequiredstring (date-time) | null
data[].startedAtrequiredstring (date-time) | null
data[].endedAtrequiredstring (date-time) | null
data[].updatedAtrequiredstring (date-time)
nextCursorrequiredstring | null
Example request

curl

curl "https://business.linemeup.in/api/v1/visits?lineId=line-0193f2a1-7c4e-7a10-9b2e-000000000001&from=2026-10-30&to=2026-10-30&limit=2" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits?lineId=line-0193f2a1-7c4e-7a10-9b2e-000000000001&from=2026-10-30&to=2026-10-30&limit=2", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/visits?lineId=line-0193f2a1-7c4e-7a10-9b2e-000000000001&from=2026-10-30&to=2026-10-30&limit=2",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits?lineId=line-0193f2a1-7c4e-7a10-9b2e-000000000001&from=2026-10-30&to=2026-10-30&limit=2");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "data": [
    {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "token": "GEN-20261030-014",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "queued",
      "bookingType": "walk_in",
      "priority": false,
      "note": "First visit",
      "customer": {
        "name": "Asha Rao",
        "phone": "+919000000001"
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": null,
      "position": 3,
      "slotAt": null,
      "createdAt": "2026-10-30T04:12:00.000Z",
      "calledAt": null,
      "startedAt": null,
      "endedAt": null,
      "updatedAt": "2026-10-30T04:12:00.000Z"
    },
    {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000004",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000004",
      "token": "GEN-20261030-009",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "completed",
      "bookingType": "walk_in",
      "priority": false,
      "note": null,
      "customer": {
        "name": null,
        "phone": null
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "position": null,
      "slotAt": null,
      "createdAt": "2026-10-30T03:40:00.000Z",
      "calledAt": "2026-10-30T03:58:00.000Z",
      "startedAt": "2026-10-30T03:59:00.000Z",
      "endedAt": "2026-10-30T04:10:00.000Z",
      "updatedAt": "2026-10-30T04:10:00.000Z"
    }
  ],
  "nextCursor": "MjAyNi0xMC0yNVQwNDoxMDowMC4wMDAwMDBafGpvYi0wMDA0"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /visits #

Add a walk-in on a line or for services; honours Idempotency-Key.

Needs the visits:write scope · v1.visitCreate

Parameters
NameInTypeNotes
Idempotency-KeyoptionalheaderstringAny string up to 255 characters. The same key within 24 hours returns the first answer instead of adding a second visit.
Request body
FieldTypeNotes
lineIdoptionalstringAt least 1 characters. Up to 64 characters
serviceIdsoptionalarray of stringAt least 1 items. Up to 20 items
customeroptionalobject
customer.nameoptionalstring | nullAt least 1 characters. Up to 80 characters
customer.phoneoptionalstring | nullAt least 3 characters. Up to 24 characters
noteoptionalstring | nullUp to 140 characters
priorityoptionalboolean
referenceoptionalstring | nullAt least 1 characters. Up to 40 characters
consentoptionalboolean
Response (200)
FieldTypeNotes
datarequiredarray of objectAt least 1 items
data[].idrequiredstring
data[].journeyIdrequiredstring
data[].tokenrequiredstring
data[].lineIdrequiredstring
data[].statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data[].bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data[].priorityrequiredboolean
data[].noterequiredstring | null
data[].customerrequiredobject
data[].customer.namerequiredstring | null
data[].customer.phonerequiredstring | null
data[].servicesrequiredarray of object
data[].services[].idrequiredstring
data[].services[].namerequiredstring
data[].deskIdrequiredstring | null
data[].positionrequiredinteger | null
data[].slotAtrequiredstring (date-time) | null
data[].createdAtrequiredstring (date-time)
data[].calledAtrequiredstring (date-time) | null
data[].startedAtrequiredstring (date-time) | null
data[].endedAtrequiredstring (date-time) | null
data[].updatedAtrequiredstring (date-time)
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/visits" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Idempotency-Key: crm-visit-1042" \
  -H "Content-Type: application/json" \
  -d '{"lineId":"line-0193f2a1-7c4e-7a10-9b2e-000000000001","customer":{"name":"Asha Rao","phone":"+919000000001"},"note":"First visit","reference":"CRM-1042","consent":true}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Idempotency-Key": "crm-visit-1042",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
    "customer": {
      "name": "Asha Rao",
      "phone": "+919000000001"
    },
    "note": "First visit",
    "reference": "CRM-1042",
    "consent": true
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/visits",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
        "Idempotency-Key": "crm-visit-1042",
    },
    json={
        "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
        "customer": {
            "name": "Asha Rao",
            "phone": "+919000000001",
        },
        "note": "First visit",
        "reference": "CRM-1042",
        "consent": True,
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Idempotency-Key: crm-visit-1042",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "lineId" => 'line-0193f2a1-7c4e-7a10-9b2e-000000000001',
        "customer" => [
            "name" => 'Asha Rao',
            "phone" => '+919000000001',
        ],
        "note" => 'First visit',
        "reference" => 'CRM-1042',
        "consent" => true,
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "data": [
    {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "token": "GEN-20261030-014",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "queued",
      "bookingType": "walk_in",
      "priority": false,
      "note": "First visit",
      "customer": {
        "name": "Asha Rao",
        "phone": "+919000000001"
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": null,
      "position": 3,
      "slotAt": null,
      "createdAt": "2026-10-30T04:12:00.000Z",
      "calledAt": null,
      "startedAt": null,
      "endedAt": null,
      "updatedAt": "2026-10-30T04:12:00.000Z"
    }
  ]
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

GET /visits/{visitId} #

One visit, with its customer, services, desk and times.

Needs the read scope · v1.visit

Parameters
NameInTypeNotes
visitIdrequiredpathstring
Response (200)
FieldTypeNotes
idrequiredstring
journeyIdrequiredstring
tokenrequiredstring
lineIdrequiredstring
statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
priorityrequiredboolean
noterequiredstring | null
customerrequiredobject
customer.namerequiredstring | null
customer.phonerequiredstring | null
servicesrequiredarray of object
services[].idrequiredstring
services[].namerequiredstring
deskIdrequiredstring | null
positionrequiredinteger | null
slotAtrequiredstring (date-time) | null
createdAtrequiredstring (date-time)
calledAtrequiredstring (date-time) | null
startedAtrequiredstring (date-time) | null
endedAtrequiredstring (date-time) | null
updatedAtrequiredstring (date-time)
Example request

curl

curl "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY"

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001", {
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
  },
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.get(
    "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
    ],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "token": "GEN-20261030-014",
  "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "status": "queued",
  "bookingType": "walk_in",
  "priority": false,
  "note": "First visit",
  "customer": {
    "name": "Asha Rao",
    "phone": "+919000000001"
  },
  "services": [
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "General consultation"
    }
  ],
  "deskId": null,
  "position": 3,
  "slotAt": null,
  "createdAt": "2026-10-30T04:12:00.000Z",
  "calledAt": null,
  "startedAt": null,
  "endedAt": null,
  "updatedAt": "2026-10-30T04:12:00.000Z"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

PATCH /visits/{visitId} #

Change a visit's urgency or its note.

Needs the visits:write scope · v1.visitUpdate

Parameters
NameInTypeNotes
visitIdrequiredpathstring
Request body
FieldTypeNotes
priorityoptionalboolean
noteoptionalstring | nullUp to 140 characters
Response (200)
FieldTypeNotes
idrequiredstring
journeyIdrequiredstring
tokenrequiredstring
lineIdrequiredstring
statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
priorityrequiredboolean
noterequiredstring | null
customerrequiredobject
customer.namerequiredstring | null
customer.phonerequiredstring | null
servicesrequiredarray of object
services[].idrequiredstring
services[].namerequiredstring
deskIdrequiredstring | null
positionrequiredinteger | null
slotAtrequiredstring (date-time) | null
createdAtrequiredstring (date-time)
calledAtrequiredstring (date-time) | null
startedAtrequiredstring (date-time) | null
endedAtrequiredstring (date-time) | null
updatedAtrequiredstring (date-time)
Example request

curl

curl -X PATCH "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"note":"Needs a wheelchair at the door"}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "note": "Needs a wheelchair at the door"
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.patch(
    "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={
        "note": "Needs a wheelchair at the door",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "PATCH",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "note" => 'Needs a wheelchair at the door',
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "token": "GEN-20261030-014",
  "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "status": "queued",
  "bookingType": "walk_in",
  "priority": false,
  "note": "Needs a wheelchair at the door",
  "customer": {
    "name": "Asha Rao",
    "phone": "+919000000001"
  },
  "services": [
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "General consultation"
    }
  ],
  "deskId": null,
  "position": 3,
  "slotAt": null,
  "createdAt": "2026-10-30T04:12:00.000Z",
  "calledAt": null,
  "startedAt": null,
  "endedAt": null,
  "updatedAt": "2026-10-30T04:16:00.000Z"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /visits/{visitId}/transitions #

Move a visit along one edge: call, serve, complete, no-show, cancel, put back.

Needs the desks:operate scope · v1.visitTransition

Parameters
NameInTypeNotes
visitIdrequiredpathstring
Request body
FieldTypeNotes
torequiredenumOne of "queued", "called", "in_progress", "completed", "no_show", "cancelled"
deskIdoptionalstringAt least 1 characters. Up to 64 characters
Response (200)
FieldTypeNotes
idrequiredstring
journeyIdrequiredstring
tokenrequiredstring
lineIdrequiredstring
statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
priorityrequiredboolean
noterequiredstring | null
customerrequiredobject
customer.namerequiredstring | null
customer.phonerequiredstring | null
servicesrequiredarray of object
services[].idrequiredstring
services[].namerequiredstring
deskIdrequiredstring | null
positionrequiredinteger | null
slotAtrequiredstring (date-time) | null
createdAtrequiredstring (date-time)
calledAtrequiredstring (date-time) | null
startedAtrequiredstring (date-time) | null
endedAtrequiredstring (date-time) | null
updatedAtrequiredstring (date-time)
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/transitions" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":"called","deskId":"sta-0193f2a1-7c4e-7a10-9b2e-000000000001"}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/transitions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "to": "called",
    "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001"
  }),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/transitions",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={
        "to": "called",
        "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
    },
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/transitions");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "to" => 'called',
        "deskId" => 'sta-0193f2a1-7c4e-7a10-9b2e-000000000001',
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "token": "GEN-20261030-014",
  "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "status": "called",
  "bookingType": "walk_in",
  "priority": false,
  "note": "First visit",
  "customer": {
    "name": "Asha Rao",
    "phone": "+919000000001"
  },
  "services": [
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "General consultation"
    }
  ],
  "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "position": null,
  "slotAt": null,
  "createdAt": "2026-10-30T04:12:00.000Z",
  "calledAt": "2026-10-30T04:31:00.000Z",
  "startedAt": null,
  "endedAt": null,
  "updatedAt": "2026-10-30T04:31:00.000Z"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

POST /visits/{visitId}/urgent #

Mark a waiting visit urgent — above everyone, and the desk alerted.

Needs the visits:write scope · v1.visitUrgent

Parameters
NameInTypeNotes
visitIdrequiredpathstring
Response (200)
FieldTypeNotes
idrequiredstring
journeyIdrequiredstring
tokenrequiredstring
lineIdrequiredstring
statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
priorityrequiredboolean
noterequiredstring | null
customerrequiredobject
customer.namerequiredstring | null
customer.phonerequiredstring | null
servicesrequiredarray of object
services[].idrequiredstring
services[].namerequiredstring
deskIdrequiredstring | null
positionrequiredinteger | null
slotAtrequiredstring (date-time) | null
createdAtrequiredstring (date-time)
calledAtrequiredstring (date-time) | null
startedAtrequiredstring (date-time) | null
endedAtrequiredstring (date-time) | null
updatedAtrequiredstring (date-time)
Example request

curl

curl -X POST "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/urgent" \
  -H "Authorization: Bearer $LINEMEUP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Node

const res = await fetch("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/urgent", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LINEMEUP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({}),
});
if (!res.ok) throw new Error(`Line Me Up answered ${res.status}`);
const answer = await res.json();

Python

import os
import requests

res = requests.post(
    "https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/urgent",
    headers={
        "Authorization": f"Bearer {os.environ['LINEMEUP_API_KEY']}",
    },
    json={},
    timeout=10,
)
res.raise_for_status()
answer = res.json()

PHP

<?php
$ch = curl_init("https://business.linemeup.in/api/v1/visits/job-0193f2a1-7c4e-7a10-9b2e-000000000001/urgent");
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LINEMEUP_API_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(new stdClass()),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10,
]);
$answer = json_decode(curl_exec($ch), true);
Example response
{
  "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "token": "GEN-20261030-014",
  "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "status": "queued",
  "bookingType": "walk_in",
  "priority": true,
  "note": "First visit",
  "customer": {
    "name": "Asha Rao",
    "phone": "+919000000001"
  },
  "services": [
    {
      "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
      "name": "General consultation"
    }
  ],
  "deskId": null,
  "position": 1,
  "slotAt": null,
  "createdAt": "2026-10-30T04:12:00.000Z",
  "calledAt": null,
  "startedAt": null,
  "endedAt": null,
  "updatedAt": "2026-10-30T04:15:00.000Z"
}
Errors this can answer
  • 401 Not authenticated
  • 403 The key lacks the permission for this route, or the plan does not include integrations
  • 404 Not found — or outside this key's business, lines or desks
  • 409 The visit, line or desk is not in a state that allows this
  • 422 Validation failed
  • 429 Rate limited — wait for the Retry-After header's seconds

Every error has the same body — see Errors.

Webhook events#

How to receive and verify them is on Webhooks.

EVENT visit.created #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "visit.created"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.visitrequiredobject
data.visit.idrequiredstring
data.visit.journeyIdrequiredstring
data.visit.tokenrequiredstring
data.visit.lineIdrequiredstring
data.visit.statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data.visit.bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data.visit.priorityrequiredboolean
data.visit.customerrequiredobject
data.visit.customer.namerequiredstring | null
data.visit.customer.phonerequiredstring | null
data.visit.servicesrequiredarray of object
data.visit.services[].idrequiredstring
data.visit.services[].namerequiredstring
data.visit.deskIdrequiredstring | null
data.visit.positionrequiredinteger | null
data.visit.slotAtrequiredstring (date-time) | null
data.visit.createdAtrequiredstring (date-time)
data.visit.calledAtrequiredstring (date-time) | null
data.visit.startedAtrequiredstring (date-time) | null
data.visit.endedAtrequiredstring (date-time) | null
data.visit.updatedAtrequiredstring (date-time)
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "visit.created",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T04:12:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "visit": {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "token": "GEN-20261030-014",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "queued",
      "bookingType": "walk_in",
      "priority": false,
      "customer": {
        "name": "Asha Rao",
        "phone": "+919000000001"
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": null,
      "position": 3,
      "slotAt": null,
      "createdAt": "2026-10-30T04:12:00.000Z",
      "calledAt": null,
      "startedAt": null,
      "endedAt": null,
      "updatedAt": "2026-10-30T04:12:00.000Z"
    }
  }
}

EVENT visit.status_changed #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "visit.status_changed"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.visitrequiredobject
data.visit.idrequiredstring
data.visit.journeyIdrequiredstring
data.visit.tokenrequiredstring
data.visit.lineIdrequiredstring
data.visit.statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data.visit.bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data.visit.priorityrequiredboolean
data.visit.customerrequiredobject
data.visit.customer.namerequiredstring | null
data.visit.customer.phonerequiredstring | null
data.visit.servicesrequiredarray of object
data.visit.services[].idrequiredstring
data.visit.services[].namerequiredstring
data.visit.deskIdrequiredstring | null
data.visit.positionrequiredinteger | null
data.visit.slotAtrequiredstring (date-time) | null
data.visit.createdAtrequiredstring (date-time)
data.visit.calledAtrequiredstring (date-time) | null
data.visit.startedAtrequiredstring (date-time) | null
data.visit.endedAtrequiredstring (date-time) | null
data.visit.updatedAtrequiredstring (date-time)
data.fromrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data.torequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "visit.status_changed",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T04:31:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "visit": {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "token": "GEN-20261030-014",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "called",
      "bookingType": "walk_in",
      "priority": false,
      "customer": {
        "name": "Asha Rao",
        "phone": "+919000000001"
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "position": null,
      "slotAt": null,
      "createdAt": "2026-10-30T04:12:00.000Z",
      "calledAt": "2026-10-30T04:31:00.000Z",
      "startedAt": null,
      "endedAt": null,
      "updatedAt": "2026-10-30T04:31:00.000Z"
    },
    "from": "queued",
    "to": "called"
  }
}

EVENT visit.updated #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "visit.updated"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.visitrequiredobject
data.visit.idrequiredstring
data.visit.journeyIdrequiredstring
data.visit.tokenrequiredstring
data.visit.lineIdrequiredstring
data.visit.statusrequiredenumOne of "booked", "queued", "called", "in_progress", "completed", "cancelled", "no_show"
data.visit.bookingTyperequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data.visit.priorityrequiredboolean
data.visit.customerrequiredobject
data.visit.customer.namerequiredstring | null
data.visit.customer.phonerequiredstring | null
data.visit.servicesrequiredarray of object
data.visit.services[].idrequiredstring
data.visit.services[].namerequiredstring
data.visit.deskIdrequiredstring | null
data.visit.positionrequiredinteger | null
data.visit.slotAtrequiredstring (date-time) | null
data.visit.createdAtrequiredstring (date-time)
data.visit.calledAtrequiredstring (date-time) | null
data.visit.startedAtrequiredstring (date-time) | null
data.visit.endedAtrequiredstring (date-time) | null
data.visit.updatedAtrequiredstring (date-time)
data.changedrequiredarray of enumAt least 1 items
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "visit.updated",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T04:15:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "visit": {
      "id": "job-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "journeyId": "jny-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "token": "GEN-20261030-014",
      "lineId": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "status": "queued",
      "bookingType": "walk_in",
      "priority": true,
      "customer": {
        "name": "Asha Rao",
        "phone": "+919000000001"
      },
      "services": [
        {
          "id": "svc-0193f2a1-7c4e-7a10-9b2e-000000000002",
          "name": "General consultation"
        }
      ],
      "deskId": null,
      "position": 1,
      "slotAt": null,
      "createdAt": "2026-10-30T04:12:00.000Z",
      "calledAt": null,
      "startedAt": null,
      "endedAt": null,
      "updatedAt": "2026-10-30T04:15:00.000Z"
    },
    "changed": [
      "priority"
    ]
  }
}

EVENT line.paused #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "line.paused"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.linerequiredobject
data.line.idrequiredstring
data.line.namerequiredstring
data.line.coderequiredstring
data.line.typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data.line.pausedrequiredboolean
data.line.waitingrequiredinteger
data.line.avgServiceMinutesrequiredinteger
data.line.maxCapacityrequiredinteger
data.line.descriptionrequiredstring | null
data.line.locationrequiredstring | null
data.line.callGraceMinutesrequiredinteger
data.line.appointmentGraceBeforeMinutesrequiredinteger
data.line.maxLateArrivalMinutesrequiredinteger
data.line.autoNoShowEnabledrequiredboolean
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "line.paused",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T06:30:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "line": {
      "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "General",
      "code": "GEN",
      "type": "walk_in",
      "paused": true,
      "waiting": 4,
      "avgServiceMinutes": 10,
      "maxCapacity": 60,
      "description": "Walk-ins for a first visit",
      "location": "Ground floor",
      "callGraceMinutes": 5,
      "appointmentGraceBeforeMinutes": 10,
      "maxLateArrivalMinutes": 15,
      "autoNoShowEnabled": true
    }
  }
}

EVENT line.resumed #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "line.resumed"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.linerequiredobject
data.line.idrequiredstring
data.line.namerequiredstring
data.line.coderequiredstring
data.line.typerequiredenumOne of "walk_in", "appointment", "scheduled_walk_in"
data.line.pausedrequiredboolean
data.line.waitingrequiredinteger
data.line.avgServiceMinutesrequiredinteger
data.line.maxCapacityrequiredinteger
data.line.descriptionrequiredstring | null
data.line.locationrequiredstring | null
data.line.callGraceMinutesrequiredinteger
data.line.appointmentGraceBeforeMinutesrequiredinteger
data.line.maxLateArrivalMinutesrequiredinteger
data.line.autoNoShowEnabledrequiredboolean
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "line.resumed",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T07:00:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "line": {
      "id": "line-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "General",
      "code": "GEN",
      "type": "walk_in",
      "paused": false,
      "waiting": 4,
      "avgServiceMinutes": 10,
      "maxCapacity": 60,
      "description": "Walk-ins for a first visit",
      "location": "Ground floor",
      "callGraceMinutes": 5,
      "appointmentGraceBeforeMinutes": 10,
      "maxLateArrivalMinutes": 15,
      "autoNoShowEnabled": true
    }
  }
}

EVENT desk.status_changed #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "desk.status_changed"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.deskrequiredobject
data.desk.idrequiredstring
data.desk.namerequiredstring
data.desk.typerequiredenumOne of "person", "counter"
data.desk.publicLabelrequiredstring | null
data.desk.activerequiredboolean
data.desk.staterequiredenumOne of "offline", "available", "called", "busy", "break"
data.desk.lineIdsrequiredarray of string
data.fromrequiredenumOne of "offline", "available", "called", "busy", "break"
data.torequiredenumOne of "offline", "available", "called", "busy", "break"
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "desk.status_changed",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T06:30:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": false,
  "data": {
    "desk": {
      "id": "sta-0193f2a1-7c4e-7a10-9b2e-000000000001",
      "name": "Dr Mehta",
      "type": "person",
      "publicLabel": "Room 1",
      "active": true,
      "state": "break",
      "lineIds": [
        "line-0193f2a1-7c4e-7a10-9b2e-000000000001"
      ]
    },
    "from": "available",
    "to": "break"
  }
}

EVENT webhook.test #

Arrives as a POST to your endpoint with LineMeUp-Signature , LineMeUp-Event-Id , LineMeUp-Event-Type and LineMeUp-Delivery-Id .

Payload
FieldTypeNotes
idrequiredstring
typerequiredstringAlways "webhook.test"
apiVersionrequiredstringAlways "v1"
createdAtrequiredstring (date-time)
businessIdrequiredstring
testrequiredboolean
datarequiredobject
data.messagerequiredstring
Example payload
{
  "id": "evt-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "type": "webhook.test",
  "apiVersion": "v1",
  "createdAt": "2026-10-30T05:00:00.000Z",
  "businessId": "bus-0193f2a1-7c4e-7a10-9b2e-000000000001",
  "test": true,
  "data": {
    "message": "A test event from Line Me Up. Your endpoint is receiving webhooks."
  }
}