# Areas Source: https://support.visualcare.com.au/api-reference/areas Retrieve area records from the Visualcare API Retrieves all area records configured in your Visualcare organisation. ### GET /areas No query parameters. **Response:** ```json theme={null} [ { "AreaId": 1, "AreaCode": "EAST", "Area": "Eastern Suburbs", "Reference1": "", "Reference2": "", "CDCNapsId": "", "HaccAgencyId": "", "TBACarerID": -1, "Longitude": "138.666822", "Latitude": "-34.9081122", "Regions": "", "Status": "" } ] ``` **Response fields:** | Field | Type | Example | | - | - | - | | `AreaId` | integer | `1` | | `AreaCode` | string | `"EAST"` | | `Area` | string | `"Eastern Suburbs"` | | `Reference1` | string | `""` | | `Reference2` | string | `""` | | `CDCNapsId` | string | `""` | | `HaccAgencyId` | string | `""` | | `TBACarerID` | integer | `-1` when not set | | `Longitude` | string | `"138.666822"` | | `Latitude` | string | `"-34.9081122"` | | `Regions` | string | `""` | | `Status` | string | `""` for active records | *** [Back to API overview](/api-reference/overview) # Categories Source: https://support.visualcare.com.au/api-reference/categories/index Category lookup endpoints for expenses, documents, incidents, payers, roster items, and services Six category lookup endpoints. All are GET-only with no query parameters. `Status` is an empty string for active records and `"D"` for deleted records. ## Expenses ### GET /category-expenses | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `2` | | `ExpenseCategory` | string | `"Grocery"` | | `Status` | string | `""` | ## Documents ### GET /category-documents | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `1` | | `Description` | string | `"Health"` | | `Status` | string | `""` | ## Incidents ### GET /category-incidents | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `18` | | `CategoryCode` | string | `"Category 1"` | | `Description` | string | `"Category 1 Description"` | | `HelpText` | string | `"Category 1 HelpText a"` | | `Status` | string | `""` | ## Payers ### GET /category-payers | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `1` | | `CategoryCode` | string | `"CHSP"` | | `Description` | string | `"Community and Home Support"` | | `Status` | string | `""` | ## Roster items ### GET /category-rosteritems | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `7` | | `CategoryCode` | string | `"CatA"` | | `Description` | string | `"Category A"` | | `Reference1` | string | `"ref1"` | | `Status` | string | `""` | ## Services ### GET /category-services | Field | Type | Example | | - | - | - | | `CategoryId` | integer | `9` | | `CategoryCode` | string | `"Assistance with Daily Li"` | | `Description` | string | `"Assistance with Daily Life"` | | `Status` | string | `""` | # Agreements Source: https://support.visualcare.com.au/api-reference/clients/agreements Retrieve client agreements including agreement items, budget details, and NDIS/CHSP/DVA configuration ### GET /agreements Retrieves all client agreements. Default limit is 200 items if not specified. **Example:** `GET /agreements?fromDate=2023-01-01&toDate=2023-12-31&limit=5000&includeItems=TRUE` **Parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Number of items to return. Values of 10,000 or more revert to the default 200 | | `page` | 0 | Pagination offset (skips N records) | | `fromDate` | - | Agreements with start date >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Agreements with end date \<= value. Format: `YYYY-MM-DD` | | `payerId` | - | Filter by payer ID | | `clientId` | - | Filter by client ID | | `area` | - | Filter by area | | `includeItems` | - | If `TRUE`, returns all `AgreementItems` for each agreement | **Response fields:** | Field | Type | Notes | | - | - | - | | `AgreementId` | integer | | | `AgreementType` | string | | | `ClientId` | integer | | | `PayerId` | integer | | | `ChargeLevel` | integer | | | `MMMLevel` | integer | | | `AgreementCode` | string | | | `Reference` | string | | | `Reference2` | string | | | `Reference3` | string | | | `StartDate` | string | Date | | `EndDate` | string | Date | | `AlertDate` | string | Date | | `Current` | integer | 0/1 | | `GST` | integer | 0/1 | | `Area` | string | | | `ZoneId` | integer | | | `IncomeType` | integer | | | `conDVAZone` | string | | | `conDVAServicePlanNo` | integer | | | `conHeadContractId` | integer | | | `DVASXNo` | string | | | `DVAPlanId` | string | | | `Status` | string | | | `AllowAdHoc` | integer | 0/1 | | `RatesOverride` | integer | 0/1 | | `SAHLevel` | integer | Support at Home level | | `SAHClinical` | integer | | | `SAHIdp` | integer | | | `SAHLiving` | integer | | | `RatesOverrideCharge` | integer | 0/1 | | `Budget` | string | Decimal | | `BudgetPeriod` | string | e.g. `"FORTNIGHTLY"` | | `BudgetHour` | integer | | | `KM` | integer | | | `KmPayer` | integer | | | `KmPayerId` | integer | | | `KmToTime` | integer | | | `KmChargeOverride` | integer | | | `KmChargeCode` | string | | | `KMChargeNDIS` | string | | | `KmOverrideChargeRate` | string | Decimal | | `ExclPh` | integer | 0/1 | | `NDISActivityType` | string | e.g. `"ROSTER"` | | `NDISMgnt` | string | e.g. `"AGENCY"` | | `NDISPlanId` | string | | | `IsClosed` | integer | 0/1 | | `CHSPPayer` | string | | | `Note` | string | | | `_LastModTime` | string | Datetime | | `_LastModUser` | string | Email | | `_CreateTime` | string | Datetime | | `_CreateUser` | string | Email | **AgreementItems** (when `includeItems=TRUE`): | Field | Type | Notes | | - | - | - | | `AgreementItemId` | integer | | | `AgreementId` | integer | | | `ServiceId` | integer | | | `ChargeRate` | float | | | `PayRate` | number | Integer or decimal | | `CHSPRate` | integer | | | `CHSPType` | string | e.g. `"UNIT"` | | `CHSPPayrollCode` | null/string | | | `DEXCaseId` | integer | | | `DEXServiceTypeId` | integer | | | `DVAPeriodCode` | integer | | | `Quantity` | integer | | | `Unit` | string/null | | | `Period` | null/string | | | `PeriodTotal` | integer | | | `BudgetAmount` | number | Integer or decimal | | `BudgetHours` | number | Integer or decimal | | `Comments` | null/string | | | `ListId` | integer | | | `Timestamp` | null/string | | | `GST` | integer | 0/1 | | `Ratio` | float | | # Client compliance Source: https://support.visualcare.com.au/api-reference/clients/compliance Retrieve all client compliance items including status, dates, and requirements ### GET /compliance-clients Retrieves all client compliance items. **Parameters:** None. Returns every compliance item for every client in a single unpaginated response. **Response fields:** | Field | Type | Notes | | - | - | - | | `FirstName` | string | | | `LastName` | string | | | `ClientId` | integer | | | `Area` | string | | | `Area2` | string | | | `Phone1` | string | | | `Phone2` | string | | | `Email` | string | | | `LinkId` | integer | | | `ComplianceId` | integer | | | `Required` | integer | 0/1 | | `StartDate` | string | Date | | `AlertDate` | string | Date | | `ExpiryDate` | string | Date | | `Note` | string | | | `Completed` | integer | 0/1 | | `Status` | string | | | `Description` | string | | | `ExpiryDays` | integer | | | `WarningDays` | integer | | | `Mandatory` | integer | 0/1 | | `NoStartDate` | integer | 0/1 | | `NoExpiryDate` | integer | 0/1 | # Contacts Source: https://support.visualcare.com.au/api-reference/clients/contacts Retrieve client contacts including personal details, phone numbers, and app permissions ### GET /contacts Retrieves client contacts. **Parameters:** | Parameter | Default | Description | | - | - | - | | `contactId` | - | Returns specific contact | | `includeDeleted` | - | Returns deleted contacts | **Response fields:** | Field | Type | Notes | | - | - | - | | `ContactId` | integer | | | `Title` | string | | | `FirstName` | string | | | `LastName` | string | | | `Organisation` | string | | | `Description` | string | | | `Position` | string | | | `DefaultContactType` | string | | | `EmailWork` | string | | | `EmailPersonal` | string | | | `Mobile` | string | | | `MobileOther` | string | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `State` | string | | | `PostCode` | string | | | `Skype` | string | | | `OtherContact` | string | | | `Area1`, `Phone1`, `Ext1` | string | Phone line 1 | | `Area2`, `Phone2`, `Ext2` | string | Phone line 2 | | `Area3`, `Phone3`, `Ext3` | string | Phone line 3 | | `Note` | string | | | `AccountNote` | string | | | `DOB` | string | Date | | `HaccSlk` | string | | | `HaccGender` | string | | | `HaccDobEst` | integer | | | `HaccCountryOfBirth` | string | | | `HaccLanguage` | string | | | `HaccIndigenous` | string | | | `HaccState` | string | | | `HaccResidency` | string | | | `HaccRelationship` | string | | | `HaccMoreThanOne` | string | | | `PersonalContact` | integer | 0/1 | | `vClient` | integer | 0/1 | | `WebID` | string | | | `AppRequest` | integer | 0/1 | | `AppBudget` | integer | 0/1 | | `AppDoc` | integer | 0/1 | | `AppExpense` | integer | 0/1 | | `AppQuote` | integer | 0/1 | | `AppMsg` | integer | 0/1 | | `AppForm` | integer | 0/1 | | `AppSign` | integer | 0/1 | | `AppShowSWNote` | integer | 0/1 | | `Status` | string | | | `_CreateTime` | string | Date | | `_CreateUser` | string | Email | | `ContactLink` | object | Present only when the contact is linked. Keys `CLIENT`, `LEAD`, `AGENCY`, `LOCATION`, each an array of integer IDs | # DEX cases Source: https://support.visualcare.com.au/api-reference/clients/dex-cases Retrieve DEX (Data Exchange) case records for clients ### GET /DEXCase Retrieves DEX (Data Exchange) case records for clients. **Parameters:** | Parameter | Default | Description | | - | - | - | | `clientId` | - | Filter by client ID | | `dexCaseId` | - | Filter by specific DEX Case ID. Parameter names are case-sensitive: `DexCaseId` is silently ignored | **Response fields:** | Field | Type | Notes | | - | - | - | | `DexCaseId` | integer | | | `ClientId` | integer | | | `CaseId` | string | | | `OutletActivityId` | integer | | | `OutletDesc` | string | | | `StartDate` | string | Date | | `EndDate` | string | Date | # Client documents Source: https://support.visualcare.com.au/api-reference/clients/documents Retrieve client documents with metadata including visibility and protection settings ### GET /documents-clients Retrieves metadata for client documents. Returns records only; no file content or download URL is included in the response. This endpoint is read-only. There is no POST or PUT endpoint for client document uploads. For worker document upload and update, see [Worker documents](/api-reference/workers/documents). **Example:** `GET /documents-clients?fromDate=2026-01-01&toDate=2026-01-31` **Parameters:** | Parameter | Default | Description | | - | - | - | | `fromDate` | - | Only documents created on or after this date. Format: `YYYY-MM-DD` | | `toDate` | - | Only documents created on or before this date. Format: `YYYY-MM-DD` | | `clientId` | - | Filter by client ID | | `categoryId` | - | Filter by document category ID (from `/category-documents`). Parameter names are case-sensitive: `CategoryId` is silently ignored | Date filters apply to `CreatedAt`. **Response:** ```json theme={null} [ { "DocId": 1832, "ClientId": 8760, "DocumentName": "Care plan - 2026.pdf", "Note": "", "Protected": 0, "VisibleCarerMobile": 1, "VisibleClientMobile": 0, "CreatedBy": "user@example.com", "Category": 3, "CreatedAt": "2026-01-12 09:41:07" } ] ``` **Response fields:** | Field | Type | Notes | | - | - | - | | `DocId` | integer | Unique document record ID. | | `ClientId` | integer | Client the document is attached to. | | `DocumentName` | string | Original filename as uploaded. | | `Note` | string | Free-text note saved with the document. Empty string if no note was entered. | | `Protected` | integer | `1` if the document is marked as protected in Visualcare, otherwise `0`. Protected documents are restricted from users without the relevant permission. | | `VisibleCarerMobile` | integer | `1` if the document is visible to the assigned worker in the vWorker mobile app, otherwise `0`. | | `VisibleClientMobile` | integer | `1` if the document is visible to the client in the vAboutMe mobile app, otherwise `0`. | | `CreatedBy` | string | Email address of the Visualcare user who uploaded the document. | | `Category` | integer | Document category ID. Look up categories with `GET /category-documents`. | | `CreatedAt` | string | Datetime the document was uploaded. | The response does not include file size. # Expenses Source: https://support.visualcare.com.au/api-reference/clients/expenses Retrieve client expenses including costs, charges, markup, and export status ### GET /Expenses Retrieves client expenses. **Example:** `GET /expenses?fromDate=YYYY-MM-DD&toDate=YYYY-MM-DD&clientId=368` **Parameters:** | Parameter | Default | Description | | - | - | - | | `fromDate` | - | Expenses with date >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Expenses with date \<= value. Format: `YYYY-MM-DD` | | `clientId` | - | Filter by client ID | | `carerId` | - | Filter by carer/worker ID | **Response fields:** | Field | Type | Notes | | - | - | - | | `ExpId` | integer | | | `CategoryId` | integer | | | `Date` | string | Date | | `InvoiceNumber` | string | | | `Supplier` | string | | | `Description` | string | | | `Units` | float | | | `UnitType` | string | e.g. `"UNITS"` | | `Amount` | number | Decimal | | `Cost` | number | Decimal | | `GST` | number | | | `PercOverTotal` | number | | | `Note` | string | | | `SeparateMarkup` | integer | 0/1 | | `MarkupDesc` | string | | | `MarkupChargeCode` | string | | | `MarkupOption` | string | | | `ExportCost` | number | | | `PurchaseMethodType` | string | | | `IsCharge` | integer | 0/1 | | `ClientId` | integer | | | `AgreementId` | integer | | | `AgreementItemId` | integer | | | `ChargeCode` | string | | | `HCPInvoiceClient` | integer | 0/1 | | `NDISSupportNumber` | string | | | `IsReimburse` | integer | 0/1 | | `CarerId` | integer | | | `RosterItemId` | integer | | | `PayCode` | string | | | `ExportInvoiceDateTime` | string | Date | | `ExportTsDateTime` | string | Date | | `LockedInvoice` | string | Date | | `LockedTimeSheet` | string | Date | | `InclHCP` | integer | 0/1 | | `ClientApp` | integer | 0/1 | | `CreatedOn` | string | Date | | `CreatedBy` | string | Email | | `Status` | string | | # Client groups Source: https://support.visualcare.com.au/api-reference/clients/groups Retrieve client group definitions including group codes and descriptions ### GET /groups Retrieves client groups. **Parameters:** None **Response fields:** | Field | Type | | - | - | | `GroupId` | integer | | `GroupCode` | string | | `GroupDesc` | string | # Client information Source: https://support.visualcare.com.au/api-reference/clients/information Retrieve client profile data including demographics, contact details, health information, and preferences The Visualcare public API provides a range of client-related endpoints covering core profile data, agreements, DEX cases, contacts, compliance, documents, expenses, groups, and notes. All endpoints in this section are read-only (GET). ### GET /clients Retrieves all clients. By default, deleted and non-current clients are excluded. **Example:** `GET /clients?clientId=8760&includeDex=TRUE&includeHealth=TRUE` **Parameters:** | Parameter | Default | Description | | - | - | - | | `clientId` | - | If set to numeric ID, returns a one-element array containing that client | | `includeDeleted` | - | If `TRUE`, returns deleted clients | | `includeNonCurrent` | - | If `TRUE`, returns non-current clients | | `serviceStatus` | - | Returns clients matching this status | | `serviceStart` | - | Returns clients with service start date >= value. Format: `YYYY-MM-DD` | | `serviceEnd` | - | Returns clients with service end date \<= value. Clients with no end date are always included. Format: `YYYY-MM-DD` | | `includeNotes` | - | If `TRUE`, returns: `NotesRisk`, `NotesAlert`, `NotesGeneral`, `NotesRoster`, `NotesClientProfile`, `NotesShiftAlert` | | `includeVulnerable` | - | If `TRUE`, returns: `Vulnerable`, `VulnerableFire`, `VulnerableHeat`, `VulnerableFlood`, `VulnerablePower`, `VulnerableStateRegistered`, `VulnerableFinancial`, `VulnerableWeatherEvents`, `VulnerableReason` | | `includeHealth` | - | If `TRUE`, returns: `PrimaryDisability`, `SecondaryDisability`, `AssociatedDisability`, `MedicalConditions`, `MobilityLevel`, `ManualHandling`, `DiagnosedDisability`, `VisionImpaired`, `SpeechImpaired`, `HearingImpaired`, `UndiagnosedDisability`, `DisabilitySupportPension`, `Mobility`, `Dementia`, `VulnerableClient`, `VulnerableStateRegistered`, `VulnerableHeat`, `VulnerableReason`, `ComplexNeeds`, `ManagementPlan`, `ManagementPlanType`, `MedicationAdmin`, `MedicationPrompt`, `MedicationNote`, `SelfAdministered`, `Diagnosis`, `HealthCareCard` | | `includePref` | - | If `TRUE`, returns: `PrefGender`, `PrefNonSmoker`, `PrefPet`, `PrefLanguages`, `PrefCultures`, `PrefInterests`, `PrefSkills`, `PrefTraining`, `PrefAdditional` | | `includeDex` | - | If `TRUE`, returns: `PlaceOfBirth`, `LivingCircumstances`, `HomelessIndicatorCode`, `HasDisabilities`, `DisabilityCode`. Parameter names are case-sensitive: `includeDEX` is silently ignored | **Base response fields:** | Field | Type | Notes | | - | - | - | | `ClientId` | integer | | | `ClientCode` | string | | | `DexClientId` | string | | | `Slk` | string | | | `FirstName` | string | | | `MiddleName` | string | | | `LastName` | string | | | `PreferredName` | string | | | `Gender` | string | | | `FundingType` | string | | | `ClientType` | string/null | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `State` | string | | | `PostCode` | string | | | `Longitude` | string | | | `Latitude` | string | | | `Email` | string | | | `Phone1` | string | | | `Phone2` | string | | | `PhoneSMS` | string | | | `Fax` | string | | | `ContactPref` | string | | | `DateOfBirth` | string | Date format | | `PayerId` | integer | | | `Area` | string | | | `Division` | string | | | `Group` | string | | | `CaseManager` | string | Email format | | `CaseManager2` | string | Email format | | `MaritalStatus` | string | | | `Aboriginal` | integer | 0/1 | | `TorresStraitIslander` | integer | 0/1 | | `LGBQTI` | integer | 0/1 | | `LanguageEnglish` | integer | 0/1 | | `LanguageOther` | string | | | `InterpreterRequired` | integer | 0/1 | | `ClientNo` | string | | | `AccountingCode` | string | | | `MedicareNo` | string | | | `AmbulanceNo` | string | | | `Weight` | integer | | | `Height` | integer | | | `DVA` | string | | | `TSI` | integer | 0/1 | | `ATSI` | integer | 0/1 | | `CALD` | integer | 0/1 | | `CHSP` | integer | 0/1 | | `SATSS` | integer | 0/1 | | `HCPLevel` | integer | | | `LiveAlone` | integer | 0/1 | | `SingleWorker` | integer | 0/1 | | `CompanionCard` | string | | | `PrivateHealth` | string | | | `LegalOrders` | string | | | `LivingArrangement` | string | | | `EmploymentType` | string | | | `Referral` | integer | 0/1 | | `Referer` | string | | | `RefererCode` | string | | | `MACCode` | string | | | `MyAgedCareReference` | string | | | `NotesAccess` | string | | | `CurrentStatus` | string | | | `ServiceStatus` | string | | | `ServiceStart` | string | Date format | | `ServiceEnd` | string | Date format | | `ServiceReview` | string | Date format | | `ServiceReview2` | string | Date format | | `EnquiryDate` | string | Date format | | `LastServiceReview` | string | Date format | | `ReasonServiceEnded` | string | | | `NIDISNo` | string | | | `NDISNumber` | string | | | `NDISNote` | string | | | `PensionNo` | string | | | `CareRecipientId` | string | | | `IsDex` | integer | 0/1 | | `Status` | string | | | `LocationId` | integer | | | `Current` | integer | 0/1 | | `CreatedBy` | string | Email format | | `CreatedTime` | string | Datetime format | | `LastModifiedTime` | string | Datetime format | | `PreferedWorker` | array | | | `NonPreferedWorker` | array | | Conditional fields are included when the corresponding `include*` flags are set to `TRUE` (see query parameters above). # Client notes Source: https://support.visualcare.com.au/api-reference/clients/notes Retrieve client notes including categories, assignments, follow-ups, and task status ### GET /notes-client Retrieves client notes. `ClientId` must be specified unless you're using the `page` parameter. **Example:** `GET /notes-client?page=0&limit=200&fromDate=YYYY-MM-DD` **Parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Items per page | | `page` | 0 | Pagination offset (skips N records) | | `fromDate` | - | Notes with timestamp >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Notes with timestamp \<= value. Format: `YYYY-MM-DD` | | `assignedTo` | - | Filter by assigned email address | | `closed` | - | `1` returns only closed items, `0` returns only open items | | `taskClosed` | - | `1` returns only items with closed tasks, `0` returns only items with open tasks | | `ClientId` | - | **Required** unless `page` is set. Filter by client ID. This parameter is case-sensitive and, unlike other endpoints, uses `ClientId`: `clientId` returns `{"status":"error","message":"Client Id Required"}` | The client ID is not returned as a named field. It is in `_ReferringId_1` for notes created directly on the client and `_ReferringId_2` for roster-linked notes. **Response fields:** | Field | Type | Notes | | - | - | - | | `NoteId` | integer | | | `CategoryId` | integer | | | `NoteType` | string | e.g. `"APPNOTEGENERAL"` | | `Note` | string | | | `Reason` | string | | | `Comment` | string | | | `Action` | string | | | `Outcome` | string | | | `Response` | string/null | | | `Location` | string | | | `Occurrence` | string | | | `Performance` | string | | | `Timestamp` | string | Datetime | | `NoteDate` | string | Date | | `NotifiedDate` | string | Date | | `AlertDate` | string | Date | | `CloseDate` | string | Date | | `TaskClosedDate` | string | Date | | `AssignedTo` | string | Email | | `AssignedToSecond` | string | Email | | `Closed` | integer | 0/1 | | `TaskClosed` | integer | 0/1 | | `RequiresFollowUp` | integer | 0/1 | | `VisibleClientApp` | integer | 0/1 | | `VisibleWorkerApp` | integer | 0/1 | | `CreatedBy` | string | | | `_ReferringId_1` | integer | | | `_ReferringId_2` | integer | | | `_ReferringId_3` | integer | | # Divisions Source: https://support.visualcare.com.au/api-reference/divisions Division records ### GET /Divisions Returns all division records configured in your Visualcare organisation. **Query parameters:** None **Response fields:** | Field | Type | | - | - | | `AreaId2` | integer | | `AreaCode2` | string | | `Area2` | string | | `Reference1` | string | | `Status2` | string | | `TemplateId` | integer | | `IncidentId` | integer | # Forms Source: https://support.visualcare.com.au/api-reference/forms Form submissions and data ### GET /Forms Default limit is 200 items. **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Items per page | | `page` | 0 | Pagination offset | | `fromDate` | - | Forms with `CreatedDate` >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Forms with `CreatedDate` \<= value. Format: `YYYY-MM-DD` | | `carerId` | - | Filter by carer ID. Parameter names are case-sensitive: `CarerId` is silently ignored | | `clientId` | - | Filter by client ID | | `templateId` | - | Filter by template ID | **Response fields:** | Field | Type | Notes | | - | - | - | | `FormId` | integer | | | `FormName` | string | | | `TemplateId` | integer | | | `AssignedTo` | string | Email | | `CreatedBy` | string | Email | | `CreatedDate` | string | Datetime | | `FormDate` | string | Datetime. `0000-00-00 00:00:00` when not set | | `ReviewDate` | string | Datetime | | `CompletedDate` | string | Datetime | | `Status` | string | | | `ClientId` | string | Numeric string | | `LeadId` | integer | | | `CarerId` | integer | | | `LocationId` | integer | | | `vis_sw_mob` | integer | 0/1 | | `vis_cl_mob` | integer | 0/1 | | `RosterItemId` | integer | | | `TimeSheetId` | integer | | | `SubmissionId` | string | Numeric string | | `FormData` | object/null | Nested form submission data. `null` when the form has no submission | **FormData** nested structure: | Field | Type | Notes | | - | - | - | | `id` | string | Numeric string | | `ip` | string | | | `new` | string | Numeric string | | `flag` | string | Numeric string | | `notes` | string | | | `status` | string | for example `"ACTIVE"` | | `form_id` | string | Numeric string | | `created_at` | string | Datetime | | `updated_at` | string | Datetime | | `answers` | object | Keyed by question ID. Each value has `name`, `text`, `type`, `order` and, when answered, `answer` | # Incidents Source: https://support.visualcare.com.au/api-reference/incidents SIRS and general incident records This page documents the API endpoints for retrieving incident data programmatically. If you need to view, edit, or report on an individual incident record in vCore, for example when preparing evidence for the NDIS Commission, see [Editing incidents](/incidents/editing-incidents) and the [SIRS register](/incidents/sirs-register) instead. ### GET /incidents **Example:** `GET /incidents?fromDate=YYYY-MM-DD&toDate=YYYY-MM-DD&limit=100` **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Maximum rows returned. There is no `page` parameter on this endpoint, so use date windows to retrieve more than `limit` rows | | `fromDate` | - | Incidents with NoteDate >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Incidents with NoteDate \<= value. Format: `YYYY-MM-DD` | | `createDateFrom` | - | Incidents with Timestamp >= value. Format: `YYYY-MM-DD` | | `createDateTo` | - | Incidents with Timestamp \<= value. Format: `YYYY-MM-DD` | | `clientId` | - | Filter by client ID (compares against `_ReferringId_1`) | | `assignedTo` | - | Filter by assigned user email | | `closed` | - | Filter by closed status: `1` or `0`. The values `true`/`false` are not recognised and behave as `0` | | `taskClosed` | - | Filter by task closed status: `1` or `0`. The values `true`/`false` are not recognised and behave as `0` | | `inclForm` | - | If `TRUE`, adds a `Form` object to each incident. Parameter names are case-sensitive: `InclForm` is ignored | **Response fields:** | Field | Type | Notes | | - | - | - | | `IncidentId` | integer | | | `CategoryId` | integer | | | `IncidentType` | string | for example `"CLIENT"` | | `Note` | string | | | `Reason` | string | | | `Comment` | string | | | `Action` | string | | | `Outcome` | string | | | `Response` | null/string | | | `Location` | string | | | `Occurrence` | string | | | `Performance` | string | | | `NoteDate` | string | Datetime | | `NotifiedDate` | string | Datetime | | `AlertDate` | string | Datetime | | `CloseDate` | string | Datetime | | `TaskClosedDate` | string | Datetime | | `IsReportable` | integer | 0/1 | | `Reported24Hour` | integer | 0/1 | | `Reported5Day` | integer | 0/1 | | `AssignedTo` | string | Email | | `AssignedToSecond` | string | | | `Closed` | integer | 0/1 | | `TaskClosed` | integer | 0/1 | | `RequiresFollowUp` | integer | 0/1 | | `VisibleClientApp` | integer | 0/1 | | `VisibleWorkerApp` | integer | 0/1 | | `CreatedBy` | string | User display name | | `DataSource` | string | for example `"Incidents"` | | `Priority` | string | | | `ReadDate` | string | Datetime | | `ReadBy` | string | | | `IncidentCode` | string | | | `Timestamp` | string | Datetime | | `_ReferringId_1` | integer | Usually the client ID. For roster-linked incidents this can hold the roster item ID, with the client in `_ReferringId_2` and worker in `_ReferringId_3` | | `_ReferringId_2` | integer | | | `_ReferringId_3` | integer | | **Form** (when `inclForm=TRUE`): an object with the same fields as a `/Forms` row plus `Signature`, `SignatureDate` and `VehicleId`. `Form.FormData` is `null` when there is no submission, otherwise an object whose `answers` value is an object keyed by question ID, each with `name`, `text`, `type`, `order` and optionally `answer`. *** ### GET /SIRS Serious Incident Response Scheme incidents. **Example:** `GET /SIRS?fromDate=YYYY-MM-DD&toDate=YYYY-MM-DD&limit=100` **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Maximum rows returned. There is no `page` parameter on this endpoint | | `fromDate` | - | SIRS with IncidentDate >= value. Format: `YYYY-MM-DD`. Records with no incident date are only returned when no date filter is set | | `toDate` | - | SIRS with IncidentDate \<= value. Format: `YYYY-MM-DD` | | `createDateFrom` | - | SIRS with Timestamp >= value. Format: `YYYY-MM-DD` | | `createDateTo` | - | SIRS with Timestamp \<= value. Format: `YYYY-MM-DD` | | `clientId` | - | Filter by client ID (maps to `_ReferringId_1`) | | `assignedTo` | - | Filter by assigned user email | | `closed` | - | Filter by closed status: `1` or `0`. The values `true`/`false` are not recognised and behave as `0` | | `taskClosed` | - | Filter by task closed status: `1` or `0`. The values `true`/`false` are not recognised and behave as `0` | **Response fields:** | Field | Type | Notes | | - | - | - | | `SIRSIncidentId` | integer | | | `CategoryId` | integer | | | `Note` | string | | | `Reason` | string | | | `Comment` | string | | | `Action` | string | | | `Outcome` | string | | | `Response` | array | Objects of `{ Question, Answer, Outcome }`. `Answer` is `"yes"`, `"no"` or `null` | | `Priority` | string | | | `IncidentDate` | string | Datetime. `0000-00-00 00:00:00` when not set | | `NotifiedDate` | string | Datetime | | `AlertDate` | string | Datetime | | `CloseDate` | string | Datetime | | `TaskClosedDate` | string | Datetime | | `AssignedTo` | string | | | `AssignedToSecond` | string | | | `Closed` | integer | 0/1 | | `TaskClosed` | integer | 0/1 | | `RequiresFollowUp` | integer | 0/1 | | `VisibleClientApp` | integer | 0/1 | | `VisibleWorkerApp` | integer | 0/1 | | `IsReportable` | integer | 0/1 | | `Reported24Hour` | integer | 0/1 | | `Reported5Day` | integer | 0/1 | | `ReadDate` | string | Datetime | | `ReadBy` | string | | | `CreatedBy` | string | Email | | `Timestamp` | string | Datetime | | `_ReferringId_1` | integer | Client ID | | `_ReferringId_2` | integer | | | `_ReferringId_3` | integer | | # Leads and referrals Source: https://support.visualcare.com.au/api-reference/leads Lead records and referral agencies ### GET /Leads **Example:** `GET /leads?leadType=CLIENT&leadId=328` **Query parameters:** | Parameter | Default | Description | | - | - | - | | `leadId` | - | Returns a one-element array containing the matching lead. An unknown ID returns `[]` | | `leadType` | - | Filter by type: `CARER` or `CLIENT` (value is case-insensitive). Leads with an empty type are excluded by either filter | | `includeDeleted` | - | If present (any value, including `FALSE`), also returns deleted leads (`Status` = `"D"`) | **Response fields:** | Field | Type | Notes | | - | - | - | | `LeadId` | integer | | | `LinkId` | integer | | | `LeadStatus` | null/string | | | `LeadSource` | string | | | `LeadType` | string | `"CLIENT"` or `"CARER"` | | `Title` | string | | | `FirstName` | string | | | `LastName` | string | | | `MiddleName` | string | | | `PreferredName` | string | | | `Area` | string | | | `Division` | string | | | `Groups` | string | | | `Type` | string | | | `CaseManager` | string | Email | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `State` | string | | | `Postcode` | string | | | `Phone` | string | | | `Mobile` | string | | | `Email` | string | | | `ContactPref` | string | | | `DOB` | string | Date | | `Gender` | string | | | `Marital` | string | | | `Vacancy` | string | | | `NDISNo` | string | | | `NDISAspirations` | string | | | `MyAgedCareReference` | string | | | `MACCode` | string | | | `MedicareNo` | string | | | `AmbulanceNo` | string | | | `PensionNo` | string | | | `Aboriginal` | integer | 0/1 | | `TSI` | integer | 0/1 | | `LGBQTI` | integer | 0/1 | | `ATSI` | integer | 0/1 | | `CALD` | integer | 0/1 | | `InterpreterRequired` | integer | 0/1 | | `AssistiveTechnology` | integer | 0/1 | | `Auslan` | integer | 0/1 | | `ClientBinary` | integer | 0/1 | | `TTL` | integer | 0/1 | | `CommunicationAssistance` | string | | | `HCPLevel` | integer | | | `Notes` | string | | | `Comments` | string | | | `Finalised` | integer | 0/1 | | `StartDate` | string | Date | | `FollowUpDate` | string | Date | | `FinalisedDate` | string | Date | | `LanguageOther` | string | | | `Allergy` | string | | | `PrimaryDisability` | string | | | `AssociatedDisability` | string | | | `HealthInfo` | string | | | `MedicationNote` | string | | | `FinanceLegalStatus` | string | | | `LegalOrders` | string | | | `VulnerableFinancial` | integer | 0/1 | | `_LastModTime` | string | Datetime | | `_LastModUser` | string | Email | | `_CreateTime` | string | Datetime | | `_CreateUser` | string | Email | | `Status` | string | | *** ### GET /Referral Returns all referral agencies. **Query parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `AgencyId` | integer | | | `AgencyCode` | string | | | `Name` | string | | | `Title` | string/null | | | `FirstName` | string/null | | | `LastName` | string/null | | | `Phone` | string/null | | | `Phone2` | string/null | | | `Mobile` | string/null | | | `Fax` | string/null | | | `Address1` | string/null | | | `Address2` | string/null | | | `Suburb` | string/null | | | `State` | string/null | | | `PostCode` | string/null | | | `Email` | string/null | | | `Website` | string/null | | | `Note` | string/null | | | `AccountType` | string/null | | | `ContactType` | string | | | `CorporateStatus` | string/null | | | `Status` | string | | | `Area` | string | | | `Area2` | string | | # Locations Source: https://support.visualcare.com.au/api-reference/locations Location records ### GET /locations Returns all location records. **Query parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `LocationId` | integer | | | `Code` | string | | | `AccountingCode` | string | | | `Description` | string | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `Postcode` | integer | | | `State` | string | | | `Area` | string | | | `Longitude` | string | | | `Latitude` | string | | | `Phone` | string | | | `Fax` | string | | | `Email` | string | | | `FacilityType` | string | | | `FacilityStatus` | string | | | `CaseManager` | string | | | `StaffRatio` | integer | | | `ClientRatio` | integer | | | `Comments` | string | | | `FinanceLegalStatus` | string | | | `OHSNote` | string | | | `OHSCheck` | integer | 0/1 | | `SafetyDevice` | string | | | `NotesAlert` | string | | | `NotesAlertCheck` | integer | 0/1 | | `NotesRoster` | string | | | `NotesRosterCheck` | integer | 0/1 | | `VisibleOnline` | integer | 0/1 | | `KMExempt` | integer | 0/1 | | `Status` | string | `""` for active records | # Public API reference Source: https://support.visualcare.com.au/api-reference/overview Overview of the Visualcare public API, including authentication, error codes, and endpoint catalogue The Visualcare public API provides programmatic access to your organisation's data. All endpoints return JSON and use the base URL below. **Base URL:** `https://publicapi.visualcare.com.au`
**Requesting API access** To request API access for your Visualcare database, [support@visualcare.com.au](mailto:support@visualcare.com.au). The team provides API credentials and documentation for your specific integration needs. ## Authentication All API requests require three custom headers: | Header | Value | | - | - | | `User` | Your user UUID | | `Key` | Your API key | | `Secret` | Your API secret | Credentials are provided directly by Visualcare. Contact [visualcare.com.au/contact](https://visualcare.com.au/contact) to request credentials. ```shell theme={null} curl "https://publicapi.visualcare.com.au/{endpoint}" -H "User: user-uuid" -H "Key: key" -H "Secret: secret" ``` ## Query parameters Query parameter names are **case-sensitive** and use lowerCamelCase, for example `carerId`, `clientId`, `fromDate`, `includeNotes`. A parameter sent with different casing, such as `CarerId`, is silently ignored and the unfiltered result is returned. Endpoint paths are not case-sensitive. Flag parameters such as `includeDeleted` are enabled by their presence, so `includeDeleted=FALSE` still includes deleted records. Omit the parameter to turn the behaviour off. Status values in responses are an empty string for active records and `"D"` for deleted records. ## Error codes | Code | Meaning | | - | - | | 400 | Bad Request -- Your request is invalid. | | 401 | Unauthorized -- Your API key is wrong. | | 403 | Forbidden -- The requested resource is hidden for administrators only. | | 404 | Not Found -- The specified resource could not be found. | | 405 | Method Not Allowed -- You tried to access a resource with an invalid method. | | 406 | Not Acceptable -- You requested a format that isn't JSON. | | 410 | Gone -- The resource requested has been removed from our servers. | | 429 | Too Many Requests -- You've sent too many requests in a short period of time. | | 500 | Internal Server Error -- We had a problem with our server. Try again later. | | 503 | Service Unavailable -- We're temporarily offline for maintenance. Try again later. | Successful requests return HTTP 200. GET endpoints return a JSON array. Errors are also returned with HTTP 200 and a body of `{"status":"error","message":"..."}`, so check the response body rather than the status code. ## Endpoint summary table | Method | Path | Resource | Auth | Pagination | | - | - | - | - | - | | GET | `/areas` | Areas | Yes | No | | GET | `/category-expenses` | Categories | Yes | No | | GET | `/category-documents` | Categories | Yes | No | | GET | `/category-incidents` | Categories | Yes | No | | GET | `/category-payers` | Categories | Yes | No | | GET | `/category-rosteritems` | Categories | Yes | No | | GET | `/category-services` | Categories | Yes | No | | GET | `/clients` | Clients | Yes | No | | GET | `/agreements` | Agreements | Yes | Yes (limit/page) | | GET | `/DEXCase` | DEX Cases | Yes | No | | GET | `/contacts` | Contacts | Yes | No | | GET | `/compliance-clients` | Client Compliance | Yes | No | | GET | `/documents-clients` | Client Documents | Yes | No | | GET | `/Expenses` | Client Expenses | Yes | No | | GET | `/groups` | Client Groups | Yes | No | | GET | `/notes-client` | Client Notes | Yes | Yes (limit/page) | | GET | `/Divisions` | Divisions | Yes | No | | GET | `/Forms` | Forms | Yes | Yes (limit/page) | | GET | `/incidents` | Incidents | Yes | limit only, no page | | GET | `/Leads` | Leads | Yes | No | | GET | `/locations` | Locations | Yes | No | | GET | `/payers` | Payers | Yes | No | | GET | `/quotes` | Quotes | Yes | Yes (limit/page) | | GET | `/Referral` | Referral Agencies | Yes | No | | GET | `/rosters` | Roster Items | Yes | Yes (limit/page, max 20,000) | | GET | `/roster-master` | Roster Masters | Yes | No | | GET | `/services` | Services | Yes | No | | GET | `/Settings` | Org Settings | Yes | No | | GET | `/SIRS` | SIRS Incidents | Yes | limit only, no page | | GET | `/skills` | Skills | Yes | No | | GET | `/timesheets` | Timesheets | Yes | Yes (limit/page, max 40,000) | | GET | `/Training-items` | Training Items | Yes | No | | GET | `/Users` | Users | Yes | No | | GET | `/workers` | Workers | Yes | No | | POST | `/worker` | Create Worker | Yes | - | | PUT | `/worker` | Update Worker | Yes | - | | POST | `/worker-skill` | Add Worker Skill | Yes | - | | PUT | `/worker-skill` | Update Worker Skill | Yes | - | | GET | `/worker-roles` | Worker Roles | Yes | No | | GET | `/availability` | Worker Availability | Yes | No | | GET | `/documents-workers` | Worker Documents | Yes | No | | POST | `/worker-doc` | Upload Worker Doc | Yes | - | | PUT | `/worker-doc` | Update Worker Doc | Yes | - | | GET | `/compliance` | Worker Compliance | Yes | No | | POST | `/worker-compliance` | Add Worker Compliance | Yes | - | | PUT | `/worker-compliance` | Update Worker Compliance | Yes | - | | GET | `/Leave` | Worker Leave | Yes | No | | GET | `/Training` | Worker Training | Yes | No | | GET | `/nextshift` | Worker Next Shift | Yes | No | | GET | `/prevshift` | Worker Previous Shift | Yes | No | **Total: 50 endpoint operations across 46 unique URL paths** ## Endpoint pages Client records, agreements, contacts, compliance, documents, expenses, groups, and notes Worker records, skills, roles, availability, documents, compliance, leave, training, and shifts Category lookups for expenses, documents, incidents, payers, roster items, and services Area lookup data Division lookup data Location lookup data Organisation-level settings Service definitions and rates Roster items and master list Timesheet records Lead records and referral agencies Payer records User account records Incidents and SIRS records Form submissions and data Quote records and line items # Payers Source: https://support.visualcare.com.au/api-reference/payers Payer organisation records ### GET /payers Returns all payer organisations. **Query parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `PayerId` | integer | | | `PayerCode` | string | | | `PayerName` | string | | | `ContactName` | string | | | `Salutation` | string | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `PostCode` | string | | | `State` | string | | | `Phone` | string | | | `Mobile` | string | | | `Email` | string | | | `AccountingCode` | string | | | `ABN` | string | | | `Category` | string | | | `Active` | integer | 0/1 | | `Status` | string | | # Quotes Source: https://support.visualcare.com.au/api-reference/quotes Quote records and line items ### GET /quotes By default, quote line items are not included. **Example:** `GET /quotes?fromDate=YYYY-MM-DD&toDate=YYYY-MM-DD&limit=100&includeItems=TRUE` **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Items per page | | `page` | 0 | Pagination offset | | `fromDate` | - | Quotes with `DateOfQuote` >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Quotes with `DateOfQuote` \<= value. Format: `YYYY-MM-DD` | | `payerId` | - | Filter by payer ID | | `clientId` | - | Filter by client ID | | `includeItems` | - | If `TRUE`, returns `QuoteLineItems` | **Response fields:** | Field | Type | Notes | | - | - | - | | `QuoteId` | integer | | | `ClientId` | integer | | | `PayerId` | integer | | | `FundingTypeId` | integer | | | `QuoteStatus` | string/null | for example `"pending"`, `"in_progress"` | | `Finalised` | integer | 0/1 | | `DateOfQuote` | string | Date | | `FollowUpDate` | string | Date. `0000-00-00` when not set | | `QuoteTotal` | number | Decimal | | `QuoteTotalHours` | integer | | | `QuoteStart` | string | Date | | `QuoteEnd` | string | Date | | `FirstName` | string | | | `LastName` | string | | | `Address1` | string | | | `Address2` | string | | | `Subrub` | string | **Typo in API** - should be `Suburb` | | `Postcode` | string | | | `State` | string | | | `Phone1` | string | | | `Email` | string | | | `DOB` | string | Date | | `NDISNo` | string | | | `_CreateUser` | string | | | `_UpdateUser` | string | Email | | `_UpdateComment` | string | | | `Status` | string | | The quote object also returns funding and package fields that are not listed above, including `QuoteType`, `FundType`, `ClientNumber`, `LocationId`, `Area`, `ApprovedBy`, `ApprovedClient`, `QuoteNote`, `MyAgedCareReference`, NDIS fields (`NDISActivityType`, `NDISMgnt`, `MMMLevel`) and Support at Home fields (`sah_living`, `sah_independence`, `sah_clinical`, `SAHRestorative`, `SAHEndOfLife`, `SAHAssistiveTechnology`, `SAHHomeModifications`). Money values in these fields are returned as strings such as `"0.00"`. **QuoteLineItems** (when `includeItems=TRUE`): | Field | Type | Notes | | - | - | - | | `QuoteItemId` | integer | | | `QuoteId` | integer | | | `LineNo` | integer | | | `ServiceId` | integer | | | `Description` | string | | | `Price` | number | Decimal | | `Quantity` | integer | | | `TotalQuantity` | integer | | | `Total` | number | Decimal | | `Budget` | integer | | | `StartTime` | string | Time | | `FreqTye` | string | **Typo in API** - should be `FreqType`. for example `"weekly"` | | `FreqQty` | integer | | | `FreqDaysStr` | string | for example `"MO;WE;FR"` | | `FreqDays` | array | for example `["MO", "WE", "FR"]` | # Rosters Source: https://support.visualcare.com.au/api-reference/rosters Roster items and roster master list ### GET /rosters Default limit is 200 items. Maximum limit is 20,000. If you exceed the maximum, the API reverts to the default. **Example:** `GET /rosters?fromDate=2018-02-19&toDate=2018-02-20&page=0&limit=100` Parameter names are case-sensitive: `Limit`, `Page`, `CarerId` and similar spellings are silently ignored. **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Default 200, max 20,000 | | `page` | 0 | Pagination offset | | `fromDate` | - | Roster items with `DateOfService` >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Roster items with `DateOfService` \<= value. Format: `YYYY-MM-DD` | | `createdTimeFrom` | - | Roster items with `CreatedTime` >= value. Format: `YYYY-MM-DD` | | `createdTimeTo` | - | Roster items with `CreatedTime` \<= value. Format: `YYYY-MM-DD` | | `rosterItemId` | - | Filter by roster item ID | | `clientId` | - | Filter by client ID | | `carerId` | - | Filter by carer ID | | `serviceId` | - | Filter by service ID | | `includeNotes` | - | If `TRUE`, adds a `Notes` array to each roster item | | `onHoldType` | - | Filter by a specific hold type value, for example `LEAVE-HOS`. The value is matched literally, so `ALL` returns no rows | **Response fields:** | Field | Type | Notes | | - | - | - | | `RosterItemId` | integer | | | `RosterMasterId` | integer | Links to `MasterId` in `/roster-master` | | `ClientId` | integer | | | `CarerId` | integer | `-1` when unallocated | | `PayerId` | integer | | | `ServiceId` | integer | | | `LocationId` | integer | `-1` when not set | | `CategoryId` | integer | `-1` when not set | | `DateOfService` | string | Date | | `StartTime` | string | Time | | `Minutes` | integer | | | `ChargeRate` | number | Decimal | | `PayRate` | number | Decimal | | `FixedFee` | integer | | | `HasBreak` | integer | 0/1 | | `BreakStartTime1` | string | Time | | `BreakMinutes1` | integer | | | `BreakMinutes2` | integer | | | `OrderNumber` | string | | | `RecurrenceId` | integer | | | `RecurrenceStart` | string | Date | | `RecurrenceEnd` | string | Date | | `RecurrenceType` | string | for example `"UNTIL"` | | `OccurenceDays` | string | for example `"TU,TH,SU"` | | `OccurenceCount` | integer | | | `OccurencePeriodic` | string | for example `"WEEKLY"` | | `OccurenceInterval` | integer | | | `OnHoldType` | string | | | `OnHoldNote` | string | | | `OnHoldCode` | string | | | `OnHoldChargePer` | integer | | | `OnHoldPayMinutes` | integer | | | `OnHoldDateTime` | string | Datetime. `0000-00-00 00:00:00` when not set | | `TimeSheetId` | integer | | | `AgreementId` | integer | | | `AgreementItemId` | integer | | | `DEXCaseId` | integer | | | `DEXServiceTypeId` | integer | | | `APP_StartTime` | string | Datetime | | `APP_FinishTime` | string | Datetime | | `APP_LastLongtitude` | string | | | `APP_LastLatitude` | string | | | `LastModified` | string | Datetime | | `LastModifiedBy` | string | Email | | `LastModifiedType` | string | for example `"UNALLOCATE A SHIFT"` | | `CreatedTime` | string | Datetime | | `CreatedBy` | string | Email | | `Notes` | array | Only when `includeNotes=TRUE`. Objects of `{ RosterItemId, NoteId, CategoryId, Note, NoteType, Timestamp }` | *** ### GET /roster-master Returns all roster master records that have not been flagged as deleted. `MasterId` links to `RosterMasterId` in the roster items endpoint above. **Query parameters:** None. This endpoint is not paginated and returns every roster master in one response; `limit`, `carerId` and `clientId` are ignored. **Response fields:** | Field | Type | Notes | | - | - | - | | `MasterId` | integer | | | `ClientId` | integer | | | `LocationId` | integer | | | `RosterId` | string | | | `Reference` | string | | | `Complete` | integer | 0/1 | | `DefaultServiceId` | integer | | | `DefaultDateOfService` | string | Date | | `IsDraft` | integer | 0/1 | | `RosterTimeZone` | string | for example `"Adelaide"` | | `Type` | string | for example `"TRAN"`, `"SC"` or empty | | `CategoryId` | integer | | | `LimitBookingsPeriod` | integer | | | `VisibleOnline` | integer | 0/1 | | `Status` | string | | # Services Source: https://support.visualcare.com.au/api-reference/services Service catalogue and rate configuration ### GET /services Returns the service catalogue configured in your Visualcare instance. **Query parameters:** | Parameter | Default | Description | | - | - | - | | `includeDeleted` | - | If present (any value, including `FALSE`), also returns deleted services (`Status` = `"D"`) | **Response fields:** | Field | Type | Notes | | - | - | - | | `ServiceId` | integer | | | `ServiceCode` | string | | | `Description` | string | | | `Unit` | string | for example `"HR"` | | `Area` | string | | | `Category` | integer | | | `ExpenseCategory` | integer | | | `Type` | string | for example `"Private"` | | `ShiftType` | string | for example `"WKDAY"` | | `Reference1` | string | | | `Reference2` | string | | | `IsSleepover` | integer | 0/1 | | `IsNormalTime` | integer | 0/1 | | `LinkedNormalTime` | integer | | | `ChargeRate` | number | Integer or decimal | | `ChargeRate2` | number | Integer or decimal | | `ChargeRate3` | number | Integer or decimal | | `CHSPRate` | integer | | | `PayRate1` through `PayRate48` | number | 48 pay rate tiers. Integer or decimal | | `AccountingCode` | string | | | `PayrollCode1` through `PayrollCode48` | string | 48 payroll code tiers | | `AllowanceCode` | string | | | `GST` | integer | 0/1 | | `NDISSupportNumber` | string | | | `NDISGSTCode` | string | | | `NDISRegGrpNumber` | integer | | | `NDISKmCode` | integer | | | `NDISCentreCapitalCosts` | integer | | | `HACCItemNumber` | integer | `-1` when not set | | `DVAType` | string | | | `SAHCategory` | string | Support at Home category | | `SAHService` | string | Support at Home service | | `ServiceLocationSettingCode` | string | | | `IsSubcontractorDelivered` | integer | 0/1 | | `IsVolunteerDirectService` | integer | 0/1 | | `IsOvernightSupportIncluded` | integer | 0/1 | | `EngagementTimeMinutes` | integer | | | `TripTimeMinutes` | integer | | | `TripDistanceKm` | integer | | | `IsMealCookedOffsite` | integer | 0/1 | | `IsMealProvided` | integer | 0/1 | | `IsItemsTextureModified` | integer | 0/1 | | `SnackCount` | integer | | | `BeverageCount` | integer | | | `DessertCount` | integer | | | `LightMealCount` | integer | | | `MainMealCount` | integer | | | `_LastModTime` | string | Datetime | | `_LastModUser` | string | | | `_CreateTime` | string | Datetime | | `_CreateUser` | string | Email | | `Active` | integer | 0/1 | | `Status` | string | `""` for active records, `"D"` for deleted | # Organisation settings Source: https://support.visualcare.com.au/api-reference/settings Organisation-level settings and contact details ### GET /Settings Returns your organisation-level settings, including contact details, identifiers, and default rates. **Query parameters:** None The response is a one-element JSON array containing a single settings object. All values are strings except `PAYROLLCODES`. **Response fields:** | Field | Type | Notes | | - | - | - | | `CompanyName` | string | | | `ABN` | string | | | `Website` | string | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `State` | string | | | `Postcode` | string | | | `Phone1` | string | | | `Phone2` | string | | | `Fax` | string | | | `Email` | string | | | `NDISNo` | string | | | `HCPNapsId` | string | | | `KMChargeRate` | string | Decimal as a string, for example `"0.9"` | | `KMPayRate` | string | Decimal as a string, for example `"1.0"` | | `PAYROLLCODES` | array | Array of payroll code label strings | # Timesheets Source: https://support.visualcare.com.au/api-reference/timesheets Timesheet records ### GET /timesheets Default limit is 200 items. Maximum limit is 40,000. Exceeding the maximum reverts to the default. **Example:** `GET /timesheets?fromDate=2023-01-01&toDate=2023-12-31&limit=1000` Parameter names are case-sensitive: `Limit`, `Page`, `CarerId` and similar spellings are silently ignored. **Query parameters:** | Parameter | Default | Description | | - | - | - | | `limit` | 200 | Default 200, max 40,000 | | `page` | 0 | Pagination offset | | `fromDate` | - | Timesheets with `DateOfService` >= value. Format: `YYYY-MM-DD` | | `toDate` | - | Timesheets with `DateOfService` \<= value. Format: `YYYY-MM-DD` | | `createdTimeFrom` | - | Timesheets with `CreatedTime` >= value. Format: `YYYY-MM-DD` | | `createdTimeTo` | - | Timesheets with `CreatedTime` \<= value. Format: `YYYY-MM-DD` | | `timesheetId` | - | Filter by timesheet ID | | `clientId` | - | Filter by client ID | | `carerId` | - | Filter by carer ID | | `serviceId` | - | Filter by service ID | | `includeNotes` | - | If `TRUE`, populates the `Notes` array. Without it `Notes` is always `[]` | **Response fields:** | Field | Type | Notes | | - | - | - | | `TimeSheetId` | integer | | | `ClientId` | integer | | | `CarerId` | integer | | | `AgreementId` | integer | | | `AgreementItemId` | integer | | | `ServiceId` | integer | | | `DateOfService` | string | Date | | `StartTime` | string | Time | | `Minutes` | integer | | | `ChargeRate` | number | Decimal | | `PayRate` | number | Decimal | | `FixedFee` | integer | | | `KM` | integer | | | `KMCharge` | integer | | | `KMNoCharge` | integer | | | `KMTravelTime` | integer | | | `Variation` | integer | 0/1 | | `VariationQty` | integer | | | `VariationComment` | string | | | `VariationApproved` | integer | 0/1 | | `ExtraChargeClient` | integer | | | `BreakStartTime1` | string | Time | | `BreakMinutes1` | integer | | | `BreakMinutes2` | integer | | | `OrderNumber` | string | | | `RecurrenceId` | integer | | | `OnHoldType` | string | | | `OnHoldNote` | string | | | `OnHoldCode` | string | | | `OnHoldChargePer` | integer | | | `OnHoldPayMinutes` | integer | | | `OnHoldDateTime` | string | | | `RosterItemId` | integer | | | `APP_IP` | string | | | `APP_StartTime` | string | Datetime | | `APP_FinishTime` | string | Datetime | | `APP_LastLongtitude` | string | | | `APP_LastLatitude` | string | | | `HasExported` | integer | 0/1 | | `ExportInvoiceNumber` | string | | | `DEXCaseId` | integer | | | `DEXServiceTypeId` | integer | | | `DEXSessionId` | integer | | | `LastModified` | string | Datetime | | `LastModifiedBy` | string | Email | | `CreatedTime` | string | Datetime | | `CreatedBy` | string | Numeric string, for example `"1460"` | | `Status` | string | | | `Area3Desc` | string | | | `cArea3Desc` | string | | | `Notes` | array | Always present. Empty unless `includeNotes=TRUE`; objects of `{ TimeSheetId, NoteId, CategoryId, Note, NoteType, Timestamp }` | # Users Source: https://support.visualcare.com.au/api-reference/users User account records ### GET /Users Returns all user accounts in your Visualcare organisation. **Query parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `UserId` | integer | | | `Username` | string | Email format | | `FirstName` | string | | | `LastName` | string | | | `Email` | string | Email format | | `Area` | string | | | `SecurityGroup` | integer | | | `_CreateTime` | string | Datetime | | `StopLogin` | integer | 0/1 | # Availability Source: https://support.visualcare.com.au/api-reference/workers/availability Retrieve worker availability records ### GET /availability **Parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `Id` | integer | | | `CarerId` | integer | | | `Fortnight` | integer | | | `Day` | string | for example `"TUE"`, `"WED"` | | `EntireDay` | integer | 0/1 | | `TimeFrom` | string | Time | | `TimeTo` | string | Time | # Worker compliance Source: https://support.visualcare.com.au/api-reference/workers/compliance Retrieve, create, and update worker compliance items Any API POST/PUT request won't trigger a workflow. ### GET /compliance Retrieves all worker compliance items. **Parameters:** None. Returns every compliance item for every worker in a single unpaginated response, including deleted items (`Status` = `"D"`). **Response:** ```json theme={null} [ { "FirstName": "Josh", "LastName": "Foster", "CarerId": 1512, "Area": "SA", "Area2": "", "Phone1": "0400000000", "Phone2": "", "Email1": "worker@example.com", "LinkId": 23, "ComplianceId": 2, "Required": 0, "StartDate": "2020-07-10", "AlertDate": "2021-06-10", "ExpiryDate": "2021-07-10", "Note": "non-mandatory", "FormId": -1, "Competent": 1, "Completed": 1, "Historic": 0, "Status": "", "_CreateUser": "jack@visualcare.com.au", "_CreateTime": "2020-06-12", "Description": "CPR", "ExpiryDays": 365, "WarningDays": 335, "Mandatory": 0, "NoStartDate": 0, "NoExpiryDate": 0, "vis_sw_mob": 1, "ExternalId": "", "AltId": "", "Role": "Support Worker" } ] ``` **Response fields:** | Field | Type | Notes | | - | - | - | | `FirstName` | string | | | `LastName` | string | | | `CarerId` | integer | | | `Area` | string | | | `Area2` | string | | | `Phone1` | string | | | `Phone2` | string | | | `Email1` | string | | | `LinkId` | integer | | | `ComplianceId` | integer | | | `Required` | integer | 0/1 | | `StartDate` | string | Date | | `AlertDate` | string | Date | | `ExpiryDate` | string | Date | | `Note` | string | | | `FormId` | integer | -1 if none | | `Competent` | integer | 0/1 | | `Completed` | integer | 0/1 | | `Historic` | integer | 0/1 | | `Status` | string | | | `_CreateUser` | string | Email | | `_CreateTime` | string | Date | | `Description` | string | | | `ExpiryDays` | integer | | | `WarningDays` | integer | | | `Mandatory` | integer | 0/1 | | `NoStartDate` | integer | 0/1 | | `NoExpiryDate` | integer | 0/1 | | `vis_sw_mob` | integer | 0/1 | | `ExternalId` | string | | | `AltId` | string | | | `Role` | string | | *** ### POST /worker-compliance Adds compliance items to a worker. **Required fields:** `CarerId`, `ComplianceId` **Auto-generated:** `LinkId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "CarerId": 1303, "ComplianceId": 82, "Required": "TRUE", "StartDate": "1991-06-12", "AlertDate": "0000-00-00", "ExpiryDate": "1998-06-14", "Note": "This is mandatory", "Competent": "TRUE", "Completed": "TRUE", "Historic": "FALSE" } ``` | Field | Required | Type | Description | | - | - | - | - | | `CarerId` | **Yes** | integer | Worker ID | | `ComplianceId` | **Yes** | integer | Compliance item template ID | | `Required` | No | string | `"TRUE"` / `"FALSE"` | | `StartDate` | No | string | Format: `YYYY-MM-DD`. Use `"0000-00-00"` for no date | | `AlertDate` | No | string | Format: `YYYY-MM-DD`. Use `"0000-00-00"` for no date | | `ExpiryDate` | No | string | Format: `YYYY-MM-DD` | | `Note` | No | string | | | `Competent` | No | string | `"TRUE"` / `"FALSE"` | | `Completed` | No | string | `"TRUE"` / `"FALSE"` | | `Historic` | No | string | `"TRUE"` / `"FALSE"` | *** ### PUT /worker-compliance Updates a worker's compliance item. **Required fields:** `LinkId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "LinkId": 28004, "Note": "Mid-range game" } ``` # Worker documents Source: https://support.visualcare.com.au/api-reference/workers/documents Retrieve, upload, and update worker document records Any API POST/PUT request won't trigger a workflow. ### GET /documents-workers Retrieves all worker documents (metadata only, no file content or download). **Parameters:** None. Returns all worker documents in a single unpaginated response. **Response:** ```json theme={null} [ { "DocId": 1705, "CarerId": 4472, "DocumentName": "MyCareConnect_User Guide Mob April 2020.pdf", "Note": "", "Protected": 0, "VisibleCarerMobile": 0, "VisibleClientMobile": 0, "CreatedBy": "user@example.com", "CreatedAt": "2020-04-20 10:15:32" } ] ``` **Response fields:** | Field | Type | Notes | | - | - | - | | `DocId` | integer | | | `CarerId` | integer | | | `DocumentName` | string | Original filename | | `Note` | string | | | `Protected` | integer | 0/1 | | `VisibleCarerMobile` | integer | 0/1 | | `VisibleClientMobile` | integer | 0/1 | | `CreatedBy` | string | Email | | `CreatedAt` | string | Datetime | This endpoint returns metadata only. File content is not included and there is no endpoint to download a file by `DocId`. `CategoryId` and file size are not returned. *** ### POST /worker-doc Uploads a document to a worker's profile. **Required fields:** `file`, `CarerId` **Conditionally required:** `CategoryId` (when your organisation mandates a category on upload) **Content-Type:** `multipart/form-data` **Curl example:** ```shell theme={null} curl "https://publicapi.visualcare.com.au/worker-doc" \ -H "User: user-uuid" \ -H "Key: key" \ -H "Secret: secret" \ -F "file=@/path/to/file.pdf" \ -F "CarerId=1303" \ -F "CategoryId=2" \ -F "VisibleCarer=TRUE" \ -F "VisibleClient=FALSE" \ -F "Protect=TRUE" ``` **Form fields:** | Field | Required | Type | Description | | - | - | - | - | | `file` | **Yes** | file | The document to upload | | `CarerId` | **Yes** | integer | Worker ID to attach the document to | | `CategoryId` | Conditional | integer | Document category (from `/category-documents`) | | `VisibleCarer` | No | string | `"TRUE"` / `"FALSE"` - visible to the worker on mobile | | `VisibleClient` | No | string | `"TRUE"` / `"FALSE"` - visible to the client on mobile | | `Protect` | No | string | `"TRUE"` / `"FALSE"` - mark the document as protected | *** ### PUT /worker-doc Updates metadata on an existing worker document. **Required fields:** `LinkId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "LinkId": 11110, "VisibleCarer": "TRUE", "VisibleClient": "FALSE" } ``` # Worker information Source: https://support.visualcare.com.au/api-reference/workers/information Retrieve, create, and update worker records Any API POST/PUT request won't trigger a workflow. ### GET /workers Retrieves all workers. By default, this excludes non-current and deleted workers. **Example:** `GET /workers?includeSkills=TRUE` **Parameters:** | Parameter | Default | Description | | - | - | - | | `carerId` | - | Filter by worker's carer ID. Parameter names are case-sensitive: `CarerId` is silently ignored | | `includeSkills` | FALSE | If `TRUE`, adds a `Skills` array of `{ SkillId, Note }` objects to each worker | | `includeNonCurrent` | FALSE | If `TRUE`, includes non-current workers | | `includeDeleted` | FALSE | If `TRUE`, includes deleted workers | **Response:** ```json theme={null} [ { "CarerId": 781, "CarerCode": "SMIJ01", "FirstName": "Jane", "LastName": "Smith", "PreferredName": "Jane", "Address1": "10 Example Street", "Address2": "", "Suburb": "Adelaide", "State": "SA", "PostCode": "5000", "Longitude": "138.6007456", "Latitude": "-34.9284989", "Email": "worker@example.com", "Phone1": "0400000000", "Phone2": "", "DateOfBirth": "1990-01-01", "StartDate": "2022-01-01", "EndDate": "2023-12-31", "AccountingCode": "AC12345", "WorkerNumber": "WN56789", "Description": "Reliable worker", "Sex": "Male", "Ethnicity": "Caucasian", "Marital": "Single", "Smoker": 1, "PetFriendly": 0, "WorkWithChildren": 0, "Languages": "English", "Area": "Basketball", "Division": "215", "CaseManager": "admin@example.com", "BudgetHours": 2, "Rating": -1, "WorkerType": "Casual", "Role": "2", "AwardCode": "MA000100", "AwardSector": "Casual - Home Care Employees", "PayPoint": 3, "PayrateLevel": 4, "InIsolation": 0, "IsolationStartDate": "2023-01-01", "IsolationEndDate": "2023-02-01", "CovidVaccine1": 0, "CovidVaccine2": 0, "DriversLicense": "Yes - truck", "DriversLicenseNo": "ABC123", "VehicleInsurancePolicy": "POL000001", "VehicleInsuranceType": "Comprehensive", "VehicleRegistration": "ABC123", "WebEnabled": 1, "CarerStatus": "Casual", "ResignReason": "Career change", "NDISClearance": 0, "ScreenCheckAppNo": "APP00001", "ScreenCheckNo": "CHK00001", "Current": 1, "Status": "Active", "CreatedBy": "admin@example.com", "CreatedTime": "2022-10-06 11:06:20", "LastModifiedTime": "2024-08-14 13:36:39", "RoleDescription": "Nurse", "AwardDesc": "Social, Community, Home Care and Disability Services Industry Award", "PreferedWorker": [], "NonPreferedWorker": [], "Groups": "", "PTHoursMon": 0, "PTHoursStartMon": "" } ] ``` **Response fields:** | Field | Type | Notes | | - | - | - | | `CarerId` | integer | | | `CarerCode` | string | | | `FirstName` | string | | | `LastName` | string | | | `PreferredName` | string | | | `Address1` | string | | | `Address2` | string | | | `Suburb` | string | | | `State` | string | | | `PostCode` | string | | | `Longitude` | string | | | `Latitude` | string | | | `Email` | string | | | `Phone1` | string | | | `Phone2` | string | | | `DateOfBirth` | string | Date | | `StartDate` | string | Date | | `EndDate` | string | Date | | `AccountingCode` | string | | | `WorkerNumber` | string | | | `Description` | string | | | `Sex` | string | | | `Ethnicity` | string | | | `Marital` | string | | | `Smoker` | integer | 0/1 | | `PetFriendly` | integer | 0/1 | | `WorkWithChildren` | integer | 0/1 | | `Languages` | string | | | `Area` | string | | | `Division` | string | | | `CaseManager` | string | Email | | `BudgetHours` | integer | | | `Rating` | integer | | | `WorkerType` | string | for example `"Casual"` | | `Role` | string | | | `AwardCode` | string | | | `AwardSector` | string | | | `PayPoint` | integer | | | `PayrateLevel` | integer | | | `InIsolation` | integer | 0/1 | | `IsolationStartDate` | string | Date | | `IsolationEndDate` | string | Date | | `CovidVaccine1` | integer | 0/1 | | `CovidVaccine2` | integer | 0/1 | | `DriversLicense` | string | | | `DriversLicenseNo` | string | | | `VehicleInsurancePolicy` | string | | | `VehicleInsuranceType` | string | | | `VehicleRegistration` | string | | | `WebEnabled` | integer | 0/1 | | `CarerStatus` | string | | | `ResignReason` | string | | | `NDISClearance` | integer | 0/1 | | `ScreenCheckAppNo` | string | | | `ScreenCheckNo` | string | | | `Current` | integer | 0/1 | | `Status` | string | `""` for active records, `"D"` for deleted | | `CreatedBy` | string | Email | | `CreatedTime` | string | Datetime | | `LastModifiedTime` | string | Datetime | | `RoleDescription` | string/null | | | `AwardDesc` | string | | | `PreferedWorker` | array | | | `NonPreferedWorker` | array | | | `Groups` | string | | | `PTHoursMon` through `PTHoursSun` | integer | Part-time hours per weekday | | `PTHoursStartMon` through `PTHoursStartSun` | string | Part-time start time per weekday | | `Skills` | array | Only when `includeSkills=TRUE`. Objects of `{ SkillId, Note }` | *** ### POST /worker Creates a new worker record. **Required fields:** `FirstName`, `LastName` **Auto-generated:** `CarerId` **Side effects:** Creates availability by default and compliance items based on org settings. **Fields that CANNOT be set:** `CarerId`, `CarerCode`, `WebIdHash`, `WebPassword`, `WebLastLogin`, `WebPhoneType`, `WebGPSLong`, `WebGPSLat`, `WebGPSDate`, `WebAvailability`, `WebPushToken`, `Status`, `_LastAppUpdateSeenTime`, `_LastAppUpdateVersion`, `_LastModTime`, `_LastModUser`, `_CreateTime`, `_CreateUser`, `_RecordLocked`, `LinkingDBId` **Content-Type:** `application/json` **Request body:** ```json theme={null} [ { "FirstName": "Michael", "LastName": "Jordan" } ] ``` The POST body is wrapped in an array, unlike the PUT body which is a plain object. *** ### PUT /worker Updates an existing worker record. **Required fields:** `CarerId` (plus at least one field to update, otherwise returns an error) **Fields that CANNOT be edited:** `CarerId`, `CarerCode`, `WebIdHash`, `WebPassword`, `WebLastLogin`, `WebPhoneType`, `WebGPSLong`, `WebGPSLat`, `WebGPSDate`, `WebAvailability`, `WebPushToken`, `_LastAppUpdateSeenTime`, `_LastAppUpdateVersion`, `_LastModTime`, `_LastModUser`, `_CreateTime`, `_CreateUser`, `_RecordLocked`, `LinkingDBId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "CarerId": 1303, "LastName": "Jeffery" } ``` # Leave Source: https://support.visualcare.com.au/api-reference/workers/leave Retrieve worker leave records ### GET /Leave **Parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `LeaveId` | integer | | | `CarerId` | integer | | | `TimeFrom` | string | Datetime | | `TimeTo` | string | Datetime | | `EntireDay` | integer | 0/1 | | `Type` | string | for example `"NOPAY"` | | `Note` | string | | | `Remark` | string | | | `Timestamp` | string | Datetime | | `Status` | string | for example `"APPROVED"` | | `StatusTime` | string | Datetime | | `StatusBy` | string | | | `_CreateUser` | string | Email | | `_CreateTime` | string | Date | # Roles Source: https://support.visualcare.com.au/api-reference/workers/roles Retrieve available worker roles ### GET /worker-roles **Parameters:** None **Response fields:** | Field | Type | | - | - | | `RoleId` | integer | | `Role` | string | | `Status` | string | | `SAHProfessionalType` | string | # Shift lookup Source: https://support.visualcare.com.au/api-reference/workers/shifts Retrieve the next or previous shift for a worker ## Next shift ### GET /nextshift Retrieves the next shift for a specified worker from a given date and time. All three parameters are mandatory and case-sensitive (`CarerId`, `Date` and `Time` are rejected). A missing or malformed parameter returns HTTP 200 with an error object such as `{"status":"error","message":"Error: carerId is required"}`. **Example:** `GET /nextshift?carerId=1096&date=2025-01-01&time=12:00` **Parameters:** | Parameter | Required | Description | | - | - | - | | `carerId` | **Yes** | Integer. Worker ID | | `date` | **Yes** | Format: `YYYY-MM-DD` | | `time` | **Yes** | Format: `HH:MM`, zero-padded (for example `09:05`). Seconds are rejected | **Response:** a single shift object, not an array. ```json theme={null} { "CarerId": 1096, "DateOfService": "2025-01-03", "StartTime": "07:00:00", "FinishTime": "08:00:00", "IsSleepover": "false" } ``` **Response fields:** | Field | Type | Notes | | - | - | - | | `CarerId` | integer | | | `DateOfService` | string | Date | | `StartTime` | string | Time (HH:MM:SS) | | `FinishTime` | string | Time (HH:MM:SS) | | `IsSleepover` | string | `"true"` / `"false"` (string, not boolean) | *** ## Previous shift ### GET /prevshift Retrieves the previous shift for a specified worker from a given date and time. All three parameters are mandatory and case-sensitive (`CarerId`, `Date` and `Time` are rejected). A missing or malformed parameter returns HTTP 200 with an error object such as `{"status":"error","message":"Error: carerId is required"}`. **Example:** `GET /prevshift?carerId=1096&date=2025-01-01&time=12:00` **Parameters:** | Parameter | Required | Description | | - | - | - | | `carerId` | **Yes** | Integer. Worker ID | | `date` | **Yes** | Format: `YYYY-MM-DD` | | `time` | **Yes** | Format: `HH:MM`, zero-padded (for example `09:05`). Seconds are rejected | **Response:** a single shift object, not an array. ```json theme={null} { "CarerId": 1096, "DateOfService": "2025-01-01", "StartTime": "07:00:00", "FinishTime": "08:00:00", "IsSleepover": "false" } ``` **Response fields:** Same as [Next shift](#next-shift). # Skills Source: https://support.visualcare.com.au/api-reference/workers/skills Look up available skills and manage worker skill assignments ## Skills lookup ### GET /skills **Query parameters:** None **Response fields:** | Field | Type | | - | - | | `SkillId` | integer | | `SkillCode` | string | | `Description` | string | | `Status` | string | *** ## Worker skills ### POST /worker-skill Adds a skill to a worker. **Required fields:** `CarerId`, `SkillId` **Auto-generated:** `LinkId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "CarerId": 1303, "SkillId": 52, "Note": "handling" } ``` ### PUT /worker-skill Updates a worker's skill record. **Required fields:** `LinkId` **Content-Type:** `application/json` **Request body:** ```json theme={null} { "LinkId": 11110, "Note": "Driving Layup" } ``` # Training Source: https://support.visualcare.com.au/api-reference/workers/training Look up training item definitions and retrieve worker training records ## Training items lookup ### GET /Training-items **Query parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `TrainingId` | integer | | | `TrainingCode` | string | | | `Description` | string | | | `TemplateId` | string | Numeric string, for example `"98"` | | `Status` | string | Numeric string, for example `"1"` | *** ## Worker training records ### GET /Training **Parameters:** None **Response fields:** | Field | Type | Notes | | - | - | - | | `FirstName` | string | | | `LastName` | string | | | `CarerId` | integer | | | `Area` | string | | | `Area2` | string | | | `Phone1` | string | | | `Phone2` | string | | | `Email1` | string | | | `LinkId` | integer | | | `TrainingCode` | string | | | `Level` | string | for example `"Trained"` | | `TrainingDate` | string | Date | | `ReviewDate` | string | Date | | `ExpiryDate` | string | Date | | `Note` | string | | | `Competent` | integer | 0/1 | | `FormId` | string | Numeric string, `"-1"` when not set | | `DocId` | integer | | | `Status` | string | | | `TrainingId` | integer | | | `Description` | string | | | `TemplateId` | string | Numeric string | | `Role` | string/null | | # Apps and portals Source: https://support.visualcare.com.au/apps/index vWorker, vOnboard, vGo, vAboutMe, vBroker, and vAssessment # Apps and portals Learn about the Visualcare app ecosystem, including apps for workers, clients, families, and brokers. vOnboard and vGo for workers vAboutMe for clients and their families vBroker and vAssessment # vAboutMe Source: https://support.visualcare.com.au/apps/vaboutme Set up and use the vAboutMe mobile app to give clients visibility of their services, funding, and support workers vAboutMe is a mobile app that gives clients and their families convenient access to their services, support workers, NDIS funding (not SAH), and documents. Clients can view their roster, rate sessions, send feedback, request new services, track their budget, and communicate directly with your office, all from their phone. ### What clients can do with vAboutMe * View rostered services, times, and assigned support workers * See photos and backgrounds of assigned support workers * Rate support workers on individual shifts * Send feedback (compliments, complaints, and suggestions) directly to the office * Access important documents * Communicate with vCore users via messaging * Request changes or new services * Receive reminders for upcoming shifts and appointments * View funding levels and budget breakdowns for NDIS only * View and sign off on quotes * Send expenses and receipts for processing ## Setting up vAboutMe ### Enabling client access in vCore To give clients access to the vAboutMe app, enable them within their client profile on vCore. For detailed instructions, see [vAboutMe app access](/client-management/vaboutme-app-access). ### App installation The client needs one of the following operating systems installed on their device: | Platform | Minimum version | | - | - | | Android | 10 or above | | iOS | iOS 11 or above | Download vAboutMe from the App Store (for iPhone) or Google Play (for Android). Search for "vAboutMe" and select **Install**. vAboutMe app store listing ### Logging in Open vAboutMe by tapping the icon on the phone home screen. Once logged in, the app stays logged in. vAboutMe login screen ## Home page The home page displays an overview of the client's upcoming services and quick-access features. vAboutMe home page ## Menu The menu gives clients access to all available features. The options visible here depend on your vAboutMe settings in vCore. vAboutMe menu ### Home This button returns to the home page. Home button ### My roster Clients can view their upcoming shifts and scroll to select different days. My Roster screen **New shift notifications:** When a new shift is created for a client, they receive a push notification on their phone. Tapping the notification shows the shift details. New shift notification When a client taps on a rostered shift, they have three options: **View Shift Note**, **View Worker Notes**, and **Request Change**. These options depend on the vAboutMe mobile app settings in vCore. Shift detail options When a service has been completed, clients can give feedback by tapping **Rate this shift**. This allows them to give a star rating and add comments, which are submitted to the office. Rate this shift button Star rating and comments form Clients can view shift notes and worker notes once a shift has been completed. This feature is controlled in vCore under **Settings** → **Mobile App** → **vAboutMe** via the **Show worker notes** and **Show shift notes** options. View notes screen ### My documents Clients can view any documents that have been uploaded to their profile and set as visible to the client. My Documents menu item Documents list ### My service summary This shows clients their service summary for the past week. It's based on completed or confirmed shifts and displays the total dollar amount charged for each service, if financial information is set to show. My Service Summary menu item Service summary detail ### My expenses Clients can add expenses and view the list of expenses added by workers. My Expenses menu item Expenses list ### My quotes Here clients can view any quotes that have been marked as visible to them. They can click to view the full quote and then approve and sign it. My Quotes menu item Quote detail view Quote approval and signature ### My forms Clients can view any forms that have been created in vCore. These forms can be filled in and signed from the app. My Forms menu item Form detail ### Support workers If preferred workers are set up in the client profile, they appear here. The support worker profile includes their language, skills, compliance, and training. Support Workers menu item Support worker profile detail ### My profile Clients can view their profile including their profile picture, email address, contact number, address, and billing address. My Profile menu item Profile detail ### Call provider Clients can call the office number set up in general settings directly from the app. Call Provider button ### Logout To log out of the vAboutMe app, select the **Logout** button at the bottom of the menu tab. Logout button ## Budget Clients can tap on their budget to view a breakdown of their budget versus spend. Budget overview screen You can hide financial information from the vAboutMe app in vCore under **Settings** → **Mobile App** → **vAboutMe** → **Show Finance information**. Show Financial Information setting ## Options menu Select the options menu to access private messages, group messages, feedback, weather display preferences, and dark mode. Options menu ### Feedback Clients can send a thank you or compliment, complaint, or suggestion/feedback to the office. Select from the tick box, fill in the necessary information with any comments, and tap **Send Feedback**. Feedback form ## Requesting new services Clients can request a new service directly from the vAboutMe home page by tapping **Request new service**. Request new service button on home page Choose the start and finish time for the shift. Start and finish time selection Select the service type required. Use the **Note for booking** window to enter any details about the shift. Service type and booking note If the client wants this to be a recurring shift, toggle **Recurring shift** on. Recurring shift toggle Tap **Submit** to send the shift request to the office. The shift appears in the client roster, and the office needs to assign a worker or cancel/edit the shift. Submit button ## vAboutMe settings in vCore vAboutMe settings are managed in vCore under **Settings** → **Mobile App** → **vAboutMe**. Settings changed here apply to all vAboutMe users. You can also individually adjust settings in the client profile, or in a contact profile linked to a client and enabled for vAboutMe. vAboutMe settings in vCore | Setting | Description | | - | - | | **Show Finance information** | Show or hide a client's financial information within the app | | **Allow add shift directly** | Allows a client to add a shift via the app, which feeds through to the client roster and unallocated shifts page | | **Show worker notes** | Allows clients to view notes submitted by workers during shifts | | **Show shift notes** | Allows clients to view public shift notes added by office users when rostering | ### Show/hide features You can toggle the following features on or off for clients: **Show Features** * Request New Service * View Budget Details * Access My Roster * Access My Documents * Access My Service Summary * Access My Expenses * Add/Edit My Expenses * Access My Quotes * Access My Forms * Access My Leave Requests * Access Support Workers * Access My Profile * Access Call Provider * Access Messaging * Access Feedback * Ability To Sign **Show Sections** * Show Worker's Compliance * Show Worker's Skill * Show Worker's Training **Show Functions** * Ability to Rate Worker ### Roster display settings You can customise how many days of future and past shifts appear on the home and roster pages by entering the number of days in the relevant fields. Roster display settings ## Running into issues? See [General troubleshooting](/troubleshooting/general) for common errors and fixes. ## Related articles Enabling vAboutMe access in client profiles Setting up a new client in vCore The mobile app for office users managing shifts on the go The worker onboarding portal # vAssessment Source: https://support.visualcare.com.au/apps/vassessment Set up and use the vAssessment portal for workers to conduct client assessments, manage rosters, and create quotes vAssessment is a web-based portal that allows workers to access client information, conduct assessments, manage rosters, create templates, and generate quotes. Workers log in with their Visualcare credentials and can view and edit client details, with changes flowing directly back to vCore. ## Setting up vAssessment access A web username login is required for the worker to access the vAssessment portal. This is set up on the worker profile in vCore. Open the worker profile in vCore. The worker's email address can be used as the web username. Ensure **Web Enabled** is ticked. These login details are the same as those used for the vWorker mobile app. Worker profile showing Web Enabled and web username fields The vAssessment portal is accessed at [assessment.visualcare.com.au](https://assessment.visualcare.com.au). ## Signing in Workers sign into the vAssessment portal using: | Field | Details | | - | - | | **Provider name** | Provided to the worker, or included in the "Send login details" email | | **Username** | The web username or worker email address set up in vCore | | **Password** | On first login, the worker is prompted to create a password. If they forget their password, it can be reset on the worker profile in vCore | vAssessment sign-in screen ## Home page The home page displays a list of the worker's clients. vAssessment home page showing client list Use the **Search for Clients** field to find a specific client. Search for Clients field Under the **Manage** drop-down, you can select from the following options: * **Client Details** - view and edit client information * **Roster** - view and manage the client's roster * **Templates** - access assessment templates * **Quote** - create and manage quotes * **HCP Quote** - create and manage Home Care Package quotes Manage drop-down with options ## Navigation Once you're in one of the sections listed above, you can switch between the other sections for the same client using the tabs at the top of the screen. Navigation tabs at top of screen ## Client details Under the **Client Details** tab, you can view and edit client information. When you save this information, it's sent to the Visualcare client profile in vCore. Client Details tab ## Running into issues? See [General troubleshooting](/troubleshooting/general) for common errors and fixes. ## Related articles The worker onboarding portal The broker portal for managing subcontracted shifts Setting up a new worker in vCore The mobile app for office users managing shifts on the go # vBroker Source: https://support.visualcare.com.au/apps/vbroker Set up and use the vBroker portal to manage subcontracted shifts and broker workers vBroker is a web-based portal that allows external brokers (subcontracted service providers) to manage shifts assigned to them by your organisation. Brokers can view assigned shifts, allocate their own workers, complete shifts, log incidents, and communicate with your office, all without needing direct access to vCore. ## Setting up vBroker ### Creating the broker profile in vCore Before a broker can access the portal, you need to set up their worker profile in vCore. Set up the worker/broker profile with the following required fields: * First and last name * Tick **Web Enabled** and add a username * Save the profile and send login details to the worker/provider The first time they log in, they'll be prompted to create a password. Worker profile setup with Web Enabled ticked In the worker profile, go to the **Finance** tab and set the worker type to **Broker**. Finance tab showing worker type set to Broker ### Portal settings in vCore vBroker settings are managed in vCore under **Settings** → **Portals** → **vBroker**. The **Broker Alert** setting enables email notifications to be sent to one or more email addresses for the following events: * If **Unable to Fill** is selected on a shift in vBroker, an email notification is sent * If an incident has been lodged for any client through the portal, an email notification is sent (ensure the "Email case manager/office when workers submit an incident form" notification is also set up under **Settings** → **Mobile App** → **Email**) To add multiple email addresses, use a semicolon (;) to separate each email address and click **Save**. vBroker portal settings showing Broker Alert email field If no email is set up in the Broker Alert field, email alerts go to the case manager assigned in the client profile in vCore. If there is no case manager assigned, alerts are sent to the company email set up in **Settings** → **Company Info**. ## Logging in to vBroker Brokers access the portal at [broker.visualcare.com.au](https://broker.visualcare.com.au). To log in, brokers need: | Field | Details | | - | - | | **Provider** | The same company name used for vWorker or vOnboard | | **Username** | The username set up in their vCore worker profile (for example, dale.april) | | **Password** | Left blank on first login, which prompts the broker to create a password | vBroker login screen On first login, the broker enters without a password and the next screen prompts them to set up a new password. Set password screen ## Home page When the broker logs in, they see all shifts that have been assigned to them. The date range filter allows them to view shifts within a specific period. vBroker home page showing assigned shifts The home page provides the following actions for each shift: This is where the broker selects the worker who will attend the shift. A list of their worker profiles appears. Highlight the worker and select **Assign Worker**. Assign worker dialog The broker can assign multiple shifts at once by selecting the shifts from the left-hand side and clicking **Bulk Assign**. Bulk assign selection Once the service has passed, the broker clicks **Complete Shift** and adds completion notes. This confirms the service and flows through to the vCore database. Completing shifts from vBroker confirms services in timesheets. Any completion notes or incidents flow to vCore under the relevant App Notes KPIs and save to the client profile. Complete shift dialog The broker can view relevant client details including any alerts under the **View** button. This includes client contact information such as address, date of birth, phone, case managers, and any details in the alert fields with the green mobile icon. View client details If an incident occurred during the shift, the broker clicks **Add** and fills out the incident form. Once the form is complete, they can click **View** to review it. Add incident form If the broker cannot fill the shift, clicking this button sends an email alert to the email address set up in vCore. Unable to fill button This status means the shift is no longer needed. The shift has been cancelled or put on leave in vCore, so the broker does not need to cover it. Shift unavailable status ## Workers tab Brokers manage their own worker profiles within the vBroker portal. Select **Worker** at the top of the screen and click **Add Worker**. Workers tab with Add Worker button Enter a first and last name to set up the new worker profile. Once the worker is set up, double-click the worker's name in the table to open their complete profile, which can be filled in at any time. You can also upload documents relevant to the worker under the **Documents** tab. Worker profile details ## Messaging Brokers can send instant messages to vCore through the message icon in the top right-hand corner. Message icon for instant messaging ## Notifications The email set up in vCore under **Settings** → **Portals** → **vBroker** receives email alerts when: * A shift has not been assigned within 24 hours of the shift start time (emailed every hour) * A shift is marked as **Unassigned** within 24 hours of the shift and is included in the hourly unassigned email alert * An incident has been lodged for any client through the portal (ensure the notification is set up correctly under **Settings** → **Mobile App**) Notification email settings If no email is set up in the vBroker settings, email alerts go to the case manager assigned in the client profile in vCore. If there is no case manager assigned to the client profile, alerts are sent to the company email set up in **Settings** → **Company Info**. ## Running into issues? See [General troubleshooting](/troubleshooting/general) for common errors and fixes. ## Related articles The worker onboarding portal The assessment portal for workers conducting client assessments The mobile app for office users managing shifts on the go Setting up a new worker in vCore # vGo Source: https://support.visualcare.com.au/apps/vgo Use the vGo mobile app to manage shifts, clients, and rosters while away from vCore vGo is a mobile app designed for office users who need to manage shifts, clients, and rosters while away from their computer. It gives coordinators and managers on-the-go access to key vCore functions, including viewing and editing shifts, managing client information, communicating with workers and clients, and reviewing incidents. ### What you can do with vGo * View, create, edit, and delete rostered shifts * Check shift status (not started, started, or completed) * Mark a client shift as on leave * Change or unassign workers on shifts * Add or edit roster notes and roster categories * View basic client profile information including contacts * Add a new client, create agreements, and set up rosters * View and edit shifts in client, worker, and location rosters * View worker contact details and rosters * Access unallocated shifts and assign workers * Review incident forms submitted by workers, and mark incidents as read or closed * Communicate with workers (on vWorker) or clients (on vAboutMe) using private or group messages * Set permissions from vCore for certain user groups ## Setting up vGo Download vGo from the App Store (for iPhone) or Google Play (for Android). vGo app download Open vGo by tapping the icon on your phone. Log in using your office username and password, the same details you use to log into vCore. vGo login screen ## Home page When you log in, the home page displays the weather forecast for your location, all shifts for the day, and the menu and refresh buttons. vGo home page with weather and daily shifts ## Menu The menu in the top left-hand corner gives you access to additional features beyond the home page. vGo menu ## Clients Tap **Clients** from the menu to access the list of clients. Use the search bar at the top of the page to quickly find a specific client. Only current clients appear in vGo. Client list in vGo ### Adding a client To add a new client, go to the client list from the menu and tap the icon in the top right-hand corner. Fill in all the required details and tap **Create**. Add new client form - step one Add new client form - step two ### Viewing a client Select a client to view their details. In the bottom section of the page, you can access **Profile**, **Contacts**, and **Roster**. Client details view with Profile, Contacts and Roster tabs Within the client profile, you can tap phone numbers to call the client, tap the email to start writing an email, and tap the address to open the pinpoint location in maps. Each of these opens the relevant app on your phone. Client contact actions ## Rosters To edit a client roster, tap on the client and select **View shift details**. Here you can change the date, time, service, and worker on the shift. You can also delete the shift and see the status indicating whether the shift has been started or completed. Edit shift details screen The worker list shows all workers regardless of availability. Any changes to a shift assigned to a worker send a notification to their vWorker app. ### Adding a new client roster To add a new client roster: Go to the client list from the menu, tap the client profile, then select the **Roster** tab. Tap the three dots in the top right-hand corner and select **Rosters**. Roster tab with three-dot menu Roster option in menu Tap the **+** icon in the top right-hand corner to add a new roster. Once you confirm, the new roster is created for the client. Add new roster screen ## Agreements You can add new client agreements directly from vGo. Go to the client list from the menu, tap the client profile, then select the **Roster** tab. Tap the three dots in the top right-hand corner and select **Agreements**. Roster tab three-dot menu Agreements option in menu Tap the **+** icon to add a new agreement. Enter the agreement details, add services, and tap **Create**. New agreement form Agreement services and create button ## Leave To add a client cancellation, select **Mark this shift on leave**. Here you can add the leave type, leave code, cancellation charge percentage, any pay hours, and notes. Mark shift on leave screen If any charge or pay is required for the cancelled or leave shift, you need to select a leave code. No code means there is no timesheet line item for this shift. ## Running into issues? See [General troubleshooting](/troubleshooting/general) for common errors and fixes. ## Related articles The client-facing app for rosters, budgets, and communication The worker onboarding portal The broker portal for managing subcontracted shifts The assessment portal for workers conducting client assessments # vOnboard Source: https://support.visualcare.com.au/apps/vonboard Set up and use the vOnboard portal to onboard new workers into Visualcare vOnboard is a web-based portal that allows new workers to enter their personal details, upload documents, and complete onboarding tasks before they start work. Rather than collecting paperwork manually, you send workers a login link and they fill in everything themselves, with the data flowing straight into vCore. ## Setting up vOnboard Before a worker can access the vOnboard portal, you need to set up their profile in vCore. The following fields are required: * First and last name * Email * Tick **Web Enabled** and add a username * Tick **vOnboard Portal** Save the worker profile and send the login details to your worker. The first time they log in, they'll be prompted to create a password. Worker profile setup in vCore showing web enabled and username fields To receive email notifications when new workers update their profile, assign a case manager to the worker in vCore. ### Portal settings in vCore You can customise the vOnboard portal from **Settings** → **Portals** → **Onboarding Portal** in vCore. The following options are available: | Setting | Description | | - | - | | **Hide "TFN Declaration" link under Documents tab** | Tick to hide the TFN Declaration document from the portal, or untick to show it | | **Hide "Super Standard Choice Form" link under Documents tab** | Tick to hide the Super Standard Choice Form from the portal, or untick to show it | | **Upload Training Document** | Turn on or off the option for workers to upload training documents from the portal | Once you've made changes, click **Save**. Portal settings for vOnboard in vCore ## Logging in to vOnboard Workers access the portal at [onboard.visualcare.com.au](https://onboard.visualcare.com.au). To log in, workers need: | Field | Details | | - | - | | **Provider** | The same company name used for vWorker | | **Username** | The username set up in their vCore worker profile (for example, donna.summers) | | **Password** | Left blank on first login, which prompts the worker to create a password | vOnboard login screen ## Entering details Once logged in, workers can start entering their personal information. If they don't have time to complete everything in one session, they can save their progress and come back later. If they try to close the page without saving, the portal automatically prompts them to save. Worker details entry screen **Moving between pages:** Click on the tabs to move through the different sections. Tab navigation in vOnboard **Free text fields:** Click in the text box and type your information. Free text field example **Tick boxes:** Click in the box to add a tick (for example, "Do you smoke?"). Tick box example **Drop-down lists:** Click the drop-down arrow to access lists (for example, the training list). Drop-down list example **Date fields:** Click on the date box, select the month, year, and day. The box closes automatically when you select the day. Date picker example ## Uploading documents Workers can upload and remove documents as training items from the **Training** tab in the portal. Training tab document upload This feature is controlled by the **Upload Training Document** tick box in vCore under **Settings** → **Portals**. By default, the feature is disabled. Upload Training Document setting in vCore ## Mandatory fields To require responses before a worker submits their onboarding (for example, car insurance details), review the mandatory field settings under **Settings** → **Minimum Data Set** → **Workers**. Fields marked as mandatory there must be completed in the portal before submission. ## Adding forms to the portal To make a form available to workers in the vOnboard portal: 1. Navigate to **Maintenance** → **Templates** 2. Click **Edit** on the template and adjust the required settings 3. Tick the onboarding portal option 4. Save Workers need to log out of the portal and log back in to see new forms after the setting is updated. ## After submission Once a worker submits their vOnboard portal, all completed information flows directly into their Visualcare worker profile for review and approval. The case manager assigned to the worker in vCore is automatically notified by email. The information workers complete in the portal includes: * Personal and contact details * Certificates for training and qualifications * Skills selection and confirmation * Compliance items * Availability * A final declaration review and sign-off ## Running into issues? See [General troubleshooting](/troubleshooting/general) for common errors and fixes. ## Related articles Enabling and managing worker portal and app access Setting up a new worker in vCore The broker portal for managing subcontracted shifts The assessment portal for workers conducting client assessments # vWorker: Access for workers Source: https://support.visualcare.com.au/apps/vworker-access Step-by-step guide to setting up and sending vWorker app login details to workers Before workers can use the vWorker app to clock in and out of shifts, they need login credentials. You can send login details individually or in bulk from vCore. ## What you'll need * Workers set up in vCore with an email address, username and **Web enabled** ticked on their profile * Workers with the vWorker app downloaded on their phone ## Sending login details in bulk Go to **Operations** → **Email Worker Login**. Email Worker Login page showing the list of workers Workers highlighted in pink cannot be sent their login details. This happens when: * There is no email on their worker profile * There is no username on their worker profile * They are not **Web enabled** on their worker profile Update these details on the worker profile before trying again. Use the tick box at the top left to select all workers, or tick individual workers who need their logins sent. Worker selection with tick boxes and Email Worker Login button Click the **Email Worker Login** button. A confirmation message appears, highlighting any workers who are missing an email address, username or are not web enabled. Click **Confirm** to send the email to the remaining eligible workers. Confirmation dialog showing worker eligibility status If a worker logs out of the vWorker app, they will not receive shift notifications. Workers need to stay logged in to get notifications about upcoming shifts. If a worker's phone is lost or stolen, they need to alert the office immediately so their access can be disconnected from vCore. ## Preventing screenshots in the app You can stop workers from taking screenshots within the vWorker app: 1. Go to **Settings** → **Mobile App** → **General** 2. Find the **Prevent User taking Screenshot** setting 3. Set it to **Yes** to block screenshots, or **No** to allow them 4. Click **Save** If this setting is set to **No** and a worker takes a screenshot, Visualcare sends a notification email to the address listed in **Settings** → **Company Info** → **Email**. ## Client health information in the app Client health information entered in vCore flows through to the vWorker app. To update a client's health details, go to the client's profile in vCore, open the **Details** tab and enter the relevant information. Workers see this information under the client profile section in vWorker. ## Running into issues? See [Timesheet troubleshooting](/troubleshooting/timesheet-issues) for common errors and fixes. ## Related articles How workers log in to the vWorker app for the first time How workers start and complete shifts through the app Overview of all features available in the vWorker app menu # vWorker: Clocking in and out Source: https://support.visualcare.com.au/apps/vworker-clocking-in-and-out How the vWorker app handles shift start, completion, and offline mode for your workers The vWorker app lets workers clock in and out of shifts from their mobile device. When a shift is completed through the app, the timesheet is automatically confirmed in vCore. This page covers how the shift lifecycle works so you know what to expect from your workers and how to configure the experience. ## Worker home page When workers open the vWorker app, the home page shows: * Weather forecast for their location * List of shifts scheduled for the day * Distance between shifts * Access to the menu, refresh button and fortnightly roster vWorker home page showing today's shifts Workers can tap the calendar icon at the bottom right of the home page to switch to a fortnightly roster view. ## Shift details Workers tap on a shift to view full details including client information, times and available actions. Shift detail screens showing client information, times and actions Shift details continued Shift details with start button ### Goals Workers view client goals within the shift. Tapping a goal opens it so the worker adds a note or uploads an image, taken with the phone camera or chosen from the gallery. Client goal opened within a shift showing note and image options ### Map Tapping the client address under the shift details opens directions to the address in Google Maps. Client address opening directions in Google Maps ### Checklist If there is a checklist for the client shift, the checklist and all its items appear on the shift home page. Checklist items shown on the shift home page The worker taps an item, taps **Completed** to add a tick, enters any notes if needed, then saves. This information flows to the office for review in vCore. Marking a checklist item as completed with notes ## Starting a shift When the worker taps **Start Shift**, the app records the time and location. If your organisation uses start forms, the worker completes the form before continuing with the shift. ## Completing a shift When the shift is finished, the worker taps **Complete Shift**. Complete Shift button The app prompts the worker to enter details about the shift, including any changes to the shift, travel notes and completion notes. Shift completion screens Shift completion details continued If you've configured a completion form, the worker fills it in at this point. Completion forms can be linked to client divisions so different client types get different forms. Link completion forms to client divisions in **Maintenance** → **Divisions** in vCore. Select the form template from the **Template** drop-down and click **Save**. In vWorker, the specified completion form opens when the worker completes the shift. Completion form linked to a client division If no division-level form is set, the system uses the completion form configured in **Maintenance** → **Templates** (if any). If no completion form is set up at all, the worker can complete the shift without filling in a form. Workers have the option to discard the completion form and fill it in later under **Menu** → **Forms** in vWorker. A dialog appears if the completion form is not submitted within 12 hours. Workers can add notes after the shift has been completed by going back into the shift and clicking **Add Notes**. Notes can be added until midnight on the day of the shift. ## Kilometres on location shifts Location shifts are rostered to a site rather than an individual client. Workers can record kilometres against a specific client at that location during the shift by going to **Profile** from the menu, finding the client in the list, and tapping **Add KM**. **Correcting kilometres applied to the wrong place:** If kilometres were accidentally recorded against the location instead of the client, fix them in vCore: 1. Go to **Timesheets** → **Timesheets - Location** 2. Select the **Clients** or **Workers** tab 3. Scroll to the **Timesheets** section 4. Find the entry and edit the **KMs** column 5. Click **Save Changes** ## Enabling adhoc shifts Adhoc shifts let workers create unscheduled shifts in the app. To enable this: 1. Open the worker's profile in vCore and go to the **Finance** tab 2. Under **Worker Type**, select **Contractor** or **Service Provider** 3. Go to **Settings** → **Mobile App** and select the relevant adhoc shift option 4. Click **Save** The worker needs to log out of vWorker and log back in for the change to take effect. If the worker can't see a client in the client select list when adding an adhoc shift, the shift's service (**Master Service Code**) isn't on that client's agreement, or the client's **Status** isn't set to **Current**. See [Cannot add a client to a location roster shift](/troubleshooting/rostering-issues#issue-cannot-add-a-client-to-a-location-roster-shift) for the fix. ## Offline mode Workers can use vWorker in offline mode when they have no internet access. In offline mode, workers can: * Review client details (internet access is needed to update this information before going offline) * Read client detail notes and shift alert notes * Start a shift * Complete a shift and add completion notes * Complete checklists Offline mode indicator showing orange bar at the top of the screen Once back online, the worker taps the **V logo** at the top of the page (with a yellow exclamation mark) and selects **Upload all data**. This uploads any shift completion details and changes made while offline. Upload all data option after returning online Most vWorker features are not available in offline mode. Only the features listed above work without an internet connection. ## Running into issues? See [Timesheet troubleshooting](/troubleshooting/timesheet-issues) for common errors and fixes. ## Related articles Download and log in to the vWorker app How workers add notes, photos and view client information during shifts Manually confirm timesheets when workers haven't used the app Overview of all features available in the vWorker app menu How workers view and manage location roster shifts in the app # vWorker: Location roster shifts Source: https://support.visualcare.com.au/apps/vworker-location-roster-shifts How workers view and manage location roster shifts in the vWorker app Location roster shifts are rostered to a site, such as a group program or a Supported Independent Living (SIL) house, rather than to an individual client. This page covers how workers view and manage these shifts in the vWorker app. ## Viewing location shift details To view the details of a location shift, the worker taps the shift. Location shift on the vWorker home page Location shift details ## Adding notes and incidents To add a note against the location, the worker taps the **More** button within the shift. To enter notes or lodge an incident against a specific client attending the location, the worker taps the **Client** tab and selects the client's name. Client tab within a location shift Selecting a client to add notes or lodge an incident Clients linked to the location appear in vWorker even when they are not assigned to a shift in the location roster, for example a client living in a SIL house. ## Recording kilometres on a location shift Workers record kilometres against either a specific client at the location or the location itself. After starting the location shift: * **Against a client:** tap **Profile** to show the list of clients rostered at the location, then tap **Add KM** for the relevant client * **Against the location:** add the kilometres directly on the location profile The choice affects how the entry appears in vCore under **Timesheets** → **Data Export**: | Applied to | Client column shows | Worker column shows | | - | - | - | | Client profile | The client's name | The location profile name | | Location profile | The location profile name | The worker assigned to the location roster | If a worker applies kilometres to the location when they meant a specific client, correct the entry in vCore under **Timesheets** → **Timesheets - Location**. See [Kilometres on location shifts](/apps/vworker-clocking-in-and-out#kilometres-on-location-shifts) for the steps. ## Seeing other workers on the shift If enabled by the office, workers see the other workers assigned to the same location shift. Other workers assigned to the same location shift ## Running into issues? See [Timesheet troubleshooting](/troubleshooting/timesheet-issues) for common errors and fixes. ## Related articles How workers start and complete shifts through the app View location roster timesheets in vCore Overview of all features available in the vWorker app menu # vWorker: Logging in Source: https://support.visualcare.com.au/apps/vworker-logging-in Step-by-step guide for workers to download, log in and configure the vWorker app This guide covers how workers download the vWorker app, log in with their credentials and configure the app settings they need. ## System requirements | Platform | Minimum version | | - | - | | Android | 10 or above | | iOS | iOS 11 or above | ## Instructions Download **vWorker** from the **App Store** (for iPhone) or **Google Play** (for Android). Open vWorker by tapping the app icon. Enter the login details that were emailed to the worker. vWorker login screen Once logged in, the worker needs to stay logged in to receive shift notifications. Logging out of the app stops all notifications. When the app opens for the first time, select **Allow** when asked for notification and location permissions. These permissions can be changed later in the phone's settings under **Notifications** → **vWorker**. Notification and location permission prompts Some organisations require location services to be turned on at all times. Workers should check with their organisation's policy and procedures. vWorker supports both dark and light mode. To change the display mode, go to the phone's **Display and Brightness** settings. The display mode can also be set to switch automatically based on daylight hours or a custom schedule. Dark and light mode display settings For security and privacy, workers should have a password or screen lock on their phone. If a worker's phone is lost or stolen, they need to alert the office immediately so their access can be disconnected. ## Switching between companies Workers who work for more than one organisation can switch between company accounts in vWorker without logging out. The worker needs to have logged in to each company individually at least once before switching between them. Tap **Menu** → **Switch Company**. Tap the **pencil** icon, enter the name of the other company, then toggle **Add company directly** on. Enter the username and password for the other company account, then tap **Send**. If the worker doesn't know their password for the other company, they'll need to contact that organisation's office to have it reset. ## vWorker mobile App video