UR Power API
Integrate your services with Detroit's community empowerment platform. Manage programs, referrals, forms, and member data through a secure RESTful API.
Base URL: https://urpower.org/api/v1Quick Start
Register
Create a partner account at urpower.org/partner/join
Get Verified
The UR Power team reviews and verifies your organization
Generate a Key
Create an API key from your partner dashboard
Start Building
Make authenticated requests to any endpoint
Authentication
All API requests must include an API key in the Authorization header. Keys are generated from your partner dashboard and can be scoped to specific permissions.
curl -X GET https://urpower.org/api/v1/programs \ -H "Authorization: Bearer urp_sk_a1b2c3d4e5f6g7h8i9j0" \ -H "Content-Type: application/json"
Endpoints
Click any group to expand its endpoints. Each endpoint shows the required scope, request format, and example response.
Info Bank Fields
The Info Bank stores structured member data that members can selectively share with partner organizations. Only fields the member has consented to share will be returned. Below is the full schema grouped by section.
Personal
| Field | Type | Description |
|---|---|---|
first_name | string | Member first name |
last_name | string | Member last name |
date_of_birth | date | Date of birth (YYYY-MM-DD) |
phone | string | Primary phone number |
email | string | Primary email address |
preferred_language | string | Preferred language for communication |
Household
| Field | Type | Description |
|---|---|---|
household_size | integer | Total people in household |
dependents_under_18 | integer | Number of dependents under 18 |
marital_status | string | single, married, divorced, widowed, separated |
veteran_status | boolean | Whether any household member is a veteran |
Income
| Field | Type | Description |
|---|---|---|
annual_income | number | Total annual household income |
income_source | string | employment, self_employed, disability, retirement, other |
employer | string | Current employer name |
pay_frequency | string | weekly, biweekly, monthly |
Housing
| Field | Type | Description |
|---|---|---|
housing_status | string | own, rent, shelter, unhoused, transitional |
address | string | Current street address |
city | string | City |
state | string | State |
zip | string | ZIP code |
monthly_housing_cost | number | Monthly rent or mortgage payment |
Benefits
| Field | Type | Description |
|---|---|---|
snap | boolean | Currently receiving SNAP/food assistance |
tanf | boolean | Currently receiving TANF |
wic | boolean | Currently receiving WIC |
ssi_ssdi | boolean | Currently receiving SSI or SSDI |
section_8 | boolean | Currently receiving Section 8/housing voucher |
medicaid | boolean | Currently enrolled in Medicaid |
Healthcare
| Field | Type | Description |
|---|---|---|
has_insurance | boolean | Currently has health insurance |
insurance_type | string | medicaid, medicare, employer, marketplace, none |
primary_care_provider | string | Has a primary care doctor (yes/no) |
disabilities | string[] | Self-reported disabilities or conditions |
Education
| Field | Type | Description |
|---|---|---|
highest_education | string | none, ged, high_school, some_college, associates, bachelors, masters, doctorate |
currently_enrolled | boolean | Currently enrolled in education/training |
school_name | string | Current school or training program |
Transportation
| Field | Type | Description |
|---|---|---|
has_vehicle | boolean | Has access to a personal vehicle |
has_license | boolean | Has a valid driver license |
primary_transport | string | car, bus, ride_share, bike, walk |
Emergency
| Field | Type | Description |
|---|---|---|
emergency_contact_name | string | Emergency contact full name |
emergency_contact_phone | string | Emergency contact phone number |
emergency_contact_relation | string | Relationship to member |
Webhooks
Register webhook URLs to receive real-time notifications when events occur. All webhook payloads are signed so you can verify authenticity.
referral.newreferral.updatedsubmission.newsubmission.reviewedmember.consented{
"event": "referral.new",
"timestamp": "2026-03-31T10:00:00Z",
"data": {
"referral_id": "ref_xyz789",
"member_name": "Marcus Johnson",
"category": "housing",
"status": "sent"
}
}Every webhook request includes an X-URPower-Signature header containing an HMAC-SHA256 hash of the request body using your webhook secret. Verify this signature before processing the payload.
const crypto = require('crypto');
function verifySignature(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}Rate Limits
When you exceed the rate limit, the API returns a 429 Too Many Requests response. Check the Retry-After header for the number of seconds to wait before making another request.
HTTP/1.1 429 Too Many Requests
Retry-After: 120
Content-Type: application/json
{
"error": "rate_limit_exceeded",
"message": "Too many requests. Please wait before retrying.",
"retry_after": 120
}Rate limit headers are included on every response:
X-RateLimit-Limit--Maximum requests per hour (1000)X-RateLimit-Remaining--Requests remaining in current windowX-RateLimit-Reset--Unix timestamp when the window resetsError Codes
| Code | Meaning |
|---|---|
400 | Bad Request -- Invalid parameters or request body |
401 | Unauthorized -- Missing or invalid API key |
403 | Forbidden -- API key lacks the required scope |
404 | Not Found -- Resource does not exist or does not belong to your organization |
409 | Conflict -- Invalid state transition (e.g., completing a declined referral) |
422 | Unprocessable -- Request body is valid JSON but semantically incorrect |
429 | Rate Limit -- Too many requests, check Retry-After header |
500 | Server Error -- Something went wrong on our end |