The ApprovalStatus entity represents a single approval requirement on a target (Booking, TimeEntry, or Expense). It is created automatically by an ApprovalWorkflow once a triggering event matches the workflow's approval policy, and it tracks whether a specific approver has approved or rejected the target.
Multiple approval statuses can be attached to the same target — one per required approver (explicit or dynamic). A target is only considered fully approved once its approval statuses satisfy the rule defined by ApprovalWorkflow.approval_requirement_id (Any of vs All of listed approvers).
Each approval status carries:
approver relationship) or a dynamic role resolved at approval time (dynamic_approver_type_id: Manager, Budget owner, Project manager, or Designated approver).approved_at) and rejection (rejected_at).note left by the actor when approving or rejecting.The status is mutated via the dedicated approve and reject endpoints, which also trigger the broader approval flow on the target — potentially auto-approving (or auto-rejecting) the target once the workflow's rule is satisfied.
The person who actually approved or rejected this status. May differ from the assigned approver when a fallback or override was used.
The ID of the person who actually approved or rejected this status. May differ from the assigned approver when a fallback or override was used.
The workflow that produced this approval status.
The ID of the workflow that produced this approval status.
Timestamp at which this approval status was approved. Null while pending or rejected.
The person assigned to act on this approval status. Null when the approver is resolved dynamically.
Logical grouping key. Approval statuses sharing the same key form a single approval requirement — approving any one of them counts as approving the whole group.
The ID of the person assigned to act on this approval status. Null when the approver is resolved dynamically.
The booking awaiting approval. Present when target_type is booking.
The ID of the booking this approval status belongs to.
Identifies the role-based approver when the approver is resolved dynamically rather than from an explicit person.
1
2
3
4
The expense awaiting approval. Present when target_type is expense.
The ID of the expense this approval status belongs to.
Identifies the approver to use when the dynamic approver cannot be resolved.
1
2
The unique identifier of this approval status.
Optional note added by the actor when approving or rejecting this status.
Timestamp at which this approval status was rejected. Null while pending or approved.
The type of entity this approval status belongs to.
booking
time_entry
expense
The time entry awaiting approval. Present when target_type is time_entry.
The ID of the time entry this approval status belongs to.