---
title: "Get user NEPT unlocks"
method: GET
path: "/api/v1/users/{address}/nept/unlocks"
tags: ["User"]
---

# Get user NEPT unlocks

`GET /api/v1/users/{address}/nept/unlocks`

## Path parameters

- `address` string, required — The user account address

## Query parameters

- `with_text` boolean — Include text variation fields
- `with_value` boolean — Calculate and include USD values for amounts, where applicable
- `with_percent` boolean — Calculate and include proportional percentages, where applicable

## Response `200`

Success response

- object — Object data success response
  - `data` UserNeptUnlockOverview, required
    - `arrangements` UserNeptUnlockArrangement[], required — A list of the user's active unlock arrangements
      - `begins_at` string, date-time, required — The time at which the unlock begins
      - `schedule` union, required
        - object
          - `kind` 'linear', required
          - `duration` integer, required — The duration of the unlock in seconds
          - `ends_at` string, date-time, required — The time at which the unlock has/was/would've completed. This is identical to `begins_at + duration`. This timestamp will remain valid even if the unlock has been reclaimed. Therefore, it should not be used as a validity check.
          - `extra` object, required
            - `text` object, nullable, required — Human-readable field variants. Will not be null when query param `with_text` is `true`.
              - …
        - object
          - `kind` 'lump_sum', required
      - `last_claimed_at` string, date-time, nullable, required — The time at which the unlock was last claimed, if any
      - `expires_at` string, date-time, nullable, required — The time at which the unlock expires, if any
      - `admin` UserNeptUnlockArrangementAdmin, required
        - `address` string, required — The address of the unlock arrangement's admin
        - `issued_reclaim` boolean, required — True if the admin his issued a reclaim on the unlock arrangement
      - `extra` object, required
        - `text` object, nullable, required — Human-readable field variants. Will not be null when query param `with_text` is `true`.
          - `begins_at` string, required
          - `expires_at` string, required
          - `last_claimed_at` string, required
      - `amounts` UserNeptUnlockAmounts, required
        - `amount` string, required — The full unlock amount This value is immutable and does not change with regards to expiry/reclamation/lock states.
        - `claimed` string, required — The amount that has already been successfully claimed by the user.
        - `claimable` string, required — The amount currently claimable This takes into account: reclamation, lock state, expiry, and previously claimed. In other words, this is an accurate representation of what the user can currently claim.
        - `locked` string, required — The total amount of NEPT currently awaiting unlock **NOTE:** any reclaimed unlocks are excluded from the total, regardless of how much the user had claimed prior to reclamation.
        - `expired` string, required — The amount that was claimable but has now expired due to the presence and subsequent passing of `expires_at`
        - `reclaimed` string, required — The amount that has been reclaimed from the unlock arrangement admin
        - `extra` object, required
          - `text` object, nullable, required — Human-readable field variants. Will not be null when query param `with_text` is `true`.
            - `amount` string, required
            - `claimable` string, required
            - `expired` string, required
            - `claimed` string, required
            - `reclaimed` string, required
            - `locked` string, required
          - `percent` object, nullable, required — Percentages for unlock amounts. Will not be null when query param `with_percent` is `true`.
            - `reclaimed` string, required
            - `locked` string, required
            - `claimable` string, required
            - `expired` string, required
            - `claimed` string, required
            - `extra` object, required
              - …
          - `value` object, nullable, required — USD values for the corresponding amounts above. Will not be null when query param `with_value` is `true`.
            - `amount` string, required
            - `locked` string, required
            - `expired` string, required
            - `claimed` string, required
            - `claimable` string, required
            - `reclaimed` string, required
            - `extra` object, required
              - …
    - `totals` UserNeptUnlockAmounts, required
      - `amount` string, required — The full unlock amount This value is immutable and does not change with regards to expiry/reclamation/lock states.
      - `claimed` string, required — The amount that has already been successfully claimed by the user.
      - `claimable` string, required — The amount currently claimable This takes into account: reclamation, lock state, expiry, and previously claimed. In other words, this is an accurate representation of what the user can currently claim.
      - `locked` string, required — The total amount of NEPT currently awaiting unlock **NOTE:** any reclaimed unlocks are excluded from the total, regardless of how much the user had claimed prior to reclamation.
      - `expired` string, required — The amount that was claimable but has now expired due to the presence and subsequent passing of `expires_at`
      - `reclaimed` string, required — The amount that has been reclaimed from the unlock arrangement admin
      - `extra` object, required
        - `text` object, nullable, required — Human-readable field variants. Will not be null when query param `with_text` is `true`.
          - `amount` string, required
          - `claimable` string, required
          - `expired` string, required
          - `claimed` string, required
          - `reclaimed` string, required
          - `locked` string, required
        - `percent` object, nullable, required — Percentages for unlock amounts. Will not be null when query param `with_percent` is `true`.
          - `reclaimed` string, required
          - `locked` string, required
          - `claimable` string, required
          - `expired` string, required
          - `claimed` string, required
          - `extra` object, required
            - `text` object, nullable, required — Human-readable variants of percentages for unlock amounts. Will not be null when query params `with_text` and `with_percent` are `true`.
              - …
        - `value` object, nullable, required — USD values for the corresponding amounts above. Will not be null when query param `with_value` is `true`.
          - `amount` string, required
          - `locked` string, required
          - `expired` string, required
          - `claimed` string, required
          - `claimable` string, required
          - `reclaimed` string, required
          - `extra` object, required
            - `text` object, nullable, required — Human-readable variants of USD values. Will not be null when query params `with_text` and `with_value` are `true`.
              - …
    - `last_claimed_at` string, date-time, nullable, required — The time at which the most recent unlock claim occurred, if any
    - `extra` object, required
      - `text` object, nullable, required — Human-readable field variants. Will not be null when query param `with_text` is `true`.
        - `last_claimed_at` string, required
  - `error` unknown, required
  - `status` integer, required — HTTP status. Successful responses are guaranteed to be < `400`. Conversely, error responses are guaranteed to be >= `400`.
  - `status_text` string, required — HTTP status text

## Other responses

- `500` — Server error response

## Changes

- **2026-03-29** `65d147ca4389` — 3 breaking, 7 info
  - added the pattern `^inj(val(oper|cons))?[1][ac-hj-np-z02-9]{38}$` to the `path` request parameter `address`
  - the response property `error` became nullable for the status `200`
  - the `data` response's property type changed from no type to `object` for status `200`
  - added the non-success response with the status `500`
  - …6 more
- **2026-03-01** `9048b9a34641` — 4 breaking, 63 info
  - added `subschema #1: Invalid request, subschema #2: Validation error, subschema #3: Requested entity not found, subschema #4: Contract error, subschema #5: Internal server error` to the `error/anyOf[#/components/schemas/ErrorData]/kind/allOf[#/components/schemas/ErrorKind]/` response property `oneOf` list for the response status `200`
  - added `subschema #1: User error, subschema #2: Client error, subschema #3: Server error` to the `error/anyOf[#/components/schemas/ErrorData]/scope/allOf[#/components/schemas/ErrorScope]/` response property `oneOf` list for the response status `200`
  - the `error/anyOf[#/components/schemas/ErrorData]/kind/allOf[#/components/schemas/ErrorKind]/` response's property type changed from `string` to no type for status `200`
  - the `error/anyOf[#/components/schemas/ErrorData]/scope/allOf[#/components/schemas/ErrorScope]/` response's property type changed from `string` to no type for status `200`
  - …63 more
- …earlier changes not shown

[Full history](https://skmtc.dev/cryptechdev/apis/neptune-api-v2/changes/api/v1/users/:address/nept/unlocks/get.md)

---

[API](https://skmtc.dev/cryptechdev/apis/neptune-api-v2.md) · [All operations](https://skmtc.dev/cryptechdev/apis/neptune-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/cryptechdev/neptune-api-v2/revisions/65d147ca4389/schema)
