# Get a member's prospect interactions

`GET /api/members/prospects/{memberId}/interactions`

- **Success:** `200 OK`
- **Products:** not restricted by product
- **Features:** Prospecting (`PROSPECTS`)

HTML version: [Get a member's prospect interactions](https://support.gladstonesoftware.cloud/reference/members/get-a-members-prospect-interactions)

## Overview

Lists the sales-follow-up activity recorded against a member: the calls staff have made, the tasks they have set themselves, and the appointments they have booked in. This is the CRM trail behind a prospect, not the member's bookings or attendance.

Each interaction has a **sub type** — an operator-defined code such as a particular kind of callback — and every sub type belongs to one of three built-in **types**: call, task or appointment. The type is not held on the interaction itself; it is derived from the sub type and returned on each record for convenience.

Results are ordered newest first, by the date the interaction was raised. There is no paging: `limit` caps the number of records and that is all you get, so a member with a long history has to be read in full or truncated. There is no offset and no continuation token.

A member with no interactions returns `200` and an empty array. A member id that does not exist returns `404` — the member is checked first, so you can tell the two cases apart.

Note the URL says `prospects`, but the id is an ordinary member id.

## Endpoint

`GET {base_url}/api/members/prospects/{memberId}/interactions`

`{base_url}` is the environment URL issued to your integration. See [Authenticating with Gladstone APIs](../../guides/authenticating-with-gladstone-apis.md).

## Path parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `memberId` | integer (int32) | Yes | The member whose interactions you want. Must be greater than `0`, or the call is rejected with `400` before anything is read. The member must exist, or you get `404`. |

## Query parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `interactionStatus` | integer (int32) | No | Restricts the results to one status: `1` active, `2` completed, `3` overdue, `4` unassigned. Omit it to get every status. There is no way to ask for two statuses in one call — send the parameter once per status, or filter client-side. A value outside `1`–`4` is rejected with `400`. |
| `interactionSubTypeId` | string | No | Restricts the results to one operator-defined sub type code, matched exactly against `[].interactionSubTypeId`. Up to 15 characters. Omit it, or send an empty value, to get every sub type — an empty string is treated as "no filter" rather than "sub type is blank". An unrecognised code is not an error; you simply get an empty array. |
| `limit` | integer (int32) | No | Caps the number of records returned. Defaults to `0`, which means no cap — every interaction the member has. A negative value is rejected with `400`. Because results are ordered newest first, `limit=10` gives you the ten most recent interactions. There is no matching offset parameter, so this cannot be used to page through history. |

## Sample request

```bash title="cURL"
curl -X GET '{base_url}/api/members/prospects/{memberId}/interactions' \
  -H 'Authorization: Bearer {accessToken}' \
  -H 'X-Use-SSO: true'
```

## Response fields

| Field | Type | Description |
|-------|------|-------------|
| `[].id` | integer (int32) | The interaction's own id. Use it to address the record when updating or deleting it; it is unique across the tenant, not per member. |
| `[].memberId` | integer (int32) | The member the interaction was recorded against. Always the member you asked for. |
| `[].interactionSubTypeId` | string | The operator-defined sub type code for this interaction — the closest thing to "what kind of contact this was". Up to 15 characters. This is the value to send back as the `interactionSubTypeId` filter. |
| `[].interactionTypeId` | string | The type code that the sub type belongs to, derived from the sub type rather than held on the interaction. `null` when the interaction points at a sub type that no longer exists. Numeric in practice, but returned as a string. |
| `[].interactionType` | integer (enum) | The interaction's category, resolved from `interactionTypeId`: `0` call, `1` task, `2` appointment. `null` when the sub type has been deleted, or when its type code is not one of those three — so treat `null` as "unclassified" rather than assuming a default. |
| `[].details` | string | The free-text note staff wrote about the interaction. Up to 4000 characters. `null` when nothing was written. |
| `[].nextActionDate` | string (date-time) | When the interaction is due to happen, or is due to be followed up — the date staff work to. `null` for an interaction logged after the fact with no follow-up. |
| `[].scheduledWith` | string | The staff member the interaction is with, as a short code of up to 15 characters rather than a full name. `null` when unassigned. |
| `[].scheduledBy` | string | The staff member who arranged the interaction, again a code of up to 15 characters. It need not be the same person as `scheduledWith`. `null` when not recorded. |
| `[].outcomeOfInteractionTypeId` | integer (int32) | The recorded result of the interaction — for example "no answer" or "signed up" — as an id from the operator's outcome list. `null` while the interaction is still outstanding, which is the normal state for anything not yet completed. An outcome is only ever paired with a sub type of the same interaction type, so outcomes for calls never appear on appointments. |
| `[].duration` | integer (int32) | How long the interaction is scheduled to take, in minutes. Between 5 and 30 — the values the till offers — and `null` when no duration was set. |
| `[].priority` | integer (enum) | How urgent staff marked the interaction: `1` low, `2` medium, `3` high. `null` when no priority was set; do not read that as low. |
| `[].emailConfirmationType` | integer (int32) | |
| `[].interactionStatus` | integer (enum) | Where the interaction has got to: `1` active, `2` completed, `3` overdue, `4` unassigned. `null` when no status was recorded, and such records are excluded whenever you filter by `interactionStatus`. |
| `[].reminder` | integer (int32) | How many minutes before `nextActionDate` staff are reminded. `0` to `30`, or `-1` meaning no reminder. `null` when the field was never set — which is not the same as `-1`, though both mean no reminder is due. |
| `[].raisedByUserId` | string | The staff user id that created the interaction, stamped by the platform at the time. `null` when it was created by a caller with no user in context, such as a server-to-server integration. Not a member id. |
| `[].raisedDate` | string (date-time) | When the interaction was created, in UTC. This is the field the results are sorted on, newest first. Fixed at creation; edits do not move it. |
| `[].lastActionUserId` | string | The staff user id that last changed the interaction. Equal to `raisedByUserId` until someone else edits it. |
| `[].lastActionDate` | string (date-time) | When the interaction was last changed, in UTC. Equal to `raisedDate` on a record that has never been edited — use the difference to spot interactions that have been worked since they were logged. |

## Sample response

```json title="200 OK"
[
  {
    "id": 12345,
    "memberId": 12345,
    "interactionSubTypeId": "string",
    "interactionTypeId": "string",
    "interactionType": 0,
    "details": "string",
    "nextActionDate": "2026-08-14T19:00:00Z",
    "scheduledWith": "string",
    "scheduledBy": "string",
    "outcomeOfInteractionTypeId": 12345,
    "duration": 1,
    "priority": 1,
    "emailConfirmationType": 1,
    "interactionStatus": 1,
    "reminder": 1,
    "raisedByUserId": "string",
    "raisedDate": "2026-08-14T19:00:00Z",
    "lastActionUserId": "string",
    "lastActionDate": "2026-08-14T19:00:00Z"
  }
]
```

## Errors

| Status | Meaning | When |
|--------|---------|------|
| `400` | Bad request | `memberId` is `0` or negative. The body is `A valid memberId is required.` |
| `400` | Bad request | `limit` is negative. The body is `limit cannot be negative.` Use `0`, not a negative number, to mean "no limit". |
| `400` | Bad request | `interactionStatus` is not one of `1`, `2`, `3` or `4`. This one is rejected before the other checks run, so the body is a validation problem document rather than a plain-text message. |
| `404` | Not found | `memberId` does not exist. The body is `Member {memberId} was not found.` A member who exists but has no interactions returns `200` and `[]` instead. |
| `500` | Internal server error | An unexpected server-side failure while reading the interactions. |
