---
title: Approval
description: Approval protocol schemas
---

{/* ⚠️  AUTO-GENERATED — DO NOT EDIT. Run build-docs.ts to regenerate. Hand-written docs go in content/docs/guides/. */}

Approval Step Approver Type

<Callout type="info">
**Source:** `packages/spec/src/automation/approval.zod.ts`
</Callout>

## TypeScript Usage

```typescript
import { ApprovalDecision, ApprovalEscalation, ApprovalNodeApprover, ApprovalNodeConfig, ApproverType } from '@objectstack/spec/automation';
import type { ApprovalDecision, ApprovalEscalation, ApprovalNodeApprover, ApprovalNodeConfig, ApproverType } from '@objectstack/spec/automation';

// Validate data
const result = ApprovalDecision.parse(data);
```

---

## ApprovalDecision

### Allowed Values

* `approve`
* `reject`


---

## ApprovalEscalation

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **enabled** | `boolean` | ✅ | Enable SLA-based escalation for this node |
| **timeoutHours** | `number` | ✅ | Hours before escalation triggers |
| **action** | `Enum<'reassign' \| 'auto_approve' \| 'auto_reject' \| 'notify'>` | ✅ | Action on escalation timeout |
| **escalateTo** | `string` | optional | User id, role, or manager level to escalate to |
| **notifySubmitter** | `boolean` | ✅ | Notify the original submitter on escalation |


---

## ApprovalNodeApprover

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **type** | `Enum<'user' \| 'role' \| 'team' \| 'department' \| 'manager' \| 'field' \| 'queue'>` | ✅ |  |
| **value** | `string` | optional | User id / role / team / department / field / queue — per `type` |


---

## ApprovalNodeConfig

### Properties

| Property | Type | Required | Description |
| :--- | :--- | :--- | :--- |
| **approvers** | `Object[]` | ✅ | Allowed approvers for this node |
| **behavior** | `Enum<'first_response' \| 'unanimous'>` | ✅ | How to combine multiple approvers |
| **lockRecord** | `boolean` | ✅ | Lock the record from editing while pending |
| **approvalStatusField** | `string` | optional | Business-object field to mirror request status onto |
| **escalation** | `Object` | optional | Per-node SLA escalation |


---

## ApproverType

### Allowed Values

* `user`
* `role`
* `team`
* `department`
* `manager`
* `field`
* `queue`


---

