Goal
Approve a draft post, moving it from Inbox to Approved status. This is the quality gate — only approved content moves forward.
Which Agents Use This
- reviewer — Validate drafts against voice profile, brand compliance, and strategy
- custom — Any agent with review permissions
- Requires Editor or Admin role
Hard Rules
- MUST validate role (Editor/Admin only)
- MUST change status: Draft → Approved (or Scheduled if schedule_time provided)
- MUST record approver (agent or human)
- SHOULD include approval reasoning in notes
- MUST NOT approve posts that violate voice profile or brand guidelines
Steps
1. Validate permissions
- Verify user/agent has Editor or Admin role
- Verify draft_id exists and is in reviewable state
2. Validate draft quality
- Check against voice profile (if reviewer agent)
- Verify brand compliance
- Confirm strategic fit
3. Approve post
- Update post status: Draft → Approved
- Record approver (agent_id or user_id)
- Add approval notes if provided
- Timestamp approval
4. Schedule if requested
- If schedule_time provided:
- Validate time is future
- Update post status: Approved → Scheduled
- Set scheduled_time
5. Return confirmation
- Return post_id, new status, confirmation message
Output
{
"success": true,
"post_id": "uuid",
"status": "Approved",
"message": "Post approved. Ready for scheduling."
}
Failure Handling
- If not Editor/Admin role: return error "Permission denied - Editor role required"
- If draft_id not found: return error "Draft not found"
- If schedule_time invalid (past): return error "Schedule time must be in future"
Example Usage
Scenario 1: Reviewer agent approving draft
{
"draft_id": "uuid",
"notes": "Voice profile match verified. Strategic timing appropriate. Approved."
}
Result: Post moved to Approved status, ready for scheduling
Scenario 2: Approve and schedule immediately
{
"draft_id": "uuid",
"notes": "Great content, scheduling for optimal time.",
"schedule_time": "2026-02-21T09:00:00Z"
}
Result: Post approved AND scheduled for 9am tomorrow
1---2name: bolta-approve-post3version: 2.0.04description: Approve a draft post, moving it from Inbox to Approved status, ready for scheduling or publishing5category: review6roles_allowed: [Editor, Admin]7required_scopes: [review:approve]8agent_types: [reviewer, custom]9safe_defaults:10 require_editor_role: true11tools_required:12 - bolta.update_post13inputs_schema:14 type: object15 required: [draft_id]16 properties:17 draft_id: { type: string, description: "Draft post UUID to approve" }18 notes: { type: string, description: "Feedback for creator or human (optional)" }19 approve_with_changes: { type: boolean, description: "Approve despite minor suggested tweaks", default: false }20 schedule_time: { type: string, description: "ISO timestamp if scheduling immediately (optional)" }21outputs_schema:22 type: object23 properties:24 success: { type: boolean }25 post_id: { type: string }26 status: { type: string, enum: [Approved, Scheduled] }27 message: { type: string }28organization: bolta.ai29author: Bolta Team30---3132## Goal33Approve a draft post, moving it from Inbox to Approved status. This is the **quality gate** — only approved content moves forward.3435## Which Agents Use This36- **reviewer** — Validate drafts against voice profile, brand compliance, and strategy37- **custom** — Any agent with review permissions38- Requires Editor or Admin role3940## Hard Rules411. MUST validate role (Editor/Admin only)422. MUST change status: Draft → Approved (or Scheduled if schedule_time provided)433. MUST record approver (agent or human)444. SHOULD include approval reasoning in notes455. MUST NOT approve posts that violate voice profile or brand guidelines4647## Steps4849### 1. Validate permissions50- Verify user/agent has Editor or Admin role51- Verify draft_id exists and is in reviewable state5253### 2. Validate draft quality54- Check against voice profile (if reviewer agent)55- Verify brand compliance56- Confirm strategic fit5758### 3. Approve post59- Update post status: Draft → Approved60- Record approver (agent_id or user_id)61- Add approval notes if provided62- Timestamp approval6364### 4. Schedule if requested65- If schedule_time provided:66 - Validate time is future67 - Update post status: Approved → Scheduled68 - Set scheduled_time6970### 5. Return confirmation71- Return post_id, new status, confirmation message7273## Output74```json75{76 "success": true,77 "post_id": "uuid",78 "status": "Approved",79 "message": "Post approved. Ready for scheduling."80}81```8283## Failure Handling84- If not Editor/Admin role: return error "Permission denied - Editor role required"85- If draft_id not found: return error "Draft not found"86- If schedule_time invalid (past): return error "Schedule time must be in future"8788## Example Usage8990### Scenario 1: Reviewer agent approving draft91```json92{93 "draft_id": "uuid",94 "notes": "Voice profile match verified. Strategic timing appropriate. Approved."95}96```97**Result:** Post moved to Approved status, ready for scheduling9899### Scenario 2: Approve and schedule immediately100```json101{102 "draft_id": "uuid",103 "notes": "Great content, scheduling for optimal time.",104 "schedule_time": "2026-02-21T09:00:00Z"105}106```107**Result:** Post approved AND scheduled for 9am tomorrow