> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blnkfinance.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Filtering Results

> Learn how to use the filter_by parameter to refine search results with precise conditions

export const RelatedTopics = ({title = "Related topics", items = []}) => {
  if (!items.length) {
    return null;
  }
  return <nav className="related-topics not-prose mt-20 mb-10 flex flex-col" aria-label={title}>
      <p className="related-topics-heading m-0 border-b border-zinc-200 pb-3 text-sm font-medium text-zinc-500 dark:border-white/10 dark:text-zinc-400">
        {title}
      </p>
      <ul className="related-topics-list m-0 mt-3 flex list-none flex-col gap-0.5 p-0">
        {items.map(item => {
    const isExternal = typeof item.href === "string" && (/^https?:\/\//i).test(item.href);
    return <li key={item.href} className="m-0 p-0">
              <a href={item.href} target={isExternal ? "_blank" : undefined} rel={isExternal ? "noopener noreferrer" : undefined} className="related-topics-link group inline-flex items-center gap-2 text-sm font-semibold text-zinc-700 no-underline transition-colors dark:text-zinc-300">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" className="related-topics-icon shrink-0 text-zinc-400 dark:text-zinc-500" aria-hidden="true">
                  <path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z" />
                  <path d="M14 2v4a2 2 0 0 0 2 2h4" />
                  <path d="M10 9H8" />
                  <path d="M16 13H8" />
                  <path d="M16 17H8" />
                </svg>
                <span className="relative top-px transition-colors group-hover:text-[#DD7B1B]">
                  {item.title}
                </span>
              </a>
            </li>;
  })}
      </ul>
    </nav>;
};

export const CtaCallout = props => {
  const {title, buttonLabel, href, trackingEvent, buttonTarget, rel = "noopener noreferrer", children} = props;
  const handleCtaClick = () => {
    if (typeof window === "undefined" || !trackingEvent) {
      return;
    }
    try {
      window.dispatchEvent(new CustomEvent("blnk:docs-cta", {
        detail: {
          name: trackingEvent,
          href
        }
      }));
    } catch {}
    try {
      window.posthog?.capture?.(trackingEvent, {
        href
      });
    } catch {}
    const gaPayload = {
      cta_href: href
    };
    try {
      window.gtag?.("event", trackingEvent, gaPayload);
    } catch {}
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: trackingEvent,
        ...gaPayload
      });
    } catch {}
  };
  const isExternal = typeof href === "string" && (/^https?:\/\//i).test(href);
  const target = buttonTarget ?? (isExternal ? "_blank" : undefined);
  const linkRel = isExternal ? rel : undefined;
  return <section className="cta-callout not-prose relative my-8 w-full min-w-0 overflow-hidden rounded-xl border border-zinc-200 p-5 dark:border-white/10">
      <div className="cta-callout-noise" aria-hidden="true" />
      <div className="cta-callout-layout">
        {title ? <div className="cta-callout-title-row">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="14" height="14" className="cta-callout-icon shrink-0 text-zinc-800 dark:text-zinc-200" aria-hidden="true">
              <g fill="none" fillRule="nonzero">
                <path d="M28 0v28H0V0h28ZM14.691833333333335 27.134333333333334l-0.012833333333333334 0.0023333333333333335 -0.08283333333333333 0.04083333333333334 -0.023333333333333334 0.004666666666666667 -0.016333333333333335 -0.004666666666666667 -0.08283333333333333 -0.04083333333333334c-0.011666666666666667 -0.004666666666666667 -0.022166666666666668 -0.0011666666666666668 -0.028000000000000004 0.005833333333333334l-0.004666666666666667 0.011666666666666667 -0.019833333333333335 0.49933333333333335 0.005833333333333334 0.023333333333333334 0.011666666666666667 0.015166666666666667 0.12133333333333333 0.08633333333333333 0.0175 0.004666666666666667 0.014000000000000002 -0.004666666666666667 0.12133333333333333 -0.08633333333333333 0.014000000000000002 -0.018666666666666668 0.004666666666666667 -0.019833333333333335 -0.019833333333333335 -0.4981666666666667c-0.0023333333333333335 -0.011666666666666667 -0.0105 -0.019833333333333335 -0.019833333333333335 -0.021Zm0.3091666666666667 -0.13183333333333336 -0.015166666666666667 0.0023333333333333335 -0.21583333333333335 0.1085 -0.011666666666666667 0.011666666666666667 -0.0035000000000000005 0.012833333333333334 0.021 0.5016666666666667 0.005833333333333334 0.014000000000000002 0.009333333333333334 0.008166666666666668 0.23450000000000004 0.1085c0.014000000000000002 0.004666666666666667 0.026833333333333334 0 0.03383333333333334 -0.009333333333333334l0.004666666666666667 -0.016333333333333335 -0.03966666666666667 -0.7163333333333334c-0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.023333333333333334 -0.023333333333333334 -0.025666666666666667Zm-0.8341666666666667 0.0023333333333333335a0.026833333333333334 0.026833333333334334 0 0 0 -0.0315 0.007000000000000001l-0.007000000000000001 0.016333333333333335 -0.03966666666666667 0.7163333333333334c0 0.014000000000000002 0.008166666666666668 0.023333333333333334 0.019833333333333335 0.028000000000000004l0.0175 -0.0023333333333333335 0.23450000000000004 -0.1085 0.011666666666666667 -0.009333333333333334 0.004666666666666667 -0.012833333333333334 0.019833333333333335 -0.5016666666666667 -0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.011666666666666667 -0.21466666666666667 -0.10733333333333334Z" strokeWidth="1.1667" />
                <path fill="currentColor" d="M14 2.916666666666667A1.75 1.75 0 0 1 15.750000000000002 4.666666666666667v6.302333333333334L21.207666666666668 7.816666666666667a1.75 1.75 0 0 1 1.75 3.031L17.5 14l5.457666666666667 3.151166666666667a1.75 1.75 0 0 1 -1.75 3.031l-5.457666666666667 -3.1500000000000004V23.333333333333336a1.75 1.75 0 0 1 -3.5 0v-6.302333333333334L6.792333333333334 20.183333333333337a1.75 1.75 0 1 1 -1.75 -3.031L10.5 14 5.042333333333334 10.848833333333333a1.75 1.75 0 0 1 1.75 -3.031l5.457666666666667 3.1500000000000004V4.666666666666667A1.75 1.75 0 0 1 14 2.916666666666667Z" strokeWidth="1.1667" />
              </g>
            </svg>
            <p className="cta-callout-title min-w-0 font-semibold text-zinc-800 dark:text-zinc-200">
              {title}
            </p>
          </div> : null}
        <div className={`cta-callout-body text-sm leading-normal text-zinc-800 dark:text-zinc-200${title ? " cta-callout-body--indented" : ""}`}>
          {children}
        </div>
        <a href={href} target={target} rel={linkRel} onClick={handleCtaClick} data-docs-cta={trackingEvent || undefined} className="cta-callout-button inline-flex items-center justify-center gap-1 rounded-full bg-white px-3 py-1.5 text-sm font-semibold transition hover:bg-zinc-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/50 dark:bg-white dark:hover:bg-zinc-200">
          {buttonLabel}
          <span className="cta-callout-button-arrow" aria-hidden="true">
            →
          </span>
        </a>
      </div>
    </section>;
};

The `filter_by` parameter refines your search results based on specific field values. Use filters to narrow down large datasets and find exactly what you're looking for.

Filters work with any search query, including the wildcard `*`, and support various operators for different data types.

***

## Quick start

Here's a basic filter that demonstrates the most common pattern:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "status:=APPLIED && currency:=USD"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'status:=APPLIED && currency:=USD' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "status:=APPLIED && currency:=USD"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "status:=APPLIED && currency:=USD"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("status:=APPLIED && currency:=USD"),
      "transactions");
  ```
</CodeGroup>

```json Response theme={"system"}
{
  "found": 15,
  "hits": [
    {
      "document": {
        "amount": 1500,
        "amount_string": "1500",
        "atomic": false,
        "currency": "USD",
        "status": "APPLIED",
        "created_at": 1720363463,
        "effective_date": 1720363463,
        "source": "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
        "destination": "bln_86ba7976-499d-4282-955e-a7c2abf5db12"
      }
    }
  ]
}
```

***

## Filter operators

### Exact match (`:=`)

Match field values exactly:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "status:=APPLIED && currency:=USD"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'status:=APPLIED && currency:=USD' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "status:=APPLIED && currency:=USD"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "status:=APPLIED && currency:=USD"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("status:=APPLIED && currency:=USD"),
      "transactions");
  ```
</CodeGroup>

### Partial match (`:`)

Match fields containing the value:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: '*',
      filter_by: 'description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94',
    },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{
          Q: "*",
          FilterBy: "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94",
      },
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {
      "q": "*",
      "filter_by": "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94",
    },
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy(
              "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94"),
      "transactions");
  ```
</CodeGroup>

### Comparison operators

Compare numeric values and dates:

| Operator | Meaning               | Example                  |
| :------- | :-------------------- | :----------------------- |
| `>`      | Greater than          | `amount:>1000`           |
| `>=`     | Greater than or equal | `balance:>=5000`         |
| `<`      | Less than             | `created_at:<1720396800` |
| `<=`     | Less than or equal    | `balance:<=50000`        |

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "amount:>1000 && balance:<=50000"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'amount:>1000 && balance:<=50000' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "amount:>1000 && balance:<=50000"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "amount:>1000 && balance:<=50000"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("amount:>1000 && balance:<=50000"),
      "transactions");
  ```
</CodeGroup>

### Range operator (`[min..max]`)

Filter values within a range:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/balances" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "balance:[1000..50000] && created_at:[1720310400..1720396800]"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: '*',
      filter_by: 'balance:[1000..50000] && created_at:[1720310400..1720396800]',
    },
    'balances',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{
          Q: "*",
          FilterBy: "balance:[1000..50000] && created_at:[1720310400..1720396800]",
      },
      blnkgo.Balances,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {
      "q": "*",
      "filter_by": "balance:[1000..50000] && created_at:[1720310400..1720396800]",
    },
    "balances",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("balance:[1000..50000] && created_at:[1720310400..1720396800]"),
      "balances");
  ```
</CodeGroup>

<Info>
  Use Unix timestamps for date ranges. The example above filters for July 7-8, 2024.
</Info>

### IN operator (`[value1, value2]`)

Match any value from a list:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "status:[APPLIED, INFLIGHT] && currency:[USD, EUR]"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'status:[APPLIED, INFLIGHT] && currency:[USD, EUR]' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "status:[APPLIED, INFLIGHT] && currency:[USD, EUR]"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "status:[APPLIED, INFLIGHT] && currency:[USD, EUR]"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("status:[APPLIED, INFLIGHT] && currency:[USD, EUR]"),
      "transactions");
  ```
</CodeGroup>

### AND operator (`&&`)

Combine multiple conditions where ALL must be true:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "status:=APPLIED && currency:=USD && amount:>1000"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'status:=APPLIED && currency:=USD && amount:>1000' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "status:=APPLIED && currency:=USD && amount:>1000"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "status:=APPLIED && currency:=USD && amount:>1000"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("status:=APPLIED && currency:=USD && amount:>1000"),
      "transactions");
  ```
</CodeGroup>

### Partial match (`:`)

Match fields containing the value:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: '*',
      filter_by: 'description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94',
    },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{
          Q: "*",
          FilterBy: "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94",
      },
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {
      "q": "*",
      "filter_by": "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94",
    },
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy(
              "description:payment && reference:ref_f482a1b3-6c2d-4e89-a17b-3d5e8f2a1c94"),
      "transactions");
  ```
</CodeGroup>

### Not equal (`:!=`)

Exclude specific values:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
    -H "X-Blnk-Key: YOUR_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "q": "*",
      "filter_by": "currency:!=USD && status:!=REJECTED"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: '*', filter_by: 'currency:!=USD && status:!=REJECTED' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
      blnkgo.SearchParams{Q: "*", FilterBy: "currency:!=USD && status:!=REJECTED"},
      blnkgo.Transactions,
  )
  ```

  ```python Python wrap theme={"system"}
  response = blnk.search.search(
    {"q": "*", "filter_by": "currency:!=USD && status:!=REJECTED"},
    "transactions",
  )
  ```

  ```java Java wrap theme={"system"}
  ApiResponse<JsonNode> response = blnk.search().search(
      SearchParams.create()
          .q("*")
          .filterBy("currency:!=USD && status:!=REJECTED"),
      "transactions");
  ```
</CodeGroup>

***

## Common patterns

<Steps>
  <Step title="Filter by transaction status">
    Find all successful and pending transactions.

    <CodeGroup>
      ```bash cURL wrap theme={"system"}
      curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
        -H "X-Blnk-Key: YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "q": "*",
          "filter_by": "status:[APPLIED, INFLIGHT]"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        { q: '*', filter_by: 'status:[APPLIED, INFLIGHT]' },
        'transactions',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
          blnkgo.SearchParams{Q: "*", FilterBy: "status:[APPLIED, INFLIGHT]"},
          blnkgo.Transactions,
      )
      ```

      ```python Python wrap theme={"system"}
      response = blnk.search.search(
        {"q": "*", "filter_by": "status:[APPLIED, INFLIGHT]"},
        "transactions",
      )
      ```

      ```java Java wrap theme={"system"}
      ApiResponse<JsonNode> response = blnk.search().search(
          SearchParams.create()
              .q("*")
              .filterBy("status:[APPLIED, INFLIGHT]"),
          "transactions");
      ```
    </CodeGroup>
  </Step>

  <Step title="Filter transactions by amount range">
    Find USD transactions between \$1,000 and \$10,000.

    <CodeGroup>
      ```bash cURL wrap theme={"system"}
      curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
        -H "X-Blnk-Key: YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "q": "*",
          "filter_by": "amount:[1000..10000] && currency:=USD"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        { q: '*', filter_by: 'amount:[1000..10000] && currency:=USD' },
        'transactions',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
          blnkgo.SearchParams{Q: "*", FilterBy: "amount:[1000..10000] && currency:=USD"},
          blnkgo.Transactions,
      )
      ```

      ```python Python wrap theme={"system"}
      response = blnk.search.search(
        {"q": "*", "filter_by": "amount:[1000..10000] && currency:=USD"},
        "transactions",
      )
      ```

      ```java Java wrap theme={"system"}
      ApiResponse<JsonNode> response = blnk.search().search(
          SearchParams.create()
              .q("*")
              .filterBy("amount:[1000..10000] && currency:=USD"),
          "transactions");
      ```
    </CodeGroup>
  </Step>

  <Step title="Filter by creation date">
    Find transactions created within a specific date range using Unix timestamps.

    <CodeGroup>
      ```bash cURL wrap theme={"system"}
      curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/transactions" \
        -H "X-Blnk-Key: YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "q": "*",
          "filter_by": "created_at:[1720310400..1720396800]"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        { q: '*', filter_by: 'created_at:[1720310400..1720396800]' },
        'transactions',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
          blnkgo.SearchParams{Q: "*", FilterBy: "created_at:[1720310400..1720396800]"},
          blnkgo.Transactions,
      )
      ```

      ```python Python wrap theme={"system"}
      response = blnk.search.search(
        {"q": "*", "filter_by": "created_at:[1720310400..1720396800]"},
        "transactions",
      )
      ```

      ```java Java wrap theme={"system"}
      ApiResponse<JsonNode> response = blnk.search().search(
          SearchParams.create()
              .q("*")
              .filterBy("created_at:[1720310400..1720396800]"),
          "transactions");
      ```
    </CodeGroup>
  </Step>

  <Step title="Filter by multiple currencies">
    Find balances in major currencies with positive amounts.

    <CodeGroup>
      ```bash cURL wrap theme={"system"}
      curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/balances" \
        -H "X-Blnk-Key: YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "q": "*",
          "filter_by": "currency:[USD, EUR, GBP] && balance:>0"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        { q: '*', filter_by: 'currency:[USD, EUR, GBP] && balance:>0' },
        'balances',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
          blnkgo.SearchParams{Q: "*", FilterBy: "currency:[USD, EUR, GBP] && balance:>0"},
          blnkgo.Balances,
      )
      ```

      ```python Python wrap theme={"system"}
      response = blnk.search.search(
        {"q": "*", "filter_by": "currency:[USD, EUR, GBP] && balance:>0"},
        "balances",
      )
      ```

      ```java Java wrap theme={"system"}
      ApiResponse<JsonNode> response = blnk.search().search(
          SearchParams.create()
              .q("*")
              .filterBy("currency:[USD, EUR, GBP] && balance:>0"),
          "balances");
      ```
    </CodeGroup>
  </Step>
</Steps>

***

## Best practices

* **Use exact matches** (`:=`) for IDs, statuses, and currencies
* **Combine with AND** (`&&`) for precise filtering
* **Use ranges** for amounts and dates instead of multiple comparisons
* **Test complex filters** with simple queries first

***

## Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool.

To ask questions or discuss issues, please [contact us](mailto:support@blnkfinance.com) or [join our Discord community](https://discord.gg/7WNv94zPpx).

<CtaCallout title="Connect your ledger to Blnk Cloud" href="https://cloud.blnkfinance.com/auth/sign-up?utm_source=blnk_docs&utm_medium=documentation&utm_campaign=need-help" buttonLabel="Open Blnk Cloud" trackingEvent="clicked_cloud_signup">
  Sign up and manage your ledger with our back-office dashboard. You can invite teammates to collaborate and manage your ledger operations directly from the dashboard.
</CtaCallout>

<RelatedTopics
  items={[
{ title: "Querying", href: "/search/typesense/querying" },
{ title: "Faceting", href: "/search/typesense/faceting" },
{ title: "Sorting", href: "/search/typesense/sorting" },
]}
/>
