# My second factor

GET

/v1/identity/me/second-factor

```sh
curl --request GET \
  --url https://example.com/v1/identity/me/second-factor \
  --header 'Authorization: Bearer <token>'
```

Whether you have a second factor set up (an authenticator app), since when, how many recovery codes are left, and whether your workspace requires one. From a session only: `400 auth-not-session-token` with an API key. Mounted when the deployment keeps second factors (from 0.1.9).

## Authorizations

- **[bearerAuth](https://docs.kindgi.com/v0.1.9/reference/api.md#bearerauth)**

## Responses

### 200

Your second factor.

application/json

A person’s second factor, and whether their workspace requires one. With `setUp`, `since`, `recoveryCodesLeft` and `usable` are given; without it, `started`. Never a key or a code.

object

**setUp**

required

boolean

**started**

A key was given to set one up, and isn’t confirmed yet.

boolean

**since**

string format: date-time

**recoveryCodesLeft**

integer

**usable**

`false`: its key can’t be opened any more (the sign-in secret changed past it). A recovery code still works, as does setting it up again, or an admin removing it.

boolean

**required**

required

The workspace requires a second factor at sign-in.

boolean

##### Examplegenerated

```json
{
  "setUp": true,
  "started": true,
  "since": "2026-04-15T12:00:00Z",
  "recoveryCodesLeft": 1,
  "usable": true,
  "required": true
}
```

### 400

Not a session (`auth-not-session-token`).

application/json

object

**error**

required

object

**code**

required

Stable machine-readable discriminant. Values match domain error codes (see `docs/API-ROUTE-CONVENTIONS.md` §4.3).

string

**message**

required

string

**details**

Optional, kind-specific.

object

**_key_**

additional properties

any

**requestId**

required

Server-assigned request id; also echoed via `X-Request-Id` header.

string

##### Examplegenerated

```json
{
  "error": {
    "code": "example",
    "message": "example",
    "details": {},
    "requestId": "example"
  }
}
```

### 401

Missing / malformed / expired / revoked bearer token.

application/json

object

**error**

required

object

**code**

required

Stable machine-readable discriminant. Values match domain error codes (see `docs/API-ROUTE-CONVENTIONS.md` §4.3).

string

**message**

required

string

**details**

Optional, kind-specific.

object

**_key_**

additional properties

any

**requestId**

required

Server-assigned request id; also echoed via `X-Request-Id` header.

string

##### Examplegenerated

```json
{
  "error": {
    "code": "example",
    "message": "example",
    "details": {},
    "requestId": "example"
  }
}
```

## See also

- [`POST /v1/identity/me/second-factor`: Start setting up a second factor](https://docs.kindgi.com/v0.1.9/reference/api/operations/identitymestartsecondfactor.md)
- [`POST /v1/identity/me/second-factor/confirm`: Confirm a new second factor](https://docs.kindgi.com/v0.1.9/reference/api/operations/identitymeconfirmsecondfactor.md)
- [`POST /v1/identity/me/second-factor/recovery-codes`: New recovery codes](https://docs.kindgi.com/v0.1.9/reference/api/operations/identitymenewrecoverycodes.md)
- [`POST /v1/identity/me/second-factor/remove`: Take my second factor off](https://docs.kindgi.com/v0.1.9/reference/api/operations/identitymeremovesecondfactor.md)
- [Error code `auth-not-session-token`](https://docs.kindgi.com/v0.1.9/reference/errors.md#auth-not-session-token)
- [Every error code](https://docs.kindgi.com/v0.1.9/reference/errors.md)
