'Fix top Persona API errors: 401, 422, webhook signature failures, inquiry
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill persona-common-errors --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Persona Common Errors?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-persona-common-errors-8701c6f8)More formats (shields.io, HTML) on the badges page.
---
name: persona-common-errors
description: 'Fix top Persona API errors: 401, 422, webhook signature failures, inquiry
state issues.
Use when working with Persona identity verification.
Trigger with phrases like "persona common-errors", "persona common-errors".
'
allowed-tools: Read, Grep, Bash(curl:*)
version: 1.4.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- persona
- identity
- kyc
- verification
compatibility: Designed for Claude Code
---
# persona common errors | sed 's/\b\(.\)/\u\1/g'
## Overview
401 invalid key, 422 invalid template, webhook HMAC mismatch, inquiry already completed, rate limit 429.
## Prerequisites
- Completed `persona-install-auth` setup
- Valid Persona API key (sandbox or production)
## Instructions
### Error 1: 401 Unauthorized
```
{"errors":[{"status":"401","title":"Not Authorized"}]}
```
**Fix:** Verify API key starts with `persona_sandbox_` or `persona_production_`. Check `Authorization: Bearer <key>` header format.
### Error 2: 422 Invalid Inquiry Template
```
{"errors":[{"status":"422","title":"Invalid inquiry-template-id"}]}
```
**Fix:** Verify template ID format is `itmpl_*`. Templates are environment-specific (sandbox templates only work with sandbox keys).
### Error 3: Webhook Signature Mismatch
```
HMAC verification failed — expected abc123, got def456
```
**Fix:** Ensure you're using the raw request body (not parsed JSON) for HMAC computation. Use `express.raw()` middleware.
### Error 4: 429 Rate Limited
```
{"errors":[{"status":"429","title":"Rate limit exceeded"}]}
```
**Fix:** Implement exponential backoff. Check `Retry-After` header. See `persona-rate-limits`.
### Error 5: Inquiry Already Completed
```
{"errors":[{"status":"409","title":"Inquiry is already in a terminal state"}]}
```
**Fix:** Check inquiry status before attempting operations. Use the resume endpoint only for `created` or `pending` inquiries.
### Error 6: 404 Inquiry Not Found
```
{"errors":[{"status":"404","title":"Not Found"}]}
```
**Fix:** Verify inquiry ID format is `inq_*`. Sandbox inquiries are not accessible with production keys.
## Output
- Error identified from API response
- Targeted fix applied
- Verified resolution
## Error Handling
| HTTP Code | Meaning | Retryable |
|-----------|---------|-----------|
| 400 | Bad request | No |
| 401 | Invalid API key | No — fix key |
| 404 | Resource not found | No |
| 409 | Conflict (terminal state) | No |
| 422 | Validation error | No — fix request |
| 429 | Rate limited | Yes |
| 500+ | Server error | Yes |
## Resources
- [Persona API Reference](https://docs.withpersona.com/reference/introduction)
## Next Steps
For debugging, see `persona-debug-bundle`.

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!