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

# Checking consent status

> Query whether an end user has accepted the latest version of your clickwrap templates.

<Note>
  **Prerequisites:** Your [App ID + App Key](/product/integrations/integrations-overview) for server-side calls, and at least one [enabled template](/product/getting-started/first-clickwrap).
</Note>

Use the consent status endpoint to check whether a specific end user has accepted, declined, or has no recorded interaction with your clickwrap templates. The response includes the status for **all templates** linked to your app — no template ID is needed.

<Tip>
  You can view your templates in the [ClickTerm UI](https://app.clickterm.com/templates) or fetch them programmatically via the [Get clickwrap templates](/api-reference/templates/get-templates-by-tags) endpoint.
</Tip>

## Get consent status for an end user

```
GET https://api.clickterm.com/public-client/v1/clickwraps/{endUserId}/status
```

<CodeGroup>
  ```java example.java (Java) theme={null}
  HttpResponse<String> response = Unirest.get(
      "https://api.clickterm.com/public-client/v1/clickwraps/" + endUserId + "/status")
    .header("X-APP-ID", "YOUR_APP_ID")
    .header("X-APP-KEY", "YOUR_APP_KEY")
    .asString();
  ```

  ```javascript server/example.js (Node.js) theme={null}
  const response = await fetch(
    `https://api.clickterm.com/public-client/v1/clickwraps/${endUserId}/status`,
    {
      headers: {
        "X-APP-ID": process.env.CLICKTERM_APP_ID,
        "X-APP-KEY": process.env.CLICKTERM_APP_KEY,
      },
    }
  );
  const statuses = await response.json();
  ```

  ```python example.py (Python) theme={null}
  response = requests.get(
      f"https://api.clickterm.com/public-client/v1/clickwraps/{end_user_id}/status",
      headers={
          "X-APP-ID": CLICKTERM_APP_ID,
          "X-APP-KEY": CLICKTERM_APP_KEY,
      },
  )
  statuses = response.json()
  ```
</CodeGroup>

### Status values

| Status       | Description                                                                              |
| ------------ | ---------------------------------------------------------------------------------------- |
| `NO_DATA`    | No recorded interaction with the clickwrap                                               |
| `PENDING`    | Clickwrap presented but no action taken yet                                              |
| `UNVERIFIED` | User acted but the event hasn't been verified by your server                             |
| `ACCEPTED`   | User accepted the terms (terminal — clickwrap not shown again until a new major version) |
| `DECLINED`   | User declined the terms                                                                  |
| `OVERDUE`    | `mustAcceptBy` deadline passed with no interaction                                       |

The clickwrap is presented (or re-presented) when status is `NO_DATA`, `PENDING`, `DECLINED`, or `OVERDUE`.

### Re-acceptance

Each entry also includes a `reAcceptanceRequired` boolean. It is `true` when the SDK should re-display the clickwrap **even though the user already has a binding acceptance** (`status` stays `ACCEPTED`). This happens when either:

* you have flagged the pair via the [Request clickwrap re-acceptance](/api-reference/events/request-clickwrap-re-acceptance) endpoint, or
* the template has [always require re-acceptance](/product/templates/templates-overview#always-require-re-acceptance) enabled and the user has a prior accepted event for the current major version.

Because `status` remains `ACCEPTED` the whole time, there is no compliance gap - the prior agreement stays in force until the user re-signs.

```json theme={null}
{
  "clickwrapTemplateId": "987e6543-e21b-45d3-b321-426614174999",
  "clickwrapTemplateName": "Terms of Service",
  "status": "ACCEPTED",
  "reAcceptanceRequired": true
}
```

<Note>
  This endpoint returns status only for the **latest major version**. See the [API reference](/api-reference/events/get-consent-status-for-end-user) for the full response schema.
</Note>

### When to use this

* **Gate a flow** — check if the user is compliant before allowing them to proceed
* **Build dashboards** — show template tags, effective dates, and overdue states
* **Audit consent** — answer "has this user accepted?" without triggering the clickwrap

<CardGroup cols={2}>
  <Card title="Displaying a clickwrap" icon="window-maximize" iconType="light" href="/dev/guides/displaying-clickwrap">
    Present the agreement dialog to end users.
  </Card>

  <Card title="API reference" icon="magnifying-glass" iconType="light" href="/api-reference/events/get-consent-status-for-end-user">
    Full request/response schemas and field descriptions.
  </Card>
</CardGroup>
