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

# Get Contact — GET /v1/contacts/{contactId} Reference

> GET /v1/contacts/{contactId} retrieves a single contact by ID with payment direction, bank account status, tax info, and paymentReady flag.

Use this endpoint to fetch the full details of a single contact by its unique ID. The response includes the contact's current status, payment direction, bank account summary, tax information, and whether the contact is currently payment-ready.

## Base URL

```
GET https://api.cleo-pay.com/v1/contacts/{contactId}
```

## Authentication

All requests must include a Bearer token in the `Authorization` header.

```http theme={null}
Authorization: Bearer <token>
```

## Path Parameters

<ParamField path="contactId" type="string" required>
  The unique identifier of the contact to retrieve. This is the same ID referenced as `contact.id` in payables.
</ParamField>

## Response

Returns a `Contact` object.

<ResponseField name="id" type="string">
  Unique identifier for the contact.
</ResponseField>

<ResponseField name="type" type="string">
  The contact type: `payee` or `business`.
</ResponseField>

<ResponseField name="status" type="string">
  The contact's current status: `active`, `archived`, or `revoked`.
</ResponseField>

<ResponseField name="displayName" type="string | null">
  The contact's display name, if set.
</ResponseField>

<ResponseField name="emails" type="string[]">
  Email addresses associated with the contact. Always empty for `business`-type contacts.
</ResponseField>

<ResponseField name="phone" type="string | null">
  Phone number for the contact. Always `null` for `business`-type contacts.
</ResponseField>

<ResponseField name="paymentDirection" type="string">
  Indicates the allowed payment direction for this contact. One of:

  * `bidirectional` — can both send and receive payments
  * `can_pay` — can only send payments
  * `can_be_paid` — can only receive payments
  * `none` — no payment capability configured
</ResponseField>

<ResponseField name="netTerms" type="number | null">
  Net payment terms in days, if configured.
</ResponseField>

<ResponseField name="bankAccount" type="object | null">
  Summary of the contact's linked bank account. `null` if no bank account has been added.

  <Expandable title="bankAccount fields">
    <ResponseField name="last4" type="string">
      Last four digits of the bank account number.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="taxInfo" type="object | null">
  Tax information for the contact. `null` if no tax info has been provided.

  <Expandable title="taxInfo fields">
    <ResponseField name="legalName" type="string | null">
      Legal name associated with the tax ID.
    </ResponseField>

    <ResponseField name="taxIdType" type="string | null">
      Type of tax ID: `ein` or `ssn`.
    </ResponseField>

    <ResponseField name="taxIdMask" type="string | null">
      Last four digits of the tax ID. The full tax ID is never returned.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="paymentReady" type="boolean">
  Whether this contact can currently receive payments. A contact is payment-ready when a valid bank account is on file and the contact is in `active` status.
</ResponseField>

<ResponseField name="createdAt" type="datetime">
  ISO 8601 timestamp of when the contact was created.
</ResponseField>

<ResponseField name="updatedAt" type="datetime | null">
  ISO 8601 timestamp of the most recent update. `null` if the contact has never been updated.
</ResponseField>

<ResponseField name="archivedAt" type="datetime | null">
  ISO 8601 timestamp of when the contact was archived. `null` if the contact is not archived.
</ResponseField>

## Example Request

```bash curl theme={null}
curl --request GET \
  --url "https://api.cleo-pay.com/v1/contacts/cnt_01hq1z2k3m4n5p6q7r8s9t0u" \
  --header "Authorization: Bearer <token>"
```

## Example Response

```json 200 theme={null}
{
  "id": "cnt_01hq1z2k3m4n5p6q7r8s9t0u",
  "type": "payee",
  "status": "active",
  "displayName": "Acme Supplies LLC",
  "emails": ["billing@acmesupplies.com"],
  "phone": "+15550001234",
  "paymentDirection": "can_be_paid",
  "netTerms": 30,
  "bankAccount": {
    "last4": "7890"
  },
  "taxInfo": {
    "legalName": "Acme Supplies LLC",
    "taxIdType": "ein",
    "taxIdMask": "6789"
  },
  "paymentReady": true,
  "createdAt": "2024-01-15T10:30:00Z",
  "updatedAt": "2024-03-01T08:00:00Z",
  "archivedAt": null
}
```

<Note>
  The `paymentReady` flag reflects whether a payment can be initiated to this contact right now. A contact may have a bank account on file but still have `paymentReady: false` if their account is in a non-active status.
</Note>
