Bynefit Open Data

API Reference

Heads-up — moving to the unified Read API.
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.

Base URL: https://bynli.com/api
All 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.

Authentication

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.

Query parameter
GET https://bynli.com/api/resources?key=YOUR_API_KEY
HTTP header
X-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.

Error responses: A missing key returns 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"}.
Versioning

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.


Resources

GET /resources

Returns a paginated list of approved, active community resources.

GET https://bynli.com/api/resources Public
Parameters

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

Response schema

HTTP 200 · Content-Type: application/json

dataarray<object>
Array of resource objects. See fields below.
countinteger
Number of records in this response (≤ limit).
totalinteger
Total matching records across all pages.
has_moreboolean
true if there are more pages after this one.
metaobject
Source attribution and license info.

Each object in data:

byn_idstring
Stable identifier for this resource. Format: r_<16 hex chars>. Safe to store and reference externally.
namestring
Display name of the organization or program.
descriptionstring|null
Brief description of services offered.
categorystring
Category slug. One of the 12 values listed in the category reference.
addressstring|null
Street address. May be empty for phone/web-only services.
phonestring|null
Contact phone number.
websitestring|null
Website URL.
hoursstring|null
Operating hours (free-form text).
upvote_countinteger
Community upvote count. Results are ordered by this descending.
registered_onstring
ISO 8601 datetime when this resource was added to the directory.
Pagination

Offset pagination

Use limit and offset together. Check has_more to determine if a next page exists — no need to compute from total.

Pattern
# 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

Reference

Category slugs

Use these exact strings as the category query parameter.

food
health
housing
employment
education
childcare
legal
mental
transport
finance
community
other
Code examples

Making requests

cURL
curl "https://bynli.com/api/resources?key=YOUR_API_KEY&category=food&limit=10"
JavaScript
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
}
Python
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"]
PHP
$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";
}
Interactive

Live explorer

Try the API directly — data is pulled from the live endpoint.

GET /api/resources?key=…&limit=10
Enter your API key and click "Run request".
Embed widget

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.

HTML
<!-- 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:

AttributeDefaultDescription
data-keyrequiredYour API key.
data-categoryallPre-filter to a specific category slug (e.g. food).
data-limit20Results per page (max 100).
data-targetbynefit-resourcesID of the container element to mount into.
data-themelightlight or dark.
Example — food resources, dark theme
<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>
The widget uses the Shadow DOM, so your site's CSS will not affect it and it will not affect yours. It fetches data directly from bynli.com/api/resources — no server-side code required.

Legal

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.

Attribution

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:

Suggested attribution:
"Community resource data provided by Bynefit Inc. via the Bynefit Open Data API."