AxisCare API & Webhook Reference

Complete endpoint, webhook, and integration guide for the Nerve Center platform. Built for daily use by the Brainstorm AGI engineering team.

44
API Endpoints
45
Webhook Events
20
Agent Capabilities

Overview

Core details for working with the AxisCare REST API.

Base URLhttps://{siteNumber}.axiscare.com/api
API Versionv2025-06-25
Auth MethodBearer Token + Version Header
Response FormatJSON
PaginationCursor-based (startAfterId or nextPageToken)
Rate Limits~5 req/sec recommended (no official limit published)

Endpoint Categories

Authentication

Every request requires two headers: an Authorization bearer token and an API version header.

Required Headers

HeaderValueNotes
Authorization Bearer {your-api-token} Obtained from AxisCare admin panel
X-AxisCare-Api-Version 2023-10-01 Required - controls response format
Content-Type application/json Required for POST/PATCH/PUT requests
cURL
curl 'https://13131.axiscare.com/api/clients?limit=10' \
  -H 'Authorization: Bearer YOUR_API_TOKEN' \
  -H 'X-AxisCare-Api-Version: 2023-10-01'
JavaScript (fetch)
const SITE = '13131';
const BASE = `https://${SITE}.axiscare.com/api`;
const TOKEN = 'YOUR_API_TOKEN';

const headers = {
  'Authorization': `Bearer ${TOKEN}`,
  'X-AxisCare-Api-Version': '2023-10-01',
  'Content-Type': 'application/json',
};

const res = await fetch(`${BASE}/clients?limit=10`, { headers });
const data = await res.json();
Python (requests)
import requests

SITE = "13131"
BASE = f"https://{SITE}.axiscare.com/api"
TOKEN = "YOUR_API_TOKEN"

headers = {
    "Authorization": f"Bearer {TOKEN}",
    "X-AxisCare-Api-Version": "2023-10-01",
}

resp = requests.get(f"{BASE}/clients", headers=headers, params={"limit": 10})
data = resp.json()

API Endpoints

All 44 endpoints organized by entity category. Click any endpoint to expand details.

ADLs

2 endpoints
GET /api/adls List ADLs Working
What it does
Returns the master list of care tasks your agency has configured -- things like Bathing, Dressing, Meal Prep, Medication Reminders, Transfers, etc.
Nerve Center use
When building a care plan or reviewing what tasks a caregiver should be performing during a visit, this gives you the full menu of available ADL tasks. The ADL categories (Mobility, Housekeeping, Personal Grooming, Errands, Personal Care, Companionship, Pet Care, Health/Medication) help organize what caregivers document during each visit.
Real scenario
Esmeralda gets a call from a client's daughter asking "What services does my mom receive?" The agent pulls the client's assigned ADLs and reads them back -- "Your mother currently receives help with bathing, meal preparation, and medication reminders."
QUERY PARAMETERS
ParamTypeDescription
activebooleanFilter by active status
categoryIdintFilter by category ID
limitint1-500, default 100
startAfterIdintCursor for pagination
GET /api/adls/categories List ADL Categories Working
What it does
Returns the category groupings for ADLs -- the buckets that organize tasks by type.
Nerve Center use
When displaying ADL compliance dashboards or building care plan templates, you need these categories to group tasks logically. Also used when filtering ADL reports by category.
Real scenario
The CareTrack dashboard groups EVV compliance data by care category. This endpoint feeds those category headers.

Applicants

3 endpoints
GET /api/applicants List Applicants Working
What it does
Returns everyone who has applied to work as a caregiver but hasn't been hired yet. Includes their contact info, application status, and referral source.
Nerve Center use
The Interview Add-On pulls this list to show which candidates are in the pipeline, who needs to be scheduled for an AI interview, and who came from which job board (Indeed, Craigslist, walk-in referral, etc.).
Real scenario
Mayra asks "How many active applicants do we have this week?" The Nerve Center queries this endpoint, filters by status=active, and returns the count with a breakdown by referral source.
QUERY PARAMETERS
ParamTypeDescription
applicantIdsstringComma-separated applicant IDs
statusesstringFilter by status (active/inactive)
requestedSensitiveFieldsstringInclude sensitive fields (e.g. ssn)
startAfterIdintCursor for pagination
GET /api/applicants/{applicantId} Get Applicant Working
What it does
Returns all details for one specific applicant -- name, contact info, address, referral source, SSN (if permitted), and application status.
Nerve Center use
When the Interview Add-On needs to display a candidate's full profile before an AI interview, or when the Credentialing Add-On needs to start a background check.
Real scenario
A candidate calls the office. Esmeralda looks them up by phone number, finds their applicant record, and confirms their interview time.
Official docs show plural /api/applicants/{id}, but site 13131 needs singular /api/applicant/{id}. Test both if you get 404s.
POST /api/applicants Create Applicant Working
What it does
Adds a new job applicant to AxisCare. Only requires first and last name. AxisCare checks for duplicates automatically.
Nerve Center use
When someone calls SYNERGY asking about a job, Esmeralda can create an applicant record right from the phone call -- capturing their name, phone number, and email. This feeds directly into the Interview Add-On pipeline.
Real scenario
"Hi, I'd like to apply for a caregiver position." Esmeralda collects their info and creates the applicant record. The Nerve Center then sends them a link to schedule an AI interview.
REQUEST BODY
FieldTypeDescription
firstName *stringRequired
lastName *stringRequired
middleInitialstringOptional
ssnstringSocial security number
dateOfBirthstringDate of birth
statusstringApplicant status
phonestringPhone number
emailstringEmail address
addressobjectAddress object
externalIdstringExternal system ID
regionIdintRegion ID
adminIdintAdmin user ID
notesstringNotes text

Caregivers

4 endpoints
GET /api/caregivers List Caregivers Working
What it does
Returns your entire caregiver roster with full details -- name, contact info, address, hire date, pay rate, class code (DCW, RN, etc.), assigned case manager, region, and status.
Nerve Center use
  • THIS IS THE MOST-USED ENDPOINT.
  • Outreach Composer: Ranks available caregivers for shift coverage
  • Coverage Engine: Checks who is active and qualified
  • CareTrack: Headcount, turnover, and reliability metrics
  • Esmeralda: Caller lookup (matching incoming phone numbers)
Real scenario
A caregiver calls out sick at 6 AM. The Coverage Engine pulls all active caregivers, cross-references their location (driving distance to client), weekly hours (overtime risk), and client familiarity to rank who should be called first for coverage.
Returns an OBJECT keyed by ID, not an array. Use Object.values() to iterate.
QUERY PARAMETERS
ParamTypeDescription
caregiverIdsstringComma-separated IDs
statusesstringFilter by status
regionIdsstringFilter by region IDs
regionNamesstringFilter by region names
classCodesstringFilter by class codes
classLabelsstringFilter by class labels
adminIdsstringFilter by admin IDs
adminUsernamesstringFilter by admin usernames
startAfterIdintCursor for pagination
limitintResults per page
requestedSensitiveFieldsstringInclude sensitive fields
GET /api/caregivers/{caregiverId} Get Caregiver Working
What it does
Returns complete details for a single caregiver, including sensitive fields like SSN and driver's license if your token has permission.
Nerve Center use
When Esmeralda is on a call with a caregiver and needs their profile, or when the Credentialing Add-On needs to verify their documentation status.
Real scenario
Caregiver calls: "I need to update my address." Esmeralda pulls their profile, confirms their identity, and the case manager updates the record.
QUERY PARAMETERS
ParamTypeDescription
requestedSensitiveFieldsstringInclude sensitive fields
POST /api/caregivers Create Caregiver Working
What it does
Adds a new caregiver to AxisCare. This is the endpoint that converts an applicant into a hired employee.
Nerve Center use
After an applicant passes the AI interview and background check, the Credentialing Add-On creates their caregiver record in AxisCare -- pulling all the data collected during onboarding (address, pay rate, hire date, etc.).
Real scenario
The onboarding pipeline completes: interview passed, background check clear, training done. The system automatically creates the caregiver in AxisCare and assigns them to Keyla Salas as their case manager.
REQUEST BODY
FieldTypeDescription
firstName *stringRequired
lastName *stringRequired
middleInitialstringMax 2 characters
ssnstringSocial security number
dateOfBirthstringDate of birth
statusstringCaregiver status
phonestringPhone number
emailstringEmail address
addressobjectAddress object
externalIdstringExternal system ID
regionIdintRegion ID
adminIdintAdmin user ID
hireDatestringHire date
terminationDatestringTermination date
notesstringNotes text
PATCH /api/caregivers/{caregiverId} Update Caregiver Working
What it does
Changes specific fields on a caregiver record. Send only what you want to change.
Nerve Center use
When a caregiver gets a raise, changes phone numbers, or needs to be deactivated (there's no DELETE -- you set status to "Inactive").
Real scenario
A caregiver completes their 90-day review and gets a pay bump. The case manager approves it in the Nerve Center, which sends PATCH with the new payRate.
If you send firstName, you must also send lastName and vice versa. They are paired.

Clients

11 endpoints
GET /api/clients List Clients Working
What it does
Returns every client (patient/care recipient) with their full profile -- name, addresses, phone numbers, case manager, region, status, medical details (allergies, advance directive, DNR, languages, triage level), and Medicaid number.
Nerve Center use
Esmeralda uses this for caller lookup (matching incoming phone numbers to client records). CareTrack uses it for client census metrics. The scheduling engine needs client locations for caregiver distance calculations.
Real scenario
A call comes in from (928) 555-1234. Esmeralda searches all clients for that phone number (checking homePhone, mobilePhone, and otherPhone fields). Finds the match and greets them by name.
QUERY PARAMETERS
ParamTypeDescription
clientIdsstringComma-separated IDs
statusesstringFilter by status
regionIdsstringFilter by region IDs
regionNamesstringFilter by region names
classCodesstringFilter by class codes
classLabelsstringFilter by class labels
adminIdsstringFilter by admin IDs
externalIdsstringFilter by external IDs
adminUsernamesstringFilter by admin usernames
startAfterIdintCursor for pagination
limitintResults per page
requestedSensitiveFieldsstringInclude sensitive fields
GET /api/clients/{clientId} Get Client Working
What it does
Returns everything about a specific client.
Nerve Center use
When Esmeralda identifies a caller as a client (or their family member), she pulls the full profile to have context for the conversation -- who their caregiver is, what services they receive, any priority notes.
Real scenario
Client's son calls concerned about his mother's care. Esmeralda pulls the client profile and sees the priority note says "Fall risk - needs walker at all times." She can reference this in the conversation.
POST /api/clients Create Client Working
What it does
Adds a new care recipient to AxisCare.
Nerve Center use
When a lead converts to a client (they sign up for services), the system creates their client record with all the intake information collected during the sales process.
Real scenario
Esmeralda handles an intake call. The family decides to start services. The lead record gets converted to a client record with POST /api/clients.
REQUEST BODY
FieldTypeDescription
firstName *stringRequired
lastName *stringRequired
statusstringClient status
dateOfBirthstringDate of birth
phonestringPhone number
emailstringEmail address
addressobjectAddress object
externalIdstringExternal system ID
regionIdintRegion ID
adminIdintAdmin user ID
notesstringNotes text
medicaidIdstringMedicaid ID (new)
medicareIdstringMedicare ID (new)
PATCH /api/clients/{clientId} Update Client Working
What it does
Changes specific fields on a client record.
Nerve Center use
When care plans change, contact info updates, or a client needs to be discharged (set status to "Inactive").
Real scenario
Client moves to a new address. The case manager updates the residential address, which triggers the system to recalculate caregiver driving distances for scheduling.
GET /api/clients/{clientId}/responsibleParties List Responsible Parties Needs Enabling
What it does
Returns the list of responsible parties (family members, guardians, emergency contacts) associated with a client.
Nerve Center use
When Esmeralda needs to contact a client's family member, or when the system needs to send notifications about schedule changes to the authorized contacts.
Real scenario
A caregiver reports the client had a fall. The Nerve Center needs to notify the daughter who is listed as the primary responsible party. This endpoint provides her contact info.
Returns 404 on site 13131 -- needs AxisCare support to enable. Uses listNumber (1-based index) not an ID.
PUT /api/clients/{clientId}/responsibleParties/{listNumber} Update Responsible Party Needs Enabling
What it does
Replaces the data for a specific responsible party (identified by position number, not ID).
Nerve Center use
When family contact info changes.
Real scenario
Client's daughter gets a new phone number. The case manager updates the responsible party record using PUT (full replace, not partial update).
Uses PUT (full replace) not PATCH (partial update). You must send all fields.
REQUEST BODY
FieldTypeDescription
namestringParty name
relationshipstringRelationship to client
addressobjectAddress object
phonestringPhone number
emailstringEmail address
GET /api/clients/{clientId}/adls List Client ADLs Working
What it does
Returns which care tasks are on this client's care plan -- the specific ADLs their caregiver is expected to perform each visit.
Nerve Center use
When Esmeralda needs to tell a caregiver what tasks to perform, or when auditing whether caregivers are completing all required ADLs. Also feeds the ADL compliance tracking in CareTrack.
Real scenario
New caregiver assigned to a client. The system pulls the client's ADL list to include in the shift confirmation SMS: "Your visit with Mrs. Garcia includes: bathing assistance, meal prep, medication reminder, light housekeeping."
POST /api/clients/{clientId}/adls Assign ADL to Client Working
What it does
Adds a care task to a client's care plan.
Nerve Center use
When a client's care needs change and they need additional services.
Real scenario
Client's condition worsens and they now need transfer assistance. The case manager adds the Transfer ADL to their care plan.
REQUEST BODY
FieldTypeDescription
id *intADL definition ID (from GET /api/adls)
events *arrayEvent configuration (required)
instructionsstringInstructions text
translationsobjectTranslated content
PATCH /api/clients/{clientId}/adls/{adlId} Update Client ADL Working
What it does
Changes the instructions or translations for a specific ADL on a client's care plan.
Nerve Center use
Customizing care instructions per client -- "Mrs. Garcia prefers to shower before breakfast, not after."
Real scenario
Client's family requests a specific routine change. The case manager updates the ADL instructions so caregivers see the updated preference.
DELETE /api/clients/{clientId}/adls/{adlId} Remove Client ADL Working
What it does
Takes a care task off a client's care plan.
Nerve Center use
When a client no longer needs a specific service (e.g., they've recovered and no longer need transfer assistance).
Real scenario
Client has recovered enough that physical therapy is no longer needed. The case manager removes the transfer assistance ADL from their plan.

Leads

7 endpoints
GET /api/leads List Leads Working
What it does
Returns everyone in your sales pipeline -- people who have inquired about services but haven't signed up yet.
Nerve Center use
The Bridge page shows the lead pipeline. Esmeralda logs intake calls and creates leads. The daily report includes new leads by referral source.
Real scenario
Rob wants to know how many leads came in this month from hospital referrals vs. web searches. Pull all leads and group by referredBy source.
Uses nextPageToken for pagination (not startAfterId like other endpoints).
QUERY PARAMETERS
ParamTypeDescription
leadIdsstringComma-separated IDs
statusesstringFilter by status
regionIdsstringFilter by region IDs
adminIdsstringFilter by admin IDs
externalIdsstringFilter by external IDs
nextPageTokenstringPagination token
limitintResults per page
GET /api/leads/{leadId} Get Lead Working
What it does
Returns a single lead's full profile.
Nerve Center use
When Esmeralda needs full context on a prospective client during a follow-up call.
Real scenario
A lead calls back asking about pricing. Esmeralda pulls their lead profile to see the original inquiry notes and care needs discussed.
POST /api/leads Create Lead Working
What it does
Adds a prospective client to the pipeline.
Nerve Center use
When Esmeralda gets an inquiry call, she creates a lead record with the caller's info, referral source, and notes about their care needs. This triggers the follow-up workflow.
Real scenario
"Hi, my father needs help with bathing and dressing. A friend recommended you." Esmeralda creates the lead with referredBy: "Friend referral", notes: "Father needs personal care - bathing and dressing assistance."
REQUEST BODY
FieldTypeDescription
firstName *stringRequired
lastName *stringRequired
statusstringLead status
dateOfBirthstringDate of birth
phonestringPhone number
emailstringEmail address
addressobjectAddress object
externalIdstringExternal system ID
regionIdintRegion ID
adminIdintAdmin user ID
notesstringNotes text
PATCH /api/leads/{leadId} Update Lead Working
What it does
Changes fields on a lead record (status progression, adding notes, etc.).
Nerve Center use
Track lead conversion pipeline. When status changes to "Converted" -- trigger client creation workflow.
Real scenario
Lead decides to sign up for services. Arisol updates the lead status to "Converted" and begins the client onboarding process.
GET /api/leads/{leadId}/responsibleParties List Lead Responsible Parties Working
What it does
Returns responsible parties for a lead.
Nerve Center use
Same pattern as client responsible parties but for leads -- family contacts during the sales process.
Real scenario
During a follow-up call, Esmeralda needs to reach the daughter who originally called about care for her father.
GET /api/leads/{leadId}/responsibleParties/{listNumber} Get Lead Responsible Party Working
What it does
Returns a specific responsible party by 1-based list number.
Nerve Center use
When you need a specific contact from the lead's responsible party list.
Real scenario
Pull the primary contact (listNumber=1) for a lead to send a follow-up email.
PUT /api/leads/{leadId}/responsibleParties/{listNumber} Update Lead Responsible Party Working
What it does
Updates a responsible party for a lead.
Nerve Center use
When lead contact info changes during the sales process.
Real scenario
Lead's daughter provides a new email address for correspondence. The record is updated with PUT (full replace).
REQUEST BODY
FieldTypeDescription
namestringParty name
relationshipstringRelationship to lead
addressobjectAddress object
phonestringPhone number
emailstringEmail address

Notes

3 endpoints
All Notes endpoints return 404 on site 13131. Contact AxisCare support to enable notes API access for your site. This is a significant gap -- notes contain critical context like "Client prefers Spanish-speaking caregivers" or "Caregiver has requested no weekend shifts."
GET /api/notes/{entityType} List Notes by Type Needs Enabling
What it does
Returns internal notes staff have written on entities.
Nerve Center use
When an agent needs context about a client or caregiver beyond the structured data -- things like preferences, restrictions, and behavioral notes.
Real scenario
Esmeralda is on a call and needs to know if there are special instructions for a client. Notes would tell her "Client prefers morning visits only" or "Do not send caregiver Maria -- personality conflict."
GET /api/notes/{entityType}/{entityId} List Entity Notes Needs Enabling
What it does
Returns notes for a specific entity.
Nerve Center use
Pull all notes for a single client or caregiver to get full context.
Real scenario
Before a case review, pull all notes on a client to see the history of concerns, preferences, and staff observations.
GET /api/notes/{entityType}/{entityId}/{noteId} Get Specific Note Needs Enabling
What it does
Returns a specific note by ID.
Nerve Center use
When you need to reference a particular note (e.g., from a webhook notification about a new note).
Real scenario
A webhook fires that a new note was added to a client. Pull the specific note to check if it requires follow-up action.

Visits

4 endpoints
GET /api/visits List Visits Working
What it does
Returns every visit (shift) in a date range with FULL details -- who the caregiver is, who the client is, scheduled times, actual clock-in/out times and methods (Mobile/Telephony/Web/Manual), GPS coordinates, service code, verification status, charge rate, and whether the visit was removed.
Nerve Center use
  • THIS IS THE ENGINE. Almost every feature depends on visit data:
  • Clock Monitor: Checks visits where scheduledStartDate has passed but clockIn is null (missing clock-in)
  • EVV Compliance: Checks clockIn.method and clockOut.method are "Mobile" or "Telephony" for BA- service codes
  • Shift Confirmation: Gets tomorrow's visits to send confirmation SMS to caregivers
  • Overtime Calculator: Sums hours per caregiver per week from clock-in/out times
  • Coverage Engine: Finds unassigned visits (no caregiverId) that need coverage
  • Billing Monitor: Checks chargeRate and billable fields
  • Daily Report: Aggregates all metrics from today's visits
Real scenario
Every morning at 8 AM, the Nerve Center pulls today's visits and sends each caregiver a consolidated SMS: "Good morning! You have 2 visits today: Mrs. Garcia 9:45 AM - 3:45 PM, Mr. Torres 4:00 PM - 7:00 PM. Reply YES to confirm."
Required: startDate + endDate OR updatedSinceDate (UTC) OR visitIds (exclusive)
Power feature: updatedSinceDate enables incremental sync -- instead of pulling all visits every time, only get visits that changed since your last check. This is how the Nerve Center does real-time monitoring without hammering the API.
QUERY PARAMETERS
ParamTypeDescription
startDate *stringStart date (required with endDate)
endDate *stringEnd date (required with startDate)
updatedSinceDate *stringAlt required filter - for incremental sync (UTC)
visitIds *stringAlt required filter - comma-separated visit IDs
clientIdsstringFilter by client IDs
clientClassCodesstringFilter by client class codes
clientClassLabelsstringFilter by client class labels
clientAdminIdsstringFilter by client admin IDs
clientAdminUsernamesstringFilter by client admin usernames
caregiverIdsstringFilter by caregiver IDs
caregiverClassCodesstringFilter by caregiver class codes
caregiverClassLabelsstringFilter by caregiver class labels
caregiverAdminIdsstringFilter by caregiver admin IDs
caregiverAdminUsernamesstringFilter by caregiver admin usernames
regionIdsstringFilter by region IDs
regionNamesstringFilter by region names
verifiedbooleanFilter by verification status
POST /api/visits Create Visit Working
What it does
Schedules a single shift for a specific client on a specific date.
Nerve Center use
When the Coverage Engine finds a replacement caregiver for a call-out, it creates a new visit to cover the gap. Also used when a client requests an extra visit.
Real scenario
Caregiver calls out. The Coverage Engine ranks available caregivers, sends outreach SMS, and the first caregiver who responds "YES" gets a new visit created in AxisCare via this endpoint.
REQUEST BODY
FieldTypeDescription
clientId *intRequired - client ID
visitDate *stringRequired - YYYY-MM-DD
startTime *stringRequired - HH:MM
endTime *stringRequired - HH:MM
serviceCode *stringRequired (or serviceDescription)
serviceDescription *stringRequired (or serviceCode)
caregiverIdintAssigned caregiver
notesstringVisit notes
billablebooleanBillable flag
payablebooleanPayable flag
typestringVisit type
PATCH /api/visits/{visitId} Update Visit Working
What it does
Changes fields on an existing visit -- reassign caregiver, change times, verify the visit, update notes.
Nerve Center use
  • Reassign caregiver: When coverage is found, PATCH the existing visit with the new caregiverId instead of deleting and recreating
  • Verify visit: Set verified: true to mark a visit as verified for billing (can be automated)
  • Adjust times: When a caregiver reports they'll be late, update the start time
Real scenario
Arisol confirms that the replacement caregiver will take over the 2 PM shift. She clicks "Assign" in the Nerve Center, which sends PATCH /api/visits/s=3441:d=2026-03-28 with caregiverId: 2006.
New: Can set verified: true via API -- enables automated visit verification.
REQUEST BODY
FieldTypeDescription
startTimestringStart time
endTimestringEnd time
caregiverIdintReassign caregiver
serviceCodestringService code
serviceDescriptionstringService description
notesstringVisit notes
billablebooleanBillable flag
payablebooleanPayable flag
verifiedbooleanVerification status (new)
DELETE /api/visits/{visitId} Delete Visit Working
What it does
Permanently removes a visit from the schedule.
Nerve Center use
When a client cancels a visit or a shift is no longer needed. This triggers the scheduling.visit.remove webhook event, which feeds the Zero Claim Alert system.
Real scenario
Client calls to cancel tomorrow's visit. Esmeralda confirms and deletes the visit. The Zero Claim Alert fires, emailing the scheduling staff with the cancellation details.
Visit ID format: s=SCHEDULE_ID:d=YYYY-MM-DD. Accepts modificationReason query param (integer) -- an audit trail code explaining why the visit was removed.
QUERY PARAMETERS
ParamTypeDescription
modificationReasonintReason ID for deletion (audit trail)

Call Logs

4 endpoints
GET /api/call-logs List Call Logs Working
What it does
Returns a log of phone calls recorded in AxisCare -- who called, why, what was discussed, whether follow-up is needed.
Nerve Center use
The Call Intelligence page on the Nerve Center displays these alongside Zoom Phone call logs. The SA.Care replication feature uses these for call analytics, follow-up tracking, and coaching.
Real scenario
Rob wants to see all calls from the past week that still need follow-up. Pull call logs where followUp=true and followUpDone=false.
QUERY PARAMETERS
ParamTypeDescription
callLogIdsstringComma-separated IDs
fromDateTimestringFilter from date/time (ISO 8601)
toDateTimestringFilter to date/time
startAfterIdintCursor for pagination
limitint1-100 results per page
GET /api/call-logs/{callLogId} Get Call Log Working
What it does
Returns a single call log entry by ID, including comments.
Nerve Center use
When you need the full details of a specific call, including any follow-up comments added by staff.
Real scenario
A follow-up reminder fires for a call from earlier this week. The agent pulls the full call log to see the original notes and any comments added since.
POST /api/call-logs Create Call Log Working
What it does
Logs a phone call in AxisCare's call log system.
Nerve Center use
After every call Esmeralda handles, the log_call webhook tool creates an entry in AxisCare with the caller name, phone number, subject, and notes. This creates the audit trail in the EMR.
Real scenario
Esmeralda finishes a call with a client's family member asking about schedule changes. She automatically creates: callerName: "Maria Torres (daughter)", subject: "Schedule change request", notes: "Requesting extra visit on Thursdays starting next week. Transferred to Keyla."
ALL fields are required when creating a call log -- there are no optional fields. Tags can be an empty array [].
REQUEST BODY
FieldTypeDescription
callerName *stringRequired - caller name
callerPhone *stringRequired - phone number
followUp *booleanRequired - needs follow-up
dateTime *stringRequired - ISO 8601 date/time
subject *stringRequired - subject line
notes *stringRequired - call notes
tags *arrayRequired - tags array (can be empty [])
PATCH /api/call-logs/{callLogId} Update Call Log Working
What it does
Changes fields on an existing call log, including marking follow-ups as done.
Nerve Center use
When a case manager completes the follow-up action on a call, they mark it done: followUpDone: true. Also used to add tags for categorization.
Real scenario
Keyla completes the schedule change requested in an earlier call. She marks the call log follow-up as done and adds a tag: "schedule-change-completed".
REQUEST BODY
FieldTypeDescription
callerNamestringCaller name
callerPhonestringPhone number
followUpbooleanNeeds follow-up
followUpDonebooleanFollow-up completed
dateTimestringISO 8601 date/time
subjectstringSubject line
notesstringCall notes
tagsarrayTags array (new)

Schedules

4 endpoints
GET /api/schedules List Schedules Working
What it does
Returns recurring shift patterns -- the repeating weekly schedules that generate individual visits. Shows which days a caregiver works with which client, at what times, and on what recurring frequency.
Nerve Center use
The Schedules page displays recurring patterns. When evaluating caregiver workload, you need schedules (not just visits) to see the full picture of committed hours. The Shift Confirmation system uses this to know what next week looks like.
Real scenario
"What does Maria's regular schedule look like?" Pull schedules filtered by caregiverId to see she works with Mrs. Garcia Mon/Wed/Fri 9:45 AM - 3:45 PM.
Required: startDate + endDate OR scheduleIds. Uses nextPageToken for pagination (not startAfterId).
QUERY PARAMETERS
ParamTypeDescription
startDate *stringRequired with endDate
endDate *stringRequired with startDate
scheduleIds *stringAlt required - comma-separated IDs
clientIdsstringFilter by client IDs
caregiverIdsstringFilter by caregiver IDs
serviceCodestringFilter by service code
serviceDescriptionstringFilter by service description
POST /api/schedules Create Schedule Working
What it does
Sets up a repeating shift pattern -- e.g., "This caregiver works with this client every Monday, Wednesday, and Friday from 9 AM to 12 PM starting next week."
Nerve Center use
When a new client starts services and the case manager sets up their recurring schedule. Also when permanently reassigning a caregiver.
Real scenario
New client onboarded. Arisol creates a recurring schedule: client 280, days ["Monday", "Wednesday", "Friday"], 9:00 - 12:00, caregiver 2006, service code "CARE".
REQUEST BODY
FieldTypeDescription
clientId *intRequired - client ID
days *arrayRequired - ["Monday", "Wednesday", "Friday"]
startDate *stringRequired - start date
startTime *stringRequired - start time
endTime *stringRequired - end time
endDatestringEnd date (null = indefinite)
caregiverIdintAssigned caregiver
serviceCodestringService code
serviceDescriptionstringService description
notesstringSchedule notes
PATCH /api/schedules/{scheduleId} Update Schedule Working
What it does
Changes an existing recurring pattern -- new times, different days, different caregiver.
Nerve Center use
When a client's schedule needs adjustment or a caregiver is permanently reassigned to a different client.
Real scenario
Client requests to change from Mon/Wed/Fri to Tue/Thu. The case manager updates the recurring schedule, which adjusts all future visits.
DELETE /api/schedules/{scheduleId} Delete Schedule Working
What it does
Deletes the recurring pattern and removes all FUTURE visits it would have generated. Past visits remain.
Nerve Center use
When a client discharges or a caregiver permanently leaves.
Real scenario
Client moves to a nursing facility. The case manager deletes the recurring schedule, which cancels all future visits but leaves the history intact.
Accepts effectiveDate query param -- defaults to today, cannot be in the past. Lets you schedule the end of a recurring pattern for a future date.

Webhooks

45 webhook events organized by category. Webhooks are PUSH notifications -- AxisCare sends an HTTP POST to your endpoint the instant something happens. The payload is lightweight (just entity type, action, and ID) -- you must call the API to get full details.

Entity CRUD Events

10 events - "Someone changed a record in AxisCare"
client.created
When this fires
The office staff adds a new client to the system (usually after a lead converts to a client).
Nerve Center use
Trigger the new client onboarding workflow -- send welcome email, assign case manager, create first recurring schedule template. Sync client data to the Nerve Center's local cache.
Example
Keyla enters a new client Mr. Torres. Webhook fires. Nerve Center sends a welcome email from Esmeralda and creates an issue: "New client onboarding - Mr. Torres - assign initial schedule."
client.updated
When this fires
Any field on a client changes -- address, phone, status, care plan, priority note, etc.
Nerve Center use
Keep the local cache in sync. If status changed to "Inactive" -- alert the team that a client discharged. If address changed -- recalculate caregiver driving distances.
Example
A client's mobilePhone is updated. Nerve Center updates its caller lookup cache so Esmeralda matches the new number on the next call.
caregiver.created
When this fires
A new employee record is created (usually after completing onboarding).
Nerve Center use
Trigger welcome workflow -- send welcome SMS/email, add to caregiver memory system, include in future outreach rankings.
Example
New hire MARIA GARCIA is added. Nerve Center creates a new caregiver memory record (core layer) and sends her a welcome SMS from Esmeralda with her first shift details.
caregiver.updated
When this fires
Any field changes -- phone, address, status, pay rate, case manager reassignment.
Nerve Center use
If status changed to "Inactive" -- flag all their upcoming visits as needing coverage. If phone changed -- update the contact database. If pay rate changed -- log for payroll tracking.
Example
Caregiver is terminated (status -> Inactive). Webhook fires. Nerve Center immediately identifies all their upcoming visits and triggers the Coverage Engine for each one.
lead.created
When this fires
Someone adds a prospective client (from a phone call, web form, hospital referral, etc.).
Nerve Center use
Display on the Bridge page as a new intake. Start the lead follow-up workflow -- schedule callback, send info packet email.
Example
Esmeralda takes an inquiry call and creates a lead. Webhook fires. Nerve Center adds it to the Bridge pipeline and creates an issue: "New lead - follow up within 24 hours."
lead.updated
When this fires
Lead status progresses (e.g., from "New" to "Assessment Scheduled" to "Converted").
Nerve Center use
Track lead conversion pipeline. When status changes to "Converted" -- trigger client creation workflow.
Example
Lead status changes to "Converted" after signing the service agreement. Nerve Center triggers the client creation workflow automatically.
applicant.created
When this fires
Someone applies for a caregiver position (via web form, Indeed integration, or manual entry).
Nerve Center use
Feed the Interview Add-On pipeline. Send automated "application received" confirmation. Schedule AI interview.
Example
Someone applies on Indeed. AxisCare creates the applicant. Webhook fires. Nerve Center sends an SMS: "Thank you for applying to SYNERGY HomeCare! Click here to schedule your interview."
applicant.updated
When this fires
Applicant status changes (interview scheduled, passed, failed, hired).
Nerve Center use
Track applicant pipeline progression. When status changes to "Hired" -- trigger caregiver record creation.
calllog.created
When this fires
Anyone (including Esmeralda via the API) logs a call in AxisCare.
Nerve Center use
Display in the Call Intelligence feed. Track call volume metrics. Flag follow-ups.
Example
Esmeralda logs a call. Webhook fires. Nerve Center adds it to the live call feed with a timestamp.
calllog.updated
When this fires
Follow-up marked done, notes updated, tags changed.
Nerve Center use
Keep call intelligence data in sync. Update follow-up tracking dashboards.

Recurring Schedule Events

3 events - "A recurring shift pattern changed"
recurring_schedule.created
When this fires
A case manager creates a new repeating shift pattern.
Nerve Center use
Update the Schedules page. Add the new pattern to caregiver workload calculations. Alert if it creates overtime risk.
Example
Arisol creates a Mon/Wed/Fri schedule for a new client. Webhook fires. Nerve Center checks if the assigned caregiver will now exceed 32 hours/week (overtime risk threshold).
recurring_schedule.updated
When this fires
Times, days, caregiver, or service code on a recurring pattern changed.
Nerve Center use
Recalculate affected caregiver's weekly hours. Update shift confirmation templates.
recurring_schedule.deleted
When this fires
A recurring pattern is deleted (client discharged, caregiver permanently reassigned).
Nerve Center use
Remove from workload calculations. If no replacement schedule exists -- flag as coverage gap.

Visit Lifecycle Events

7 events - "A specific shift was created, moved, or canceled"
scheduling.visit.created
When this fires
A single visit (not from a recurring schedule) is added to the calendar.
Nerve Center use
Add to today's/tomorrow's schedule display. Check for conflicts.
scheduling.visit.createdByCopy
When this fires
Staff duplicates an existing visit (common for "same client, different day" scheduling).
Nerve Center use
Same as visit.created -- add to schedule tracking.
scheduling.visit.createdFromSchedule
When this fires
AxisCare's scheduler converts a recurring pattern into an actual visit for a specific date. This is how "every Monday" becomes "visit on 03/28/2026."
Nerve Center use
THIS IS THE TRIGGER FOR SHIFT CONFIRMATION. When tomorrow's visits get generated from schedules, the Shift Confirmation workflow knows to send out confirmation SMS.
Example
Sunday evening, AxisCare generates Monday's visits from recurring schedules. Webhook fires for each. Nerve Center queues shift confirmation SMS for Monday morning.
scheduling.visit.remove
When this fires
A visit is removed from the schedule for any reason -- client cancellation, caregiver unavailability, billing dispute.
Nerve Center use
THIS IS THE TRIGGER FOR ZERO CLAIM ALERTS. When a visit gets removed, the system batches cancellations by client (5-minute window) and emails the scheduling staff with details and weekly running totals.
Example
A visit gets removed at 2 PM. The Zero Claim batch sender waits 5 minutes for any related cancellations, then sends: "ZERO CLAIM ALERT: 1 visit removed for Mrs. Garcia (3 this week). Reason: Client hospitalized."
scheduling.visit.moved
When this fires
Staff drags a visit to a new time slot on the AxisCare calendar.
Nerve Center use
Update schedule displays. Send notification to affected caregiver.
scheduling.visit.date
When this fires
Visit date was changed.
Nerve Center use
Update schedule displays and shift confirmation details.
scheduling.visit.type
When this fires
Visit type changed (e.g., Hourly to Live-In).
Nerve Center use
Update service type tracking. May affect billing rules.

Visit Time Events

2 events
scheduling.visit.startTime
When this fires
Staff adjusts the scheduled start time of a visit.
Nerve Center use
Update shift confirmation details. Recalculate daily hours.
scheduling.visit.endTime
When this fires
Staff adjusts the scheduled end time of a visit.
Nerve Center use
Update shift confirmation details. Recalculate daily hours.

Visit Clock Events

6 events - "A caregiver clocked in or out"
scheduling.visit.clockedIn
When this fires
THE MOMENT a caregiver opens the AxisCare app and taps "Clock In" (or calls the telephony line).
Nerve Center use
  • THIS IS THE HEARTBEAT OF REAL-TIME MONITORING
  • Compare clockIn.time vs scheduledStartDate -- if more than 15 minutes late, flag as late arrival
  • Check clockIn.method -- if "Web" or "Manual" instead of "Mobile" or "Telephony", flag as EVV violation
  • Clear any "missing clock-in" alerts
  • Update the live dashboard with real-time status
Example
America Ginez clocks in via the mobile app at 9:42 AM for a 9:45 AM shift. Webhook fires. Nerve Center shows green status -- on time, EVV compliant.
scheduling.visit.clockedOut
When this fires
Caregiver ends their shift.
Nerve Center use
  • Calculate actual hours worked (clockOut.time - clockIn.time)
  • Check for overtime accumulation
  • Verify the visit is ready for billing (both clocks present, EVV valid)
  • Flag unusually short or long visits
Example
Caregiver clocks out at 3:44 PM for a shift scheduled until 3:45 PM. Nerve Center calculates 5 hours 58 minutes worked (close to scheduled 6 hours -- normal).
scheduling.visit.call.clockIn
When this fires
Caregiver uses the telephony IVR system (calling from the client's landline) instead of the mobile app to clock in.
Nerve Center use
Both telephony methods count as EVV-valid. Useful for caregivers without smartphones.
scheduling.visit.call.clockOut
When this fires
Caregiver uses the telephony IVR system to clock out.
Nerve Center use
Both telephony methods count as EVV-valid.
scheduling.visit.clockIn.location
When this fires
The mobile app captures GPS coordinates during clock-in.
Nerve Center use
Verify the caregiver is physically at the client's address. Flag if coordinates don't match the client's residential address (geofencing).
scheduling.visit.clockOut.location
When this fires
The mobile app captures GPS coordinates during clock-out.
Nerve Center use
Same geofencing verification as clock-in location.

Visit Assignment Events

1 event
scheduling.visit.caregiver
When this fires
A visit is reassigned from one caregiver to another.
Nerve Center use
THIS IS HOW YOU DETECT CALL-OUTS. When a visit is reassigned near the shift start time, it usually means the original caregiver called out and a replacement was found. The system logs this for the original caregiver's reliability score and updates the replacement caregiver's schedule.
Example
At 8 AM, Arisol reassigns today's 9:45 AM visit from ERIKA to AMERICA. Webhook fires. Nerve Center flags ERIKA's reliability score (late reassignment = likely call-out) and sends AMERICA a confirmation SMS.

Visit Verification & Signatures

3 events
scheduling.visit.verify
When this fires
A case manager reviews a completed visit and marks it verified (approved for billing).
Nerve Center use
Update billing pipeline. Track verification backlog (unverified visits older than 48 hours = money on the table).
Example
Keyla reviews yesterday's visits and verifies them. Webhook fires for each. Nerve Center updates the billing readiness dashboard.
scheduling.visit.caregiverSignature
When this fires
Caregiver electronically signs off on the visit.
Nerve Center use
Track signature compliance. Required for certain payor types before billing.
scheduling.visit.clientSignature
When this fires
Client (or family) electronically signs off on the visit.
Nerve Center use
Track signature compliance. Required for certain payor types before billing.

Visit ADL Events

4 events - "Care tasks were documented"
scheduling.visit.adls.add
When this fires
An ADL task was logged on a visit during or after care.
Nerve Center use
Track ADL completion rates per caregiver and per client.
scheduling.visit.adls.edit
When this fires
An ADL task entry was modified.
Nerve Center use
Keep ADL compliance records accurate.
scheduling.visit.adls.remove
When this fires
An ADL task was removed from a visit.
Nerve Center use
Flag for review -- why was a documented task removed?
scheduling.visit.adlsAutoCompleted
When this fires
ADLs were auto-filled (not manually documented by the caregiver).
Nerve Center use
Auto-completed ADLs should be flagged for review -- they may not reflect actual care delivered.
Example
Visit s=3441:d=2026-03-28 has ADLs auto-completed. Nerve Center flags: "ADLs auto-filled -- verify with caregiver that tasks were actually performed."

Visit Billing Events

6 events - "Money-related changes"
scheduling.visit.billableRate.updated
When this fires
Charge rate changed on a visit.
Nerve Center use
Alert on unexpected rate changes. Feed into billing pre-screen.
scheduling.visit.billable
When this fires
Billable status toggled (yes/no) on a visit.
Nerve Center use
Track for billing pre-screen (part of the Bridge). Flag visits where billable was turned off (revenue loss). Feed into the authorization rescue system.
Example
A visit's billable status is set to false. Webhook fires. Nerve Center creates a Bridge card: "Revenue at risk -- visit for Mrs. Garcia on 03/28/2026 marked non-billable. Reason unknown -- investigate."
scheduling.visit.customBillRateMode
When this fires
Custom billing mode changed on a visit.
Nerve Center use
Track for billing anomaly detection.
scheduling.visit.customPayableMode
When this fires
Custom pay mode changed on a visit.
Nerve Center use
Track for payroll pre-screen.
scheduling.visit.payable
When this fires
Payable status toggled on a visit.
Nerve Center use
Alert if payable turned off unexpectedly.
scheduling.visit.payRate
When this fires
Pay rate changed on a visit.
Nerve Center use
Track for payroll reconciliation.

Visit Misc Events

3 events
scheduling.visit.clientVoice.confirmed
When this fires
A client confirms a visit via IVR phone system.
Nerve Center use
Mark visit as client-confirmed in the schedule view.
scheduling.visit.expenses
When this fires
Visit expenses updated.
Nerve Center use
Track for payroll and reimbursement calculations.
scheduling.visit.mileage
When this fires
Visit mileage recorded.
Nerve Center use
Track for payroll and reimbursement calculations.

What Can We Build

Every AxisCare capability mapped to a specific Nerve Center feature -- what's live, what's ready, and what's blocked.

Live Now

9 capabilities
01 Caller Lookup Live
Esmeralda matches incoming phone numbers to clients/caregivers. On every incoming call, the Nerve Center searches all client and caregiver phone fields and returns the matching name and profile.
GET /api/clientsGET /api/caregivers
02 Client Profile Lookup Live
Full client info on demand. After identifying a caller, Esmeralda pulls the full profile -- services, schedule, priority notes, allergies, languages.
GET /api/clients/{id}
03 Caregiver Profile Lookup Live
Full caregiver info on demand. Same as client lookup but for caregivers.
GET /api/caregivers/{id}
04 Today's Schedule Live
What visits are happening today. Esmeralda or any staff member can ask "What's on the schedule today?" and get a complete list of visits with caregivers, clients, and times.
GET /api/visits
05 Log Call in AxisCare Live
Audit trail for every Esmeralda call. After every call, Esmeralda creates a call log entry with the caller's name, phone, subject, and notes.
POST /api/call-logs
06 Clock-In Status Check Live
Is a caregiver clocked in? When a client calls asking "Where is my caregiver?", Esmeralda checks if today's visit has a clock-in time.
GET /api/visits
07 Report Callout / Reassign Visit Live
Handle caregiver call-offs. When a caregiver reports they can't make a shift, the visit can be reassigned to another caregiver.
PATCH /api/visits/{id}
08 Zero Claim Alert Live
Catch canceled visits before they become billing losses. When a visit is deleted, the Nerve Center batches cancellations by client (5-min window), enriches with details, and emails scheduling staff.
scheduling.visit.remove
09 EVV Compliance Reporting Live
Track electronic visit verification. Twice daily (10 AM and 3:30 PM), the Nerve Center pulls today's visits and flags any where clock methods aren't Mobile or Telephony for BA- service codes.
GET /api/visits

Ready to Build

11 capabilities
10 Shift Confirmation SMS Ready
Daily confirmation texts to caregivers. Every morning, pulls tomorrow's visits, groups by caregiver, and sends a consolidated SMS: "You have 3 visits tomorrow. Reply YES to confirm." Tracks responses. At 3 PM cutoff, unconfirmed shifts trigger coverage outreach.
GET /api/visitsGET /api/caregiversscheduling.visit.createdFromSchedule
11 Coverage Engine Ready
Automated call-out replacement. When a caregiver calls out, ranks all available caregivers by: driving distance to client, familiarity with client, overtime risk, response history. Sends outreach SMS/calls. First responder gets the shift.
GET /api/caregiversGET /api/visitsPATCH /api/visitsscheduling.visit.caregiver
12 Clock-In/Out Monitor Ready
Real-time missing clock alerts. Every 2 minutes, checks for visits where the scheduled start has passed but no clock-in received. Sends escalating alerts: text caregiver -> call caregiver -> text client (carefully).
GET /api/visitsscheduling.visit.clockedInscheduling.visit.clockedOut
13 New Lead Intake Ready
Automated lead creation from calls. When Esmeralda handles an inquiry call, she creates the lead in AxisCare and the Nerve Center starts the follow-up workflow.
POST /api/leadslead.created
14 Applicant Pipeline Ready
Automated recruiting workflow. New applicant -> AI interview invite -> interview completion -> background check -> credentialing -> caregiver record created.
POST /api/applicantsPOST /api/caregiversapplicant.createdcaregiver.created
15 Visit Verification Automation Ready
Bulk verify clean visits. Automatically verify visits where both clock events are present, methods are valid, times are within tolerance, and signatures are captured. Only flags exceptions for human review.
PATCH /api/visits/{id}scheduling.visit.verify
16 ADL Compliance Tracking Ready
Monitor care task documentation. Track which ADLs were documented per visit vs. what the care plan requires. Flag visits with missing ADL documentation.
GET /api/clients/{id}/adlsscheduling.visit.adls.*
17 Schedule Management Ready
Create/modify recurring patterns. Case managers can create and modify recurring schedules from the Nerve Center UI instead of logging into AxisCare.
POST /api/schedulesPATCH /api/schedulesDELETE /api/schedulesrecurring_schedule.*
18 Billing Pre-Screen Ready
Catch billing issues before claims go out. Flag visits where billable is false, rate is zero, or rate doesn't match the expected rate for the service code. Alert before claims are submitted.
GET /api/visitsscheduling.visit.billablescheduling.visit.billableRate.updated
19 Incremental Sync Engine Ready
Real-time AxisCare data sync. Instead of pulling all visits every time, only fetch visits that changed since the last check. Run every 2 minutes for near-real-time sync without API abuse.
GET /api/visits?updatedSinceDate
20 Responsible Party Notifications Blocked
Alert family members when something happens that they should know about (schedule change, missed visit, incident). Pull the responsible party contacts and send notifications.
GET /api/clients/{id}/responsibleParties
BLOCKED: Responsible parties endpoint returns 404 on site 13131. Need AxisCare support to enable.

Blocked / Not in API

13 missing

These features would require AxisCare UI access or support intervention:

Service Codes List Regions List Admin/User List Authorizations Custom Fields Forms Documents Reports Billing/Invoices Payroll EVV Endpoint (403) Notes Write Webhook Management

</> Code Patterns

Ready-to-use JavaScript code for common integration tasks.

API Constants

JavaScript
const AXC = {
  site: process.env.AXISCARE_SITE || '13131',
  token: process.env.AXISCARE_TOKEN,
  version: '2023-10-01',
  get base() { return `https://${this.site}.axiscare.com/api`; },
  get headers() {
    return {
      'Authorization': `Bearer ${this.token}`,
      'X-AxisCare-Api-Version': this.version,
      'Content-Type': 'application/json',
    };
  },
};

Pagination Helper

JavaScript
async function fetchAllPages(endpoint, params = {}) {
  const all = [];
  let cursor = null;

  do {
    const url = new URL(`${AXC.base}${endpoint}`);
    Object.entries(params).forEach(([k, v]) => url.searchParams.set(k, v));
    if (cursor) url.searchParams.set('startAfterId', cursor);

    const res = await fetch(url, { headers: AXC.headers });
    if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);

    const json = await res.json();
    const items = Array.isArray(json) ? json : json.data || [];
    all.push(...items);

    // Determine next cursor
    cursor = json.nextPageToken || (items.length ? items[items.length - 1].id : null);
  } while (cursor);

  return all;
}

Fetch with Retry

JavaScript
async function axcFetch(path, options = {}, retries = 3) {
  const url = `${AXC.base}${path}`;
  for (let i = 0; i < retries; i++) {
    try {
      const res = await fetch(url, {
        ...options,
        headers: { ...AXC.headers, ...options.headers },
      });
      if (res.status === 429) {
        await new Promise(r => setTimeout(r, 2000 * (i + 1)));
        continue;
      }
      return res;
    } catch (err) {
      if (i === retries - 1) throw err;
      await new Promise(r => setTimeout(r, 1000 * (i + 1)));
    }
  }
}

Webhook Receiver (Express.js)

JavaScript (Express.js)
const express = require('express');
const app = express();
app.use(express.json());

app.post('/webhooks/axiscare', (req, res) => {
  const { event, data, siteNumber } = req.body;
  const webhookId = req.headers['x-webhook-id'];

  console.log(`[Webhook] ${event} site=${siteNumber} id=${webhookId}`);

  // Process by event type
  switch (event) {
    case 'scheduling.visit.clockedIn':
      handleClockIn(data);
      break;
    case 'scheduling.visit.remove':
      handleVisitRemoved(data);
      break;
    case 'client.updated':
      handleClientUpdate(data);
      break;
    default:
      console.log(`Unhandled event: ${event}`);
  }

  // Respond quickly (within 5s)
  res.status(200).json({ received: true });
});

EVV Compliance Checker

JavaScript
const VALID_EVV_METHODS = ['GPS', 'Telephony'];

function checkEVVCompliance(visit) {
  const needsEVV = visit.serviceCode?.startsWith('BA');
  if (!needsEVV) return { required: false, compliant: true };

  const checks = {
    clockedIn: !!visit.clockInTime,
    clockedOut: !!visit.clockOutTime,
    validClockInMethod: VALID_EVV_METHODS.includes(visit.clockInMethod),
    validClockOutMethod: VALID_EVV_METHODS.includes(visit.clockOutMethod),
  };

  return {
    required: true,
    compliant: Object.values(checks).every(Boolean),
    checks,
  };
}

Available Caregivers Finder

JavaScript
async function findAvailableCaregivers(date, startTime, endTime) {
  // 1. Get all active caregivers
  const caregivers = await fetchAllPages('/caregivers', { statuses: 'Active' });

  // 2. Get visits for the date
  const visits = await fetchAllPages('/visits', {
    startDate: date,
    endDate: date,
  });

  // 3. Find caregivers without overlapping visits
  const busyIds = new Set(
    visits
      .filter(v => v.startTime < endTime && v.endTime > startTime)
      .map(v => v.caregiverId)
  );

  return caregivers.filter(c => !busyIds.has(c.id));
}

EVV Compliance

Electronic Visit Verification requirements for AHCCCS Medicaid visits.

EVV Requirements

Only visits with BA-prefixed service codes require EVV compliance. A visit is compliant when all 4 conditions are met:

  1. Visit has a clock-in time recorded
  2. Visit has a clock-out time recorded
  3. Clock-in method is GPS or Telephony
  4. Clock-out method is GPS or Telephony

Valid vs Invalid Clock Methods

MethodEVV ValidNotes
GPS✓ ValidMobile app with location
Telephony✓ ValidPhone call clock in/out
Manual✗ InvalidAdmin-entered time
Web✗ InvalidDesktop browser clock
Kiosk✗ InvalidFixed location kiosk
(empty)✗ InvalidNo clock recorded
The dedicated EVV endpoint returns 403 Forbidden. Use GET /api/visits with clock method fields to check EVV compliance instead.

Gotchas & Tips

Known quirks, edge cases, and things to watch out for.

Data structure inconsistency: GET /api/caregivers returns an object with a data property, while GET /api/clients returns an array directly. Always check the response shape.
Applicant singular vs plural path: Some AxisCare sites use /api/applicant/{id} (singular) instead of /api/applicants/{id} (plural). Try both if you get 404 errors.
Visit ID format: Visit IDs follow the pattern s=XXXX:d=YYYY-MM-DD. These must be URL-encoded when used in path parameters.
Responsible parties use listNumber: Responsible parties are accessed by their 1-based listNumber position, not by a unique ID.
Schedules use nextPageToken: The schedules endpoint uses nextPageToken for pagination instead of startAfterId like other endpoints.
firstName requires lastName on update: When updating caregivers or clients with PATCH, sending firstName requires also sending lastName and vice versa.
All call log fields required on create: Unlike other POST endpoints, POST /api/call-logs requires every single field including tags (pass [] if empty).
Visits updatedSinceDate for incremental sync: Use updatedSinceDate parameter instead of date ranges when doing incremental data sync to catch all modifications.
DELETE visits accepts modificationReason: When deleting visits, pass a modificationReason integer ID as a query parameter to record why the visit was removed.
DELETE schedules accepts effectiveDate: When deleting schedules, the effectiveDate parameter defaults to today and cannot be set to a past date.

Not Available in API

The following features do not have API endpoints in the current AxisCare API.

Services List Regions List Administrators List Authorizations Custom Fields Forms Documents Reports Billing / Invoices Payroll EVV Dedicated Endpoint
© 2026 Brainstorm AGI, LLC