Public List Pendencies
curl --request GET \
--url https://public-api.salu.com.vc/dev/routes/v0/pendency/ \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api.salu.com.vc/dev/routes/v0/pendency/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://public-api.salu.com.vc/dev/routes/v0/pendency/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.salu.com.vc/dev/routes/v0/pendency/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.salu.com.vc/dev/routes/v0/pendency/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.salu.com.vc/dev/routes/v0/pendency/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.salu.com.vc/dev/routes/v0/pendency/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"status": "ON_HOLD",
"type_exam": "HIRING",
"sla": "2023-11-07T05:31:56Z",
"due_date": "2023-11-07T05:31:56Z",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_soc_code": "<string>",
"employee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ohc_status": "PENDING",
"note": "<string>",
"schedule_appointment_time": "2023-11-07T05:31:56Z",
"concluded_at": "2023-11-07T05:31:56Z",
"organization_display_name": "<string>",
"employee_name": "<string>",
"employee_is_disabled": true,
"periodicity": 123,
"next_exam_date": "2023-12-25"
}
],
"cursor": {
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"next_page": true
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Pendencies
List Pendencies
GET
/
v0
/
pendency
/
Public List Pendencies
curl --request GET \
--url https://public-api.salu.com.vc/dev/routes/v0/pendency/ \
--header 'x-api-key: <api-key>'import requests
url = "https://public-api.salu.com.vc/dev/routes/v0/pendency/"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://public-api.salu.com.vc/dev/routes/v0/pendency/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://public-api.salu.com.vc/dev/routes/v0/pendency/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://public-api.salu.com.vc/dev/routes/v0/pendency/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://public-api.salu.com.vc/dev/routes/v0/pendency/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://public-api.salu.com.vc/dev/routes/v0/pendency/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"status": "ON_HOLD",
"type_exam": "HIRING",
"sla": "2023-11-07T05:31:56Z",
"due_date": "2023-11-07T05:31:56Z",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_soc_code": "<string>",
"employee_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"ohc_status": "PENDING",
"note": "<string>",
"schedule_appointment_time": "2023-11-07T05:31:56Z",
"concluded_at": "2023-11-07T05:31:56Z",
"organization_display_name": "<string>",
"employee_name": "<string>",
"employee_is_disabled": true,
"periodicity": 123,
"next_exam_date": "2023-12-25"
}
],
"cursor": {
"total": 123,
"page": 123,
"page_size": 123,
"total_pages": 123,
"next_page": true
}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Lists pendencies (occupational exam requests) for your organization, with
filters by status, type and employee. See the concept in
Exam pendency.
Overview
- Method:
GET - Path:
/v0/pendency/ - OperationId:
public_list_pendencies_v0_pendency__get - Authentication: header
x-api-key
The schema panel above is generated from the OpenAPI spec, whose field descriptions are written
in Portuguese. The English meaning of every field is in the table below.
Response fields
Each item indata carries the fields below. The pagination cursor block is described in
How to use.
| Field | Type | What it represents | Notes |
|---|---|---|---|
id | UUID | Identifier of the exam request. | This is the pendency_id used by the cancel route. |
created_at | datetime | When the request was recorded. | UTC, without offset. |
status | enum | Operational stage of the pendency (9 values, table below). | It is not the status HR sees in the Salú portal — that one is derived from this. |
type_exam | enum | Occupational exam type (15 values, table below). | — |
sla | datetime | Salú’s internal target date to handle and schedule the pendency. | An operational target, not a legal deadline. Served as a date at midnight. See Deadlines. |
due_date | datetime | Deadline of the exam: the event’s reference date plus the exam type’s window, skipping weekends. | Computed at creation and not recomputed afterwards. Served as a date at midnight. |
schedule_appointment_time | datetime | null | The booked time of the current appointment (the most recent non-canceled one). | It is not the completion date — see the warning below. |
concluded_at | datetime | null | When the pendency was completed (moved to DONE). | Filled only while status = DONE; null otherwise. If a completed pendency is reopened it goes back to null — the field tracks the current status and keeps no history. UTC, without offset. |
organization_id | UUID | null | Organization that owns the pendency. | — |
organization_display_name | string | null | Organization name at the time the pendency was created. | It is a snapshot: renaming the organization later does not change the stored value. |
organization_soc_code | string | Organization code in SOC, stored at creation. | Same snapshot as organization_display_name. |
employee_id | UUID | null | Employee the exam targets. | — |
employee_name | string | null | Employee’s preferred name (social name when present; otherwise the legal name). | Creating a pendency returns the legal name. |
employee_is_disabled | boolean | null | Flags the employee as a person with a disability, per the record at pendency creation. | It does not mean dismissed or inactive. |
periodicity | integer | null | Periodic exam interval, in months. | Only on PERIODIC pendencies; null for other types. Not every PERIODIC carries the value — the older the pendency, the more likely it comes back null. |
next_exam_date | date | null | Date of the employee’s next periodic exam. | Same rule as periodicity: only on PERIODIC, and frequently null on older pendencies. Maintained by an internal Salú process. |
note | string | null | Status-change note written by Salú’s operations team. | Not exposed in this listing: it always comes back null. The note sent to the cancel route is echoed in that call’s response. |
ohc_status | enum | ASO (occupational health certificate) stage derived from the current appointment (5 values, table below). | It complements status: it tells where the document is, not where the pendency is. |
schedule_appointment_time is the booked time of the exam at the clinic, not the date the
pendency was completed. It comes filled — with a future date, even — on pendencies that are
still open, and it may be null on pendencies already completed. To know when a pendency
was completed, use concluded_at.concluded_atcomes from the history event that moved the pendency toDONE. On a tiny fraction of completed pendencies that event is missing and the value falls back to the pendency’s last update.periodicityandnext_exam_datecome backnullon a large share ofPERIODICpendencies, especially older ones. Herenullmeans missing data, not “no periodicity” — to tell whether a pendency is periodic, usetype_exam.
Filters
Every parameter below is a query parameter. To send multiple values, repeat the parameter (e.g.?status=PENDING&status=SCHEDULED).
| Parameter | Type | What it filters |
|---|---|---|
organization_id | UUID (repeatable) | One or more organizations. When omitted, returns the organizations your key is allowed to see. |
employee_id | UUID | A single employee. |
id | UUID (repeatable) | Specific pendencies. |
status | enum (repeatable) | One or more statuses (values in the table below). |
type_exam | enum (repeatable) | One or more exam types. |
employee__admission_date | date YYYY-MM-DD | Employees whose admission date is exactly this one. |
employee__dismissal_date | date YYYY-MM-DD | Employees whose dismissal date is exactly this one. |
is_active | boolean (default true) | Active pendencies. |
page / limit | integer (default 0 / 20) | Offset pagination. limit ranges from 1 to 500. |
Sorting
The order is fixed and not chosen by the client: priority, then the exam deadline (due_date),
then sla and finally created_at. It is this stable order that keeps offset pagination from
repeating or skipping records between pages.
- Parameters that are not in this table are silently ignored: the API answers
200as if the filter had not been sent, not422. Double-check the spelling before concluding that a filter “does not work”. - There is no range filter on dates (creation, deadline or SLA) on this route, and no filter
by completion date. To track completions, read
concluded_aton each pendency. - The ordering uses
priority, an internal prioritization field that is not returned in the public response.
Enum fields and translations
Use exactly the enum values as defined by the API. The tables below explain the values accepted in
filters and returned in the response.
type_exam
| Value | Meaning (EN) | Note |
|---|---|---|
HIRING | Pre-employment (admission) exam | — |
DISMISSAL | Dismissal exam | — |
PERIODIC | Periodic exam | The only type that can carry periodicity and next_exam_date — and even there both may come back null. |
RETURN | Return-to-work exam | — |
RISK_CHANGE | Job risk change exam | — |
INTERN_HIRING | Internal hiring | — |
PUNCTUAL | One-off exam | — |
CRITICAL_ACTIVITY | Critical activity | — |
APPOINTMENT | Medical appointment | — |
APPOINTMENT_RETURN | Appointment follow-up | — |
MEDICAL_LEAVE | Medical leave | — |
INFIRMARY | Nursing | — |
THIRD_PARTY | Third parties | — |
ANAMNESE | Anamnesis | Legacy from the source system — do not use. |
EMPLOYEE_ACTION | Employee action | Legacy from the source system — do not use. |
All 15 values can show up in the response. Creation through the public API uses the subset
described in Create pendency.
status
| Value | Meaning (EN) | What happened |
|---|---|---|
ON_HOLD | On hold | Pendency created with the employee notification scheduled for a future date. |
PENDING | Pending | Waiting to be scheduled. |
PRE_SCHEDULED | Pre-scheduled | Scheduling under negotiation with clinic or employee, with no confirmed date. |
SCHEDULED | Scheduled | Exam booked at a clinic; schedule_appointment_time carries the booked time. |
MISSING_OHC | Missing ASO | The exam was performed and Salú is chasing the ASO at the clinic. |
DONE | Done | Pendency closed as performed; concluded_at is filled. In the normal flow the ASO was received, validated and attached, but there are completed pendencies with no active ASO. |
ABSENT | Absent | The employee did not show up for the booked exam. |
NO_RESPONSE | No response | The employee did not answer the scheduling contacts. |
CANCELED | Canceled | Pendency closed without the exam being performed. |
ohc_status
| Value | Meaning (EN) | What happened |
|---|---|---|
WAITING_FOR_OHC | Waiting for ASO | No ASO stage is in progress: the current appointment is at a stage before the document, the employee did not show up (ABSENT), or there is no non-canceled appointment. It does not mean an ASO is on the way. |
MISSING_OHC | Missing ASO | Exam performed; Salú is chasing the ASO at the clinic. |
IN_ANALYSIS | Under analysis | ASO received and being validated by Salú’s team. |
ATTACHED_OHC | ASO attached | ASO validated and attached to the employee — the pendency moves to DONE. |
DONE | Done | Appointment completed — the pendency moves to DONE. |
Example request
curl -X GET "https://public-api.salu.com.vc/dev/routes/v0/pendency/?page=0&limit=20&status=DONE" \
-H "Accept: application/json" \
-H "x-api-key: $SALU_PUBLIC_API_KEY"
Authorizations
Query Parameters
Filtra solicitações ativas.
Página, começando em 0.
Required range:
x >= 0Itens por página. Máximo de 500.
Required range:
1 <= x <= 500Filtra por identificadores de solicitação. Repetível.
Filtra por etapa operacional da solicitação. Repetível.
Available options:
ON_HOLD, PENDING, PRE_SCHEDULED, SCHEDULED, DONE, CANCELED, ABSENT, MISSING_OHC, NO_RESPONSE Filtra por tipo de exame ocupacional. Repetível.
Available options:
HIRING, DISMISSAL, PERIODIC, RETURN, RISK_CHANGE, INTERN_HIRING, PUNCTUAL, CRITICAL_ACTIVITY, APPOINTMENT, APPOINTMENT_RETURN, MEDICAL_LEAVE, INFIRMARY, THIRD_PARTY, ANAMNESE, EMPLOYEE_ACTION Filtra por empresa. Repetível. Quando omitido, devolve as empresas autorizadas para a chave de API.
Filtra pelas solicitações de um colaborador.
Filtra colaboradores admitidos exatamente nesta data (AAAA-MM-DD), conforme o cadastro atual.
Filtra colaboradores desligados exatamente nesta data (AAAA-MM-DD), conforme o cadastro atual.