The two credentials
API token storage
The customer’s Raise administrator generates an API token in the Raise admin UI and provides it to the partner integration through whatever onboarding flow the partner has built. From the moment the partner receives it, the token must be treated as a sensitive secret.Storage practices
A storage abstraction
Token caching
For high-volume integrations, the secrets manager’s read latency can dominate request time. A short-TTL in-memory cache mitigates this:API 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 pattern is straightforward but requires coordination with the customer.The rotation flow
Customer's Raise administrator generates a new token
Customer provides the new token to the partner
Partner stores the new token alongside the old one
Partner switches to using the new token
Confirm requests succeed with the new token
Customer revokes the old token in Raise
Partner removes the old token from secrets manager
A rotation helper
Triggering rotation reminders
For partner integrations with many customers, rotation should be tracked centrally:Webhook secret management
The webhook security token has different lifecycle than the API token — the partner integration generates it (rather than receiving it from the customer), stores it on both sides (partner secrets manager and Raise’s subscription record), and rotates it differently.Generating a strong secret
Storing both sides
Webhook secret rotation
The dual-secret pattern (verify against either current or previous secret during the rotation window):Generate a new secret
Update the partner-side storage with both secrets
Update the webhook subscription with the new secret via PUT
Confirm new deliveries verify with the new secret
Remove the old secret from partner-side storage
Customer offboarding
When a customer cancels the integration, both credentials should be removed cleanly:Delete the webhook subscription in Raise
DELETE /api/Webhook/{id} to stop event deliveries.Remove the API token from partner secrets manager
Remove the webhook secret from partner secrets manager
Mark the customer as offboarded in your system
Document the offboarding for audit
Donor data handling
Beyond credentials, Raise integrations handle donor data (PII) that requires its own protections.Encryption in transit
All API calls to Raise use HTTPS. All webhook deliveries from Raise should arrive over HTTPS to the partner’s endpoint. Verify both directions:notificationUrl must be https://. Don’t try to use plain HTTP even for development — set up local HTTPS tunneling instead. See Local Testing.
Encryption at rest
For partner-side databases storing donor data, encrypt at rest:paymentMethodId (a non-sensitive token) and metadata like cardBrand and expMonthAndYear.
Logging and redaction
Logs are a common source of accidental credential exposure. Build redaction into the logging framework:Compliance considerations
Partner integrations handling donation data inherit compliance obligations from their customers.PCI DSS
GDPR / data privacy
For customers operating in jurisdictions with strict data privacy laws (EU GDPR, California CCPA, etc.):- Document what donor data they retain and for how long.
- Provide a deletion mechanism for individual donor data.
- Sign data processing agreements with customers in regulated jurisdictions.
- Implement appropriate technical and organizational measures (TOMs).
SOC 2 / similar certifications
For partner integrations serving enterprise nonprofit customers, SOC 2 Type II certification is increasingly expected. The certification documents controls in areas like:- Access controls and authentication
- Encryption in transit and at rest
- Change management
- Incident response
- Vendor management
Attack surface considerations
Beyond credential hygiene, partner integrations should be designed to limit attack surface:Endpoint hardening
Principle of least privilege
Each component of the integration should have the minimum credentials it needs:Audit logging
Every credential access, every customer offboarding, every token rotation should produce an audit log entry:A security checklist
Walk through this when designing or auditing the integration:- Raise API tokens stored in a secrets manager, never in code or environment files
- Webhook secrets generated with 32 bytes of cryptographic random
- Per-customer credentials — no shared tokens across customers
- HTTPS everywhere — API calls and webhook deliveries
- Signature verification on every incoming webhook before any processing
- Logging framework includes credential redaction by default
- No raw card data ever stored on the partner side
- Customer offboarding deletes credentials and the webhook subscription
- Token rotation tracked centrally with reminders
- Webhook secret rotation uses the dual-verify pattern
- Sensitive donor data (email, name, address) encrypted at rest
- Audit logs for all credential access and customer lifecycle events
- Production access controlled by IAM/RBAC; developers don’t have direct production access
- PCI scope is
out— Raise handles all card tokenization - Data processing agreements signed with customers in regulated jurisdictions
- Incident response runbook exists for credential compromise