---
title: How are multiple filters combined in the Langfuse API?
seoTitle: "AND and OR Filter Logic in the Observations and Metrics APIs"
description: Filter conditions in the Observations API v2, Metrics API v2, and other public APIs are combined with AND. Use any of / none of to match several values of one column.
tags: [public-api]
---

# How are multiple filters combined in the Langfuse API?

All conditions in a `filter` array are combined with **AND**. Nested groups and OR across different columns are not supported. This applies to the [Observations API v2](/docs/api-and-data-platform/features/public-api#observations-filters), the [Metrics API v2](/docs/metrics/features/metrics-api), and the other endpoints that take a `filter` parameter.

To match one of several values in the **same** column, use a single condition with `any of` (or `none of` to exclude values):

```json
[
  { "type": "stringOptions", "column": "environment", "operator": "any of", "value": ["production", "staging"] },
  { "type": "arrayOptions", "column": "tags", "operator": "all of", "value": ["checkout", "v2"] },
  { "type": "number", "column": "totalCost", "operator": ">", "value": 0.01 }
]
```

This returns observations in production **or** staging, **and** tagged with both `checkout` and `v2`, **and** costing more than 0.01. `arrayOptions` (for example `tags`) supports `any of`, `all of`, and `none of`.

For an OR across different columns, send one request per condition and merge the results. In the Observations API v2, a `filter` parameter takes precedence over the fixed query parameters such as `userId` or `name`.

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/faq/all/public-api-filter-combination.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx @langfuse/cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
