Skip to content

API reference

Encounters

Pendaftaran kunjungan dan isi rekam medis elektronik rawat jalan (modul frontoffice/rme).

OpenAPI 3.1 · version 1.1.0 · 127 operations · 30 webhook events

Base URLhttps://api.medivana.cloud/api/v1

Endpoint descriptions come from the OpenAPI specification and are written in Indonesian.

Penjamin aktif untuk pendaftaran kunjungan

Umum dulu, lalu BPJS, asuransi, perusahaan. id dipakai sebagai payer_id di POST /encounters.

Scopes
encounters:readpatients:write(any one of)
RBAC permissions
encounter.read · patient.write · queue.manage
Module
frontoffice | rme

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/registration/payers" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/registration/payers", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/registration/payers",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Penjaminapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000f0001",
      "code": "UMUM",
      "name": "Pasien Umum",
      "kind": "umum"
    },
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000f0002",
      "code": "BPJS",
      "name": "BPJS Kesehatan",
      "kind": "bpjs"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].codestring
items[].namestring
items[].kindumum | bpjs | insurance | company
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenScope token tidak memberi izin (forbidden), atau langganan klinik baca-saja untuk operasi tulis (read-only)
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Daftar kunjungan

Difilter ke cabang aktif, terbaru dulu. date default hari ini (Asia/Jakarta) dan diabaikan bila hanya patient_id yang dikirim (riwayat semua tanggal).

Scopes
encounters:read
RBAC permissions
encounter.read · queue.manage
Module
frontoffice | rme

Parameters

Parameters GET /encounters
NameInTypeDescription
X-Branch-IDheaderstring (uuid)Cabang aktif (opsional). Nilai di luar cabang klien diabaikan.
datequerystring (date)
patient_idquerystring (uuid)
unit_idquerystring (uuid)
payer_idquerystring (uuid)
practitioner_idquerystring (uuid)
statusquerystringDipisah koma: registered, in_progress, finished, cancelled
limitqueryinteger
cursorquerystringNilai next_cursor dari halaman sebelumnya

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Kunjunganapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
      "branch_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000000b1",
      "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
      "unit_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000c0001",
      "unit_name": "Poli Umum",
      "practitioner_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
      "practitioner_name": "dr. Rina Contoh",
      "payer_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000f0001",
      "payer_name": "Pasien Umum",
      "payer_kind": "umum",
      "kind": "rawat_jalan",
      "status": "in_progress",
      "queue_label": "U-003",
      "chief_complaint": "Batuk pilek 3 hari",
      "registered_at": "2026-10-29T08:30:00+07:00",
      "started_at": "2026-10-29T09:02:00+07:00",
      "finished_at": null,
      "version": 3
    }
  ],
  "next_cursor": "eyJ0IjoiMjAyNi0xMC0yOVQwODozMDowMCswNzowMCJ9"
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].branch_idstring (uuid)
items[].patient_idstring (uuid)
items[].unit_idstring (uuid)
items[].unit_namestring
items[].unit_specialtystring | null
items[].practitioner_idstring (uuid) | null
items[].practitioner_namestring | null
items[].payer_idstring (uuid)
items[].payer_namestring
items[].payer_kindumum | bpjs | insurance | company
items[].payer_referencestring | null
items[].kindrawat_jalan | telekonsultasi | kunjungan_sehat
items[].statusregistered | in_progress | finished | cancelled
items[].appointment_idstring (uuid) | null
items[].queue_idstring (uuid) | null
items[].queue_labelstring | null
items[].queue_statusstring | null
items[].chief_complaintstring | null
items[].anamnesisobject
items[].registered_atstring (date-time)
items[].started_atstring (date-time) | null
items[].finished_atstring (date-time) | null
items[].cancelled_atstring (date-time) | null
items[].cancel_reasonstring | null
items[].versioninteger
items[].patientobject
items[].patient.idstring (uuid)
items[].patient.namestring
items[].patient.mrnstring
items[].patient.sexmale | female
items[].patient.birth_datestring (date) | null
items[].patient.age_labelstring
items[].patient.age_yearsinteger | null
items[].patient.allergy_statusunknown | none | has
next_cursorstring
Errors
  • 400bad-requestParameter atau format permintaan tidak valid
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenScope token tidak memberi izin (forbidden), atau langganan klinik baca-saja untuk operasi tulis (read-only)
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Daftarkan kunjungan dan terbitkan nomor antrean

Wajib patient_id dan unit_id (unit poli/tindakan di cabang aktif). payer_id dari GET /registration/payers; kosong → Pasien Umum. registration_fee: null = otomatis (biaya pendaftaran untuk penjamin umum). Pasien yang sudah terdaftar aktif di poli yang sama hari ini → 409. Menerbitkan event encounter.started.

Scopes
patients:write
RBAC permissions
patient.write
Module
frontoffice | rme
X-Branch-ID
X-Branch-ID required

Parameters

Parameters POST /encounters
NameInTypeDescription
X-Branch-IDrequiredheaderstring (uuid)Cabang aktif. Wajib kecuali klien API hanya punya satu cabang (dipakai otomatis); tanpa cabang aktif → 400.

Request body application/json

Request body POST /encounters
NameTypeDescription
patient_idrequiredstring (uuid)
unit_idrequiredstring (uuid)
practitioner_idstring (uuid) | null
payer_idstring (uuid) | null
payer_referencestring | nullNo. SEP/polis/jaminan
kindrawat_jalan | telekonsultasi | kunjungan_sehat
prioritynormal | priority
chief_complaintstring | null
appointment_idstring (uuid) | null
registration_feeboolean | null
{
  "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
  "unit_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000c0001",
  "practitioner_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
  "payer_id": null,
  "kind": "rawat_jalan",
  "priority": "normal",
  "chief_complaint": "Demam 2 hari"
}

Code examples

Code example language
curl -X POST "https://api.medivana.cloud/api/v1/encounters" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN" \
  -H "X-Branch-ID: $MEDIVANA_BRANCH_ID" \
  -H "Content-Type: application/json" \
  -d '{"patient_id":"3f0c2a10-5b7e-4c1d-9a2e-0000000a0001","unit_id":"3f0c2a10-5b7e-4c1d-9a2e-0000000c0001","practitioner_id":"3f0c2a10-5b7e-4c1d-9a2e-0000000d0001","payer_id":null,"kind":"rawat_jalan","priority":"normal","chief_complaint":"Demam 2 hari"}'
const res = await fetch("https://api.medivana.cloud/api/v1/encounters", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
    "X-Branch-ID": process.env.MEDIVANA_BRANCH_ID,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    patient_id: "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
    unit_id: "3f0c2a10-5b7e-4c1d-9a2e-0000000c0001",
    practitioner_id: "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
    payer_id: null,
    kind: "rawat_jalan",
    priority: "normal",
    chief_complaint: "Demam 2 hari",
  }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
import os
import requests

resp = requests.post(
    "https://api.medivana.cloud/api/v1/encounters",
    headers={
        "Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}",
        "X-Branch-ID": os.environ["MEDIVANA_BRANCH_ID"],
    },
    json={
        "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
        "unit_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000c0001",
        "practitioner_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
        "payer_id": None,
        "kind": "rawat_jalan",
        "priority": "normal",
        "chief_complaint": "Demam 2 hari",
    },
    timeout=30,
)
resp.raise_for_status()

Responses

200Dengan appointment_id yang sudah check-in: kunjungan yang sudah ada (idempoten)

201Kunjungan dan tiket antrean dibuatapplication/json

{
  "encounter": {
    "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
    "branch_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000000b1",
    "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
    "unit_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000c0001",
    "unit_name": "Poli Umum",
    "payer_kind": "umum",
    "kind": "rawat_jalan",
    "status": "registered",
    "chief_complaint": "Demam 2 hari",
    "registered_at": "2026-10-29T08:30:00+07:00",
    "version": 1
  },
  "queue": {
    "id": "3f0c2a10-5b7e-4c1d-9a2e-000000005001",
    "unit_name": "Poli Umum",
    "label": "U-003",
    "number": 3,
    "status": "waiting",
    "priority": "normal",
    "source": "registration",
    "service_date": "2026-10-29"
  }
}
Schema 201
Schema 201
NameTypeDescription
encounterobject
encounter.idstring (uuid)
encounter.branch_idstring (uuid)
encounter.patient_idstring (uuid)
encounter.unit_idstring (uuid)
encounter.unit_namestring
encounter.unit_specialtystring | null
encounter.practitioner_idstring (uuid) | null
encounter.practitioner_namestring | null
encounter.payer_idstring (uuid)
encounter.payer_namestring
encounter.payer_kindumum | bpjs | insurance | company
encounter.payer_referencestring | null
encounter.kindrawat_jalan | telekonsultasi | kunjungan_sehat
encounter.statusregistered | in_progress | finished | cancelled
encounter.appointment_idstring (uuid) | null
encounter.queue_idstring (uuid) | null
encounter.queue_labelstring | null
encounter.queue_statusstring | null
encounter.chief_complaintstring | null
encounter.anamnesisobject
encounter.registered_atstring (date-time)
encounter.started_atstring (date-time) | null
encounter.finished_atstring (date-time) | null
encounter.cancelled_atstring (date-time) | null
encounter.cancel_reasonstring | null
encounter.versioninteger
encounter.patientobject
encounter.patient.idstring (uuid)
encounter.patient.namestring
encounter.patient.mrnstring
encounter.patient.sexmale | female
encounter.patient.birth_datestring (date) | null
encounter.patient.age_labelstring
encounter.patient.age_yearsinteger | null
encounter.patient.allergy_statusunknown | none | has
queueobject
queue.idstring (uuid)
queue.branch_idstring (uuid)
queue.unit_idstring (uuid)
queue.unit_namestring
queue.patient_idstring (uuid) | null
queue.encounter_idstring (uuid) | null
queue.appointment_idstring (uuid) | null
queue.service_datestring (date)
queue.numberinteger
queue.labelstring
queue.statuswaiting | called | in_service | pharmacy | cashier | done | cancelled
queue.prioritynormal | priority
queue.sourceregistration | appointment | kiosk
queue.call_countinteger
queue.created_atstring (date-time)
queue.versioninteger
Errors
  • 400bad-requestCabang aktif belum dipilih (X-Branch-ID)
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenScope token tidak memberi izin (forbidden), atau langganan klinik baca-saja untuk operasi tulis (read-only)
  • 409conflictKonflik data atau status tidak mengizinkan aksi
  • 422validationValidasi gagal; rincian per field di errors
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Detail kunjungan lengkap (RME)

Kunjungan beserta catatan SOAP, tanda vital, diagnosis, tindakan, alergi aktif, tanda tangan, dokumen, dan surat. Diaudit encounter.read.

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Kunjungan lengkapapplication/json

{
  "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
  "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
  "unit_name": "Poli Umum",
  "status": "finished",
  "kind": "rawat_jalan",
  "chief_complaint": "Batuk pilek 3 hari",
  "patient": {
    "id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
    "name": "Pasien Contoh",
    "mrn": "RM-000123",
    "sex": "female",
    "birth_date": "1990-05-12",
    "age_label": "36 th 5 bl",
    "age_years": 36,
    "allergy_status": "has"
  },
  "note": {
    "id": "3f0c2a10-5b7e-4c1d-9a2e-000000006001",
    "subjective": "Batuk pilek 3 hari, demam ringan.",
    "objective": "T 37,8 °C, faring hiperemis.",
    "assessment": "ISPA",
    "plan": "Simtomatik, kontrol bila memburuk.",
    "status": "signed",
    "version": 1
  },
  "vitals": [
    {
      "key": "temperature",
      "code": "8310-5",
      "display": "Suhu tubuh",
      "value_num": 37.8,
      "unit": "Cel",
      "flag": "H",
      "observed_at": "2026-10-29T09:05:00+07:00"
    }
  ],
  "diagnoses": [
    {
      "icd10_code": "J06.9",
      "display": "Infeksi saluran napas atas akut, tidak spesifik",
      "is_primary": true,
      "kind": "new",
      "rank": 1
    }
  ],
  "procedures": [],
  "allergies": [],
  "signatures": [
    {
      "kind": "close",
      "note_version": 1,
      "signer_name": "dr. Rina Contoh",
      "signed_at": "2026-10-29T10:45:00+07:00"
    }
  ],
  "documents": [],
  "letters": [],
  "version": 4
}
Schema 200
Schema 200
NameTypeDescription
idstring (uuid)
branch_idstring (uuid)
patient_idstring (uuid)
unit_idstring (uuid)
unit_namestring
unit_specialtystring | null
practitioner_idstring (uuid) | null
practitioner_namestring | null
payer_idstring (uuid)
payer_namestring
payer_kindumum | bpjs | insurance | company
payer_referencestring | null
kindrawat_jalan | telekonsultasi | kunjungan_sehat
statusregistered | in_progress | finished | cancelled
appointment_idstring (uuid) | null
queue_idstring (uuid) | null
queue_labelstring | null
queue_statusstring | null
chief_complaintstring | null
anamnesisobject
registered_atstring (date-time)
started_atstring (date-time) | null
finished_atstring (date-time) | null
cancelled_atstring (date-time) | null
cancel_reasonstring | null
versioninteger
patientobject
patient.idstring (uuid)
patient.namestring
patient.mrnstring
patient.sexmale | female
patient.birth_datestring (date) | null
patient.age_labelstring
patient.age_yearsinteger | null
patient.allergy_statusunknown | none | has
noteobject | null
vitalsarray<object>
vitals[].idstring (uuid)
vitals[].encounter_idstring (uuid)
vitals[].patient_idstring (uuid)
vitals[].panel_idstring (uuid) | null
vitals[].keystring (12 nilai)
vitals[].codestringLOINC
vitals[].displaystring
vitals[].value_numnumber | null
vitals[].value_textstring | null
vitals[].unitstring | nullUCUM
vitals[].flagN | L | H | LL | HH | null
vitals[].statusfinal | entered_in_error
vitals[].observed_atstring (date-time)
vitals[].recorded_bystring (uuid) | null
diagnosesarray<object>
diagnoses[].idstring (uuid)
diagnoses[].encounter_idstring (uuid)
diagnoses[].patient_idstring (uuid)
diagnoses[].icd10_codestring
diagnoses[].displaystring
diagnoses[].is_primaryboolean
diagnoses[].kindnew | old
diagnoses[].rankinteger
diagnoses[].notesstring | null
diagnoses[].created_atstring (date-time)
proceduresarray<object>
procedures[].idstring (uuid)
procedures[].encounter_idstring (uuid)
procedures[].patient_idstring (uuid)
procedures[].icd9cm_codestring | null
procedures[].displaystring | null
procedures[].service_idstring (uuid) | null
procedures[].service_namestring | null
procedures[].quantitynumber
procedures[].practitioner_idstring (uuid) | null
procedures[].charge_idstring (uuid) | null
procedures[].statusstring
procedures[].notesstring | null
procedures[].performed_atstring (date-time)
allergiesarray<object>
allergies[].idstring (uuid)
allergies[].patient_idstring (uuid)
allergies[].encounter_idstring (uuid) | null
allergies[].substancestring
allergies[].substance_codestring | null
allergies[].code_systemstring | null
allergies[].item_idstring (uuid) | null
allergies[].categoryobat | makanan | lingkungan
allergies[].reactionstring | null
allergies[].severityringan | sedang | berat | null
allergies[].statusactive | resolved | entered_in_error
allergies[].onsetstring | null
allergies[].notesstring | null
allergies[].recorded_atstring (date-time)
allergies[].recorded_bystring (uuid) | null
allergies[].resolved_atstring (date-time) | null
allergies[].versioninteger
signaturesarray<object>
signatures[].idstring (uuid)
signatures[].encounter_idstring (uuid)
signatures[].note_idstring (uuid)
signatures[].note_versioninteger
signatures[].kindclose | correction
signatures[].content_hashstringSHA-256 konten kanonik
signatures[].signer_membership_idstring (uuid)
signatures[].signer_namestring
signatures[].methodstring
signatures[].reasonstring | null
signatures[].signed_atstring (date-time)
documentsarray<object>
documents[].idstring (uuid)
documents[].patient_idstring (uuid)
documents[].encounter_idstring (uuid) | null
documents[].file_idstring (uuid)
documents[].titlestring
documents[].categorygeneral | lab_external | imaging | referral | consent | photo | identity | other
documents[].notesstring | null
documents[].filenamestring
documents[].content_typestring
documents[].size_bytesinteger
documents[].uploaded_bystring (uuid) | null
documents[].created_atstring (date-time)
documents[].download_urlstringPath relatif GET /clinical-documents/{id}/download
lettersarray<object>
letters[].idstring (uuid)
letters[].branch_idstring (uuid)
letters[].patient_idstring (uuid)
letters[].encounter_idstring (uuid) | null
letters[].template_idstring (uuid) | null
letters[].kindsick_leave | referral | health_certificate | other
letters[].numberstring
letters[].titlestring
letters[].dataobject
letters[].paper_sizeA4 | A5
letters[].statusissued | void
letters[].issued_atstring (date-time)
letters[].issued_bystring (uuid) | null
letters[].issued_by_namestring | null
letters[].void_reasonstring | null
letters[].print_urlstring
letters[].patient_namestring
letters[].patient_mrnstring
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Batalkan kunjungan

Membatalkan charge yang belum ditagih dan tiket antreannya. Kunjungan selesai/batal atau dengan charge yang sudah ditagih → 409. Menerbitkan event encounter.cancelled.

Scopes
patients:write
RBAC permissions
encounter.write · patient.write
Module
frontoffice | rme
X-Branch-ID
X-Branch-ID required

Parameters

Parameters POST /encounters/{id}/cancel
NameInTypeDescription
idrequiredpathstring (uuid)
X-Branch-IDrequiredheaderstring (uuid)Cabang aktif. Wajib kecuali klien API hanya punya satu cabang (dipakai otomatis); tanpa cabang aktif → 400.

Request body application/json

Request body POST /encounters/{id}/cancel
NameTypeDescription
reasonrequiredstring
{
  "reason": "Pasien pulang sebelum diperiksa"
}

Code examples

Code example language
curl -X POST "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/cancel" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN" \
  -H "X-Branch-ID: $MEDIVANA_BRANCH_ID" \
  -H "Content-Type: application/json" \
  -d '{"reason":"Pasien pulang sebelum diperiksa"}'
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/cancel", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
    "X-Branch-ID": process.env.MEDIVANA_BRANCH_ID,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    reason: "Pasien pulang sebelum diperiksa",
  }),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.post(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/cancel",
    headers={
        "Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}",
        "X-Branch-ID": os.environ["MEDIVANA_BRANCH_ID"],
    },
    json={
        "reason": "Pasien pulang sebelum diperiksa",
    },
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Kunjungan dibatalkanapplication/json

{
  "id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "branch_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "unit_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "unit_name": "string",
  "unit_specialty": "string",
  "practitioner_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "practitioner_name": "string",
  "payer_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "payer_name": "string",
  "payer_kind": "umum",
  "payer_reference": "string",
  "kind": "rawat_jalan",
  "status": "registered",
  "appointment_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "queue_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
  "queue_label": "string",
  "queue_status": "string",
  "chief_complaint": "string",
  "anamnesis": {},
  "registered_at": "2026-11-02T08:00:00+07:00",
  "started_at": "2026-11-02T08:00:00+07:00",
  "finished_at": "2026-11-02T08:00:00+07:00",
  "cancelled_at": "2026-11-02T08:00:00+07:00",
  "cancel_reason": "string",
  "version": 0,
  "patient": {
    "id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
    "name": "string",
    "mrn": "string",
    "sex": "male",
    "birth_date": "2026-11-02",
    "age_label": "string",
    "age_years": 0,
    "allergy_status": "unknown"
  }
}
Schema 200
Schema 200
NameTypeDescription
idstring (uuid)
branch_idstring (uuid)
patient_idstring (uuid)
unit_idstring (uuid)
unit_namestring
unit_specialtystring | null
practitioner_idstring (uuid) | null
practitioner_namestring | null
payer_idstring (uuid)
payer_namestring
payer_kindumum | bpjs | insurance | company
payer_referencestring | null
kindrawat_jalan | telekonsultasi | kunjungan_sehat
statusregistered | in_progress | finished | cancelled
appointment_idstring (uuid) | null
queue_idstring (uuid) | null
queue_labelstring | null
queue_statusstring | null
chief_complaintstring | null
anamnesisobject
registered_atstring (date-time)
started_atstring (date-time) | null
finished_atstring (date-time) | null
cancelled_atstring (date-time) | null
cancel_reasonstring | null
versioninteger
patientobject
patient.idstring (uuid)
patient.namestring
patient.mrnstring
patient.sexmale | female
patient.birth_datestring (date) | null
patient.age_labelstring
patient.age_yearsinteger | null
patient.allergy_statusunknown | none | has
Errors
  • 400bad-requestCabang aktif belum dipilih (X-Branch-ID)
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 409conflictKonflik data atau status tidak mengizinkan aksi
  • 422validationValidasi gagal; rincian per field di errors
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Tanda vital kunjungan (LOINC + UCUM)

latest = nilai terakhir per kunci. flag: N, L/H (rendah/tinggi), LL/HH (kritis), null (tidak dinilai).

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/vitals
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/vitals" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/vitals", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/vitals",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Observasiapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000007001",
      "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
      "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
      "panel_id": "3f0c2a10-5b7e-4c1d-9a2e-000000007101",
      "key": "systolic",
      "code": "8480-6",
      "display": "Tekanan darah sistolik",
      "value_num": 150,
      "value_text": null,
      "unit": "mm[Hg]",
      "flag": "H",
      "status": "final",
      "observed_at": "2026-10-29T09:05:00+07:00",
      "recorded_by": "3f0c2a10-5b7e-4c1d-9a2e-0000000d1001"
    }
  ],
  "latest": {
    "systolic": {
      "key": "systolic",
      "code": "8480-6",
      "value_num": 150,
      "unit": "mm[Hg]",
      "flag": "H"
    }
  }
}
Schema 200
Schema 200
NameTypeDescription
itemsarray<object>
items[].idstring (uuid)
items[].encounter_idstring (uuid)
items[].patient_idstring (uuid)
items[].panel_idstring (uuid) | null
items[].keystring (12 nilai)
items[].codestringLOINC
items[].displaystring
items[].value_numnumber | null
items[].value_textstring | null
items[].unitstring | nullUCUM
items[].flagN | L | H | LL | HH | null
items[].statusfinal | entered_in_error
items[].observed_atstring (date-time)
items[].recorded_bystring (uuid) | null
latestobject
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Catatan SOAP kunjungan

Bila belum ada catatan, respons adalah draf virtual dari template poli (id: null, is_new: true). version = versi klinis (naik saat koreksi setelah tanda tangan). Diaudit.

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/note
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Catatanapplication/json

{
  "id": "3f0c2a10-5b7e-4c1d-9a2e-000000006001",
  "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
  "template_id": "3f0c2a10-5b7e-4c1d-9a2e-000000006101",
  "subjective": "Batuk pilek 3 hari, demam ringan.",
  "objective": "T 37,8 °C, faring hiperemis.",
  "assessment": "ISPA",
  "plan": "Simtomatik, kontrol bila memburuk.",
  "extra": {},
  "status": "signed",
  "version": 1,
  "revision": 6,
  "signed_at": "2026-10-29T10:45:00+07:00",
  "signed_by": "3f0c2a10-5b7e-4c1d-9a2e-0000000d1001",
  "saved_at": "2026-10-29T10:42:13+07:00",
  "saved_at_label": "Tersimpan 10.42",
  "is_new": false
}
Schema 200
Schema 200
NameTypeDescription
idstring (uuid) | null
encounter_idstring (uuid)
template_idstring (uuid) | null
subjectivestring | null
objectivestring | null
assessmentstring | null
planstring | null
extraobject
statusdraft | signed
versionintegerVersi klinis
revisionintegerPenghitung simpan
signed_atstring (date-time) | null
signed_bystring (uuid) | null
saved_atstring (date-time) | null
saved_at_labelstring | null
is_newboolean
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Riwayat versi catatan yang sudah ditandatangani

Versi lama tidak pernah ditimpa (koreksi berversi, append-only). Diaudit.

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/note/versions
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note/versions" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note/versions", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/note/versions",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Versi (urut naik)application/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000006201",
      "version": 1,
      "subjective": "Batuk pilek 3 hari.",
      "objective": "T 37,8 °C.",
      "assessment": "ISPA",
      "plan": "Simtomatik",
      "extra": {},
      "content_hash": "9f2c4b1e0d8a7c6b5a49382716f5e4d3c2b1a09f8e7d6c5b4a3928171605f4e3",
      "reason": null,
      "signature_id": "3f0c2a10-5b7e-4c1d-9a2e-000000006301",
      "signer_name": "dr. Rina Contoh",
      "created_by": "3f0c2a10-5b7e-4c1d-9a2e-0000000d1001",
      "created_at": "2026-10-29T10:45:00+07:00"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].versioninteger
items[].subjectivestring | null
items[].objectivestring | null
items[].assessmentstring | null
items[].planstring | null
items[].extraobject
items[].content_hashstring
items[].reasonstring | nullAlasan koreksi (null untuk versi 1)
items[].signature_idstring (uuid)
items[].signer_namestring
items[].created_bystring (uuid)
items[].created_atstring (date-time)
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Diagnosis ICD-10 kunjungan

Diagnosis utama dulu.

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/diagnoses
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/diagnoses" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/diagnoses", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/diagnoses",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Diagnosisapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000008001",
      "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
      "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
      "icd10_code": "J06.9",
      "display": "Infeksi saluran napas atas akut, tidak spesifik",
      "is_primary": true,
      "kind": "new",
      "rank": 1,
      "notes": null,
      "created_at": "2026-10-29T10:30:00+07:00"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].encounter_idstring (uuid)
items[].patient_idstring (uuid)
items[].icd10_codestring
items[].displaystring
items[].is_primaryboolean
items[].kindnew | old
items[].rankinteger
items[].notesstring | null
items[].created_atstring (date-time)
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Tindakan ICD-9-CM kunjungan

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/procedures
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/procedures" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/procedures", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/procedures",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Tindakanapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000008101",
      "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
      "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000a0001",
      "icd9cm_code": "93.94",
      "display": "Pemberian obat pernapasan dengan nebulizer",
      "service_id": "3f0c2a10-5b7e-4c1d-9a2e-00000001f001",
      "service_name": "Nebulisasi",
      "quantity": 1,
      "practitioner_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
      "charge_id": "3f0c2a10-5b7e-4c1d-9a2e-000000009001",
      "status": "done",
      "notes": null,
      "performed_at": "2026-10-29T10:20:00+07:00"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].encounter_idstring (uuid)
items[].patient_idstring (uuid)
items[].icd9cm_codestring | null
items[].displaystring | null
items[].service_idstring (uuid) | null
items[].service_namestring | null
items[].quantitynumber
items[].practitioner_idstring (uuid) | null
items[].charge_idstring (uuid) | null
items[].statusstring
items[].notesstring | null
items[].performed_atstring (date-time)
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Tanda tangan elektronik kunjungan (penutupan dan koreksi)

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/signatures
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/signatures" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/signatures", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/signatures",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Tanda tanganapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000006301",
      "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000e0001",
      "note_id": "3f0c2a10-5b7e-4c1d-9a2e-000000006001",
      "note_version": 1,
      "kind": "close",
      "content_hash": "9f2c4b1e0d8a7c6b5a49382716f5e4d3c2b1a09f8e7d6c5b4a3928171605f4e3",
      "signer_membership_id": "3f0c2a10-5b7e-4c1d-9a2e-0000000d0001",
      "signer_name": "dr. Rina Contoh",
      "method": "internal",
      "reason": null,
      "signed_at": "2026-10-29T10:45:00+07:00"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].encounter_idstring (uuid)
items[].note_idstring (uuid)
items[].note_versioninteger
items[].kindclose | correction
items[].content_hashstringSHA-256 konten kanonik
items[].signer_membership_idstring (uuid)
items[].signer_namestring
items[].methodstring
items[].reasonstring | null
items[].signed_atstring (date-time)
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Dokumen yang terkait kunjungan

Scopes
encounters:read
RBAC permissions
encounter.read
Module
rme

Parameters

Parameters GET /encounters/{id}/documents
NameInTypeDescription
idrequiredpathstring (uuid)

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/documents" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/documents", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/encounters/3f0c2a10-5b7e-4c1d-9a2e-000000000001/documents",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Dokumenapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
      "patient_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
      "encounter_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
      "file_id": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
      "title": "string",
      "category": "general",
      "notes": "string",
      "filename": "string",
      "content_type": "string",
      "size_bytes": 0,
      "uploaded_by": "3f0c2a10-5b7e-4c1d-9a2e-000000000001",
      "created_at": "2026-11-02T08:00:00+07:00",
      "download_url": "string"
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].patient_idstring (uuid)
items[].encounter_idstring (uuid) | null
items[].file_idstring (uuid)
items[].titlestring
items[].categorygeneral | lab_external | imaging | referral | consent | photo | identity | other
items[].notesstring | null
items[].filenamestring
items[].content_typestring
items[].size_bytesinteger
items[].uploaded_bystring (uuid) | null
items[].created_atstring (date-time)
items[].download_urlstringPath relatif GET /clinical-documents/{id}/download
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenconfidential-recordScope tidak memberi izin (forbidden), rekam medis ditandai rahasia (confidential-record), atau baca-saja (read-only)
  • 404not-foundData tidak ada, milik organisasi lain, atau di luar cakupan cabang klien
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya

Template catatan SOAP

Bawaan: SOAP-UMUM, SOAP-GIGI, SOAP-KIA, SOAP-ESTETIK, SOAP-FISIO. fields = isian terstruktur yang tersimpan di Note.extra.

Scopes
encounters:read
RBAC permissions
encounter.read · encounter.write
Module
rme

Parameters

Parameters GET /note-templates
NameInTypeDescription
specialtyquerystring
unit_idquerystring (uuid)
include_inactivequeryboolean

Code examples

Code example language
curl -X GET "https://api.medivana.cloud/api/v1/note-templates" \
  -H "Authorization: Bearer $MEDIVANA_TOKEN"
const res = await fetch("https://api.medivana.cloud/api/v1/note-templates", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.MEDIVANA_TOKEN}`,
  },
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
const data = await res.json();
import os
import requests

resp = requests.get(
    "https://api.medivana.cloud/api/v1/note-templates",
    headers={"Authorization": f"Bearer {os.environ['MEDIVANA_TOKEN']}"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()

Responses

200Templateapplication/json

{
  "items": [
    {
      "id": "3f0c2a10-5b7e-4c1d-9a2e-000000006101",
      "code": "SOAP-GIGI",
      "name": "SOAP Poli Gigi",
      "specialty": "gigi",
      "unit_id": null,
      "subjective": "Keluhan utama:\n",
      "objective": "",
      "assessment": "",
      "plan": "",
      "fields": [
        {
          "key": "tooth_elements",
          "label": "Elemen gigi (FDI)",
          "type": "text"
        }
      ],
      "is_default": true,
      "is_active": true,
      "version": 1
    }
  ]
}
Schema 200
Schema 200
NameTypeDescription
itemsrequiredarray<object>
items[].idstring (uuid)
items[].codestring
items[].namestring
items[].specialtystring | null
items[].unit_idstring (uuid) | null
items[].subjectivestring
items[].objectivestring
items[].assessmentstring
items[].planstring
items[].fieldsarray<object>
items[].is_defaultboolean
items[].is_activeboolean
items[].versioninteger
Errors
  • 401unauthorizedToken tidak ada, tidak valid, kedaluwarsa, atau dicabut
  • 402module-lockedModul tidak aktif di paket organisasi
  • 403forbiddenScope token tidak memberi izin (forbidden), atau langganan klinik baca-saja untuk operasi tulis (read-only)
  • 429rate-limitedBatas laju klien (rate_limit_per_min) terlampaui; coba lagi pada menit berikutnya