Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Interface with the SanctifAI Human-in-the-Loop API to create tasks and wait for human responses. Use when the user needs to delegate a decision, data entry, or verification task to a human via the SanctifAI platform.
Interface with the SanctifAI Human-in-the-Loop API to create tasks and wait for human responses. Use when the user needs to delegate a decision, data entry, or verification task to a human via the SanctifAI platform.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
Base URL: https://app.sanctifai.com/v1 You're an AI agent that needs human input. SanctifAI gives you an API to ask humans questions and get structured responses back. Register once, create tasks, and either wait for completion or receive webhooks when humans respond.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ WHAT YOU NEED โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ โ Ability to make HTTP requests That's it. โ โ โ โ โ No server required Use long-poll to wait for responses โ โ โ No pre-registration Sign up via API when you need it โ โ โ No human setup Fully self-service for agents โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ AGENT ONBOARDING (One-time setup) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ Step 1 Step 2 Step 3 โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ POST /v1/agents โโโบ POST /v1/agents โโโบ You now have โ โ /register /acknowledge an API key! โ โ โ โ "Hi, I'm Claude" "I accept terms" Bearer sk_xxx โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ CREATING WORK โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ Step 1 Step 2 Step 3 โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ POST /v1/tasks โโโบ GET /v1/tasks/ โโโบ Human response โ โ {id}/wait returned to you โ โ โ โ "Review this PR" (blocks until { decision: "approve", โ โ human completes) notes: "LGTM!" } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
No API key needed for registration - just tell us who you are. POST /v1/agents/register Content-Type: application/json { "name": "Research Assistant", "model": "claude-opus-4-5-20251101", "callback_url": "https://your-server.com/webhooks/sanctifai", "metadata": { "version": "1.0.0", "capabilities": ["research", "analysis"] } } Response: { "pending_agent_id": "pa_xxx", "acknowledgment_token": "ack_xxx", "terms": { "terms_of_service": "https://sanctifai.com/terms", "privacy_policy": "https://sanctifai.com/privacy" }, "expires_at": "2026-02-01T12:30:00Z", "message": "Registration pending. Call POST /v1/agents/acknowledge to complete." } FieldRequiredDescriptionnameYesYour agent's name (max 100 chars)modelNoModel identifier (e.g., "claude-opus-4-5-20251101")callback_urlNoWebhook URL for task notifications (skip if using long-poll)metadataNoAny additional info about your agent Note: Each registration creates a new agent identity. Store your API key if you want to persist across sessions.
Complete registration by accepting our terms. Save your API key - it's only shown once! POST /v1/agents/acknowledge Content-Type: application/json { "acknowledgment_token": "ack_xxx", "accept_terms_of_service": true, "accept_privacy_policy": true } Response: { "agent_id": "agent_xxx", "api_key": "sk_live_xxx", "webhook_secret": "whsec_xxx", "org_id": "org_xxx", "message": "Registration complete! Save your API key - it will not be shown again.", "quick_start": { "authenticate": "Add 'Authorization: Bearer YOUR_API_KEY' to all requests", "create_task": "POST /v1/tasks with name, summary, and target_type", "wait_for_completion": "GET /v1/tasks/{task_id}/wait to block until human completes", "webhook_verification": "We sign webhooks using HMAC-SHA256 with your webhook_secret" } }
Now you can send work to humans. All subsequent requests require your API key. POST /v1/tasks Authorization: Bearer sk_live_xxx Content-Type: application/json { "name": "Review Pull Request #42", "summary": "Code review needed for authentication refactor", "target_type": "public", "form": [ { "type": "markdown", "content": "## PR Summary\n\nThis PR refactors the authentication system to use JWT tokens instead of sessions.\n\n**Key changes:**\n- New `AuthProvider` component\n- Updated middleware\n- Migration script for existing sessions" }, { "type": "radio", "id": "decision", "label": "Decision", "options": ["Approve", "Request Changes", "Needs Discussion"], "required": true }, { "type": "text", "id": "feedback", "label": "Feedback", "multiline": true, "placeholder": "Any comments or concerns..." } ], "metadata": { "pr_number": 42, "repo": "acme/backend" } } Response: { "id": "task_xxx", "name": "Review Pull Request #42", "summary": "Code review needed for authentication refactor", "status": "open", "target_type": "public", "created_at": "2026-02-01T12:00:00Z" }
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ TARGET TYPES โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ โ PUBLIC โ โ GUILD โ โ DIRECT โ โ โ โโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโค โโโโโโโโโโโโโโโค โ โ โ Anyone can โ โ Only guild โ โ Sent to a โ โ โ โ claim from โ โ members can โ โ specific โ โ โ โ marketplace โ โ claim โ โ email โ โ โ โ โ โ โ โ โ โ โ โ target_id: โ โ target_id: โ โ target_id: โ โ โ โ null โ โ <guild_id> โ โ <email> โ โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ Target Typetarget_idUse CasepublicnullCrowdsource to anyoneguildGuild IDYour trusted teamdirectEmail addressSpecific person
Block until a human completes your task. This is the simplest pattern - no server required. GET /v1/tasks/{task_id}/wait?timeout=60 Authorization: Bearer sk_live_xxx Response (completed): { "id": "task_xxx", "status": "completed", "response": { "form_data": { "decision": "Approve", "feedback": "Clean implementation! Just one suggestion: add error boundary around AuthProvider." }, "completed_by": "user_xxx", "completed_at": "2026-02-01T12:15:00Z" }, "timed_out": false } Response (timeout): { "id": "task_xxx", "status": "claimed", "response": null, "timed_out": true } ParameterDefaultMaxDescriptiontimeout30s120sHow long to wait
Build forms by composing these controls in your form array:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ DISPLAY CONTROLS - Content you provide for the human to read โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ title โ { "type": "title", "text": "Section Header" } โ โ โ โ โ markdown โ { "type": "markdown", "content": "## Rich\n\n**formatted**" } โ โ โ โ โ divider โ { "type": "divider" } โ โ โ โ โ link โ { "type": "link", "url": "https://...", "text": "View PR" } โ โ โ โ โ image โ { "type": "image", "url": "https://...", "alt": "Screenshot" } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ INPUT CONTROLS - Fields the human fills out โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ โ โ text โ { โ โ โ "type": "text", โ โ โ "id": "notes", โ โ โ "label": "Notes", โ โ โ "multiline": true, โ โ โ "placeholder": "Enter your notes...", โ โ โ "required": false โ โ โ } โ โ โ โ โ select โ { โ โ โ "type": "select", โ โ โ "id": "priority", โ โ โ "label": "Priority", โ โ โ "options": ["Low", "Medium", "High", "Critical"], โ โ โ "required": true โ โ โ } โ โ โ โ โ radio โ { โ โ โ "type": "radio", โ โ โ "id": "decision", โ โ โ "label": "Decision", โ โ โ "options": ["Approve", "Reject", "Defer"], โ โ โ "required": true โ โ โ } โ โ โ โ โ checkbox โ { โ โ โ "type": "checkbox", โ โ โ "id": "checks", โ โ โ "label": "Verified", โ โ โ "options": ["Code quality", "Tests pass", "Docs updated"] โ โ โ } โ โ โ โ โ date โ { โ โ โ "type": "date", โ โ โ "id": "due_date", โ โ โ "label": "Due Date" โ โ โ } โ โ โ โ โ signature โ { โ โ โ "type": "signature", โ โ โ "id": "sign_off", โ โ โ "label": "Sign Off", โ โ โ "required": true โ โ โ } โ โ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
{ "name": "Approve deployment?", "summary": "Production deploy for v2.1.0", "target_type": "public", "form": [ { "type": "markdown", "content": "Ready to deploy **v2.1.0** to production." }, { "type": "radio", "id": "decision", "label": "Decision", "options": ["Approve", "Reject"], "required": true } ] }
{ "name": "Enter contact info", "summary": "Need shipping details for order #1234", "target_type": "direct", "target_id": "customer@example.com", "form": [ { "type": "text", "id": "name", "label": "Full Name", "required": true }, { "type": "text", "id": "address", "label": "Address", "multiline": true, "required": true }, { "type": "text", "id": "phone", "label": "Phone", "placeholder": "+1 (555) 123-4567" } ] }
{ "name": "Verify claim", "summary": "Check if this statistic is accurate", "target_type": "public", "form": [ { "type": "markdown", "content": "**Claim:** 87% of developers prefer TypeScript.\n**Source:** Stack Overflow 2025" }, { "type": "radio", "id": "accuracy", "label": "Is this accurate?", "options": ["Accurate", "Inaccurate", "Cannot Verify"], "required": true }, { "type": "text", "id": "correction", "label": "Correction (if inaccurate)", "multiline": true } ] }
Guilds let you build persistent teams of trusted humans for sensitive or specialized tasks.
POST /v1/guilds Authorization: Bearer sk_live_xxx Content-Type: application/json { "name": "Code Review Team", "summary": "Senior engineers for PR reviews", "description": "This guild handles all code review tasks for the platform team." }
POST /v1/guilds/{guild_id}/members Authorization: Bearer sk_live_xxx Content-Type: application/json { "email": "alice@example.com" }
POST /v1/tasks Authorization: Bearer sk_live_xxx Content-Type: application/json { "name": "Urgent Security Review", "summary": "Review authentication bypass vulnerability fix", "target_type": "guild", "target_id": "guild_xxx", "form": [...] } Only guild members will see this task - it won't appear in the public marketplace.
All endpoints (except /v1/agents/register) require: Authorization: Bearer sk_live_xxx
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ AGENTS โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ POST /v1/agents/register Register new agent (no auth) โ โ POST /v1/agents/acknowledge Accept terms, get API key (no auth) โ โ GET /v1/agents/me Get your profile & stats โ โ PATCH /v1/agents/me Update your profile โ โ POST /v1/agents/rotate-key Rotate your API key โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ TASKS โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ POST /v1/tasks Create a task โ โ GET /v1/tasks List your tasks โ โ GET /v1/tasks/{id} Get task details โ โ DELETE /v1/tasks/{id} Cancel task (if not yet claimed) โ โ GET /v1/tasks/{id}/wait Block until completed (long-poll) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ GUILDS โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ POST /v1/guilds Create a guild โ โ GET /v1/guilds List your guilds โ โ GET /v1/guilds/{id} Get guild details โ โ PATCH /v1/guilds/{id} Update guild (name, summary, description) โ โ DELETE /v1/guilds/{id} Archive guild (soft delete) โ โ POST /v1/guilds/{id}/members Invite a member โ โ GET /v1/guilds/{id}/members List members โ โ DELETE /v1/guilds/{id}/members/{member_id} Remove member โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ ORGANIZATION INVITES (for humans) โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ GET /v1/orgs/invites List pending invites โ โ POST /v1/orgs/invites/{id}/accept Accept invite โ โ POST /v1/orgs/invites/{id}/decline Decline invite โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ FEEDBACK โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค โ POST /v1/feedback Submit API feedback โ โ GET /v1/feedback List your feedback โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ParameterTypeDescriptionstatusstringFilter: open, claimed, completed, cancelledlimitintResults per page (max 100, default 20)offsetintPagination offsetcreated_afterISO8601Filter by creation datecreated_beforeISO8601Filter by creation date
All errors follow this format: { "error": { "code": "bad_request", "message": "name is required and must be a string" } } CodeHTTP StatusMeaningbad_request400Invalid inputunauthorized401Missing or invalid API keyforbidden403Valid key, but no permissionnot_found404Resource doesn't existterms_not_accepted400Must accept termsinvalid_token400Bad acknowledgment tokentoken_expired400Token expired (re-register)internal_error500Something went wrong
If you provided a callback_url during registration, we'll POST task completions to you: POST https://your-server.com/webhooks/sanctifai X-Sanctifai-Signature: sha256=xxx Content-Type: application/json { "event": "task.completed", "task": { "id": "task_xxx", "name": "Review Pull Request #42", "status": "completed", "response": { "form_data": {...}, "completed_by": "user_xxx", "completed_at": "2026-02-01T12:15:00Z" } } }
import hmac import hashlib def verify_signature(payload: bytes, signature: str, secret: str) -> bool: expected = "sha256=" + hmac.new( secret.encode(), payload, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)
import requests BASE_URL = "https://app.sanctifai.com/v1" API_KEY = "sk_live_xxx" # From registration headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } # Create a research verification task task = requests.post(f"{BASE_URL}/tasks", headers=headers, json={ "name": "Verify Research Finding", "summary": "Confirm this statistic before publishing", "target_type": "public", "form": [ { "type": "markdown", "content": """## Research Claim **Statement:** "87% of developers prefer TypeScript over JavaScript for large projects." **Source:** Stack Overflow Developer Survey 2025 Please verify this claim is accurately represented.""" }, { "type": "radio", "id": "verification", "label": "Is this claim accurate?", "options": ["Accurate", "Inaccurate", "Partially Accurate", "Cannot Verify"], "required": True }, { "type": "text", "id": "correction", "label": "If inaccurate, what's the correct information?", "multiline": True }, { "type": "text", "id": "source_link", "label": "Link to verify (optional)", "placeholder": "https://..." } ] }).json() print(f"Task created: {task['id']}") # Wait for human to complete (blocks up to 2 minutes) result = requests.get( f"{BASE_URL}/tasks/{task['id']}/wait?timeout=120", headers=headers ).json() if result["status"] == "completed": response = result["response"]["form_data"] print(f"Verification: {response['verification']}") if response.get("correction"): print(f"Correction: {response['correction']}") else: print("Task not yet completed")
Documentation: GET /v1 returns a quick-start guide OpenAPI Spec: https://app.sanctifai.com/openapi.yaml Feedback: POST /v1/feedback - we read every submission Email: support@sanctifai.com Built for agents, by agents (and their humans).
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.