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

# Chain-of-title & Lien Diligence

> Check recorded transfers, security interests, and releases before a brand transaction

When a mark is part of an acquisition, financing, or portfolio sale, diligence teams need to know who received title, whether any lender recorded a security interest, and whether that lien was released. This recipe walks from owner-level lien filtering to a mark-level chain of title, then pairs a release to the original security-interest reel and frame.

Use [List Assignments](/api-reference/records/transactions/list-assignments) for cross-mark transaction filtering, [Trademark Assignments](/api-reference/trademarks/trademark-assignments) for one mark's chain, and [Get Assignment](/api-reference/records/transactions/get-assignment) for the full parties and affected marks.

## Prerequisites

* A Signa API key with `trademarks:read`
* The target owner ID (`own_...`) or entity ID (`ent_...`)
* The trademark ID (`tm_...`) for any mark you want to inspect directly

<Steps>
  <Step title="Find recorded liens for the owner">
    Start with `type=security_interest` and the borrower or seller owner ID. The collection endpoint is filter-required, so every request stays scoped to a diligence question.

    <CodeGroup>
      ```bash cURL theme={null}
      curl -G "https://api.signa.so/v1/assignments" \
        -H "Authorization: Bearer $SIGNA_API_KEY" \
        --data-urlencode "owner_id=own_22222222-2222-4222-8222-222222222222" \
        --data-urlencode "type=security_interest" \
        --data-urlencode "limit=20"
      ```

      ```typescript TypeScript theme={null}
      import { Signa } from "@signa-so/sdk";

      const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });

      const liens = await signa.assignments.list({
        owner_id: "own_22222222-2222-4222-8222-222222222222",
        type: "security_interest",
        limit: 20,
      });
      ```
    </CodeGroup>

    If the borrower sits inside a larger corporate family, repeat the same query with `entity_id`. Signa expands the entity to member owners before filtering assignment parties.
  </Step>

  <Step title="Inspect the lien">
    Retrieve the security-interest record to confirm the parties and affected marks. Save the `reel_no` and `frame_no`, because releases point back to those values.

    ```typescript TypeScript theme={null}
    const lien = await signa.assignments.retrieve(
      "asg_66666666-6666-4666-8666-666666666666",
    );

    const grant = {
      reel_no: lien.reel_no,
      frame_no: lien.frame_no,
      lender: lien.parties.find((party) => party.role === "assignee")?.name,
      marks: lien.properties.map((property) => property.trademark_id),
    };
    ```

    For the worked example, the lien has `reel_no: "9102"` and `frame_no: "0100"`, with Northstar Brands LLC as assignor and First Continental Bank, N.A. as assignee.
  </Step>

  <Step title="Review the mark chain">
    Pull the per-mark chain to see transfers, liens, and releases together in recorded-date order.

    <CodeGroup>
      ```bash cURL theme={null}
      curl "https://api.signa.so/v1/trademarks/tm_11111111-1111-4111-8111-111111111111/assignments" \
        -H "Authorization: Bearer $SIGNA_API_KEY"
      ```

      ```typescript TypeScript theme={null}
      const chain = await signa.trademarks.assignments(
        "tm_11111111-1111-4111-8111-111111111111",
      );

      for await (const transaction of chain) {
        console.log(transaction.recorded_date, transaction.conveyance_type, transaction.reel_no, transaction.frame_no);
      }
      ```
    </CodeGroup>

    In the example chain, `asg_55555555-5555-4555-8555-555555555555` records title moving from OldCo Consumer Products Inc. to Northstar Brands LLC. `asg_66666666-6666-4666-8666-666666666666` records the security interest. `asg_77777777-7777-4777-8777-777777777777` records a later release.
  </Step>

  <Step title="Pair releases to grants">
    A release points back to the grant it releases with `release_of_reel_no` and `release_of_frame_no`. Match those fields against the security-interest `reel_no` and `frame_no`.

    ```typescript TypeScript theme={null}
    const transactions = await chain.toArray();

    const grants = transactions.filter((item) => item.conveyance_type === "security_interest");
    const releases = transactions.filter((item) => item.conveyance_type === "release");

    const releasePairs = grants.map((grant) => ({
      grant_id: grant.id,
      grant_reel_no: grant.reel_no,
      grant_frame_no: grant.frame_no,
      release: releases.find(
        (release) =>
          release.release_of_reel_no === grant.reel_no &&
          release.release_of_frame_no === grant.frame_no,
      ) ?? null,
    }));
    ```

    In the worked example, the release has `release_of_reel_no: "9102"` and `release_of_frame_no: "0100"`, so it clears the `9102/0100` security interest. If no release pairs to a grant, escalate it for legal review before treating the mark as clean collateral or clean title.
  </Step>

  <Step title="Decide what to clear">
    Use the combined evidence to separate clean title from open issues:

    * A current owner should appear in a recent assignment or other transfer record.
    * A security interest without a matching release may require payoff, consent, or an exception in the transaction documents.
    * A release matching the grant reel/frame is the strongest normalized signal that the recorded lien was cleared.
    * If the owner is part of a larger entity, rerun the lien filter with `entity_id` to catch affiliates and office-specific owner records.
  </Step>
</Steps>
