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

# Fetch Comment by Foreign ID

> Get a comment by its foreign ID

Returns a single comment matching the given `foreignId` within the project. Useful for looking up comments using your own application's identifiers.

## Query Parameters

<ParamField query="foreignId" type="string" required>
  The foreign ID to look up.
</ParamField>

<ParamField query="include" type="string">
  Comma-separated list of associations to include. Valid values: `user`, `entity`, `space`, `parent`, `grants` (the [reputation-grant summary](/v8/data-models/reputation-grant#grantsummary)). With `entity` or `space`, `entity` is `null` when the entity isn't available to the caller (for example, removed by a moderator) — the comment is still returned, and there is no space. The included `entity` is the entity's stored record, without the fields an entity fetch computes or joins (such as `commentsCount`, `userReaction` and `nsfwEffective`) — see [The included entity](/v8/data-models/comment#the-included-entity). With `parent`, `parentComment` is `null` when the parent no longer exists or is on another entity.
</ParamField>

## Response

Returns a [Comment](/v8/data-models/comment) object, with `isAuthorBlocked` and `isUnavailable` flags. A deleted comment, or a moderator-removed one viewed by anyone but its author, is returned as a [placeholder](/v8/data-models/comment#placeholders) — the author and content are blanked, and the comment's `id`, `parentId`, timestamps and counts are kept.

## Blocks

When the caller is signed in and the `moderation` bundle is installed, the comment comes back the same way a thread shows it:

* **The caller blocked the author** — the full comment, with `isAuthorBlocked: true`.
* **The author blocked the caller** (or both blocked each other) — a [placeholder](/v8/data-models/comment#placeholders) with `isUnavailable: true`.
* **The entity's author blocked the caller** — `404 comment/not-found`, identical to a comment that doesn't exist. This applies to every comment on that entity, except the caller's own.

An embedded `parentComment` follows the same placeholder and flag rules.

**Your own comment on an unavailable entity:** when the entity's author has blocked the caller, the caller can still open their **own** comments there, so they can find and delete them. `entity` (which carries `space`) and `parentComment` are `null` on those comments when requested. They are read-and-delete only: replying under them, reacting to them, and editing them are refused (`404`). They aren't marked by a dedicated field: `entity: null` only means the entity isn't available to the caller, and doesn't say why.

## Error Responses

<AccordionGroup>
  <Accordion title="Invalid Query — 400">
    Returned when `foreignId` is missing or empty, or when `include` contains a value that isn't supported.

    ```json theme={null}
    { "error": "foreignId: Invalid input: expected string, received undefined", "code": "comment/invalid-query" }
    ```

    ```json theme={null}
    { "error": "include: Include must contain valid options: user, entity, space, parent, grants", "code": "comment/invalid-query" }
    ```
  </Accordion>

  <Accordion title="Not Found — 404">
    ```json theme={null}
    { "error": "Comment not found", "code": "comment/not-found" }
    ```
  </Accordion>
</AccordionGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.