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

Fold one Company into another

Folds the absorbed Company into the survivor because both name the same Legal entity, and redirects the absorbed id to the survivor forever. Permitted only when the absorbed Company names no Legal entity or names the survivor's: two Companies bound to different entities are two businesses, and a verified Company absorbed into an unverified one is refused with the direction to merge instead. The absorbed Company's identifiers always move — one qualified value belongs to exactly one Company, so they cannot collide — and its domains and activities move unless the survivor already holds the same value. The survivor keeps its name, its country, and its primaries. `dryRun` reports the same plan and writes nothing. Unlock is untouched: a grant belongs to the Legal entity, not to a Company. There is no split and no undo. Free. A merge never refunds.

POST
/api/v1/companies/merge

Folds the absorbed Company into the survivor because both name the same Legal entity, and redirects the absorbed id to the survivor forever. Permitted only when the absorbed Company names no Legal entity or names the survivor's: two Companies bound to different entities are two businesses, and a verified Company absorbed into an unverified one is refused with the direction to merge instead. The absorbed Company's identifiers always move — one qualified value belongs to exactly one Company, so they cannot collide — and its domains and activities move unless the survivor already holds the same value. The survivor keeps its name, its country, and its primaries. dryRun reports the same plan and writes nothing. Unlock is untouched: a grant belongs to the Legal entity, not to a Company. There is no split and no undo.

Free. A merge never refunds.

Authorization

bearerAuth
AuthorizationBearer <token>

In: header

Header Parameters

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

curl -X POST "https://example.com/api/v1/companies/merge" \  -H "Idempotency-Key: string" \  -H "Content-Type: application/json" \  -d '{    "survivor": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3",    "absorbed": "2b7a9f60-5d18-4e2c-8f31-6a4c0d9e2b15",    "dryRun": true  }'
{  "dryRun": true,  "survivorId": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3",  "absorbedId": "2b7a9f60-5d18-4e2c-8f31-6a4c0d9e2b15",  "moves": {    "identifiers": [      {        "kind": "organization_system",        "system": "salesforce",        "value": "0015g"      }    ],    "domains": [      "ecoop.ee"    ],    "activities": []  },  "conflicts": [    {      "kind": "activity",      "value": "4711"    }  ],  "redirects": 1,  "survivor": {    "id": "7f9c2a14-3b6e-4d51-9a2f-1c8e5b0d47a3",    "name": "Coop Eesti Keskühistu",    "country": "EE",    "origin": "external",    "verified": false,    "unlocked": false,    "legalEntityId": null,    "activities": [      {        "code": "4711",        "precision": "class",        "source": {          "scheme": "nace21",          "code": "4711"        },        "primary": true      }    ],    "identifiers": [      {        "kind": "registration",        "country": "EE",        "scheme": "ee-registrikood",        "value": "10093971",        "primary": true,        "verifiedAt": null      },      {        "kind": "organization_system",        "system": "hubspot",        "value": "8842001",        "primary": false      }    ],    "domains": [      {        "domain": "coop.ee",        "primary": true      }    ],    "etag": "\"1\"",    "createdAt": "2026-09-02T00:00:00.000Z",    "updatedAt": "2026-09-02T00:00:00.000Z"  }}

Find Legal entities in the Commons POST

Searches the Commons by name, by registration identifier, or both, and returns the Legal entities it carries. It mints nothing and unlocks nothing: each candidate reports whether this organization already holds a Company bound to it, so the caller decides what to mint (`POST /companies`) and what to pay to read (`POST /companies/legal-entity`). Free.

Mint Companies from your own data, or attach rows to Companies you hold POST

Imports up to 1000 rows. Each row needs a name, an operating country, at least one activity (ISIC Rev.5, NACE Rev.2.1, or NACE Rev.2 — converted to ISIC at the deepest level the code determines), and at least one identifier or domain. A row whose identifier a held Company already carries joins that Company; `into` joins a named Company; otherwise the row mints a new Company. A shared domain or an identical name and country is reported as `similar` and never decides. The whole batch is refused when any row is invalid, when an identifier belongs to two Companies, or when the batch would exceed the plan's Company allowance; `dryRun` returns the same plan and writes nothing. Free. A Company's Legal entity data is paid for once, inside the first priced request that touches it.

survivor*string

The Company that keeps its id, its name, and its primaries.

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
absorbed*string

The Company that is folded in; its id resolves to the survivor afterwards.

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
dryRun?boolean

Report what would move and what would conflict; write nothing.

Defaultfalse