> ## 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.

# Querying Parameters

> Learn how to use the query field.

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 querying parameters `q` and `query_by` work together to control what data you search for and which fields to search in. These parameters enable you to perform full-text searches, exact matches, and wildcard queries across your ledger data.

The `q` parameter is required in all search requests. The `query_by` parameter is required when searching for specific terms, and optional only when using the wildcard `*`.

***

## Quick start

Here's a basic search query that demonstrates both parameters:

<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": "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
      "query_by": "source,destination"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    { q: 'bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e', query_by: 'source,destination' },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
    blnkgo.SearchParams{
      Q:       "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
      QueryBy: "source,destination",
    },
    blnkgo.Transactions,
  )
  ```
</CodeGroup>

```json Response expandable theme={"system"}
{
  "found": 3,
    "hits": [
        {
            "document": {
                "amount": 5000,
                "amount_string": "5000",
                "atomic": false,
                "created_at": 1720363463,
                "currency": "USD",
                "description": "Payment for services",
                "destination": "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
                "effective_date": 1720363463,
                "source": "bln_86ba7976-499d-4282-955e-a7c2abf5db12",
                "status": "APPLIED",
                "transaction_id": "txn_4c86b65e-8249-4b3b-8000-b907d32f9a9f"
            },
            "highlights": [
                {
          "field": "destination",
          "matched_tokens": ["bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e"],
          "snippet": "<mark>bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e</mark>"
        }
      ]
    }
  ]
}
```

***

## Query parameters

### Exact text search

Search for specific text or IDs by specifying the fields to search in:

<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": "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
      "query_by": "source,destination"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
      query_by: "source,destination",
    },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e", QueryBy: "source,destination"},
    blnkgo.Transactions,
  )
  ```
</CodeGroup>

### Wildcard search

Use `*` to return all records (only case where `query_by` is optional):

<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": "*"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: "*",
    },
    'balances',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "*"},
    blnkgo.Balances,
  )
  ```
</CodeGroup>

### Multi-word search

Search for multiple words across specified fields:

<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": "payment services",
      "query_by": "description"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: "payment services",
      query_by: "description",
    },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "payment services", QueryBy: "description"},
    blnkgo.Transactions,
  )
  ```
</CodeGroup>

<Warning>
  Multi-word searches require ALL words to be present in the document. For "payment services", both "payment" AND "services" must exist in the specified fields.
</Warning>

### Single vs multiple fields

Search in one field or across multiple fields using comma separation:

```bash theme={"system"}
# Single field
{
  "q": "john",
  "query_by": "first_name"
}

# Multiple fields
{
  "q": "john doe",
  "query_by": "first_name,last_name,email"
}
```

### Metadata search

<Info> Available in version 0.11.0 and later. </Info>

Search within metadata or nested objects using dot notation:

<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": "transfer",
      "query_by": "meta_data.transaction_type,description"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Search.search(
    {
      q: "transfer",
      query_by: "meta_data.transaction_type,description",
    },
    'transactions',
  );
  ```

  ```go Go wrap theme={"system"}
  results, resp, err := client.Search.SearchDocument(
    blnkgo.SearchParams{Q: "transfer", QueryBy: "meta_data.transaction_type,description"},
    blnkgo.Transactions,
  )
  ```
</CodeGroup>

***

## Common patterns

<Steps>
  <Step title="Search for a specific balance's transactions">
    This finds all transactions where the specified balance ID appears as either source or destination.

    <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": "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
          "query_by": "source,destination"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        {
          q: "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e",
          query_by: "source,destination",
        },
        'transactions',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
        blnkgo.SearchParams{Q: "bln_28f25ef6-2e0d-4fa6-891c-37fc409d654e", QueryBy: "source,destination"},
        blnkgo.Transactions,
      )
      ```
    </CodeGroup>
  </Step>

  <Step title="Find customers by name or email">
    This searches for "alice" across name and email fields, useful for customer support.

    <CodeGroup>
      ```bash cURL wrap theme={"system"}
      curl -X POST "http://YOUR_BLNK_INSTANCE_URL/search/identities" \
        -H "X-Blnk-Key: YOUR_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "q": "alice",
          "query_by": "first_name,last_name,email"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        {
          q: "alice",
          query_by: "first_name,last_name,email",
        },
        'identities',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
        blnkgo.SearchParams{Q: "alice", QueryBy: "first_name,last_name,email"},
        blnkgo.Identities,
      )
      ```
    </CodeGroup>
  </Step>

  <Step title="Find transactions by description keywords">
    This finds transactions containing "refund" in their description or reference fields.

    <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": "refund",
          "query_by": "description,reference"
        }'
      ```

      ```typescript TypeScript wrap theme={"system"}
      const response = await blnk.Search.search(
        {
          q: "refund",
          query_by: "description,reference",
        },
        'transactions',
      );
      ```

      ```go Go wrap theme={"system"}
      results, resp, err := client.Search.SearchDocument(
        blnkgo.SearchParams{Q: "refund", QueryBy: "description,reference"},
        blnkgo.Transactions,
      )
      ```
    </CodeGroup>
  </Step>
</Steps>

***

## Best practices

* **Be specific with fields**: Target relevant fields in `query_by` for better performance.
* **Validate field names**: Invalid fields in `query_by` may return unexpected results.

***

## 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>
