API Usage Guide

Route descriptions and ready-to-run examples for FrontLine API consumers.

Use this guide for frontend integration, automation scripts, and partner system integrations across core FrontLine modules.

REST JSON Bearer Auth Tenant Scoped curl + JS + Python + C#

Connection Basics

Base URL

https://frontline.redshoresolutions.com/api/v1

Authentication

Authorization: Bearer <ACCESS_TOKEN>

Content Type

application/json

Error Handling

API errors return JSON with error.code and error.message.

Acquire Auth Token

  1. Sign in through /auth/login (OIDC flow), then open /auth/session to verify your authenticated session.
  2. For browser-based calls, FrontLine stores the active access token in local storage as frontline.accessToken.
  3. For local development and integration tests, you can request a dev token (when enabled):
    curl -X POST "https://frontline.redshoresolutions.com/api/v1/auth/dev-token" \
      -H "Content-Type: application/json" \
      -d '{"role":"tenant_admin","tenantId":"root-tenant","userId":"dev-user"}'

Health Check

GET /api/v1/health

Use this endpoint for uptime checks and environment diagnostics.

curl -X GET "https://frontline.redshoresolutions.com/api/v1/health"
const response = await fetch("https://frontline.redshoresolutions.com/api/v1/health", {
  method: "GET"
});

const data = await response.json();
console.log(data);
import requests

response = requests.get("https://frontline.redshoresolutions.com/api/v1/health", timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Threading.Tasks;

using var http = new HttpClient();
var response = await http.GetAsync("https://frontline.redshoresolutions.com/api/v1/health");
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "status": "ok",
  "version": "v1",
  "tenantId": "tenant-id",
  "requestId": "7fd205c4-a2f9-41f2-a8bc-0d2f26f8a9f2"
}

Current Session

GET /api/v1/auth/me

Returns current user identity, tenant context, and effective permissions.

curl -X GET "https://frontline.redshoresolutions.com/api/v1/auth/me" \
  -H "Authorization: Bearer <ACCESS_TOKEN>"
const response = await fetch("https://frontline.redshoresolutions.com/api/v1/auth/me", {
  headers: {
    Authorization: "Bearer <ACCESS_TOKEN>"
  }
});

const profile = await response.json();
console.log(profile);
import requests

headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/auth/me", headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var response = await http.GetAsync("https://frontline.redshoresolutions.com/api/v1/auth/me");
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "userId": "EMP-1001",
  "tenantId": "tenant-id",
  "role": "tenant_admin",
  "permissions": [
    "employee.read",
    "employee.write",
    "inventory.read",
    "inventory.write"
  ]
}

Recruiting Candidates

GET /api/v1/recruiting/candidates

Fetch candidates for recruiter queues and candidate review screens.

curl -G "https://frontline.redshoresolutions.com/api/v1/recruiting/candidates" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  --data-urlencode "page=1" \
  --data-urlencode "pageSize=10" \
  --data-urlencode "status=new"
const response = await fetch(
  "https://frontline.redshoresolutions.com/api/v1/recruiting/candidates?page=1&pageSize=10&status=new",
  {
    headers: {
      Authorization: "Bearer <ACCESS_TOKEN>"
    }
  }
);

const candidates = await response.json();
console.log(candidates);
import requests

params = {"page": 1, "pageSize": 10, "status": "new"}
headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/recruiting/candidates", params=params, headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var url = "https://frontline.redshoresolutions.com/api/v1/recruiting/candidates?page=1&pageSize=10&status=new";
var response = await http.GetAsync(url);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "page": 1,
  "pageSize": 10,
  "total": 73,
  "items": [
    {
      "id": "CAND-2044",
      "name": "Maria Jensen",
      "status": "new",
      "score": 0.87,
      "role": "Customer Support Agent"
    }
  ]
}

Workforce Shift List

GET /api/v1/workforce/shifts

Load shift data for schedule views, swap workflows, and capacity planning.

curl -G "https://frontline.redshoresolutions.com/api/v1/workforce/shifts" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  --data-urlencode "clientId=client-redshore" \
  --data-urlencode "lobId=lob-support"
const response = await fetch(
  "https://frontline.redshoresolutions.com/api/v1/workforce/shifts?clientId=client-redshore&lobId=lob-support",
  {
    headers: {
      Authorization: "Bearer <ACCESS_TOKEN>"
    }
  }
);

const shifts = await response.json();
console.log(shifts);
import requests

params = {"clientId": "client-redshore", "lobId": "lob-support"}
headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/workforce/shifts", params=params, headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var url = "https://frontline.redshoresolutions.com/api/v1/workforce/shifts?clientId=client-redshore&lobId=lob-support";
var response = await http.GetAsync(url);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "items": [
    {
      "id": "SHIFT-9002",
      "employeeId": "FL-1109",
      "clientId": "client-redshore",
      "lobId": "lob-support",
      "startUtc": "2026-03-02T12:00:00Z",
      "endUtc": "2026-03-02T20:00:00Z",
      "status": "scheduled"
    }
  ]
}

Service Desk Tickets

GET /api/v1/service-desk/tickets

Read ticket queues scoped by tenant, project/client, and role permissions.

curl -G "https://frontline.redshoresolutions.com/api/v1/service-desk/tickets" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  --data-urlencode "status=open" \
  --data-urlencode "priority=high"
const response = await fetch(
  "https://frontline.redshoresolutions.com/api/v1/service-desk/tickets?status=open&priority=high",
  {
    headers: {
      Authorization: "Bearer <ACCESS_TOKEN>"
    }
  }
);

const tickets = await response.json();
console.log(tickets);
import requests

params = {"status": "open", "priority": "high"}
headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/service-desk/tickets", params=params, headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var url = "https://frontline.redshoresolutions.com/api/v1/service-desk/tickets?status=open&priority=high";
var response = await http.GetAsync(url);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "items": [
    {
      "id": "TCK-12031",
      "summary": "VPN access issue",
      "status": "open",
      "priority": "high",
      "assigneeId": "FL-1008",
      "slaState": "at_risk"
    }
  ]
}

Inventory Assets

GET /api/v1/inventory/assets

Load inventory registry records and filter by category, status, and assignment.

curl -G "https://frontline.redshoresolutions.com/api/v1/inventory/assets" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  --data-urlencode "status=in_use" \
  --data-urlencode "category=laptop"
const response = await fetch(
  "https://frontline.redshoresolutions.com/api/v1/inventory/assets?status=in_use&category=laptop",
  {
    headers: {
      Authorization: "Bearer <ACCESS_TOKEN>"
    }
  }
);

const assets = await response.json();
console.log(assets);
import requests

params = {"status": "in_use", "category": "laptop"}
headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/inventory/assets", params=params, headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var url = "https://frontline.redshoresolutions.com/api/v1/inventory/assets?status=in_use&category=laptop";
var response = await http.GetAsync(url);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "items": [
    {
      "id": "AST-33018",
      "assetTag": "LPT-33018",
      "category": "laptop",
      "status": "in_use",
      "assignedTo": "FL-1050",
      "location": "Remote"
    }
  ]
}

Notifications Inbox

GET /api/v1/notifications

Read user-scoped notifications for the header dropdown and full alerts view.

curl -G "https://frontline.redshoresolutions.com/api/v1/notifications" \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  --data-urlencode "page=1" \
  --data-urlencode "pageSize=20"
const response = await fetch(
  "https://frontline.redshoresolutions.com/api/v1/notifications?page=1&pageSize=20",
  {
    headers: {
      Authorization: "Bearer <ACCESS_TOKEN>"
    }
  }
);

const notifications = await response.json();
console.log(notifications);
import requests

params = {"page": 1, "pageSize": 20}
headers = {"Authorization": "Bearer <ACCESS_TOKEN>"}
response = requests.get("https://frontline.redshoresolutions.com/api/v1/notifications", params=params, headers=headers, timeout=15)
response.raise_for_status()
print(response.json())
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;

using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "<ACCESS_TOKEN>");
var url = "https://frontline.redshoresolutions.com/api/v1/notifications?page=1&pageSize=20";
var response = await http.GetAsync(url);
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
Example Response
{
  "page": 1,
  "pageSize": 20,
  "unreadCount": 12,
  "items": [
    {
      "id": "NTF-7762",
      "title": "Approval required",
      "type": "profile_change",
      "createdAt": "2026-03-01T10:12:41Z",
      "read": false
    }
  ]
}

Powered By Red Shore Solutions

Customer Service Outsourcing, Staff Augmentation, and IT Operations Expertise

FrontLine is part of the Red Shore ecosystem focused on scaling customer support through managed outsourcing, staff augmentation, IT operations consulting, and systems integration services.

Visit Red Shore Solutions