Developers

The drug register

Every product given at the clinic, with batch, dose, site, both clinicians and the authority it was given under. Hear it by webhook, reconcile with GET /administrations.

Every product given at a clinic is one administration (adm_…) on its drug register. It records what was given, never what was approved: an approval can be a plan for up to 12 months, and a dose may be less than it.

Hear it#

EventWhen
administration.recordedOne per product, when the note locks; a product added to a signed note, when it is recorded (after_signing: true).
administration.voidedAn administration you were sent is removed.
administration.prescriber_recordedA prescriber is named afterwards for administrations you were sent (they arrived with prescriber source not_recorded).

Each carries dose_public_id (dose_…): the legs of one dose split across vials or batches share it. With clinical content, each carries the same administration object as GET /administrations/{id}.

The administration object#

  • product, generic_name, strength, schedule, artg_id, quantity, units, route.
  • sites: each area (slug), its quantity and route.
  • batch_number, batch_expiry, and the vial with its reconstitution.
  • administered_at, administered_by and prescriber, each with registrations. prescriber.source is authority, clinic_prescriber, outside_claro or not_recorded.
  • authority: the treatment authority it was given under, with your own ID for it (external_ids), its references, the lines it was counted against and within_authority.

Who the patient is needs patients:read. What was given needs clinical content.

Reconcile#

GET /administrations (administrations:read) lists the register oldest change first. A void and a prescriber named later are changes. Voided rows appear only with include_voided=true, as status: voided. Filter by patient or authority.

GET /api/public/v1/administrations?updated_since=2026-11-01T00:00:00Z&include_voided=true
Authorization: Bearer claro_sk_test_au_…

After an outage, take the deltas from GET /events and the state from this list. Skip repeats by webhook-id and by adm_….