API Reference

Complete REST API for Lunexa search-as-a-service. Every endpoint can be tested live with your API key.

Authentication

All API requests must include your API key.

Pass your key via the X-LUNEXA-API-KEY header or as a Authorization: Bearer <key> header. API keys are scoped to a single project and carry action permissions (e.g. documents:search).

curl https://api.ailunexa.com/api/v1/orgs/{org}/projects/{project}/collections \
  -H "X-LUNEXA-API-KEY: lnx_your_key_here"

Base URL

All endpoints are relative to:

https://api.ailunexa.com/api/v1

Every resource endpoint uses the pattern: /orgs/{orgSlug}/projects/{projectSlug}/...

Error Handling

Errors return JSON with an error field:

{
  "error": "api key does not have the required scope: documents:create"
}
StatusMeaning
400Bad request — invalid body or parameters
401Unauthorized — missing or invalid API key
403Forbidden — key lacks required scope or project access
404Resource not found
429Rate limit exceeded

Collections

Collections are search indexes. Create a collection with a schema, then add documents to it.

POST

Create Collection

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collectionsScope: collections:create

Creates a new collection with the given schema. Fields define the structure of documents you'll index.

FieldTypeDescription
name*stringCollection name (must be unique within the project)
fields*arrayArray of field objects with name, type, and optional facet, index, optional
default_sorting_fieldstringField to sort by when no sort is specified
POST/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections
GET

List Collections

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collectionsScope: collections:read

Returns all collections in the project.

GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections
GET

Get Collection

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}Scope: collections:read

Returns a single collection's schema and metadata.

GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}
PATCH

Update Collection

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}Scope: collections:update

Update a collection's schema — add or modify fields.

PATCH/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}
DELETE

Delete Collection

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}Scope: collections:delete

Permanently deletes a collection and all its documents.

DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}

Documents

Documents are the records stored in a collection. Create, read, update, delete, import, and export.

POST

Create Document

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documentsScope: documents:create

Index a single document. Fields must match the collection schema.

POST/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents
GET

Get Document

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}Scope: documents:search

Retrieve a single document by its ID.

GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}
PUT

Upsert Document

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}Scope: documents:update

Create or replace a document. If the document exists, it is fully replaced.

PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}
PATCH

Update Document

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}Scope: documents:update

Partially update a document. Only provided fields are changed.

PATCH/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}
DELETE

Delete Document

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}Scope: documents:delete

Permanently delete a document by ID.

DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/{docId}
POST

Import Documents

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/importScope: documents:import

Bulk import documents in JSONL format (one JSON object per line). Supports upsert, create, update, and delete actions.

POST/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/import
GET

Export Documents

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/exportScope: documents:export

Export all documents as JSONL (newline-delimited JSON).

GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/documents/export

Search

Full-text search with filtering, sorting, and pagination.

FieldTypeDescription
q*stringSearch query. Use * for all documents.
query_by*stringComma-separated list of fields to search in
filter_bystringFilter expression, e.g. price:>50 && category:Electronics
sort_bystringSort expression, e.g. price:desc
pageintegerPage number (default: 1)
per_pageintegerResults per page (default: 20)
POST/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/search

Execute multiple search queries in a single request across different collections.

POST/api/v1/orgs/{orgSlug}/projects/{projectSlug}/multi-search
GET

Generate Scoped Search Key

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/search-keyScope: documents:search

Generate a temporary, scoped search key safe for frontend use. Expires after 1 hour.

GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/search-key

Synonyms

Define synonyms so users find results regardless of the exact term they search for.

GET

List Synonyms

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonymsScope: synonyms:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms
PUT

Upsert Synonym

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}Scope: synonyms:manage

Create or update a synonym rule. Use synonyms for multi-way synonyms or root + synonyms for one-way.

PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}
GET

Get Synonym

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}Scope: synonyms:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}
DELETE

Delete Synonym

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}Scope: synonyms:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/synonyms/{synonymId}

Curations (Overrides)

Pin or hide specific documents for certain search queries.

GET

List Overrides

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overridesScope: curations:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides
PUT

Upsert Override

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}Scope: curations:manage
PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}
GET

Get Override

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}Scope: curations:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}
DELETE

Delete Override

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}Scope: curations:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/collections/{collectionName}/overrides/{overrideId}

Aliases

Point an alias name to a collection for zero-downtime reindexing.

GET

List Aliases

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliasesScope: aliases:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases
PUT

Upsert Alias

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}Scope: aliases:manage
PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}
GET

Get Alias

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}Scope: aliases:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}
DELETE

Delete Alias

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}Scope: aliases:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/aliases/{aliasName}

Stopwords

Manage stopword sets to exclude common words from search indexing.

GET

List Stopword Sets

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwordsScope: stopwords:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwords
PUT

Upsert Stopword Set

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwords/{setId}Scope: stopwords:manage
PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwords/{setId}
DELETE

Delete Stopword Set

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwords/{setId}Scope: stopwords:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/stopwords/{setId}

Presets

Save and reuse search parameter presets.

GET

List Presets

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presetsScope: presets:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presets
PUT

Upsert Preset

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presets/{presetName}Scope: presets:manage
PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presets/{presetName}
DELETE

Delete Preset

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presets/{presetName}Scope: presets:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/presets/{presetName}

Analytics Rules

Configure analytics rules to track popular queries, no-result queries, and click events.

GET

List Analytics Rules

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rulesScope: analytics:manage
GET/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rules
PUT

Upsert Analytics Rule

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rules/{ruleName}Scope: analytics:manage
PUT/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rules/{ruleName}
DELETE

Delete Analytics Rule

/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rules/{ruleName}Scope: analytics:manage
DELETE/api/v1/orgs/{orgSlug}/projects/{projectSlug}/analytics/rules/{ruleName}