---
title: "Get follow state"
---

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

Path: Sureshake API › directory

`GET /v2/directory/{subjectType}/{listingId}/follow-state`

## Path parameters

- `subjectType` (`directory-get-follow-state.path.subjectType`; string, required)
  - one of `"person"`, `"entity"`
- `listingId` (`directory-get-follow-state.path.listingId`; string, required)
  - format `uuid`

## Query parameters

- `actingPrincipal` (`directory-get-follow-state.query.actingPrincipal`; object, optional)

## Code samples

### cURL

```bash
curl --request GET \
  --url 'https://api.sureshake.com/v2/directory/person/<listingId>/follow-state'
```

### TypeScript

```typescript
const url = 'https://api.sureshake.com/v2/directory/person/<listingId>/follow-state';
const options = {method: 'GET'};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.sureshake.com/v2/directory/person/<listingId>/follow-state"

response = requests.get(url)

print(response.text)
```

## Responses

### 200

Default Response

#### Example

```json
{
  "data": {
    "subject": {
      "listingId": "8c73d933-f7ed-437e-9da1-caac95adc1ae",
      "subjectType": "person"
    },
    "actingPrincipal": {
      "principalType": "user",
      "principalId": "string"
    },
    "state": "not_following",
    "request": {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "subject": {
        "listingId": "8c73d933-f7ed-437e-9da1-caac95adc1ae",
        "subjectType": "person"
      },
      "actingPrincipal": {
        "principalType": "user",
        "principalId": "string"
      },
      "requestedByUserId": "string",
      "status": "pending",
      "requestNote": "string",
      "reason": "string",
      "requestedTier": "follower",
      "desiredObservation": "string",
      "requestedDurationDays": 1,
      "reviewDecision": "accepted",
      "grantedTier": "follower",
      "grantedDurationDays": 1,
      "requestedPackageId": "85666b99-03c1-49db-85ac-b2f8e233aa9c",
      "reviewedByUserId": "string",
      "reviewedAt": "2019-08-24T14:15:22Z",
      "decisionNotes": "string",
      "createdAt": "2019-08-24T14:15:22Z",
      "updatedAt": "2019-08-24T14:15:22Z"
    },
    "relationship": {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "status": "provisioning",
      "accessTier": "follower",
      "accessDurationDays": 1,
      "accessExpiresAt": "2019-08-24T14:15:22Z",
      "graphConfirmedAt": "2019-08-24T14:15:22Z",
      "graphLastError": "string",
      "accessDisabledAt": "2019-08-24T14:15:22Z",
      "revokedAt": "2019-08-24T14:15:22Z",
      "revocation": {
        "status": "idle",
        "counts": {
          "attempted": 0,
          "succeeded": 0,
          "failed": 0,
          "skipped": 0
        },
        "lastError": "string"
      }
    },
    "workflow": {
      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
      "followRequestId": "dec11372-5401-4d80-a198-f2d8f9ab62bf",
      "relationshipId": "928dd5b8-3ead-4528-bdef-9c0b867a5d7d",
      "status": "queued",
      "counts": {
        "attempted": 0,
        "succeeded": 0,
        "failed": 0,
        "skipped": 0
      },
      "fatalError": "string",
      "createdAt": "2019-08-24T14:15:22Z",
      "updatedAt": "2019-08-24T14:15:22Z",
      "completedAt": "2019-08-24T14:15:22Z",
      "grants": [
        {
          "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
          "collectionId": "0ffe69e2-b7af-4b1e-835c-867376165f50",
          "status": "pending",
          "expiresAt": "2019-08-24T14:15:22Z",
          "tokenId": "string",
          "transactionHash": "string",
          "revocationTransactionHash": "string",
          "error": "string"
        }
      ]
    },
    "terms": {
      "requested": {
        "tier": "follower",
        "durationDays": 1,
        "reason": "string",
        "desiredObservation": "string"
      },
      "granted": {
        "tier": "follower",
        "durationDays": 1
      },
      "accessExpiresAt": "2019-08-24T14:15:22Z"
    },
    "failure": {
      "phase": "approval",
      "message": "string",
      "retryable": true
    },
    "primaryAction": "request",
    "permittedActions": [
      "request"
    ]
  },
  "meta": {
    "timestamp": "2019-08-24T14:15:22Z"
  }
}
```

- `data` (`directory-get-follow-state.response.200.data`; object, required)
  - `subject` (`directory-get-follow-state.response.200.data.subject`; object, required)
    - `listingId` (`directory-get-follow-state.response.200.data.subject.listingId`; string, required)
      - format `uuid`
    - `subjectType` (`directory-get-follow-state.response.200.data.subject.subjectType`; string, required)
      - one of `"person"`, `"entity"`
  - `actingPrincipal` (`directory-get-follow-state.response.200.data.actingPrincipal`; object, required)
    - `principalType` (`directory-get-follow-state.response.200.data.actingPrincipal.principalType`; string, required)
      - one of `"user"`, `"entity"`, `"organization"`
    - `principalId` (`directory-get-follow-state.response.200.data.actingPrincipal.principalId`; string, required)
      - minLength 1; maxLength 255
  - `state` (`directory-get-follow-state.response.200.data.state`; string, required)
    - one of `"not_following"`, `"pending"`, `"provisioning"`, `"active"`, `"paused"`, `"expired"`, `"approval_failed"`, `"rejected"`, `"cancelled"`, `"revoking"`, `"revocation_failed"`, `"revoked"`
  - `request` (`directory-get-follow-state.response.200.data.request`; object, required, nullable)
    - `id` (`directory-get-follow-state.response.200.data.request.id`; string, required)
      - format `uuid`
    - `subject` (`directory-get-follow-state.response.200.data.request.subject`; object, required)
      - `listingId` (`directory-get-follow-state.response.200.data.request.subject.listingId`; string, required)
        - format `uuid`
      - `subjectType` (`directory-get-follow-state.response.200.data.request.subject.subjectType`; string, required)
        - one of `"person"`, `"entity"`
    - `actingPrincipal` (`directory-get-follow-state.response.200.data.request.actingPrincipal`; object, required)
      - `principalType` (`directory-get-follow-state.response.200.data.request.actingPrincipal.principalType`; string, required)
        - one of `"user"`, `"entity"`, `"organization"`
      - `principalId` (`directory-get-follow-state.response.200.data.request.actingPrincipal.principalId`; string, required)
        - minLength 1; maxLength 255
    - `requestedByUserId` (`directory-get-follow-state.response.200.data.request.requestedByUserId`; string, required)
    - `status` (`directory-get-follow-state.response.200.data.request.status`; string, required)
      - one of `"pending"`, `"approved"`, `"rejected"`, `"cancelled"`
    - `requestNote` (`directory-get-follow-state.response.200.data.request.requestNote`; string, required, nullable)
    - `reason` (`directory-get-follow-state.response.200.data.request.reason`; string, required, nullable)
    - `requestedTier` (`directory-get-follow-state.response.200.data.request.requestedTier`; string, required, nullable)
      - one of `"follower"`, `"capital"`, `"diligence"`, `"custom"`
    - `desiredObservation` (`directory-get-follow-state.response.200.data.request.desiredObservation`; string, required, nullable)
    - `requestedDurationDays` (`directory-get-follow-state.response.200.data.request.requestedDurationDays`; integer, required, nullable)
      - min 1; max 365
    - `reviewDecision` (`directory-get-follow-state.response.200.data.request.reviewDecision`; string, required, nullable)
      - one of `"accepted"`, `"narrowed"`, `"declined"`
    - `grantedTier` (`directory-get-follow-state.response.200.data.request.grantedTier`; string, required, nullable)
      - one of `"follower"`, `"capital"`, `"diligence"`, `"custom"`
    - `grantedDurationDays` (`directory-get-follow-state.response.200.data.request.grantedDurationDays`; integer, required, nullable)
      - min 1; max 365
    - `requestedPackageId` (`directory-get-follow-state.response.200.data.request.requestedPackageId`; string, required, nullable)
      - format `uuid`
    - `reviewedByUserId` (`directory-get-follow-state.response.200.data.request.reviewedByUserId`; string, required, nullable)
    - `reviewedAt` (`directory-get-follow-state.response.200.data.request.reviewedAt`; string, required, nullable)
      - format `date-time`
    - `decisionNotes` (`directory-get-follow-state.response.200.data.request.decisionNotes`; string, required, nullable)
    - `createdAt` (`directory-get-follow-state.response.200.data.request.createdAt`; string, required)
      - format `date-time`
    - `updatedAt` (`directory-get-follow-state.response.200.data.request.updatedAt`; string, required)
      - format `date-time`
  - `relationship` (`directory-get-follow-state.response.200.data.relationship`; object, required, nullable)
    - `id` (`directory-get-follow-state.response.200.data.relationship.id`; string, required)
      - format `uuid`
    - `status` (`directory-get-follow-state.response.200.data.relationship.status`; string, required)
      - one of `"provisioning"`, `"active"`, `"paused"`, `"expired"`, `"failed"`, `"revoked"`
    - `accessTier` (`directory-get-follow-state.response.200.data.relationship.accessTier`; string, required)
      - one of `"follower"`, `"capital"`, `"diligence"`, `"custom"`
    - `accessDurationDays` (`directory-get-follow-state.response.200.data.relationship.accessDurationDays`; integer, required)
      - min 1; max 365
    - `accessExpiresAt` (`directory-get-follow-state.response.200.data.relationship.accessExpiresAt`; string, required)
      - format `date-time`
    - `graphConfirmedAt` (`directory-get-follow-state.response.200.data.relationship.graphConfirmedAt`; string, required, nullable)
      - format `date-time`
    - `graphLastError` (`directory-get-follow-state.response.200.data.relationship.graphLastError`; string, required, nullable)
    - `accessDisabledAt` (`directory-get-follow-state.response.200.data.relationship.accessDisabledAt`; string, required, nullable)
      - format `date-time`
    - `revokedAt` (`directory-get-follow-state.response.200.data.relationship.revokedAt`; string, required, nullable)
      - format `date-time`
    - `revocation` (`directory-get-follow-state.response.200.data.relationship.revocation`; object, required)
      - `status` (`directory-get-follow-state.response.200.data.relationship.revocation.status`; string, required)
        - one of `"idle"`, `"queued"`, `"running"`, `"completed"`, `"partial"`, `"failed"`
      - `counts` (`directory-get-follow-state.response.200.data.relationship.revocation.counts`; object, required)
        - `attempted` (`directory-get-follow-state.response.200.data.relationship.revocation.counts.attempted`; integer, required)
          - min 0
        - `succeeded` (`directory-get-follow-state.response.200.data.relationship.revocation.counts.succeeded`; integer, required)
          - min 0
        - `failed` (`directory-get-follow-state.response.200.data.relationship.revocation.counts.failed`; integer, required)
          - min 0
        - `skipped` (`directory-get-follow-state.response.200.data.relationship.revocation.counts.skipped`; integer, required)
          - min 0
      - `lastError` (`directory-get-follow-state.response.200.data.relationship.revocation.lastError`; string, required, nullable)
  - `workflow` (`directory-get-follow-state.response.200.data.workflow`; object, required, nullable)
    - `id` (`directory-get-follow-state.response.200.data.workflow.id`; string, required)
      - format `uuid`
    - `followRequestId` (`directory-get-follow-state.response.200.data.workflow.followRequestId`; string, required)
      - format `uuid`
    - `relationshipId` (`directory-get-follow-state.response.200.data.workflow.relationshipId`; string, required)
      - format `uuid`
    - `status` (`directory-get-follow-state.response.200.data.workflow.status`; string, required)
      - one of `"queued"`, `"running"`, `"completed"`, `"partial"`, `"failed"`
    - `counts` (`directory-get-follow-state.response.200.data.workflow.counts`; object, required)
      - `attempted` (`directory-get-follow-state.response.200.data.workflow.counts.attempted`; integer, required)
        - min 0
      - `succeeded` (`directory-get-follow-state.response.200.data.workflow.counts.succeeded`; integer, required)
        - min 0
      - `failed` (`directory-get-follow-state.response.200.data.workflow.counts.failed`; integer, required)
        - min 0
      - `skipped` (`directory-get-follow-state.response.200.data.workflow.counts.skipped`; integer, required)
        - min 0
    - `fatalError` (`directory-get-follow-state.response.200.data.workflow.fatalError`; string, required, nullable)
    - `createdAt` (`directory-get-follow-state.response.200.data.workflow.createdAt`; string, required)
      - format `date-time`
    - `updatedAt` (`directory-get-follow-state.response.200.data.workflow.updatedAt`; string, required)
      - format `date-time`
    - `completedAt` (`directory-get-follow-state.response.200.data.workflow.completedAt`; string, required, nullable)
      - format `date-time`
    - `grants` (`directory-get-follow-state.response.200.data.workflow.grants`; array<object>, required)
      - `id` (`directory-get-follow-state.response.200.data.workflow.grants.id`; string, required)
        - format `uuid`
      - `collectionId` (`directory-get-follow-state.response.200.data.workflow.grants.collectionId`; string, required)
        - format `uuid`
      - `status` (`directory-get-follow-state.response.200.data.workflow.grants.status`; string, required)
        - one of `"pending"`, `"active"`, `"failed"`, `"expired"`, `"revoked"`
      - `expiresAt` (`directory-get-follow-state.response.200.data.workflow.grants.expiresAt`; string, required, nullable)
        - format `date-time`
      - `tokenId` (`directory-get-follow-state.response.200.data.workflow.grants.tokenId`; string, required, nullable)
      - `transactionHash` (`directory-get-follow-state.response.200.data.workflow.grants.transactionHash`; string, required, nullable)
      - `revocationTransactionHash` (`directory-get-follow-state.response.200.data.workflow.grants.revocationTransactionHash`; string, required, nullable)
      - `error` (`directory-get-follow-state.response.200.data.workflow.grants.error`; string, required, nullable)
  - `terms` (`directory-get-follow-state.response.200.data.terms`; object, required)
    - `requested` (`directory-get-follow-state.response.200.data.terms.requested`; object, required, nullable)
      - `tier` (`directory-get-follow-state.response.200.data.terms.requested.tier`; string, required, nullable)
        - one of `"follower"`, `"capital"`, `"diligence"`, `"custom"`
      - `durationDays` (`directory-get-follow-state.response.200.data.terms.requested.durationDays`; integer, required, nullable)
        - min 1; max 365
      - `reason` (`directory-get-follow-state.response.200.data.terms.requested.reason`; string, required, nullable)
      - `desiredObservation` (`directory-get-follow-state.response.200.data.terms.requested.desiredObservation`; string, required, nullable)
    - `granted` (`directory-get-follow-state.response.200.data.terms.granted`; object, required, nullable)
      - `tier` (`directory-get-follow-state.response.200.data.terms.granted.tier`; string, required)
        - one of `"follower"`, `"capital"`, `"diligence"`, `"custom"`
      - `durationDays` (`directory-get-follow-state.response.200.data.terms.granted.durationDays`; integer, required)
        - min 1; max 365
    - `accessExpiresAt` (`directory-get-follow-state.response.200.data.terms.accessExpiresAt`; string, required, nullable)
      - format `date-time`
  - `failure` (`directory-get-follow-state.response.200.data.failure`; object, required, nullable)
    - `phase` (`directory-get-follow-state.response.200.data.failure.phase`; string, required)
      - one of `"approval"`, `"revocation"`
    - `message` (`directory-get-follow-state.response.200.data.failure.message`; string, required, nullable)
    - `retryable` (`directory-get-follow-state.response.200.data.failure.retryable`; boolean, required)
  - `primaryAction` (`directory-get-follow-state.response.200.data.primaryAction`; string, required, nullable)
    - one of `"request"`, `"cancel_request"`, `"retry_approval"`, `"revoke"`, `"retry_revocation"`
  - `permittedActions` (`directory-get-follow-state.response.200.data.permittedActions`; array<string>, required)
    - one of `"request"`, `"cancel_request"`, `"retry_approval"`, `"revoke"`, `"retry_revocation"`
- `meta` (`directory-get-follow-state.response.200.meta`; object, optional)
  - `timestamp` (`directory-get-follow-state.response.200.meta.timestamp`; string, required)
    - format `date-time`

### 400

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.400.error`; object, required)
  - `code` (`directory-get-follow-state.response.400.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.400.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.400.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.400.error.traceId`; string, optional) — Unique ID for log correlation

### 401

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.401.error`; object, required)
  - `code` (`directory-get-follow-state.response.401.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.401.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.401.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.401.error.traceId`; string, optional) — Unique ID for log correlation

### 403

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.403.error`; object, required)
  - `code` (`directory-get-follow-state.response.403.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.403.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.403.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.403.error.traceId`; string, optional) — Unique ID for log correlation

### 404

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.404.error`; object, required)
  - `code` (`directory-get-follow-state.response.404.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.404.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.404.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.404.error.traceId`; string, optional) — Unique ID for log correlation

### 409

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.409.error`; object, required)
  - `code` (`directory-get-follow-state.response.409.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.409.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.409.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.409.error.traceId`; string, optional) — Unique ID for log correlation

### 429

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.429.error`; object, required)
  - `code` (`directory-get-follow-state.response.429.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.429.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.429.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.429.error.traceId`; string, optional) — Unique ID for log correlation

### 500

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.500.error`; object, required)
  - `code` (`directory-get-follow-state.response.500.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.500.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.500.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.500.error.traceId`; string, optional) — Unique ID for log correlation

### 503

Default Response

#### Example

```json
{
  "error": {
    "code": "string",
    "message": "string",
    "details": null,
    "traceId": "string"
  }
}
```

- `error` (`directory-get-follow-state.response.503.error`; object, required)
  - `code` (`directory-get-follow-state.response.503.error.code`; string, required) — Machine-readable error code (e.g., NOT_FOUND)
  - `message` (`directory-get-follow-state.response.503.error.message`; string, required) — Human-readable error message
  - `details` (`directory-get-follow-state.response.503.error.details`; unknown, optional) — Optional structured error details
  - `traceId` (`directory-get-follow-state.response.503.error.traceId`; string, optional) — Unique ID for log correlation


Source: https://docs.sureshake.com/reference/directory-get-follow-state/index.md
