---
title: "Public search (organizations, members, records, imported public records)"
method: GET
path: "/public/search"
tags: ["Search"]
---

# Public search (organizations, members, records, imported public records)

`GET /public/search`

## Request

- Base URL: `https://app.arkova.ai/api/v1`
- URL: `https://app.arkova.ai/api/v1/public/search`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`
  - none

Anonymous search across everything Arkova publishes: public organizations, opted-in public member profiles, public records (by text, or exactly by an `ARK-...` record ID), and imported public records from the public-record pipeline. Works with no API key at the anonymous tier (100 req/min/IP); an API key only moves the caller to the 1,000 req/min keyed tier and needs no scope. Returns public projections only: `public_id` plus derived fields and public page URLs, never an internal UUID or email. Groups run independently; a group whose backend failed is listed in `unavailable` and returned empty, and the call is a 503 only when every requested group failed. Imported-record search is plain text and does not depend on ENABLE_SEMANTIC_SEARCH.

## Query parameters

- `q` string, required
- `type` 'all' | 'orgs' | 'members' | 'anchors' | 'imports'
- `limit` integer

## Response `200`

Grouped public search results. All four `results` keys are always present; groups not requested are empty.

- PublicSearchResponse
  - `query` string, required
  - `type` 'all' | 'orgs' | 'members' | 'anchors' | 'imports', required
  - `results` object, required
    - `orgs` object[], required
      - `public_id` string, nullable, required
      - `display_name` string, required
      - `verified` boolean, required
      - `credential_count` integer, required
      - `profile_url` string, uri, required: Public issuer page.
    - `members` object[], required
      - `public_id` string, required
      - `display_name` string, required
      - `headline` string, nullable, required
      - `avatar_url` string, nullable, required
      - `organization_name` string, nullable, required
      - `organization_public_id` string, nullable, required
      - `profile_url` string, uri, required: Public member profile page.
    - `anchors` object[], required
      - `public_id` string, required
      - `title` string, required
      - `credential_type` string, nullable, required
      - `status` string, required
      - `created_at` string, date-time, nullable, required
      - `verify_url` string, uri, required: Public record verification page.
    - `imports` object[], required
      - `public_id` string, required
      - `title` string, required
      - `source` string, nullable, required: Public-record pipeline source key, e.g. edgar, uspto.
      - `record_type` string, nullable, required
      - `source_url` string, nullable, required: Original public source page.
      - `secured_at` string, date-time, nullable, required: Network Observed Time.
      - `verify_url` string, uri, required: Public record verification page.
  - `total` integer, required: Sum of all group lengths.
  - `unavailable` string[], required: Groups whose backend failed for this request (returned empty).

## Other responses

- `400`: Invalid request
- `429`: Rate limit exceeded
- `503`: Every requested group failed, or ENABLE_VERIFICATION_API is off (worker-wide gate for /api/v1/*).

---

[API](https://skmtc.dev/arkova/apis/arkova-verification-api.md) · [All operations](https://skmtc.dev/arkova/apis/arkova-verification-api/llms.txt) · [OpenAPI document](https://skmtc.dev/arkova/apis/arkova-verification-api/revisions/a14858d1efd4?raw)
