Skip to main content
This page covers every constraint enforced by the Facets API, organized by the problem you’re trying to solve. If your request failed or something behaved unexpectedly, find your scenario below.

My content type won’t create

You’re calling define_content_type and getting an error. Good to know:
  • A company can have multiple independent trees (different roots). They don’t interact.
  • Content types are company-scoped, not workspace-scoped.
  • You cannot reparent a node. To move it, delete it with undefine_content_type and recreate it under the new parent. Deleting cascades: see What happens when I delete something? below.

My attribute won’t save

You’re calling define_attribute and getting an error. Good to know:
  • If you omit label, it’s auto-generated from name: fiscal_year becomes "Fiscal Year".
  • 7 attribute types are available: text, number, date, boolean, select, multi-select, rich-text.

My classification was rejected

You’re calling classify on a file and getting an error.

Reclassification: what’s allowed

When a file is already classified and you call classify with a different path in the same tree, the result depends on the relationship: A file can be classified under multiple trees at the same time (e.g. one contract:nda classification and one regulation:gdpr classification).

My value was rejected

You’re calling set_value and getting a 422. To remove a value, use clear_value. Passing null to set_value is rejected with 422.

What happens when I delete something?

Deleting things in Facets cascades. Here’s exactly what gets removed: All deletions are irreversible.

What can I filter on?

Not all attribute types support filtering via GET /api/v3/files?attribute=.

Multi-select containment

When filtering on a multi-select attribute, the filter uses containment: jurisdiction:FR matches files with ["FR", "DE"], ["FR"], or any list containing "FR".

Date shortcuts and ambiguity

LightOn expands partial dates into ranges:
  • effective_date:2025 → any date in 2025 (Jan 1 – Dec 31)
  • effective_date:2025-03 → any date in March 2025
  • effective_date:2025-03-01 → exact date
A 4-digit value like 2025 is ambiguous: it could be a year, a number, or text. LightOn searches across all typed columns with an OR. Use full YYYY-MM-DD format for exact date matches.

How does inheritance work?

Attribute inheritance is resolved at query time, not stored. When you read a file’s facets, LightOn walks up the tree and collects attributes from each ancestor with inherit_attributes: true.

Batch behavior

When you send a JSON array of actions, LightOn processes them in order and fails fast on the first error:
  • Actions before the failure are committed.
  • Actions after the failure are skipped.
  • BM25 reindex is scheduled once per batch, not per action.
All schema actions (adopt, define_content_type, define_attribute, undefine_*) are idempotent and safe to replay.