API Reference

Search Entities

Search business entities by name, registered agent, and state. Filter by status and entity type with pagination support.

Endpoint

GET /api/v1/search

Search business entities by name, registered agent, and state. Returns matching entities with basic details. Costs 1 credit per request (see Credits for exceptions).

Parameters

NameTypeRequiredDescription
namestringconditionalBusiness name to search for (required if agent not provided)
statestringnoTwo-letter state code (e.g., FL, NY, CT). Omit to search across all states (5 credits).
agentstringconditionalRegistered agent name to search for
statusstringnoFilter by status: active, inactive, all (default: all)
typestringnoFilter by entity type: llc, corporation, lp
record_classstringnoComma-separated list of record classes to return, or all to disable this filter entirely. Default (when omitted): registry_entity,federal_registration. Valid class names: registry_entity, federal_registration, filing_event, license, name_registration, government_vendor, financial_assistance_award. An unrecognised value returns 400 naming the valid set. See Record Classes.
exactbooleannotrue to require an exact name match instead of a prefix/fuzzy search
formed_afterstringnoReturn only entities formed after this date (ISO 8601, e.g., 2010-01-01)
formed_beforestringnoReturn only entities formed before this date (ISO 8601)
filing_numberstringnoSearch by state-assigned filing number
officerstringnoSearch by officer name (5 credits)
limitintegernoResults per page, max 50 (default: 10)
offsetintegernoPagination offset (default: 0)

Credits

Most searches cost 1 credit. Two cases cost 5 credits:

  • Cross-state search — omitting state searches all covered states simultaneously; if a state cannot be reached, the response is marked partial and names it (see Cross-state completeness below).
  • Officer search — passing officer searches officer/director records across entities.

Example Request

cURL
curl "https://filed.dev/api/v1/search?name=Acme&state=FL" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Search by registered agent
curl "https://filed.dev/api/v1/search?agent=CSC+Global&state=FL" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import requests

# Search by name
resp = requests.get(
    "https://filed.dev/api/v1/search",
    params={"name": "Acme", "state": "FL"},
    headers={"Authorization": "Bearer YOUR_API_KEY"}
)

# Search by registered agent
resp = requests.get(
    "https://filed.dev/api/v1/search",
    params={"agent": "CSC Global", "state": "FL"},
    headers={"Authorization": "Bearer YOUR_API_KEY"}
)
Node.js
// Search by name
const res = await fetch(
  "https://filed.dev/api/v1/search?name=Acme&state=FL",
  { headers: { Authorization: "Bearer YOUR_API_KEY" } }
);

// Search by registered agent
const res2 = await fetch(
  "https://filed.dev/api/v1/search?agent=CSC+Global&state=FL",
  { headers: { Authorization: "Bearer YOUR_API_KEY" } }
);
Go
req, _ := http.NewRequest("GET",
  "https://filed.dev/api/v1/search?name=Acme&state=FL", nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)

// Search by registered agent
req2, _ := http.NewRequest("GET",
  "https://filed.dev/api/v1/search?agent=CSC+Global&state=FL", nil)
req2.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp2, _ := http.DefaultClient.Do(req2)

Response

{
  "data": [
    {
      "id": "ent_mNqR7xKp",
      "name": "ACME HOLDINGS LLC",
      "state": "FL",
      "type": "LLC",
      "status": "Active",
      "formedDate": "2019-03-14",
      "registeredAgent": {
        "name": "CSC Global",
        "address": "1234 Main St, Tallahassee, FL 32301"
      },
      "principalAddress": "123 Main St, Miami, FL 33101",
      "officerCount": 3,
      "lastUpdated": "2026-02-27T12:00:00Z",
      "recordClass": "registry_entity",
      "subjectType": "organization",
      "jurisdictionLevel": "state",
      "sourceAgency": "Florida Division of Corporations (Sunbiz)"
    }
  ],
  "meta": {
    "total": 1,
    "limit": 10,
    "offset": 0,
    "state": "FL",
    "source": "Florida Division of Corporations",
    "record_class": ["registry_entity", "federal_registration"]
  }
}

Cross-state completeness

Omitting state fans out across every covered state and merges the results. Each state is queried independently, so one unreachable state does not fail the whole search — but it does mean the merged result set may not be complete. The cross-state response always carries three extra meta fields that say so explicitly, rather than leaving a partial result indistinguishable from a complete one:

FieldTypeDescription
meta.partialbooleantrue if any covered state could not be searched. false means every covered state answered.
meta.statesSearchedintegerCount of states that successfully answered.
meta.statesFailedarray of stringTwo-letter codes of states that could not be reached. Empty when partial is false.
{
  "data": [ /* ... */ ],
  "meta": {
    "total": 42,
    "limit": 10,
    "offset": 0,
    "source": "Cross-state search",
    "record_class": ["registry_entity", "federal_registration"],
    "partial": true,
    "statesSearched": 49,
    "statesFailed": ["FL", "GA"]
  }
}

A partial: true response means we could not reach some states — it does not mean the company is not registered there. Treat statesFailed as "retry later," not as a negative result for those states.

If the directory that distinguishes a covered state from an uncovered one cannot itself be read, the search answers 503 upstream_unavailable instead of guessing — both for a cross-state request and for a single-state request naming a state outside the small set served directly from a live third-party feed (NY, CT, OR, PA, DC), which is unaffected.

Record classification

Every result carries two fields describing what kind of record it is:

FieldTypeDescription
recordClassstringregistry_entity, federal_registration, filing_event, license, name_registration, government_vendor or financial_assistance_award
subjectTypestringorganization or person

By default — when record_class is omitted — /v1/search already narrows results to two classes, registry_entity and federal_registration, so a default search is not only state-registered companies: a federal organisation register entry can match the same name as a state registration. These two fields are how you tell which is which. Pass record_class=registry_entity if you want only state registry records — see Filtering by class below for the full set of options, including record_class=all to remove the filter entirely. Both fields are always present.

See Record Classes for what each value means.

Filtering by class

By default — when record_class is omitted — results are limited to two classes: registry_entity (state business-entity registrations) and federal_registration (authoritative federal registers of organisations). Records of the other five classes are not included unless you ask for them.

Nothing has been removed: pass record_class=all to get the full, unfiltered result set, or name the classes you want, for example record_class=license,name_registration. The classes actually applied to a response are echoed back in meta.record_class (as the literal ["all"] when you passed all). An unrecognised class name returns 400 with the valid list in the error message.

meta.total is computed independently of record_class and is not narrowed by it — on a filtered request total can report more records than the filter will return. Coverage of state business-entity registrations also varies by state, so in some states the default returns noticeably fewer rows than record_class=all does; both are properties of the underlying data, not a failed query.

/v1/entity/{id} does not accept record_class and never filters — a lookup by id always returns the record, with its recordClass and subjectType fields, regardless of class.

Authority

Every result also carries two fields describing who actually asserted the record, independent of recordClass:

FieldTypeDescription
jurisdictionLevelstring or nullfederal, state, county, or null if unverified for this record's source
sourceAgencystring or nullThe real asserting body, e.g. "Internal Revenue Service" — or null alongside a null jurisdictionLevel

Unlike recordClass and subjectType, these two fields can be null — check for that before displaying them. See Record Classes for the full explanation and the current coverage.

Try It

Test this endpoint in the Playground — no code required.