Sari la conținut
plusmedical logo for light backgrounds

Authentication

Every request to /api/public/v1 authenticates with an organization API key sent as a bearer token:

curl https://api.plusmedical.ro/api/public/v1/locations \
  -H "Authorization: Bearer pm_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Key lifecycle

Scopes

Each key carries an explicit list of scopes; a request to a route whose scope the key lacks returns 403 insufficient_scope naming the missing scope.

ScopeGrants
read:locationsGET /locations
read:doctorsGET /doctors
read:servicesGET /services
read:availabilityGET /availability
read:patientsGET /patients (contact data masked)
write:patientsPOST/PATCH /patients + unmasked contact data on reads
read:appointmentsGET /appointments
write:appointmentsPOST /appointments + cancel/reschedule
read:invoicesGET /invoices (issued documents only)

No clinical scopes exist in v1. Visits, lab values, treatment plans and documents are not exposed through API keys — a deliberate GDPR-driven decision. Clinical access may arrive in v2 behind explicit patient consent.

Testing your integration

There is no separate sandbox in v1. The recommended pattern is a test organization: create a second organization on a trial/development subscription, issue keys there, and develop against its data. Keys always operate strictly inside their own organization — tenant isolation is enforced at the database level (PostgreSQL row-level security).