# Your first call

Read community resources with a developer key. About five minutes.

1. **Create an account and a key** Sign in at [bynefit.com/dash/login](https://bynefit.com/dash/login), open [/dash/developers/keys](https://bynefit.com/dash/developers/keys) and choose *Create key*. Give it a label (like `my-side-project`) and copy the token. You will only see it once. A developer key works without a team. Pick *Test* for a `bapi_pk_test_` key while you build: the same call below answers with sample entries, and anything you submit stays in a sandbox.
2. **Keep it secret** Put it in an environment variable named `BYNEFIT_API_KEY` and never commit it. If it leaks, revoke it on the same page and make a new one.
3. **Make the call** Run this. The key is read from the environment variable.

**cURL**

```bash
curl https://bynefit.com/dash/api/v1/resources \
  -H "Authorization: Bearer $BYNEFIT_API_KEY"
```

**JavaScript**

```javascript
const res = await fetch('https://bynefit.com/dash/api/v1/resources', {
  headers: { Authorization: `Bearer ${process.env.BYNEFIT_API_KEY}` },
});
const page = await res.json();
console.log(page.data.length, page.has_more);
```

**Python**

```python
import os
import requests

res = requests.get(
    'https://bynefit.com/dash/api/v1/resources',
    headers={'Authorization': f"Bearer {os.environ['BYNEFIT_API_KEY']}"},
)
page = res.json()
print(len(page['data']), page['has_more'])
```

**PHP**

```php
$ch = curl_init('https://bynefit.com/dash/api/v1/resources');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . getenv('BYNEFIT_API_KEY')],
    CURLOPT_RETURNTRANSFER => true,
]);
$page = json_decode(curl_exec($ch), true);
echo count($page['data']), ' ', var_export($page['has_more'], true);
```

**Swift**

```swift
struct Page: Decodable {
    let data: [Resource]
    let hasMore: Bool
    enum CodingKeys: String, CodingKey { case data; case hasMore = "has_more" }
}
struct Resource: Decodable { let id: String; let name: String }

let key = ProcessInfo.processInfo.environment["BYNEFIT_API_KEY"] ?? ""
var req = URLRequest(url: URL(string: "https://bynefit.com/dash/api/v1/resources")!)
req.setValue("Bearer \(key)", forHTTPHeaderField: "Authorization")
let (data, _) = try await URLSession.shared.data(for: req)
let page = try JSONDecoder().decode(Page.self, from: data)
```

You get back JSON that looks something like this:

**200 OK (application/json)**

```json
{
  "data": [
    {
      "id": "res_3f9a1c07d2b84e55",
      "type": "resource",
      "name": "Atlanta Community Food Bank",
      "description": "Food distribution for metro Atlanta",
      "category": "food",
      "address": "732 Joseph E. Lowery Blvd NW, Atlanta, GA",
      "phone": "(404) 892-9822",
      "website": "https://www.acfb.org",
      "hours": null,
      "upvote_count": 4,
      "go_website": "https://bynefit.com/go/r101w",
      "go_phone": "https://bynefit.com/go/r101p",
      "registered_on": "2026-04-21T19:45:02+00:00"
    }
  ],
  "next_cursor": "eyJjIjoiMjAyNi0wNC0yMSAxOTo0NTowMiIsImkiOjEwMX0",
  "has_more": true,
  "meta": {
    "source": "bynefit.com",
    "powered_by": "Bynefit Inc.",
    "license": "Public domain — free to use with attribution",
    "docs": "https://bynefit.com/docs/resources-read"
  }
}
```

Results are returned newest first, in pages. When `has_more` is `true`, pass `next_cursor` back as `?cursor=` to get the next page; when it is `false` (and `next_cursor` is `null`) you have everything. Treat the cursor as an opaque string.

## If it does not work

| You see | It means |
| --- | --- |
| `401` | The key is missing, wrong or revoked. Check the header and the key. |
| `403 test_mode_unsupported` | A test key called something with no sample data. Use a live key for that call. |
| `400 invalid_since` | The `since` filter is not an ISO-8601 date-time. |
| `400 invalid_cursor` | The cursor is not one we issued. Start again without a cursor. |
| `429` | Too many requests. Wait for the time in `Retry-After`, then retry. |

## Next steps

- Building with an AI agent, or about to write data? Start with [Test mode](https://bynefit.com/docs/test-mode).
- Read [Authentication](https://bynefit.com/docs/authentication) to understand how your key is checked.
- Having an AI agent read your Space? Give it an [agent key](https://bynefit.com/docs/agent-keys): read-only, short-lived, and you can pause it in one click.
- Setting up "Sign in with Bynefit" for your own app? See [OAuth 2.0 / OpenID Connect](https://bynefit.com/docs/oauth).
- Browse [Resources — read](https://bynefit.com/docs/resources-read) for the full field list and filters.
- Want to contribute data? See [Resources — submit](https://bynefit.com/docs/resources-submit).

---

Source: https://bynefit.com/docs/getting-started
Checked against the live API on October 10, 2026.
