AI actions require authorization
HTTP & workflow recipes
Authorization middleware for AI workflows—one POST, then branch on verdict in n8n, Make, or your backend. HTTP only; no marketplace apps.
No marketplace download—use HTTP Request (n8n), Webhook (Make), or POST (Zapier) with the curl body below.
POST /api/v1/admissibility/verify
Protected workflow recipes
What BiDigest does in each template—clone the HTTP step into your pack. Downloadable n8n JSON / Make blueprints: [PROPOSAL] Phase 1 GTM.
| Workflow | What BiDigest does |
|---|---|
| Refund agent | REVIEW_REQUIRED above your threshold; receipt on every run |
| CRM writer | Blocks or pauses destructive updates; human review on high impact |
| Invoice approval | Human approval before payment executes |
| AI SDR | Verifies outbound sends and CRM writes before production |
| Claims review agent | Human review on high-impact adjudication before bind |
Canvas branch logic (copy-paste pattern)
After HTTP verify, branch on agency verdict—not admissibility_status alone.
HTTP verify (POST /api/v1/admissibility/verify)
↓
Map to agency verdict
↓
┌──────────────────────────────────────┐
│ IF verdict == APPROVED │ → Continue workflow
│ IF verdict == REVIEW_REQUIRED │ → Slack/email approval + pause
│ IF verdict == REJECTED │ → Stop + log receipt_id
└──────────────────────────────────────┘curl (strict contract)
curl -sS -X POST "https://bidigest.com/api/v1/admissibility/verify" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jurisdiction": { "regionCode": "us-fed", "industrySector": "financial" },
"intent": {
"agentId": "agency-agent:client-acme",
"actionType": "refund_approval",
"proposedPayload": { "action": "refund_approval", "amount": 500, "clientId": "client-acme" }
},
"sessionContext": {
"sessionId": "session-acme-refund-001",
"userId": "support_agent",
"sessionStartTime": "2026-05-17T12:00:00.000Z"
},
"groundTruthBinding": {
"domain": "agency-automation-demo.bidigest.com",
"regulatoryId": "AGENCY_AUTOMATION_DEMO_V0"
}
}'n8n — HTTP Request node
| Method | POST |
| URL | https://bidigest.com/api/v1/admissibility/verify |
| Authentication | Header — Authorization: Bearer {{$env.BIDIGEST_API_KEY}} |
| Body | JSON — same object as curl below |
// n8n Code node — after HTTP Request (map API → agency verdict)
const body = $json;
let verdict = 'REJECTED';
if (body.admissibility_status === 'DENIED') {
verdict = 'REJECTED';
} else if (body.reason_code === '403_REBONDING_REQUIRED') {
verdict = 'REVIEW_REQUIRED';
} else if (body.admissibility_status === 'APPROVED') {
verdict = 'APPROVED';
}
// Optional: your policy pack may override to REVIEW_REQUIRED (amount, role, client tier)
return { verdict, receipt_id: body.decision_receipt?.receipt_id ?? null };Make — HTTP module
- Module: HTTP > Make a request
- URL: https://bidigest.com/api/v1/admissibility/verify
- Method: POST
- Headers: Authorization: Bearer <api_key>, Content-Type: application/json
- Body: Raw JSON — paste curl body below
- Router on mapped verdict (APPROVED / REVIEW_REQUIRED / REJECTED)
Agency verdict mapping
The verify API returns admissibility_status and reason_code. Map once in your canvas to agency verdict vocabulary—branch on verdict, not on raw API strings alone.
| API field (verify response) | Agency verdict | Workflow action |
|---|---|---|
| "admissibility_status": "APPROVED" | APPROVED | Continue the automation. |
| "admissibility_status": "DENIED" | REJECTED | Stop the workflow immediately. |
| reason_code requires human review (e.g. 403_REBONDING_REQUIRED) or uncertain action signal in response | REVIEW_REQUIRED | Pause workflow and notify your team. |
Enterprise dashboards may label core engine states ADMITTED or FAIL_CLOSED; agency workflows should standardize on APPROVED, REJECTED, and REVIEW_REQUIRED.
[PROPOSAL] Future agency-facing response wrapper: { "verdict": "APPROVED", "receipt_id": "rcpt_…", "internal_reason_code": "200_ADMITTED" }. Today: map from admissibility_status in your HTTP node.
Raw API response (today)
{
"admissibility_status": "APPROVED",
"reason_code": "200_ADMITTED",
"decision_receipt": { "receipt_id": "rcpt_84721…" }
}Use in your workflow (after mapping)
{
"verdict": "REVIEW_REQUIRED",
"receipt_id": "rcpt_84721…"
}