STAGING ENVIRONMENT
NowFunded

Reference

NowFunded REST API

A read-and-unlock JSON API over the funding events feed. All endpoints live under /api/v1 and return JSON.

Base URL

https://app.staging.nowfunded.co/api/v1/funding_events

Authentication

Every request must include your secret API token as a bearer token in the Authorization header. Grab or rotate your key on the API key page after signing in.

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://app.staging.nowfunded.co/api/v1/funding_events

A missing or unknown token returns 401 Unauthorized with { "error": "Invalid or missing API token" }.

Endpoints

GET /api/v1/funding_events

Latest funding events, newest first, paginated. Each event includes a contacts_count so you can see which companies have decision-maker contacts available.

Query parameters

  • page — page number (default 1).
  • per_page — results per page (default 50, max 100).

Response

{
  "data": [
    {
      "id": 123,
      "company_name": "Acme Inc",
      "round": "Series A",
      "amount": 12000000,
      "investors": "…",
      "source": "exa_funding",
      "source_url": "…",
      "status": "enriched",
      "summary": "…",
      "discovered_at": "2026-08-09T12:00:00Z",
      "contacts_count": 3
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 50,
    "total_pages": 20,
    "total_count": 1000
  }
}
GET /api/v1/funding_events/:id

A single event with its full company object and the company's contacts. Unknown ids return 404 Not found.

Response

{
  "data": {
    "id": 123,
    "company_name": "Acme Inc",
    "…": "…",
    "company": {
      "id": 45,
      "name": "Acme Inc",
      "domain": "acme.com",
      "industry": "…",
      "employee_range": "…",
      "hq_city": "…",
      "hq_country": "…",
      "total_funding": 20000000,
      "website_url": "…",
      "linkedin_url": "…"
    },
    "contacts": [ /* see Contact object */ ]
  }
}
GET /api/v1/funding_events/:funding_event_id/contacts

Decision-maker contacts for the event's company. email and phone stay hidden until a contact is unlocked.

Contact object

{
  "id": 77,
  "first_name": "Jane",
  "last_name": "Doe",
  "title": "VP Engineering",
  "seniority": "vp",
  "city": "London",
  "country": "GB",
  "linkedin_url": "…",
  "details_unlocked": false,
  "unlock_status": "idle"
  // "email" and "phone" appear only once details_unlocked is true.
  // unlock_status is "idle", "processing", "no_result", or "failed" (see below).
}

Getting a contact's details

A contact's email and phone are locked by default. Because the lookup runs in the background, retrieving them is a three-step flow:

  1. Start the unlock. POST /api/v1/contacts/:id/unlock — returns 202 with unlock_status: "processing" (or 200 with the details right away if it's already unlocked).
  2. Poll. GET /api/v1/contacts/:id/unlock every second or two while unlock_status is "processing".
  3. Read the details. Once details_unlocked is true, email and phone are present on the Contact object.

A run that finishes at "no_result" found nothing (safe to retry, but won't cost a credit unless new data becomes available); "failed" means the lookup errored. Each successful unlock spends one credit and counts against your monthly limit — once that's exhausted the unlock returns 429.

POST /api/v1/contacts/:id/unlock

Spends a credit to resolve the contact's email and phone. The lookup runs in the background, so this returns 202 Accepted right away with unlock_status: "processing" — poll the endpoint below until details_unlocked is true. It's a no-op (spends nothing, returns 200 with the details) if the contact is already unlocked.

curl -X POST \
  -H "Authorization: Bearer YOUR_API_KEY" \
  https://app.staging.nowfunded.co/api/v1/contacts/77/unlock
GET /api/v1/contacts/:id/unlock

Returns the contact's current state so you can poll after kicking off an unlock. Keep polling while unlock_status is "processing". On success details_unlocked becomes true and email/phone appear; "no_result" after a run means nothing was found (safe to retry) and "failed" means the lookup errored.

curl \
  -H "Authorization: Bearer YOUR_API_KEY" \
  https://app.staging.nowfunded.co/api/v1/contacts/77/unlock

Errors

Errors return the matching HTTP status and a JSON body of the shape { "error": "…" }.

  • 401 Unauthorized — missing or invalid API token.
  • 404 Not found — the requested record does not exist.
  • 429 Too Many Requests — monthly contact-unlock limit reached; resets at the start of next month.