Total Access Docs
Openapi

List available actions

Returns metadata about the Public Data API including available actions, required scopes, and rate limits.

GET
/api/v1/public/data

Returns metadata about the Public Data API including available actions, required scopes, and rate limits.

Header Parameters

X-API-Version?string

Date-based minor version negotiation (e.g. 2026-07-01). If omitted, the latest version is used.

Match^\d{4}-\d{2}-\d{2}$

Response Body

application/json

application/json

curl -X GET "https://example.com/api/v1/public/data"
{  "success": true,  "message": "string",  "version": "string",  "authentication": {    "method": "string",    "header": "string",    "description": "string"  },  "rate_limits": {    "authenticated": "string",    "unauthenticated": "string"  },  "available_actions": [    {      "action": "string",      "description": "string",      "required_scope": "string",      "params": {        "property1": "string",        "property2": "string"      }    }  ]}
{  "success": false,  "error": {    "code": "RATE_LIMITED",    "message": "Rate limit exceeded. Maximum 100 requests per minute.",    "request_id": "req_abc123",    "documentation_url": "https://dev-developer.totalaccess.co.za/docs/api-reference/errors#rate_limited"  }}

Get OpenAPI specification (YAML) GET

Returns the OpenAPI 3.1 specification as YAML.

Execute a Public Data API action POST

Single endpoint for all Public Data API operations. The `action` field in the request body determines which operation to execute. ### Read Actions | Action | Scope | Description | |---|---|---| | `get-active-users` | `users:read` | Get all active users | | `get-employees` | `employees:read` | Get employees with filters | | `get-user-memberships` | `users:read` | Get user-client memberships | | `get-work-item` | `work_items:read` | Get a single work item | | `list-work-items` | `work_items:read` | List work items with filters | | `get-work-item-relationships` | `work_items:read` | Get work item relationships | | `get-work-item-attachments` | `work_items:read` | Get work item attachments | | `get-work-item-photos` | `work_items:read` | Get work item photos | | `get-work-item-comments` | `work_items:read` | Get work item comments | | `get-work-item-time-entries` | `work_items:read` | Get work item time entries | | `get-work-item-assignees` | `work_items:read` | Get work item assignees | | `get-work-item-analytics` | `work_items:read` | Get work item analytics | | `get-work-item-sla` | `work_items:read` | Get work item SLA status | | `get-attendance-logs` | `attendance:read` | Get clock in/out records | | `get-shift-templates` | `shifts:read` | Get shift templates | | `get-shift-roster` | `roster:read` | Get scheduled shifts | | `get-locations` | `locations:read` | Get locations and geofences | | `get-timesheets` | `timesheets:read` | Get timesheet records | | `export-timesheets` | `timesheets:read` | Export timesheets (Sage/Payspace/SimplePay/Pastel) | | `get-overtime-records` | `overtime:read` | Get overtime records | | `list-threads` | `threads:read` | List conversation threads | | `get-job-thread` | `threads:read` | Get a job thread | | `get-job-threads` | `threads:read` | List job threads | | `get-team-thread` | `threads:read` | Get a team thread | | `get-team-threads` | `threads:read` | List team threads | | `get-thread-messages` | `threads:read` | Get messages in a thread | | `list-contacts` | `contacts:read` | List contacts | | `get-contact` | `contacts:read` | Get a single contact | | `list-contact-people` | `contacts:read` | List contact people | | `get-contact-person` | `contacts:read` | Get a contact person | | `search-contact-people` | `contacts:read` | Search contact people | | `get-contact-person-locations` | `contacts:read` | Get contact person locations | | `list-contact-locations` | `contacts:read` | List contact locations | | `get-contact-location` | `contacts:read` | Get a contact location | | `get-contact-location-people` | `contacts:read` | Get people at a location | | `list-contact-documents` | `contacts:read` | List contact documents | | `search-contacts` | `contacts:read` | Search contacts | | `search-contact-locations` | `contacts:read` | Search contact locations | | `list-recurring-jobs` | `recurring:write` or `work_items:read` | List recurring jobs | | `get-recurring-job` | `recurring:write` or `work_items:read` | Get a recurring job | ### Write Actions | Action | Scope | Description | |---|---|---| | `send-thread-message` | `threads:send_message` or `threads:write` | Send a message to a thread | | `create-work-item` | `work_items:write` | Create a new work item | | `create-appointment` | `appointments:write` or `work_items:write` | Create an appointment | | `create-comment` | `comments:write` or `work_items:write` | Add a comment to a work item | | `create-recurring-job` | `recurring:write` or `work_items:write` | Create a recurring job | | `update-recurring-job` | `recurring:write` or `work_items:write` | Update a recurring job | | `pause-recurring-job` | `recurring:write` or `work_items:write` | Pause a recurring job | | `resume-recurring-job` | `recurring:write` or `work_items:write` | Resume a recurring job | | `generate-recurring-job` | `recurring:write` or `work_items:write` | Generate instances from a recurring job | | `generate-job-card-pdf` | `work_items:read` | Generate a job card PDF | | `generate-attendance-card-pdf` | `work_items:read` | Generate an attendance card PDF | | `generate-finance-document-pdf` | `invoices:read` or `bills:read` or `quotes:read` | Generate a PDF for a finance document (invoice, quote, credit note, etc.) | | `convert-finance-document` | `invoices:write` or `bills:write` or `quotes:write` | Convert one finance document type to another (e.g. quote → invoice) | ### Dynamic Per-Type Actions For each work item type defined in the system (e.g. `job`, `invoice`, `task`), a dynamic `list-<type>` action is generated that maps to `list-work-items` with the `item_type` preset.