NicoChatNicoChatDocsSearch the docs…
Sign in

Ninsaúde

Ninsaúde is the NicoApp for integration with Ninsaúde, a management system for healthcare clinics (electronic medical records, calendar and patients). With it, your flow searches, registers and updates.

2026-08-12
Note
Available in the NicoApps tab. Integration base: Ninsaúde's official REST API (api.ninsaude.com/v1), authenticated via Bearer Token sent in the Authorization header of every request.

How to obtain the API credentials

When installing the NicoApp, you provide a single field: the Access Token (Bearer), used in all calls as Authorization: Bearer <token>.

Ninsaúde itself documents the authentication of its development platform (Ninsaúde Toro) as follows:

  • The standard is OAuth2, with two tokens: an Access Token, used in all request headers, valid for 15 minutes (it works like a session); and a Refresh Token, with no defined expiration, used only to obtain new Access Tokens — it replaces sharing a username/password with the app.
  • The API follows the RESTful standard, with "thousands of available routes", documented in a public Postman collection ("Ninsaúde Clinic").
Attention
Ninsaúde does not publish a self-service guide for generating these credentials. Request the integration token/credential from Ninsaúde's support or sales team for use in this NicoApp.

Recommendation: contact Ninsaúde's support or sales team (through the clinic panel or the service channels) and request the issuance of the integration Bearer Token for the API. When setting it up, confirm with them whether this token expires (and has to be renewed periodically, like the 15-min Access Token of the standard OAuth2 flow) or whether it is a long-lived integration token — this changes how you must reinstall/update it in the app.

Limitations

Attention
Request limits and plans with API access are not publicly disclosed by Ninsaúde. Confirm with Ninsaúde support before scaling high-volume flows.
  • Token validity: if the credential follows the OAuth2 standard described by Ninsaúde, the Access Token lasts only 15 minutes — confirm with Ninsaúde support the validity of the token used in this app and whether it needs periodic renewal.
  • Required plan: not publicly documented. Treat it as a mandatory question when activating the integration with the customer.

What the NicoApp does

Patients

Action
Endpoint
What it does
Main inputs
Outputs
Create Patient
POST /cadastro_paciente
Registers a new patient
Name (required); Social Name, Date of Birth, Sex, Marital Status, Race/Color, CPF, CNS, Mother's/Father's Name, E-mail, Occupation, Mobile, Phones, Address (CEP/City/District/Street), Insurance/Plan/Card Number, Card Brand, Note
Patient ID
Update Patient
PUT /cadastro_paciente/{id}
Updates the data of an existing patient
Patient ID (required) + the same fields as Create Patient — only the filled-in fields are sent in the PUT
Patient ID
Search Patient
GET /cadastro_paciente/listar
Searches for a patient by CPF, e-mail or mobile (tries in that order)
CPF, E-mail or Mobile (at least one)
All the patient's data (name, contact details, address, insurance…) and the ID; dedicated errors for "Patient not found" and "Multiple patients found"
Remove Patient
DELETE /cadastro_paciente/{id}
Deletes a patient's record
Patient ID
Confirmation/Error

Calendar

Action
Endpoint
What it does
Main inputs
Outputs
Available Times
GET /atendimento_agenda/listar/horario/disponivel/profissional/{id}/dataInicial/{}/dataFinal/{}
Lists a professional's free time slots
Professional (required); Start Date (default: today) and End Date (default: Start Date + 3 days) — filled in automatically if left empty
List of available times
Schedule Appointment
POST /atendimento_agenda
Creates a new appointment
Unit, Professional, Date, Start Time, Patient, Status, Service, Specialty, Room; End Time is optional
Appointment ID
Reschedule Appointment (internal sub-flow: "Schedule Appointment #1")
POST /atendimento_agenda/reagendar/agendamento/{id}
Moves an existing appointment to a new date/time
Appointment ID (required), New Date, New Start Time; New End Time is optional
Appointment ID
Delete schedule
DELETE /atendimento_agenda/{id}
Cancels/deletes an appointment
Appointment ID
Confirmation/Error
Edit Schedule Status
PUT /atendimento_agenda/alterar/status/agendamento/{id}
Changes the status of an appointment (e.g.: attendance/no-show/cancellation)
Appointment ID, Status
Confirmation/Error

Internal communication

Action
Endpoint
What it does
Main inputs
Outputs
Send Internal Message
POST /geral_batepapo
Sends a message in Ninsaúde's internal chat to a user/agent
Target User (ID), Message
Confirmation/Error

Tips and notes

  • "Schedule Appointment" vs. "Schedule Appointment #1": despite the similar name, they are not duplicates — Schedule Appointment creates a new appointment (POST /atendimento_agenda) and Schedule Appointment #1 actually reschedules an existing appointment (POST /atendimento_agenda/reagendar/agendamento/{id}). In this documentation it was called Reschedule Appointment to make its purpose clear.
Note
Suggested future revision: rename the "Schedule Appointment #1" sub-flow in the app editor to "Reschedule Appointment" (or similar), avoiding the confusion with the "Schedule Appointment" action.
  • Automatic End Time calculation: in Schedule Appointment and in Reschedule Appointment, if the End Time is not provided, the app fetches the default duration of the chosen Service (GET /cadastro_servico/{id}duracaoPadrao) and calculates End Time = Start Time + duration automatically — there is no need to enter both times manually.
  • Chained IDs: the Patient ID comes out of Create/Search Patient and goes into Update, Remove and Schedule Appointment. The Appointment ID comes out of Schedule Appointment and goes into Reschedule Appointment, Delete schedule and Edit Schedule Status.
  • Date/time formats: dates in YYYY-MM-DD (e.g.: 2026-08-01); times in HH:MM:SS (e.g.: 17:00:00).
  • Search Patient: the action tries CPF, then e-mail, then mobile, in that order, until it finds exactly one patient — if it finds none, the error is "Patient not found"; if it finds more than one, "Multiple patients found" (ask the user for more specific data to refine the search).
  • Internal Message: the text sent is sanitized before sending — line breaks and tabs become a space, single quotes become backticks and double quotes become curly quotes, preventing the request JSON from breaking.
  • Error handling: every action returns Ninsaúde's real error (the error field of the response) when the call fails — use the block's error path to handle it in the flow (e.g.: invalid/expired token, unavailable time slot, missing required field).