API Reference
The endpoint documented here (
GET /api/resources with ?key= / X-API-Key)
is being sunset on 2026-10-20. Your existing key continues to work unchanged
until then — every request now also returns X-Bynli-Deprecated and Sunset
headers.The canonical endpoint is now
GET /dash/api/v1/resources
on the unified token stack (bearer tokens, cursor pagination, tiered response shaping).
See the Read API docs for the new shape.
The Bynefit Open Data API provides free, public access to curated community resources — covering food, housing, health care, mental health, employment, legal aid, and more. Coverage expands as partner organizations add their directories. Access requires a free API key; there is no rate limit and no cost.
https://bynli.com/apiAll responses are JSON. All requests are
GET unless stated otherwise.
The API is served over HTTPS only. Get a free dev key at Developers → API keys — no team required.
API key required
Every request to /api/resources must include a valid API key.
Pass it as a query parameter or as a request header — both are accepted.
GET https://bynli.com/api/resources?key=YOUR_API_KEYX-API-Key: YOUR_API_KEY
Keys are free. Mint one at Developers → API keys (no team required) or, for team-scoped tokens, at Integrations → API tokens.
Each key can optionally be domain-restricted — requests from unlisted origins are rejected with 403.
CORS headers include Access-Control-Allow-Origin: *, so you can call this
endpoint directly from a browser or any frontend framework without a proxy.
401 {"error":"API key required"}.
An invalid key returns 401 {"error":"Invalid or inactive API key"}.
A domain mismatch returns 403 {"error":"Domain not authorized for this API key"}.
Stability policy
The current API is unversioned (v1 implied). Field names, response structure, and
byn_id values are stable — they will not change without prior notice.
New fields may be added to responses without a version bump; removing fields constitutes
a breaking change and will be announced.
GET /resources
Returns a paginated list of approved, active community resources.
Query parameters
All parameters are optional.
| Parameter | Type | Default | Description |
|---|---|---|---|
| key | string | required | Required. Your API key. Can also be sent as the X-API-Key header. See Authentication. |
| category | string | all | Filter by category slug. See category reference for valid values. Invalid slugs are silently ignored. |
| limit | integer | 100 | Number of results per page. Maximum 500. Values above 500 are clamped to 500. |
| offset | integer | 0 | Number of records to skip. Use with limit for pagination. See pagination guide. |
Response schema
HTTP 200 · Content-Type: application/json
true if there are more pages after this one.Each object in data:
r_<16 hex chars>. Safe to store and reference externally.Offset pagination
Use limit and offset together. Check has_more
to determine if a next page exists — no need to compute from total.
# Page 1 GET /api/resources?key=YOUR_API_KEY&limit=20&offset=0 # Page 2 GET /api/resources?key=YOUR_API_KEY&limit=20&offset=20 # Page 3 GET /api/resources?key=YOUR_API_KEY&limit=20&offset=40 # Stop when has_more = false
Category slugs
Use these exact strings as the category query parameter.
Making requests
curl "https://bynli.com/api/resources?key=YOUR_API_KEY&category=food&limit=10"
const API_KEY = 'YOUR_API_KEY'; const res = await fetch(`https://bynli.com/api/resources?key=${API_KEY}&category=food&limit=10`); const data = await res.json(); data.data.forEach(r => { console.log(r.byn_id, r.name, r.category); }); // Paginate if (data.has_more) { // fetch next page with offset += limit }
import requests BASE = "https://bynli.com/api/resources" API_KEY = "YOUR_API_KEY" params = {"key": API_KEY, "category": "housing", "limit": 50, "offset": 0} while True: r = requests.get(BASE, params=params) body = r.json() for resource in body["data"]: print(resource["byn_id"], resource["name"]) if not body["has_more"]: break params["offset"] += params["limit"]
$url = 'https://bynli.com/api/resources?key=YOUR_API_KEY&category=mental&limit=20'; $body = json_decode(file_get_contents($url), true); foreach ($body['data'] as $r) { echo $r['byn_id'] . ' — ' . $r['name'] . "\n"; }
Live explorer
Try the API directly — data is pulled from the live endpoint.
Enter your API key and click "Run request".
Drop-in resource directory
Add a searchable, filterable resource directory to any website with two lines of HTML. The widget is self-contained, Shadow DOM isolated, and works on any page without CSS conflicts.
<!-- 1. Place a container element where you want the widget --> <div id="bynefit-resources"></div> <!-- 2. Load the widget script with your API key --> <script src="https://bynli.com/resources-widget.js" data-key="YOUR_API_KEY"></script>
All options are set via data-* attributes on the script tag:
| Attribute | Default | Description |
|---|---|---|
| data-key | required | Your API key. |
| data-category | all | Pre-filter to a specific category slug (e.g. food). |
| data-limit | 20 | Results per page (max 100). |
| data-target | bynefit-resources | ID of the container element to mount into. |
| data-theme | light | light or dark. |
<div id="food-resources"></div> <script src="https://bynli.com/resources-widget.js" data-key="YOUR_API_KEY" data-category="food" data-theme="dark" data-limit="15" data-target="food-resources"></script>
bynli.com/api/resources — no server-side code required.
Terms of use
This data is provided by Bynefit Inc. under a public-domain-equivalent license. You are free to use, copy, distribute, and build upon it for any purpose — commercial or noncommercial — without restriction.
The data is provided "as is" with no warranty of accuracy or completeness. Bynefit makes reasonable efforts to keep resource information current but cannot guarantee real-time accuracy of operating hours, availability, or contact details.
Crediting the source
Attribution is not legally required, but we appreciate it. If you publish a product or tool built on this data, please include a visible credit such as:
"Community resource data provided by Bynefit Inc. via the Bynefit Open Data API."