The Day.io API allows external systems to integrate with the platform to query, create, and update information related to employees, punches, Requests, Schedules, and the company's organizational structure.
The main resources available include:
- Employees;
- Punches;
- Requests;
- Positions;
- Departments;
- Cost centers;
- Subsidiaries;
- Clients;
- Teams;
- Locations;
- Holiday Groups;
- Payment Groups;
- Pay Policies;
- Schedules.
Each operation is available through an endpoint. Before developing the integration, check the technical documentation for required fields, accepted formats, and updated examples.
Important: the API allows you to query punch records and Request data. However, it does not generate the ready-to-use files available under Reports, such as the Payroll Report, Summary, Clock Ins Report, or consolidated Request reports.
How to access the API credentials?
To use the API:
- Access the Admin environment;
- Open Integrations and Apps;
- Select Learn about our API;
- View the application credentials;
- Copy the identifier and secret only when necessary.
Credentials should be restricted to the people responsible for developing and maintaining the integration.
How does authentication work?
The API uses a token to authenticate operations.
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/token |
Generates the access token using the application credentials. |
After generating the token, send it in protected requests using the header:
Authorization: Bearer TOKENThe application secret should be treated as a password. Do not include it in public applications, shared spreadsheets, repositories, or error logs.
How to interpret the methods?
| Method | Use |
|---|---|
GET |
Queries existing information. |
POST |
Creates records, adds assignments, or performs an action. |
PATCH |
Updates existing records. |
DELETE |
Deletes a record when the operation is available. |
The same path may have different functions depending on the method used.
Employee endpoints
Employee endpoints allow you to create, update, search, deactivate, and reactivate profiles.
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/employees |
Creates one or more employees. |
PATCH |
/employees |
Updates existing employees. |
POST |
/deactivate_employees |
Deactivates employees. |
POST |
/activate_employees |
Reactivates employees. |
GET |
/employees |
Returns the employee list. |
GET |
/employees/find |
Locates an employee by an identifier. |
POST |
/employees/search |
Searches for multiple employees using a list of identifiers. |
The search can use identifiers such as:
- UUID;
- Employee ID;
- CPF;
- Email;
-
externalId; - PIS;
- Phone number.
For bulk searches, use only one type of identifier in each request.
Depending on the fields accepted by the endpoint, the employee profile can also receive assignments related to the employee's structure, such as:
- Position;
- Department;
- Cost center;
- Supervisor;
- Payment Group;
- Pay Policy;
- Holiday Group;
- Subsidiary;
- Schedule;
- Locations.
First, query the endpoints for the required structures to obtain the correct identifiers.
Punch endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/punches |
Queries the company's punch records. |
The query can use filters such as:
- Start date;
- End date;
- Update date;
- Employee;
- Status;
- Classified punches only;
- Page;
- Number of results per page.
The statuses available in the documentation include:
-
approved; -
pending; -
declined.
Use period filters and pagination to avoid very large queries.
Querying punches is not the same as generating a report
The /punches endpoint returns structured punch data. It does not generate a ready-to-use file with the calculations and presentation of reports such as:
- Payroll Report;
- Summary;
- Clock Ins Report;
- Hours Bank;
- Extra Hours;
- Late arrivals;
- Other files available under Reports.
The integrated system can use the returned data to build its own view, but that view does not automatically correspond to the official report generated by Day.io.
Request endpoints — Requests
The Requests endpoints allow you to create Requests, update their statuses, send attachments, and query requests.
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/v2/public/integrations_api/requests |
Creates one or more Requests. |
POST |
/v2/public/integrations_api/requests/status |
Updates Request statuses. |
POST |
/v2/public/integrations_api/requests/attachments |
Sends an attachment to a Request. |
GET |
/v2/public/integrations_api/requests/employees/:employeeUuid |
Lists an employee's Requests. |
GET |
/v2/public/integrations_api/requests |
Lists the company's Requests. |
GET |
/v2/public/integrations_api/requests/employees/:employeeUuid/inbox |
Queries an employee's Request inbox. |
Create Requests
Use:
POST /v2/public/integrations_api/requestsThe operation receives a list of Requests in the requests field.
The information described in the documentation includes:
-
externalId: custom Request identifier in the external system; -
employeeUuid: employee UUID; -
employeeExternalId: employee external identifier; -
employeeMatricula: employee ID; -
requestType: Request type; - Information about the period and whether the request covers the entire day;
- Comment;
- Identification of the person creating the Request.
At least one of the following employee identifiers must be used:
-
employeeUuid; -
employeeExternalId; -
employeeMatricula.
If more than one is sent, employeeUuid takes priority.
To identify the person creating the Request, use one of the following fields:
-
createdByEmployeeUuid; -
createdByEmployeeExternalId.
If both are sent, createdByEmployeeUuid takes priority.
The requestType field must use an active Request type. The documentation provides examples such as:
-
medical; -
vacation; -
custom.
Before creating the Request, confirm that the type is available to the company and that the dates correctly represent the requested period.
Update Request statuses
Use:
POST /v2/public/integrations_api/requests/statusThe operation allows Requests to be updated to the following results:
- Approved;
- Ignored or canceled;
- Declined.
Requests can be identified by UUID:
-
approvedUuids; -
ignoredUuids; -
declinedUuids.
They can also be identified by the external system ID:
-
approvedExternalIds; -
ignoredExternalIds; -
declinedExternalIds.
You must also identify who is performing the update using one of the following fields:
-
updatedByEmployeeUuid; -
updatedByEmployeeExternalId.
Within the same status object, use either UUIDs or external IDs. Do not send both formats at the same time, because the documentation indicates that this combination causes an error.
Send an attachment to a Request
Use:
POST /v2/public/integrations_api/requests/attachmentsThe upload is performed as multipart/form-data.
The fields described include:
| Field | Purpose |
|---|---|
attachment |
File to be attached. |
mimeType |
File type. |
title |
Attachment title. |
requestUuid |
Request UUID. |
requestExternalId |
Request identifier in the external system. |
createdByEmployeeUuid |
UUID of the person sending the attachment. |
createdByEmployeeExternalId |
External identifier of the person sending the attachment. |
To identify the Request, send:
-
requestUuid; or -
requestExternalId.
If both are provided, requestUuid takes priority.
To identify who is sending the file, send:
-
createdByEmployeeUuid; or -
createdByEmployeeExternalId.
If both are provided, createdByEmployeeUuid takes priority.
List an employee's Requests
Use:
GET /v2/public/integrations_api/requests/employees/:employeeUuidThe employeeUuid must be provided in the request path.
The query accepts filters such as:
| Parameter | Purpose |
|---|---|
from |
Start of the period. |
to |
End of the period. |
status |
Filters by Request status. |
since |
Includes Requests updated from the specified date onward. |
side |
Defines the employee's role in the Request. |
page |
Page being queried. |
per_page |
Number of results per page. |
The statuses shown in the documentation are:
-
approved; -
ignored; -
declined.
The side parameter accepts:
-
subject: employee the Request refers to; -
approver: employee responsible for approval.
List the company's Requests
Use:
GET /v2/public/integrations_api/requestsThe query accepts filters such as:
| Parameter | Purpose |
|---|---|
from |
Start of the period. |
to |
End of the period. |
status |
Filters by Request status. |
since |
Includes Requests updated from the specified date onward. |
page |
Page being queried. |
per_page |
Number of results per page. |
uuids |
Restricts the query to specific UUIDs. |
external_ids |
Restricts the query to specific external identifiers. |
Use pagination to browse all results when the company has many Requests.
The since filter can be used for incremental synchronizations, retrieving only requests updated after a given date.
Query the Request inbox
Use:
GET /v2/public/integrations_api/requests/employees/:employeeUuid/inboxThis operation queries the Request inbox of the employee specified in employeeUuid.
The query accepts:
| Parameter | Purpose |
|---|---|
status |
Filters Requests by status. |
since |
Includes Requests updated from the specified date onward. |
side |
Defines whether the employee is the requester or approver. |
The side parameter accepts:
-
subject; -
approver.
This operation can be used to query Requests related to the employee or Requests waiting for their action as an approver.
Querying Requests is not the same as exporting a report
The Requests endpoints return structured data for use by the integration.
They do not automatically generate:
- Request PDFs;
- Consolidated Request spreadsheets;
- A report with the same presentation as the platform;
- A ready-to-use file from the Reports area.
Therefore, you can query and process Requests through the API, but you cannot ask the API to generate the same file provided through the interface.
Position endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/positions |
Creates positions. |
PATCH |
/positions |
Updates positions. |
POST |
/deactivate_positions |
Deactivates positions. |
GET |
/positions |
Returns the position list. |
Positions can be identified by the Day.io UUID or the externalId used by the integrated system.
Department endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/departments |
Creates departments. |
PATCH |
/departments |
Updates departments. |
GET |
/departments |
Returns the department list. |
GET |
/departments/:departmentUuid |
Queries a specific department. |
POST |
/departments/add_employees |
Adds employees to a department. |
POST |
/departments/remove_employees |
Removes employees from a department. |
For assignment operations, confirm the department, employees, and identifier type used.
Cost center endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/cost_centers |
Creates cost centers. |
PATCH |
/cost_centers |
Updates cost centers. |
GET |
/cost_centers |
Returns the cost center list. |
GET |
/cost_centers/:costCenterUuid |
Queries a specific cost center. |
POST |
/cost_centers/add_employees |
Adds employees to a cost center. |
POST |
/cost_centers/remove_employees |
Removes employees from a cost center. |
These endpoints can be used to synchronize the organizational structure with the source system.
Subsidiary endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/subsidiaries |
Creates subsidiaries. |
PATCH |
/subsidiaries |
Updates subsidiaries. |
POST |
/deactivate_subsidiaries |
Deactivates subsidiaries. |
GET |
/subsidiaries |
Returns the subsidiary list. |
POST |
/subsidiaries/:subsidiaryUuid/add_employees |
Adds employees to the subsidiary. |
POST |
/subsidiaries/:subsidiaryUuid/remove_employees |
Removes employees from the subsidiary. |
POST |
/subsidiaries/:subsidiaryUuid/add_locations |
Assigns Locations to the subsidiary. |
POST |
/subsidiaries/:subsidiaryUuid/remove_locations |
Removes Locations from the subsidiary. |
A subsidiary can have employees and Locations assigned to it.
Client endpoints
In this context, Clients represent companies served by the company registered in Day.io.
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/clients |
Returns the client list. |
POST |
/clients |
Creates clients. |
PATCH |
/clients |
Updates clients. |
POST |
/deactivate_clients |
Deactivates clients. |
POST |
/clients/:clientUuid/add_locations |
Assigns Locations to the client. |
Check the accepted Location types before creating the assignment.
Team endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/teams |
Creates Teams and defines their Supervisor. |
PATCH |
/teams |
Updates Teams. |
POST |
/deactivate_teams |
Deactivates Teams. |
GET |
/teams |
Returns the Team list. |
POST |
/teams/:teamUuid/add_employees |
Adds employees to the Team. |
POST |
/teams/:teamUuid/remove_employees |
Removes employees from the Team. |
When the integration creates Supervisors and their direct reports, create the Supervisor first so the assignment can be completed.
Location endpoints
| Method | Endpoint | Purpose |
|---|---|---|
POST |
/locations |
Creates Locations. |
PATCH |
/locations |
Updates Locations. |
POST |
/deactivate_locations |
Deactivates Locations. |
GET |
/locations |
Returns the Location list. |
POST |
/locations/:locationUuid/add_employees |
Authorizes employees at the Location. |
POST |
/locations/:locationUuid/remove_employees |
Removes employees from the Location. |
Locations can use information such as:
- Name;
- Code;
- Type;
- Address;
- Latitude;
- Longitude;
- Radius.
Check the formats accepted by the operation before creating or updating a Location.
Holiday Group endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/holidays-groups |
Returns Holiday Groups. |
POST |
/holidays-groups |
Creates a Holiday Group. |
GET |
/holidays-groups/:holidaysGroupUuid |
Queries a specific group. |
POST |
/deactivate_holidays_groups |
Deactivates Holiday Groups. |
POST |
/activate_holidays_groups |
Reactivates Holiday Groups. |
POST |
/holidays-groups/:holidaysGroupUuid/add_employees |
Adds employees to the group. |
POST |
/holidays-groups/:holidaysGroupUuid/remove_employees |
Removes employees from the group. |
POST |
/holidays-groups/:holidaysGroupUuid/add_holidays |
Adds holidays to the group. |
POST |
/holidays-groups/:holidaysGroupUuid/delete_holidays |
Deletes holidays from the group. |
GET |
/holidays-groups/holidays/employees/:employeeUuid |
Queries holidays applicable to an employee. |
For assignment operations, check the date on which the addition or removal should begin.
Company and group query endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/company |
Returns information about the company associated with the credentials. |
GET |
/payroll_groups_list |
Returns the Payment Groups. |
GET |
/business_rules_groups |
Returns the Pay Policies. |
These queries can be used to obtain the identifiers required before creating or updating employees.
Schedule endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET |
/schedules/list |
Returns the Schedule list. |
POST |
/companies/:companyUuid/schedules/:scheduleUuid/user_profiles |
Assigns employees to a Schedule using the UUID. |
POST |
/companies/:companyUuid/external_id_schedule_assignments |
Assigns employees to a Schedule using the external identifier. |
GET |
/companies/:companyUuid/user_profiles/:userProfileUuid/shifts |
Queries an employee's shifts on a specific date. |
For assignments, check:
- The company;
- The Schedule;
- The employees;
- The Start date;
- The identifiers used.
Example flow for synchronizing Requests
An integration can follow this sequence:
- Generate the authentication token;
- Locate the employee;
- Confirm the Request type that will be used;
- Create the Request with an
externalId; - Store the identifier returned by the operation;
- Send the attachment when necessary;
- Query the employee's or company's Requests;
- Update the status when the integration is responsible for that operation;
- Use
sincein subsequent queries to retrieve only recent changes.
Tips and troubleshooting
-
Authentication failed: generate a new token and check the credentials and
Authorizationheader; -
The employee was not found: review the UUID,
externalId, or employee ID used; - The Request was created for the wrong person: check the priority between the identifiers sent;
- The status update returned an error: do not mix UUIDs and external IDs in the same status object;
-
The attachment was not sent: check whether the request uses
multipart/form-dataand whether the Request and sender were identified; -
The query did not return all Requests: review
pageandper_page; -
I need to retrieve only recent changes: use the
sinceparameter; -
I need to query one person's Requests: use the endpoint with
employeeUuid; -
I need to query all company Requests: use
GET /v2/public/integrations_api/requests; -
I need to query Requests awaiting an approver: use the inbox endpoint with
side=approver; - I need to download a Request spreadsheet: the API allows you to query the data, but does not generate the file;
- I need to download a Payroll Report: use the Reports area of the platform.
Best practices
- Use
externalIdto maintain the link between systems; - Check whether the employee already exists before creating them;
- Do not use only name, phone number, or email as a permanent identifier;
- Store the
externalIdof each Request created through the integration; - Do not mix UUIDs and external IDs in status updates;
- Use pagination for list queries;
- Use
sincefor incremental synchronizations; - Restrict punch and Request queries to the required periods;
- Do not record the application secret in logs;
- Protect attachments and returned personal data;
- Test the integration with a small number of records before performing bulk operations;
- Check the documentation before adding new fields or operations.
Frequently asked questions
-
Can I generate attendance reports through the API?
No. The API does not generate files such as the Payroll Report, Summary, or Clock Ins Report.
-
Can I query punch records through the API?
Yes. Use
GET /punches. The response contains punch data, not a ready-to-use report. -
Can I create Requests through the API?
Yes. Use:
POST /v2/public/integrations_api/requests -
Can I query an employee's Requests?
Yes. Use:
GET /v2/public/integrations_api/requests/employees/:employeeUuid -
Can I query all company Requests?
Yes. Use:
GET /v2/public/integrations_api/requests -
Can I query an approver's Request inbox?
Yes. Use the inbox endpoint and specify the employee:
GET /v2/public/integrations_api/requests/employees/:employeeUuid/inbox -
Can I approve, cancel, or decline Requests through the API?
Yes. Use the status update endpoint:
POST /v2/public/integrations_api/requests/status -
Can I send attachments to a Request?
Yes. Use:
POST /v2/public/integrations_api/requests/attachments -
Can I identify the employee by Employee ID?
When creating a Request, the documentation allows you to use
employeeUuid,employeeExternalId, oremployeeMatricula. -
What happens if I send more than one employee identifier?
employeeUuidtakes priority over the external identifier and Employee ID. -
Can I use UUIDs and external IDs when updating the status?
Use only one of the formats within the same status object. Sending both causes an error.
-
Can I download a Request report through the API?
No. The API returns structured data, but does not generate a PDF or consolidated spreadsheet.
-
How can I query only recently updated Requests?
Use the
sinceparameter in the query endpoints. -
Does the API return all results in a single request?
Not always. Use
pageandper_pageto browse the results. -
What is
externalIdused for?It maintains the link between the record created in Day.io and the corresponding record in the external system.
-
Where can I find the complete fields for each operation?
Check the technical API documentation for the current fields, examples, and rules.
Comments
0 comments
Please sign in to leave a comment.