Get a member's prospect interactions
GET /api/members/prospects/{memberId}/interactions
Success: 200 OK
- Products: not restricted by product
- Features: Prospecting (
PROSPECTS)
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.
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
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
[
{
"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. |