---
title: "Unlock Contact"
method: POST
path: "/api/external/v2/contacts/{contact_id}/actions/unlock"
tags: ["external-v2-contacts"]
---

# Unlock Contact

`POST /api/external/v2/contacts/{contact_id}/actions/unlock`

Unlock (reveal) a recommended lender contact — the v2 reveal money path (MCP-411).

Charges ``BillingActionCodes.SCH_053`` ("Add a lender to a deal", ~200 credits)
via ``ContactController.unlock_contact_for_account`` (reserve→settle), flipping
the contact's ``paid`` flag. Idempotent per account via that flag — re-calling
does not double-charge. After unlock the contact's identity (name, email,
phone) is revealed here, on ``GET /contacts/{id}``, and on the placement that
holds it.

Scoped to ``ai:actions`` (not ``contacts:write``): unlocking spends credits, so
it is grouped with the other credit-spending action (``search-lenders``) rather
than plain CRM writes — a ``contacts:write``-only integration cannot spend.

Returns **402** (``insufficient_credits``) when the account can't afford the
charge; the structured envelope carries ``action_code`` / ``cost`` / ``balance``.
A cross-account or unknown ``contact_id`` returns **404**.

## Path parameters

- `contact_id` integer, required

## Response `200`

Successful Response

- ContactObjectResponse — OpenAPI schema for GET /api/external/v2/contacts/<id> (object envelope).
  - `request_id` string, required
  - `timestamp` string, required
  - `data` ContactResponse, required
    - `id` integer, required
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `email` string, nullable
    - `contact_type` string, nullable
    - `contact_types` string[]
    - `company_id` integer, nullable
    - `title` string, nullable
    - `department` string, nullable
    - `address` string, nullable
    - `address2` string, nullable
    - `city` string, nullable
    - `state` string, nullable
    - `zip` string, nullable
    - `linkedin_url` string, nullable
    - `photo_url` string, nullable
    - `phones` PhoneOut[]
      - `id` string, nullable
      - `type` string, nullable
      - `raw` string, nullable
      - `country` string, nullable
      - `e164` string, nullable
      - `extension` string, nullable
    - `is_primary` boolean
    - `is_connected` boolean
    - `owner_account_id` integer, nullable
    - `created_at` string, nullable
    - `updated_at` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/lev/apis/lev-api.md) · [All operations](https://skmtc.net/lev/apis/lev-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lev/lev-api/versions/e1915e1423cf/schema)
