Search the docs or ask a question /
Concept

Programs

A named set of policies over one source, switched on and paused together

Get started with programs

A program is how controls ship. It is created from one or more policy packs, gets one policy per template chosen, and switches them on together under one owner. Pause and Resume flip every policy in the program at once; Archive retires it. The console lists programs under Programs, with the columns Program, Segment, Source, Status, Policies, Exceptions, Owner and Updated.

Packs × source

Packs supply the templates; the source says what the policies judge. A program has exactly one source, chosen at creation and never changed:

  • Transaction monitoring (subscribed): the program subscribes to event streams, each a source app and an event type, or the built-in Chain source and a chain. Every event on a subscribed stream is judged by the program’s active policies, from the moment of subscription forward. Several programs can subscribe to one stream and judge it under their own limits. A subscribed program with no streams reads “Manual entry” in the register.
  • Identity verification (hosted): the program owns one verification flow, walked by a person on Hira’s hosted page. Each step of the flow is judged by a policy bound to that step. Verification sessions open on a hosted program alone.

A limit is never global: every policy belongs to one program. A stream that no program with active policies subscribes to is watched by nothing, and check() answers it Deny with reasonCode: "NoActivePolicy".

Creating a program

Programs are created in the console. The wizard runs Details, Product, Streams, Policies, Configure, Review for a Transaction monitoring program, and Details, Product, Flow template, Review for an Identity verification program. A program is filed under a moment (Onboarding, Ongoing monitoring, Enhanced due diligence, or a name of the workspace’s own) and an optional segment. Templates marked Draft show “Not available yet” and cannot be chosen. The API has no door that creates or edits a program.

Editable after adoption

A pack is a starting point. Every policy inside a program stays editable, and editing a policy never edits its template. Every change to a program or a policy is kept as a history row; a hosted program’s flow has numbered revisions, and each verification session records the flowRevision it walks.

Owner & clocks

A program names an owner, optionally, and two clocks: Hard breach SLA (hours), 4 unless set, and Soft breach SLA (hours), 24 unless set. A single policy can override either clock under its Resolution SLA. For a recorded event the clock starts when the exception opens; for a chain transfer it starts at the transfer’s block time.

What a program owns

  • The policies it switched on.
  • Its source: the stream subscriptions, or the one hosted flow. Wallets are never attached to a program; the wallet register belongs to the account.
  • The owner who answers for its exceptions, and the SLA those exceptions run on.
Not in this build. Reading which controls were live on a past date: the history rows are kept, and no screen or door reads them as at a date yet.

Sessions on a program

A hosted program in a sandbox account is what the quickstart opens sessions on. With the program open in the console, its id is the segment after active-programs/ in the address.

sessions.mjs
const session = await hira.verificationSessions.create({ programId, customerRef: "user-1042" });
const page = await hira.verificationSessions.list({ programId });   // the program's sessions, newest first

A program that subscribes to streams answers 404 program_not_found; a paused one, or one whose flow has a step no policy judges, answers 409 program_not_active.