Approval Status

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:

  • The approver assigned to act on it — either an explicit person (via the approver relationship) or a dynamic role resolved at approval time (dynamic_approver_type_id: Manager, Budget owner, Project manager, or Designated approver).
  • A fallback approver type used when the dynamic approver cannot be resolved (e.g., the person has no manager).
  • The actual approver — the person who took the action. May differ from the assigned approver when a fallback was used or when someone with appropriate permissions approved on behalf of the assignee.
  • Timestamps for approval (approved_at) and rejection (rejected_at).
  • An optional 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.

Attributes

Response

The person who actually approved or rejected this status. May differ from the assigned approver when a fallback or override was used.

actual_approver_id integer
Parameter `filter`

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.

approval_workflow approval workflow
Response

The workflow that produced this approval status.

approval_workflow_id integer
Parameter `filter`

The ID of the workflow that produced this approval status.

approved_at string
Response

Timestamp at which this approval status was approved. Null while pending or rejected.

approver person
Response

The person assigned to act on this approval status. Null when the approver is resolved dynamically.

approver_group_key string
Response

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.

approver_id integer
Parameter `filter`

The ID of the person assigned to act on this approval status. Null when the approver is resolved dynamically.

booking booking
Response

The booking awaiting approval. Present when target_type is booking.

booking_id integer
Parameter `filter`

The ID of the booking this approval status belongs to.

dynamic_approver_type_id integer
Response Enum

Identifies the role-based approver when the approver is resolved dynamically rather than from an explicit person.

Enum Values (4 values)

  • 1
    Manager
  • 2
    Budget owner
  • 3
    Project manager
  • 4
    Designated approver
expense expense
Response

The expense awaiting approval. Present when target_type is expense.

expense_id integer
Parameter `filter`

The ID of the expense this approval status belongs to.

fallback_approver_type_id integer
Response Enum

Identifies the approver to use when the dynamic approver cannot be resolved.

Enum Values (2 values)

  • 1
    Organization owner
  • 2
    Budget owner
id integer
Parameter `filter`

The unique identifier of this approval status.

note string
Response

Optional note added by the actor when approving or rejecting this status.

rejected_at string
Response

Timestamp at which this approval status was rejected. Null while pending or approved.

target_type string
Response Enum

The type of entity this approval status belongs to.

Enum Values (3 values)

  • booking
    Booking
  • time_entry
    Time Entry
  • expense
    Expense
time_entry time entry
Response

The time entry awaiting approval. Present when target_type is time_entry.

time_entry_id integer
Parameter `filter`

The ID of the time entry this approval status belongs to.