Authorization header. The pattern is straightforward and follows IETF RFC 6750, but a few specifics about how Volunteer’s tokens are issued and managed matter for partner integrations.
This page covers obtaining the token, using it on every request, storing it securely, rotating it, and handling auth failures.
At a glance
| Concern | How Volunteer handles it |
|---|---|
| Auth mechanism | Bearer token in Authorization header |
| Token format | JWT (per eyJhbGci... prefix in examples) |
| Token issuance | Generated in the VOMO admin portal by the customer’s administrator |
| Token scope | A single VOMO organization |
| Token expiration | Not documented in the spec |
| Token rotation | Manual — administrator regenerates and provides new token |
| Revocation | Done in the admin portal |
Obtaining a token
Volunteer tokens are issued by the customer (or their VOMO concierge) — not by the partner integration. The flow:Confirm API access is enabled for the customer's VOMO account
The customer's VOMO administrator generates a token in the admin portal
The customer provides the token to the partner integration
Using the token
Every authenticated request includes the token in theAuthorization header:
Bearer (with a trailing space) followed by the token. Don’t omit the space; don’t include extra characters before or after.
In code
Storing the token
Tokens grant full access to the customer’s VOMO data. Treat them with the same care as production database passwords.Production: secrets manager
| Service | Use |
|---|---|
| AWS Secrets Manager | Standard for AWS-deployed integrations |
| HashiCorp Vault | Cloud-agnostic; works across environments |
| Google Secret Manager | Standard for GCP-deployed integrations |
| Azure Key Vault | Standard for Azure-deployed integrations |
| Doppler, 1Password Business, etc. | Smaller-team alternatives |
vomo-integration/{customerId}/api-token) makes per-customer auditing and access control straightforward.
Local development: environment variables
For a developer’s local machine, an environment variable in a.env file is acceptable:
.env to .gitignore. Never commit it to source control.
Anti-patterns
Several token-handling patterns that look reasonable but cause production issues:| Anti-pattern | Why it’s bad |
|---|---|
| Hardcoding the token in source code | Anyone with repo access has the token. Hard to rotate. |
| Storing the token in an unencrypted database column | If the DB is compromised, every customer’s token is exposed. |
| Committing the token in a config file (even encrypted) | The encrypted blob in git history is recoverable; assume the key will leak eventually. |
| Logging the full token in application logs | Logs frequently get aggregated, archived, and shared — extending exposure. |
| Sharing the same token across customers | Defeats per-customer isolation; one compromised integration leaks everyone. |
| Sending the token through unencrypted channels (Slack, email, etc.) | Hard to revoke once it’s in someone’s chat history. |
Per-customer isolation
The Volunteer token is scoped to a single VOMO organization — the organization whose administrator generated it. A token for “Wayne Foundation” can only read Wayne Foundation’s data; it cannot read or write any other customer’s data. For partner integrations serving multiple customers, this means one token per customer. The integration code looks up the right token for the customer it’s currently serving.What happens if you use the wrong token
If you accidentally use Customer A’s token while calling endpoints scoped to Customer B’s data, the response depends on how VOMO authorizes:- For data in Customer A’s organization, the call succeeds.
- For data outside Customer A’s organization, the call typically returns
403 Forbiddenor404 Not Found.
Token rotation
Tokens should be rotated periodically — typically every 90 days for high-stakes integrations, every 6–12 months for lower-stakes ones. The rotation flow:The customer's VOMO administrator generates a new token
The partner stores the new token alongside the old one
The partner switches to the new token
Confirm requests succeed with the new token
401 errors that would indicate a problem.The customer revokes the old token in VOMO
Handling auth failures
A401 Unauthorized response from any endpoint means the token isn’t being accepted. Common causes:
| Cause | What to do |
|---|---|
| The token has been revoked | Coordinate with the customer to issue a new one. |
| The token has expired (if Volunteer enforces expiration) | Same — issue a new one. |
The token is malformed in the request (whitespace, missing Bearer prefix, etc.) | Inspect the actual request — most often the bug is on the partner side. |
| API access was disabled for the customer’s account | Contact the customer’s VOMO concierge. |
| The customer’s VOMO account was suspended or deleted | Pause sync work for this customer and surface for human review. |
A defensive pattern
401. Retries against an invalid token just produce more 401s and noise. Pause the customer’s work and alert.
See Error Handling for the full error-classification pattern.
Handling permission errors
A403 Forbidden response indicates the token is valid but doesn’t have permission for the specific endpoint or resource. Causes:
| Cause | Action |
|---|---|
| The token’s organization doesn’t have access to the requested resource | The resource belongs to a different organization; don’t retry. |
| The customer’s plan doesn’t include the requested feature | Coordinate with the customer’s VOMO concierge to check feature access. |
| The endpoint requires a higher permission tier than the token has | Same — confirm the token’s permission scope. |
401, 403 should not be retried. It’s a permission issue, not a transient failure.
Local development setup
For developers building or debugging integrations locally:Coordinate with the customer to set up a development environment
Receive a dedicated development token
Make a test call to confirm everything works
GET /v1/users?per_page=1 is a minimal validation request.A simple dev test
Compliance considerations
For partner integrations operating in regulated jurisdictions:| Concern | Implication |
|---|---|
| GDPR / data privacy | The token grants access to PII. Document its access in your data processing agreement with the customer. |
| SOC 2 | Token storage, rotation, and access auditing are SOC 2 control areas. |
| HIPAA (if applicable) | If the customer’s VOMO usage touches healthcare data, the integration may inherit HIPAA obligations. Confirm with the customer’s compliance team. |
Auth checklist
Walk through this when integrating with a new customer:- API access is enabled for the customer’s VOMO account
- The customer’s administrator has issued a Bearer token through the admin portal
- The token is stored in a secrets manager (production) or
.envfile (dev) - The token is never logged in plaintext
- One token per customer — no sharing across customers
- HTTPS is used for every request (not HTTP)
401and403handling pauses work rather than retrying- Token rotation is scheduled and tracked
- Customer offboarding includes token revocation
- Audit logs capture token read operations
Where to go next
Base URLs
/v1/ versioning convention.