{
  "id": "3e4f5a6b-7c8d-4e9f-0a1b-2c3d4e5f6a7b",
  "version": 14,
  "name": "apx-topics",
  "creator": { "id": "a1000000-0000-4000-8000-000000000001", "className": "Organisation" },
  "locator": "https://apx-standard.org/registries/apx-topics.json",
  "userDefinedCodeListEntries": [
    { "definedValue": "apx.control.command.status.v1", "entryDescription": "A command transitioned lifecycle state (data: Command).", "entryIndex": 0 },
    { "definedValue": "apx.control.device.state.v1", "entryDescription": "A device changed state (data: DeviceStatus).", "entryIndex": 1 },
    { "definedValue": "apx.alert.raised.v1", "entryDescription": "An alert was raised (data: Alert).", "entryIndex": 2 },
    { "definedValue": "apx.alert.status.v1", "entryDescription": "An alert changed lifecycle state (data: Alert).", "entryIndex": 3 },
    { "definedValue": "apx.reservation.noshow.v1", "entryDescription": "A reservation reached its no-show condition (data: ReservationSummary; subject: the AssignedRight).", "entryIndex": 4 },
    { "definedValue": "apx.tolling.transaction.created.v1", "entryDescription": "A toll transaction was created (data: TollTransaction).", "entryIndex": 5 },
    { "definedValue": "apx.tolling.transaction.status.v1", "entryDescription": "A toll transaction changed status, including disputes (data: TollTransaction).", "entryIndex": 6 },
    { "definedValue": "apx.subscription.failed.v1", "entryDescription": "A subscription exhausted its retry schedule and was marked failed (data: SubscriptionFailure; subject: the subscription, className ApxEventSubscription).", "entryIndex": 7 },
    { "definedValue": "apx.data.occupancy.v1", "entryDescription": "Occupancy changed materially for a place element — threshold crossing or publisher-defined delta (data: OccupancySnapshot).", "entryIndex": 8 },
    { "definedValue": "apx.accounts.payment.recorded.v1", "entryDescription": "A payment was recorded — taken via /v1/payments or ingested from a lane device (data: PaymentRecord). Fills the financial-analytics gap: APDS EventTypeEnum has no payment events.", "entryIndex": 9 },
    { "definedValue": "apx.data.observation.created.v1", "entryDescription": "A new Observation was ingested — LPR read, RFID hit, sensor event (data: the APDS ObservationElement, one event per element; subject references it; elementIds carries the lane or place). Fills the sensor-analytics gap: APDS EventTypeEnum has no Observation events.", "entryIndex": 10 },
    { "definedValue": "apx.resolution.context.created.v1", "entryDescription": "A resolution context was created or materially recomputed (data: ResolutionContext) — enables event-driven preloading so agent consoles pop before the call is answered.", "entryIndex": 11 },
    { "definedValue": "apx.support.interaction.recorded.v1", "entryDescription": "A support interaction was recorded or updated (data: SupportInteraction).", "entryIndex": 12 },
    { "definedValue": "apx.violations.detected.v1", "entryDescription": "A violation candidate was recorded from automated, guided, or manual detection (data: Violation) — drives guided-enforcement handheld queues.", "entryIndex": 13 },
    { "definedValue": "apx.violations.issued.v1", "entryDescription": "A notice, warning, or citation was issued on a violation (data: Violation).", "entryIndex": 14 },
    { "definedValue": "apx.violations.status.v1", "entryDescription": "A violation changed lifecycle state — review, payment, appeal open/resolve, void (data: Violation).", "entryIndex": 15 },
    { "definedValue": "apx.validations.redeemed.v1", "entryDescription": "A validation was applied to a ticket/session from any channel, or reversed (data: ValidationRedemption).", "entryIndex": 16 },
    { "definedValue": "apx.validations.program.status.v1", "entryDescription": "A validation program was enrolled, suspended, resumed, or ended (data: ValidationProgram).", "entryIndex": 17 },
    { "definedValue": "apx.validations.statement.closed.v1", "entryDescription": "A merchant billing period was closed into an immutable statement (data: ValidationStatement).", "entryIndex": 18 },
    { "definedValue": "apx.credentials.status.v1", "entryDescription": "A credential was issued, activated, suspended, resumed, reported lost, revoked, expired, or replaced (data: CredentialRecord).", "entryIndex": 19 },
    { "definedValue": "apx.credentials.access.v1", "entryDescription": "A credential was presented at a lane and access was granted or denied (data: AccessEvent; a CredentialAccessEvent whenever a record matched, Part 21 §21.4). Fills the gap: APDS EventTypeEnum has no access events.", "entryIndex": 20 },
    { "definedValue": "apx.valet.ticket.status.v1", "entryDescription": "A valet ticket changed lifecycle state — dropped, parked, retrieving, staged, handed back, closed, cancelled (data: ValetTicket).", "entryIndex": 21 },
    { "definedValue": "apx.valet.retrieval.requested.v1", "entryDescription": "A customer or attendant requested a valeted vehicle; carries channel, ETA, and promised time (data: ValetTicket) — drives runner boards and customer notifications.", "entryIndex": 22 },
    { "definedValue": "apx.permits.pool.availability.v1", "entryDescription": "A permit pool's issued count or capacity changed (data: PoolAvailability; subject: the RightSpecification). Optional for apx-permits (Part 14 §14.2c).", "entryIndex": 23 },
    { "definedValue": "apx.data.observation.updated.v1", "entryDescription": "An ingested Observation was replaced through native PUT /observations/{id} — e.g. the LPR system revised accessEvent (data: the APDS ObservationElement as it now stands; subject and elementIds place binding as for apx.data.observation.created.v1; consumers keep the highest version). Required for apx-lpr (Part 13 §13.4).", "entryIndex": 24 },
    { "definedValue": "apx.charging.session.status.v1", "entryDescription": "A ChargingSession transitioned lifecycle state — authorized, pluggedIn, charging, suspended, complete, idle, unplugged, closed, cancelled, faulted (data: ChargingSession; place-bound on ChargingSession.place). Required for apx-charging (Part 23 §23.12).", "entryIndex": 25 },
    { "definedValue": "apx.charging.idle.started.v1", "entryDescription": "A ChargingSession entered idle after its idlePolicy grace elapsed with the cable still connected; carries the idle policy and the minimized vehicle summary (data: ChargingSession) — drives the customer's move-your-car notification and the Part 19 enforcement hook. Required for apx-charging (Part 23 §23.2, §23.10).", "entryIndex": 26 },
    { "definedValue": "apx.charging.point.status.v1", "entryDescription": "A charging point's availability or bay presence changed (data: ChargingPointStatus; place-bound on ChargingPointStatus.place). Required for apx-charging (Part 23 §23.1, §23.3).", "entryIndex": 27 },
    { "definedValue": "apx.platelists.changed.v1", "entryDescription": "A plate list or one of its entries was created, changed, or removed (data: PlateList with entryCount; subject: the list). Consumers resync entries through the Part 5 feed on /v1/plate-lists/{id}/entries. Required for apx-plate-lists (Part 24 §24.3).", "entryIndex": 28 },
    { "definedValue": "apx.ui.launch.changed.v1", "entryDescription": "A UI launch was issued, opened, closed, or expired (data: UiLaunch without url; subject: the launch; place-bound on UiLaunch.place). Required for apx-ui-launch (Part 25 §25.3).", "entryIndex": 29 },
    { "definedValue": "apx.ui.action.recorded.v1", "entryDescription": "An action done in a launched vendor screen was recorded as a UiActionRecord because no native resource could express it (data: UiActionRecord; subject: the launch; carries the launch's correlationId). Required for apx-ui-launch (Part 25 §25.4).", "entryIndex": 30 },
    { "definedValue": "apx.equipment.changed.v1", "entryDescription": "A piece of equipment or its APX decorations (equipment-detail, camera, external-ids) was added, changed, or removed (data: EquipmentRecord; subject: the SupplementalEquipment; place-bound). Lets other systems stay in sync without re-reading the place. Required for apx-site-config (Part 26 §26.7).", "entryIndex": 31 },
    { "definedValue": "apx.commspoints.changed.v1", "entryDescription": "A comms point was added, changed, or removed (data: CommsPoint; subject: the comms point; place-bound). Required for apx-site-config (Part 26 §26.7).", "entryIndex": 32 },
    { "definedValue": "apx.approvals.changed.v1", "entryDescription": "An approval request was created, decided, or expired (data: ApprovalRequest; subject: the request; place-bound). An approver's system subscribes to it for its queue. Required for apx-resolution when approvals are offered (Part 17 §17.8).", "entryIndex": 33 },
    { "definedValue": "apx.displays.shown.v1", "entryDescription": "A sign showed a message and the system that drove it recorded it (data: DisplayRecord; subject: the display; place-bound on its place). Carries no message text and no plate. Required for apx-site-config (Part 26 §26.9).", "entryIndex": 34 }
  ]
}
