Enrich up to 100 domains
Batch form of the store profile. Each input is canonicalized and answered independently; the response preserves input order. Matched and stale inputs return the full store object. No-match inputs return a reason and are not billed. With `refresh: true` and the `write:scans` scope, unknown or stale domains are queued for observation and the result is marked `scan_requested`.
read:storesbilling unitlookup_cachedagent notesBills one lookup_cached per matched or stale result and one lookup_live per queued scan; no_match and error results are free. Send an Idempotency-Key on every retry so a timeout cannot double-bill. Keep batches at or under plan.limits.enrich_batch_max. Results with match: no_match and reason: not_in_corpus are unknown to us, not confirmed non-stores. A scan_requested result completes later; poll GET /v1/stores/{domain} after a few minutes or subscribe to events.
Batch form of the store profile. Each input is canonicalized and answered independently; the response preserves input order. Matched and stale inputs return the full store object. No-match inputs return a reason and are not billed. With refresh: true and the write:scans scope, unknown or stale domains are queued for observation and the result is marked scan_requested.
Authorization
ApiKey Workspace API key as a bearer token. Create keys in the dashboard under Settings → API keys. Test keys (oai_test_) answer from a fixed test tenant and never queue production scans.
In: header
Header Parameters
Optional caller-supplied request id (8 to 64 characters, A-Z a-z 0-9 _ -). Echoed back on the response; otherwise the API generates one.
Optional. Replaying the same key with the same body within 24 hours returns the original response with Idempotent-Replayed: true and bills nothing. Same key with a different body returns 409 conflict.
8 <= length <= 128Request 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
curl -X POST "https://example.com/v1/stores/enrich" \ -H "Content-Type: application/json" \ -d '{ "domains": [ "string" ] }'{ "billed": { "lookup_cached": 1, "lookup_live": 0 }, "request_id": "req_01J9X4K6ZP3M8Q2R5T7V9W1Y3A", "results": [ { "input": "gymshark.com", "match": "matched", "reason": null, "scan_job_id": null, "scan_requested": false, "store": { "brand_group_id": "bg_01J9X4K6ZP3M8Q2R5T7V9W1Y3A", "catalog": { "as_of": "2026-09-09T02:20:00Z", "available_count": null, "coverage": "first_page", "currency": "GBP", "price_range": { "median": 34, "p25": 28, "p75": 98 }, "product_count": 1284 }, "domain": "gymshark.com", "geography": { "basis": "observed", "country": "GB" }, "industry": { "basis": "classified", "slug": "apparel" }, "name": "Gymshark", "observation": { "coverage_note": null, "last_completed_scan_at": "2026-09-08T04:12:31Z", "scope": "full" }, "platform": { "confidence": "high", "first_observed_at": "2025-11-02T09:41:00Z", "last_confirmed_at": "2026-09-08T04:12:31Z", "name": "Shopify", "slug": "shopify" }, "profile_url": "https://ongoing.ai/stores/gymshark.com", "recent_signals": [ { "confidence": "high", "confirmed_at": "2026-09-01T04:02:44Z", "effective_at": "2026-08-30T03:58:10Z", "from": null, "id": "evt_7Q2M4K9ZP3R5T7V9W1Y3A6B8C", "technology": "gorgias", "to": null, "type": "technology_added" } ], "status": { "as_of": "2026-09-08T04:12:31Z", "state": "active_storefront" }, "storefront_host": "www.gymshark.com", "storefront_id": "sf_01J9X4K6ZP3M8Q2R5T7V9W1Y3A", "technologies": [ { "category": "email-marketing", "confidence": "high", "first_observed_at": "2026-02-14T11:05:12Z", "install_state": "active", "last_confirmed_at": "2026-09-08T04:12:31Z", "name": "Klaviyo", "slug": "klaviyo" }, { "category": "customer-support", "confidence": "high", "first_observed_at": "2026-08-30T03:58:10Z", "install_state": "active", "last_confirmed_at": "2026-09-08T04:12:31Z", "name": "Gorgias", "slug": "gorgias" }, { "category": "reviews", "confidence": "medium", "first_observed_at": "2026-01-20T08:00:00Z", "install_state": "configured", "last_confirmed_at": "2026-09-08T04:12:31Z", "name": "Yotpo", "slug": "yotpo" } ] } }, { "input": "notastore.example", "match": "no_match", "reason": "not_in_corpus", "scan_job_id": null, "scan_requested": false, "store": null } ]}Usage this period GET
Consumption by billing unit for the current period, in total and per key. Updated within five minutes of each request.
Store profile by domain GET
The current profile of one store from completed observations: platform, technologies with install state and dates, geography, industry, catalog aggregates, lifecycle status, and the last five confirmed signals. Cacheable; identical inputs return identical bodies until the next completed observation.