VOA Health RNDS API

Submit, query, replace, and delete clinical records on the RNDS national bus.

Operations 6

POST /ehrs/{ehr_id}/rnds/submit Enviar registro clínico à RNDS #
GET /ehrs/{ehr_id}/rnds/status Consultar status de envio #
PUT /ehrs/{ehr_id}/rnds/replace Substituir registro na RNDS #
DELETE /ehrs/{ehr_id}/rnds Excluir registro da RNDS #
GET /rnds/patient Consultar paciente na RNDS #
GET /rnds/practitioner Consultar profissional na RNDS #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/voa-health-rnds-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

voa-health-rnds-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Voa Integration RNDS API
  version: v1
  description: Voa's REST API for submitting clinical records from an EHR consultation to Brazil's Rede Nacional de Dados em Saúde (RNDS) national health data network, in FHIR R4 (Brazilian profiles).
  contact:
    name: Voa integration team
    email: integration@voahealth.com
    url: https://docs.voa.health/integracao/rnds
servers:
- url: https://integration.voa.health/v1
  description: Production
security:
- bearerAuth: []
tags:
- name: RNDS
  description: Submit, query, replace, and delete clinical records on the RNDS national bus.
paths:
  /ehrs/{ehr_id}/rnds/submit:
    post:
      tags:
      - RNDS
      summary: Enviar registro clínico à RNDS
      description: Sends the clinical data of a consultation to the RNDS in FHIR R4. Voa automatically builds the FHIR Bundle from the consultation documents.
      operationId: submitRndsRecord
      parameters:
      - $ref: '#/components/parameters/EhrId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RndsSubmitRequest'
      responses:
        '200':
          description: Registro enviado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RndsSubmitResult'
        '400':
          $ref: '#/components/responses/ValidationError'
        '422':
          description: Registro rejeitado pela RNDS
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /ehrs/{ehr_id}/rnds/status:
    get:
      tags:
      - RNDS
      summary: Consultar status de envio
      description: Returns the status of the last RNDS submission for a consultation.
      operationId: getRndsStatus
      parameters:
      - $ref: '#/components/parameters/EhrId'
      responses:
        '200':
          description: Status do envio
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RndsStatus'
        '404':
          $ref: '#/components/responses/NotFound'
  /ehrs/{ehr_id}/rnds/replace:
    put:
      tags:
      - RNDS
      summary: Substituir registro na RNDS
      description: Replaces a previously submitted RNDS record after corrections.
      operationId: replaceRndsRecord
      parameters:
      - $ref: '#/components/parameters/EhrId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                practitioner_cns:
                  type: string
                  description: CNS do profissional responsável pela correção.
      responses:
        '200':
          description: Registro substituído
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RndsReplaceResult'
        '400':
          $ref: '#/components/responses/ValidationError'
  /ehrs/{ehr_id}/rnds:
    delete:
      tags:
      - RNDS
      summary: Excluir registro da RNDS
      description: Removes a previously submitted RNDS record. This action is irreversible on the national bus.
      operationId: deleteRndsRecord
      parameters:
      - $ref: '#/components/parameters/EhrId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - reason
              properties:
                practitioner_cns:
                  type: string
                  description: CNS do profissional que autoriza a exclusão.
                reason:
                  type: string
                  description: Motivo da exclusão (obrigatório).
      responses:
        '200':
          description: Registro excluído
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RndsDeleteResult'
        '400':
          $ref: '#/components/responses/ValidationError'
  /rnds/patient:
    get:
      tags:
      - RNDS
      summary: Consultar paciente na RNDS
      description: Queries patient data on the RNDS national bus by CPF or CNS.
      operationId: getRndsPatient
      parameters:
      - name: cpf
        in: query
        description: CPF do paciente (obrigatório se não informar CNS).
        schema:
          type: string
      - name: cns
        in: query
        description: CNS do paciente (obrigatório se não informar CPF).
        schema:
          type: string
      responses:
        '200':
          description: Paciente encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  patient:
                    $ref: '#/components/schemas/Patient'
        '404':
          $ref: '#/components/responses/NotFound'
  /rnds/practitioner:
    get:
      tags:
      - RNDS
      summary: Consultar profissional na RNDS
      description: Queries health-professional data on the RNDS national bus by CNS.
      operationId: getRndsPractitioner
      parameters:
      - name: cns
        in: query
        required: true
        description: CNS do profissional de saúde (obrigatório).
        schema:
          type: string
      responses:
        '200':
          description: Profissional encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  practitioner:
                    $ref: '#/components/schemas/Practitioner'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Error:
      type: object
      description: Voa error envelope. Not RFC 9457; uses a machine-readable `error` code, a human `message`, and an optional `details` array.
      properties:
        error:
          type: string
          example: validation_error
        message:
          type: string
        details:
          type: array
          items:
            type: object
            additionalProperties: true
    RndsSubmitRequest:
      type: object
      required:
      - patient_cpf
      - practitioner_cns
      properties:
        document_type:
          type: string
          enum:
          - RAC
          - RPM
          - REL
          default: RAC
          description: 'Tipo do documento RNDS: RAC, RPM, REL.'
        patient_cpf:
          type: string
          description: CPF do paciente (obrigatório).
        patient_cns:
          type: string
          description: CNS do paciente (opcional, usado quando disponível).
        practitioner_cns:
          type: string
          description: CNS do profissional de saúde responsável (obrigatório).
        cnes:
          type: string
          description: Código CNES do estabelecimento (obrigatório na primeira vez, depois é memorizado).
    RndsReplaceResult:
      type: object
      properties:
        status:
          type: string
          example: replaced
        rnds_record_id:
          type: string
        previous_record_id:
          type: string
        replaced_at:
          type: string
          format: date-time
    Practitioner:
      type: object
      properties:
        cns:
          type: string
        name:
          type: string
        specialty:
          type: string
        council:
          type: string
        council_number:
          type: string
        council_state:
          type: string
    RndsSubmitResult:
      type: object
      properties:
        status:
          type: string
          example: submitted
        rnds_record_id:
          type: string
        document_type:
          type: string
        submitted_at:
          type: string
          format: date-time
        ehr_id:
          type: string
    Patient:
      type: object
      properties:
        cpf:
          type: string
        cns:
          type: string
        name:
          type: string
        birth_date:
          type: string
          format: date
        gender:
          type: string
    RndsDeleteResult:
      type: object
      properties:
        status:
          type: string
          example: deleted
        rnds_record_id:
          type: string
        deleted_at:
          type: string
          format: date-time
    RndsStatus:
      type: object
      properties:
        ehr_id:
          type: string
        rnds_record_id:
          type: string
        status:
          type: string
          enum:
          - pending
          - accepted
          - rejected
          - replaced
          - deleted
        document_type:
          type: string
        submitted_at:
          type: string
          format: date-time
        last_updated_at:
          type: string
          format: date-time
  responses:
    NotFound:
      description: Não encontrado
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Erro de validação
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    EhrId:
      name: ehr_id
      in: path
      required: true
      description: Identificador da consulta / prontuário (EHR).
      schema:
        type: string
        example: ehr_123456
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Bearer JWT obtained from the Voa Auth Token via POST https://api.voa.health/integration/identify/.
x-provenance:
  generated: '2026-07-21'
  method: derived
  source: Derived faithfully from the published Voa RNDS integration documentation at https://docs.voa.health/integracao/rnds/endpoints.md and https://docs.voa.health/integracao/rnds/como-funciona.md (request/response shapes, headers, status codes, and rate limits quoted verbatim from the docs). No published OpenAPI was found (openapi.json / swagger.json returned 404); this is a faithful reconstruction, not fabrication.