Documentation
Documentation

Overview

Spore docs

Start here

Getting startedInstall the CLIAuthentication and keys

Build

Search and filtersSegments and the loopEnrichment lifecycle

Recipes

Recipe: search to a live SegmentRecipe: enrich without a segmentRecipe: land your own research

Connect

Events

Account

Credits and billing

Reference

Conventions
API reference
Export the organization's Operation calls POSTPage the organization's Operation calls GETExport the organization's recorded acts POSTPage the organization's recorded acts GETCancel an enrichment launch POSTRead a vocabulary: tools, filters, knowledge, or NACE GETPublish a staged Commons Generation POSTRestore the retained previous Commons Generation POSTPage the organization's Companies GETCorrect a Company's Core under Spore-If-Match PATCHDelete a Company DELETERead everything you know about one Company GETRead Legal entity data for Companies you hold POSTFind Legal entities in the Commons POSTFold one Company into another POSTMint Companies from your own data, or attach rows to Companies you hold POSTPromote a declared current Fact into Company Core POSTRead one Company GETMeasure requested fields over a set of Companies POSTRun a native enrichment POSTPoll an enrichment GETFollow the organization's durable events stream GETPage a Job's frozen target list GETCreate an API key and reveal its secret once POSTRevoke an organization API key POSTList per-item enrichment outcomes GETDeclare a namespace and its fields before recording into them POSTDelete a declaration while nothing stands on it DELETERead your Catalog GETRecord what you observed about a Company or concluded about a Segment POSTUnlock every Legal entity a search matched POSTSearch the Commons: count, analytics, and a minted sample POSTPage a Segment's members, with the exact count GETName a live filter over your Companies POSTDelete a Segment DELETERead what you have concluded about one Segment GETRename a Segment, or change what it means, under Spore-If-Match PATCHRead a Segment's name and filter GETPage the organization's Segments GETPage the organization's credit ledger GETRead the balance and this key's spend bounds GET
API reference

Rename a Segment, or change what it means, under Spore-If-Match

Changes the name, the filter, or both. Editing the filter changes membership immediately — there is nothing to rebuild and nothing goes stale. A stale `Spore-If-Match` is refused with the current Segment and its ETag. Free.

PATCH
/api/v1/segments/{segmentId}

Changes the name, the filter, or both. Editing the filter changes membership immediately — there is nothing to rebuild and nothing goes stale. A stale Spore-If-Match is refused with the current Segment and its ETag.

Free.

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Path Parameters

segmentId*string

The Segment.

Formatuuid

Header Parameters

Spore-If-Match*string

The Segment's current ETag. A stale value is refused with the current Segment. The standard conditional headers (If-Match and its kin) are refused on writes (ADR-0062).

Idempotency-Key*string

Required for writes. Reusing this key with the same input replays the original response.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/segments/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Spore-If-Match: string" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "segmentId": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3",    "name": "Estonian software, ICP over 8"  }'
{  "id": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3",  "name": "Estonian software, high ICP",  "filter": {    "type": "group",    "logic": "AND",    "children": [      {        "type": "group",        "logic": "OR",        "children": [          {            "type": "rule",            "fieldId": "core.country",            "operator": "equals",            "value": "EE"          },          {            "type": "rule",            "fieldId": "registry.revenueEur",            "operator": "greaterThan",            "value": 1000000,            "params": {              "years": [                2023              ]            }          }        ]      },      {        "type": "rule",        "fieldId": "research.icp_score",        "operator": "greaterThan",        "value": 7      }    ]  },  "etag": "\"2\"",  "createdAt": "2026-09-03T10:00:00.000Z",  "updatedAt": "2026-09-03T10:00:00.000Z"}

Read what you have concluded about one Segment GET

Returns the current value of every field this organization has recorded about the Segment itself — reduce knowledge, the conclusions that are about the set rather than about any one member — each with who recorded it, when, the evidence behind it including the Jobs it was reduced from, whether its declaration's freshness has lapsed, and the full history underneath. Members' own Facts are read per Company; `POST /coverage` is the door that asks what a set is missing. Free.

Read a Segment's name and filter GET

Returns the Segment and its ETag. Members, counts, and coverage are separate reads, because each of them is a question about live data rather than a property of the row. Free.

segmentId*string
Match^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
Formatuuid
name?string

What this set is called. A name, not a description.

Length1 <= length <= 255
filter?

The filter. Leaves name their field by name: core.<field> for Core, <namespace>.<field> for a Catalog field, registry.<field> for Legal entity data. Every name is validated against your own vocabulary; a registry predicate selects only Companies whose Legal entity you have unlocked.