The Crux API

Version 1.0.0 · OpenAPI

REST API for Experience Providers integrating with the Alianza cloud communications platform.
Covers Experience Connections, Experience Assignments, and assignability checks.

Experience

Manage Experiences

Check if target can be assigned to Experience

GET/experience/experiences/{experienceId}/assignability

Validates whether a specific Experience is available to the user with a given target (e.g., phone number).
Use this endpoint before attempting to create an Experience Connection.

Scopes: experience-assignability:check

Path parameters

experienceIdrequiredstringID of the Experience

Query parameters

targetTyperequiredTargetTypeFilter by target type
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValuerequiredTargetValueFilter by target value.
Format depends on targetType:
• PHONE_NUMBER: E.164 format (e.g., +14155551234)
• USER: UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
• ACCOUNT: UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)

Responses

200 Assignability checked successfully
FieldTypeDescription
experienceIdrequiredstringID of the Experience being checked
targetTyperequiredTargetType
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValuerequiredTargetValue
assignablerequiredbooleanWhether a specific Experience is available to the user with a given target (e.g., phone number).
Return false if the given target cannot be found.
{
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "assignable": true
}
400 Bad Request. Possible causes:
• targetType is missing or not a valid enum value
• targetValue is missing
• targetValue format does not match the expected format for the given targetType:
- PHONE_NUMBER requires E.164 format (e.g., +14155551234)
- USER requires UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
- ACCOUNT requires UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Bad Request",
  "status": 400,
  "detail": "targetType must be one of PHONE_NUMBER, USER, ACCOUNT",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - Experience exists, the authenticated user has authorization to read but no authorization to check assignability for the Experience
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Forbidden",
  "status": 403,
  "detail": "The authenticated user does not have authorization to check assignability for this Experience",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience does not exist or the authenticated user does not have authorization to access the Experience
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience does not exist",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/experience/experiences/{experienceId}/assignability?targetType=...&targetValue=..." \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/experiences/\${experienceId}/assignability` + "?" + new URLSearchParams({ "targetType": "...", "targetValue": "..." }), {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/experience/experiences/{experienceId}/assignability",
    params={"targetType": "...", "targetValue": "..."},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "assignable": true
}

Experience Assignment

Manage Experience Assignments

List Experience Assignments

GET/experience/assignments

Retrieve a filtered list of Experience Assignments. At least one filter parameter
(such as targetType with targetValue, or accountId with or without experienceId)
must be provided. The filters are applied with a logical AND.

Query examples:

• ?accountId=<id> — all assignments whose targets belong to the specific account
• ?accountId=<id>&experienceId=<experienceId> — all assignments whose targets belong to the specific account and experience
• ?accountId=<id>&targetType=PHONE_NUMBER — all phone number target assignments in the account
• ?accountId=<id>&experienceId=<experienceId>&targetType=PHONE_NUMBER — all phone number target assignments in the account and experience
• ?targetType=USER&targetValue=<user-id> — all assignments for the specified user

Scopes: experience-assignments:manage

Query parameters

targetTypeTargetTypeFilter by assignment target type. Required when targetValue is provided.
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValueTargetValueFilter by the exact target value of the assignment. When provided, targetType
is required to interpret the value.
Format depends on targetType:
• PHONE_NUMBER: E.164 format (e.g., +14155551234)
• USER: UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
• ACCOUNT: UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
accountIdstring(uuid)Filter by the account that owns the assignment targets. Returns all assignments
whose targets (users, phone numbers or accounts) belong to the specified account.
experienceIdstring(uuid)Filter by Experience ID. accountId is required when experienceId is provided.
When both are provided, returns all assignments for the specified Experience whose
targets belong to the specified account.
cursorstringThe cursor value returned from a previous paginated request. Used to retrieve the next page of results.
When not provided, the first page of results is returned.
pageSizeintegerThe number of items to return per page. Used in conjunction with cursor for pagination.
Default is 100, valid range between 1 and 100.
Default: 100

Responses

200 Experience Assignments retrieved successfully
FieldTypeDescription
entitiesrequiredarray of ExperienceAssignmentList of Experience Assignments for the current page
cursorstringCursor value to retrieve the next page of results. Null if there are no more pages.
pageSizerequiredintegerNumber of items per page
{
  "pageSize": 50,
  "cursor": "880e8400-e29b-41d4-a716-446655440003",
  "entities": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "PHONE_NUMBER",
      "targetValue": "+14155551234",
      "updatedAt": "2026-04-10T09:00:00Z"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "USER",
      "targetValue": "c07881d7-200f-424e-b760-f24838f31eef",
      "updatedAt": "2026-04-11T10:00:00Z"
    },
    {
      "id": "770e8400-e29b-41d4-a716-446655440002",
      "experienceId": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "ACCOUNT",
      "targetValue": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "updatedAt": "2026-04-12T11:00:00Z"
    },
    {
      "id": "880e8400-e29b-41d4-a716-446655440003",
      "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "PHONE_NUMBER",
      "targetValue": "+14155559999",
      "updatedAt": "2026-04-13T12:00:00Z"
    }
  ]
}
400 Bad Request. Possible causes:
• No filter parameter provided (at least accountId or targetType with targetValue is required)
• targetValue provided without targetType
• accountId is not a valid UUID
• experienceId provided without accountId
• experienceId is not a valid UUID
• targetValue format does not match the expected format for the given targetType
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Bad Request",
  "status": 400,
  "detail": "At least one filter parameter must be provided",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/experience/assignments?targetType=...&targetValue=...&accountId=...&experienceId=...&cursor=...&pageSize=..." \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/assignments` + "?" + new URLSearchParams({ "targetType": "...", "targetValue": "...", "accountId": "...", "experienceId": "...", "cursor": "...", "pageSize": "..." }), {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/experience/assignments",
    params={"targetType": "...", "targetValue": "...", "accountId": "...", "experienceId": "...", "cursor": "...", "pageSize": "..."},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "pageSize": 50,
  "cursor": "880e8400-e29b-41d4-a716-446655440003",
  "entities": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "PHONE_NUMBER",
      "targetValue": "+14155551234",
      "updatedAt": "2026-04-10T09:00:00Z"
    },
    {
      "id": "660e8400-e29b-41d4-a716-446655440001",
      "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "USER",
      "targetValue": "c07881d7-200f-424e-b760-f24838f31eef",
      "updatedAt": "2026-04-11T10:00:00Z"
    },
    {
      "id": "770e8400-e29b-41d4-a716-446655440002",
      "experienceId": "c3d4e5f6-a7b8-9012-cdef-123456789012",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "ACCOUNT",
      "targetValue": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "updatedAt": "2026-04-12T11:00:00Z"
    },
    {
      "id": "880e8400-e29b-41d4-a716-446655440003",
      "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567891",
      "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
      "targetType": "PHONE_NUMBER",
      "targetValue": "+14155559999",
      "updatedAt": "2026-04-13T12:00:00Z"
    }
  ]
}

Assign an Experience

POST/experience/assignments

Assign an Experience to a target (e.g. phone number) by creating an assignment

Scopes: experience-assignments:manage

Request body — ExperienceAssignment

FieldTypeDescription
idrequiredstringID of the Experience Assignment
read-only
experienceIdrequiredstringID of the Experience being assigned
accountIdrequiredstringID of the account that owns the assignment target
read-only
targetTyperequiredTargetType
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValuerequiredTargetValue
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Assignment, in ISO 8601 format (UTC).
read-only

Responses

201 Experience assigned successfully
FieldTypeDescription
idrequiredstringID of the Experience Assignment
read-only
experienceIdrequiredstringID of the Experience being assigned
accountIdrequiredstringID of the account that owns the assignment target
read-only
targetTyperequiredTargetType
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValuerequiredTargetValue
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Assignment, in ISO 8601 format (UTC).
read-only
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "updatedAt": "2026-05-01T12:00:00Z"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
409 Conflict - Cannot create Experience Assignment in this state
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Conflict",
  "status": 409,
  "detail": "The target is already assigned to this Experience",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
422 Unprocessable Entity. Possible causes:
• Missing required fields or invalid values
• Target was already assigned to the Experience (i.e., duplicate assignment)
• targetValue format does not match the expected format for the given targetType:
- PHONE_NUMBER requires E.164 format (e.g., +14155551234)
- USER requires UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
- ACCOUNT requires UUID format (e.g., c07881d7-200f-424e-b760-f24838f31eef)
• targetType is USER but the specified user-id in targetValue does not exist in the unified user cache
• targetType is PHONE_NUMBER, the referenced Experience is of type AGENT, and the phone number is already assigned to another AGENT Experience
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "experienceId is required",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X POST "https://api.b2.alianza.com/experience/assignments" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"experienceId":"string","targetType":"ACCOUNT","targetValue":"string"}'
const res = await fetch(
  `https://api.b2.alianza.com/experience/assignments`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "experienceId": "string",
    "targetType": "ACCOUNT",
    "targetValue": "string"
  })
});
const data = await res.json();
import requests
resp = requests.post(
    f"https://api.b2.alianza.com/experience/assignments",
    json={
        "experienceId": "string",
        "targetType": "ACCOUNT",
        "targetValue": "string"
    },
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 201
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "updatedAt": "2026-05-01T12:00:00Z"
}

Get a specific Experience Assignment

GET/experience/assignments/{assignmentId}

Retrieve details on a specific Experience Assignment

Scopes: experience-assignments:manage

Path parameters

assignmentIdrequiredstringID of the Experience Assignment

Responses

200 Experience Assignment retrieved successfully
FieldTypeDescription
idrequiredstringID of the Experience Assignment
read-only
experienceIdrequiredstringID of the Experience being assigned
accountIdrequiredstringID of the account that owns the assignment target
read-only
targetTyperequiredTargetType
Allowed: ACCOUNT, PHONE_NUMBER, USER
targetValuerequiredTargetValue
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Assignment, in ISO 8601 format (UTC).
read-only
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "updatedAt": "2026-05-01T12:00:00Z"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience Assignment does not exist or the authenticated user does not have authorization to access the Experience Assignment
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience Assignment does not exist",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/experience/assignments/{assignmentId}" \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/assignments/\${assignmentId}`, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/experience/assignments/{assignmentId}",
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "experienceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountId": "d4e5f6a7-b8c9-0123-def0-234567890123",
  "targetType": "PHONE_NUMBER",
  "targetValue": "+14155551234",
  "updatedAt": "2026-05-01T12:00:00Z"
}

Remove an Experience Assignment

DELETE/experience/assignments/{assignmentId}

Remove an Experience assignment from a target

Scopes: experience-assignments:manage

Path parameters

assignmentIdrequiredstringID of the Experience Assignment

Responses

204 Experience Assignment removed successfully
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - Experience Assignment exists, the authenticated user has authorization to read but no authorization to delete the Experience Assignment
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Forbidden",
  "status": 403,
  "detail": "The authenticated user does not have authorization to delete this Experience Assignment",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience Assignment does not exist, already deleted, or the authenticated user does not have authorization to access the Experience Assignment
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience Assignment does not exist or has already been deleted",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X DELETE "https://api.b2.alianza.com/experience/assignments/{assignmentId}" \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/assignments/\${assignmentId}`, {
  method: "DELETE",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.delete(
    f"https://api.b2.alianza.com/experience/assignments/{assignmentId}",
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it

Experience Connection

Manage Experience Connections

List all Experience Connections

GET/experience/connections

Retrieve list of all Experience Connections for the given account. Either 'accountId' or 'telephoneNumber' (or the deprecated 'tn') is required.

Scopes: experience-connections:manage

Query parameters

accountIdstringFilter by account ID, if present, 'telephoneNumber'/'tn' filter is ignored. If not present, 'telephoneNumber' (or the deprecated 'tn') filter is required.
experienceIdstringFilter by Experience ID
tnstring(E.164)Deprecated, use 'telephoneNumber' instead. Filter by the accountId associated with the supplied telephone number in E.164 format. Required only if no 'accountId' is provided. If accountId is provided, this filter is ignored.
telephoneNumberstring(E.164)Filter by the accountId associated with the supplied telephone number in E.164 format. Required only if no 'accountId' is provided. If accountId is provided, this filter is ignored. Takes precedence over the deprecated 'tn' parameter if both are supplied.
cursorstringThe cursor value returned from a previous paginated request. Used to retrieve the next page of results.
When not provided, the first page of results is returned.
pageSizeintegerThe number of items to return per page. Used in conjunction with cursor for pagination.
Default is 100, valid range between 1 and 100.
Default: 100

Responses

200 Experience Connections retrieved successfully
FieldTypeDescription
entitiesrequiredarray of ExperienceConnectionList of Experience Connections for the current page
cursorstringCursor value to retrieve the next page of results. Null if there are no more pages.
pageSizerequiredintegerNumber of items per page
{
  "pageSize": 50,
  "cursor": "550e8400-e29b-41d4-a716-446655440000",
  "entities": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "accountName": "Acme Communications",
      "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "state": "INACTIVE",
      "updatedAt": "2026-05-01T12:00:00Z"
    }
  ]
}
400 Bad Request - A query parameter was set with an invalid value
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Bad Request",
  "status": 400,
  "detail": "accountId is required",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/experience/connections?accountId=...&experienceId=...&telephoneNumber=...&cursor=...&pageSize=..." \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/connections` + "?" + new URLSearchParams({ "accountId": "...", "experienceId": "...", "telephoneNumber": "...", "cursor": "...", "pageSize": "..." }), {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/experience/connections",
    params={"accountId": "...", "experienceId": "...", "telephoneNumber": "...", "cursor": "...", "pageSize": "..."},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "pageSize": 50,
  "cursor": "550e8400-e29b-41d4-a716-446655440000",
  "entities": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "accountName": "Acme Communications",
      "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "state": "INACTIVE",
      "updatedAt": "2026-05-01T12:00:00Z"
    }
  ]
}

Create a new Experience Connection

POST/experience/connections

Creates a new Experience Connection record in the specified state

Scopes: experience-connections:manage

Query parameters

tnstring(E.164)Deprecated, use 'telephoneNumber' instead.
Phone number in E.164 format used to resolve the correct Alianza account.
Used to disambiguate when the authenticated user belongs to more than one account.
Required only if 'telephoneNumber' is not provided.
telephoneNumberrequiredstring(E.164)Phone number in E.164 format used to resolve the correct Alianza account.
Mandatory query parameter. Used to disambiguate when the authenticated user
belongs to more than one account.
Supersedes the deprecated parameter 'tn'

Request body — ExperienceConnection

FieldTypeDescription
idrequiredstringID of the Experience Connection
read-only
accountIdrequiredstringID of the account
read-only
accountNamestringName of the account
read-only
experienceIdrequiredstringID of the Experience
staterequiredExperienceConnectionStateState of the Experience Connection lifecycle:
• ACTIVE: The Experience is live for all assigned users/TNs
• INACTIVE: Connection exists but the Experience is not currently live for assigned users/TNs
• CONNECTED: Deprecated legacy value that behaves like INACTIVE. Still accepted in requests and may appear in responses for backward compatibility; new integrations should use INACTIVE.
Allowed: ACTIVE, INACTIVE, CONNECTED · Deprecated: CONNECTED
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Connection, in ISO 8601 format (UTC).
read-only

Responses

201 Experience Connection created successfully.
The response always includes the resolved accountId, which should be used for subsequent operations such as experience assignments.
FieldTypeDescription
idrequiredstringID of the Experience Connection
read-only
accountIdrequiredstringID of the account
read-only
accountNamestringName of the account
read-only
experienceIdrequiredstringID of the Experience
staterequiredExperienceConnectionStateState of the Experience Connection lifecycle:
• ACTIVE: The Experience is live for all assigned users/TNs
• INACTIVE: Connection exists but the Experience is not currently live for assigned users/TNs
• CONNECTED: Deprecated legacy value that behaves like INACTIVE. Still accepted in requests and may appear in responses for backward compatibility; new integrations should use INACTIVE.
Allowed: ACTIVE, INACTIVE, CONNECTED · Deprecated: CONNECTED
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Connection, in ISO 8601 format (UTC).
read-only
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountName": "Acme Communications",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "INACTIVE",
  "updatedAt": "2026-05-01T12:00:00Z"
}
400 Bad Request - A query parameter was set with an invalid value
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Bad Request",
  "status": 400,
  "detail": "telephoneNumber must be a valid E.164 phone number (e.g., +14155551234)",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - The authenticated user does not have authorization to create an Experience Connection
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Forbidden",
  "status": 403,
  "detail": "The authenticated user does not have authorization to create an Experience Connection",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
409 Conflict - Experience Connection already exists for this account and Experience
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Conflict",
  "status": 409,
  "detail": "An Experience Connection already exists for this account and Experience",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
422 Unprocessable Entity - Invalid data (missing required fields, invalid values)
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "experienceId is required",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X POST "https://api.b2.alianza.com/experience/connections?telephoneNumber=..." \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"experienceId":"b2c3d4e5-f6a7-8901-bcde-f12345678901","state":"INACTIVE"}'
const res = await fetch(
  `https://api.b2.alianza.com/experience/connections` + "?" + new URLSearchParams({ "telephoneNumber": "..." }), {
  method: "POST",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
    "state": "INACTIVE"
  })
});
const data = await res.json();
import requests
resp = requests.post(
    f"https://api.b2.alianza.com/experience/connections",
    params={"telephoneNumber": "..."},
    json={
        "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
        "state": "INACTIVE"
    },
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 201
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountName": "Acme Communications",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "INACTIVE",
  "updatedAt": "2026-05-01T12:00:00Z"
}

Get a specific Experience Connection

GET/experience/connections/{experienceConnectionId}

Retrieve a specific Experience Connection

Scopes: experience-connections:manage

Path parameters

experienceConnectionIdrequiredstringID of the Experience Connection

Responses

200 Experience Connection retrieved successfully
FieldTypeDescription
idrequiredstringID of the Experience Connection
read-only
accountIdrequiredstringID of the account
read-only
accountNamestringName of the account
read-only
experienceIdrequiredstringID of the Experience
staterequiredExperienceConnectionStateState of the Experience Connection lifecycle:
• ACTIVE: The Experience is live for all assigned users/TNs
• INACTIVE: Connection exists but the Experience is not currently live for assigned users/TNs
• CONNECTED: Deprecated legacy value that behaves like INACTIVE. Still accepted in requests and may appear in responses for backward compatibility; new integrations should use INACTIVE.
Allowed: ACTIVE, INACTIVE, CONNECTED · Deprecated: CONNECTED
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Connection, in ISO 8601 format (UTC).
read-only
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountName": "Acme Communications",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "INACTIVE",
  "updatedAt": "2026-05-01T12:00:00Z"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience Connection does not exist or the authenticated user does not have authorization to access it
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience Connection does not exist",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/experience/connections/{experienceConnectionId}" \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/connections/\${experienceConnectionId}`, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/experience/connections/{experienceConnectionId}",
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "accountName": "Acme Communications",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "INACTIVE",
  "updatedAt": "2026-05-01T12:00:00Z"
}

Update the state of an Experience Connection

PUT/experience/connections/{experienceConnectionId}

Updates the connection to the requested state

Scopes: experience-connections:manage

Path parameters

experienceConnectionIdrequiredstringID of the Experience Connection

Request body — ExperienceConnection

FieldTypeDescription
idrequiredstringID of the Experience Connection
read-only
accountIdrequiredstringID of the account
read-only
accountNamestringName of the account
read-only
experienceIdrequiredstringID of the Experience
staterequiredExperienceConnectionStateState of the Experience Connection lifecycle:
• ACTIVE: The Experience is live for all assigned users/TNs
• INACTIVE: Connection exists but the Experience is not currently live for assigned users/TNs
• CONNECTED: Deprecated legacy value that behaves like INACTIVE. Still accepted in requests and may appear in responses for backward compatibility; new integrations should use INACTIVE.
Allowed: ACTIVE, INACTIVE, CONNECTED · Deprecated: CONNECTED
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Connection, in ISO 8601 format (UTC).
read-only

Responses

200 Experience Connection updated successfully
FieldTypeDescription
idrequiredstringID of the Experience Connection
read-only
accountIdrequiredstringID of the account
read-only
accountNamestringName of the account
read-only
experienceIdrequiredstringID of the Experience
staterequiredExperienceConnectionStateState of the Experience Connection lifecycle:
• ACTIVE: The Experience is live for all assigned users/TNs
• INACTIVE: Connection exists but the Experience is not currently live for assigned users/TNs
• CONNECTED: Deprecated legacy value that behaves like INACTIVE. Still accepted in requests and may appear in responses for backward compatibility; new integrations should use INACTIVE.
Allowed: ACTIVE, INACTIVE, CONNECTED · Deprecated: CONNECTED
updatedAtrequiredstring(date-time)Timestamp of the last modification to this Experience Connection, in ISO 8601 format (UTC).
read-only
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "ACTIVE",
  "updatedAt": "2026-05-02T08:30:00Z"
}
400 Bad Request - Request is malformed
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Bad Request",
  "status": 400,
  "detail": "Request is malformed",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - Experience Connection exists, the authenticated user has authorization to read but no authorization to update it
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Forbidden",
  "status": 403,
  "detail": "The authenticated user does not have authorization to update this Experience Connection",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience Connection does not exist or the authenticated user does not have authorization to access it
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience Connection does not exist",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
409 Conflict - Experience Connection is already in the requested state
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Conflict",
  "status": 409,
  "detail": "Experience Connection is already in state ACTIVE",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
422 Unprocessable Entity - Invalid data (missing required fields, invalid values)
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unprocessable Entity",
  "status": 422,
  "detail": "state is required",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X PUT "https://api.b2.alianza.com/experience/connections/{experienceConnectionId}" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"experienceId":"string","state":"string"}'
const res = await fetch(
  `https://api.b2.alianza.com/experience/connections/\${experienceConnectionId}`, {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    "experienceId": "string",
    "state": "string"
  })
});
const data = await res.json();
import requests
resp = requests.put(
    f"https://api.b2.alianza.com/experience/connections/{experienceConnectionId}",
    json={
        "experienceId": "string",
        "state": "string"
    },
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "experienceId": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
  "state": "ACTIVE",
  "updatedAt": "2026-05-02T08:30:00Z"
}

Delete an Experience Connection

DELETE/experience/connections/{experienceConnectionId}

Deletes the Experience Connection record. Valid from any state.

Scopes: experience-connections:manage

Path parameters

experienceConnectionIdrequiredstringID of the Experience Connection

Responses

204 Experience Connection deleted successfully
401 Unauthorized - Missing or expired access token. Obtain a new token and retry.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Unauthorized",
  "status": 401,
  "detail": "Access token is missing or has expired",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - Experience Connection exists, the authenticated user has authorization to read but no authorization to delete the Experience Connection
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Forbidden",
  "status": 403,
  "detail": "The authenticated user does not have authorization to delete this Experience Connection",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 Not Found - Experience Connection does not exist, already deleted, or the authenticated user does not have authorization to access it
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Resource Not Found",
  "status": 404,
  "detail": "The requested Experience Connection does not exist or has already been deleted",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
409 Conflict - Experience Connection cannot be deleted while TNs are still assigned to the Experience
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Conflict",
  "status": 409,
  "detail": "The Experience Connection cannot be deleted while TNs are still assigned to the Experience",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X DELETE "https://api.b2.alianza.com/experience/connections/{experienceConnectionId}" \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/experience/connections/\${experienceConnectionId}`, {
  method: "DELETE",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.delete(
    f"https://api.b2.alianza.com/experience/connections/{experienceConnectionId}",
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it

User

Retrieve unified users

List users

GET/users

Returns a paginated list of unified users accessible to the caller,
optionally filtered by account. When accountId is provided, only users
belonging to that account are returned. Always returns 200 with an empty
entities array when no matches are found — never 404.

Results are limited to accounts the caller may view.

Pagination. Cursor-based. Pass the cursor value from the response to
retrieve the next page; a null cursor means this is the last page. The
cursor is opaque — do not parse, construct or modify it, and do not assume it
encodes a page number or an offset. It marks a position in the result order
rather than a distance from the start, so paging remains equally fast however
deep the traversal goes and there is no ceiling on how far it can run.

A cursor is only valid for the exact request that produced it. Changing
accountId, sortBy or sortOrder while replaying a cursor returns 400;
restart the traversal without a cursor instead. Changing pageSize
mid-traversal is allowed.

Consistency. This list is served from a read model that is updated shortly
after a write, so a user created, changed or deleted moments ago may not be
reflected yet. GET /users/{id} is always up to date. A page is not a snapshot:
because writes are applied while a traversal is in progress, a user whose sort
position changes mid-traversal may be seen twice or not at all in that
traversal. Re-read the list, or fetch a user by ID, when an exact result matters.

Scopes: users:manage

Query parameters

accountIdstring(uuid)The unified account ID to filter users by. Omit to return all users accessible to the caller.
cursorstringThe cursor value returned from a previous paginated request. Used to retrieve the next page
of results. When not provided, the first page of results is returned.
Opaque — do not parse or modify this value.
pageSizeintegerThe number of items to return per page. Used in conjunction with cursor for pagination.
Default is 100, valid range between 1 and 200.
Default: 100
sortBystringField to sort results by. Defaults to createdAt.
Allowed: createdAt, lastName, firstName · Default: "createdAt"
sortOrderstringSort direction. Defaults to asc.
Allowed: asc, desc · Default: "asc"

Responses

200 Users retrieved successfully. Returns an empty entities array when no users match the filter — never a 404.
Also returned when the caller may not view the requested account, so that this operation cannot probe which account IDs exist.
FieldTypeDescription
entitiesrequiredarray of UnifiedUserThe list of matching users. Empty array when no matches are found.
cursorstring,nullCursor value to retrieve the next page of results. Null if there are no more pages. Opaque — do not parse or modify this value.
pageSizerequiredintegerNumber of items per page
countinteger(int64)Total number of users matching the request across all pages, not just this one. Divide by pageSize to obtain the number of pages.
{
  "cursor": "eyJ2IjoiMSIsImIiOiI5ZjNhIiwicyI6WyJEb2UiLCJmNjIwIl19",
  "pageSize": 100,
  "count": 1284,
  "entities": [
    {
      "id": "f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "firstName": "Jane",
      "lastName": "Doe",
      "createdAt": "2026-03-15T14:22:00.000000Z",
      "updatedAt": "2026-03-18T09:15:30.000000Z"
    },
    {
      "id": "b8a3d1e2-4c5f-6789-0abc-def123456789",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "firstName": "John",
      "lastName": "Smith",
      "createdAt": "2026-03-16T08:00:00.000000Z",
      "updatedAt": null
    }
  ]
}
400 Invalid query parameter — accountId is missing or not a UUID, sortBy or
sortOrder is not an allowed value, pageSize is not an integer between 1 and 200,
or cursor is malformed or was issued for a different account, sort field or
sort order.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/bad-request",
  "title": "Bad Request",
  "status": 400,
  "detail": "accountId must be a valid UUID: not-a-uuid",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
401 Unauthorized. The OAuth token is missing, invalid, or carries no urn:alianza:claims:principal_id claim. Authentication is required via bearer token.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Missing or invalid bearer token.",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - The access token does not hold the users:manage scope. A caller that holds the scope but may not view the account receives an empty 200, not a 403
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "The caller is not permitted to perform this operation.",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
429 Too many requests. The client has exceeded the rate limit for this API.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit exceeded. Please slow down and try again.",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
500 Unexpected server error. detail is always this fixed generic message.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/server-error",
  "title": "Internal Server Error",
  "status": 500,
  "detail": "An unexpected error occurred while processing your request.",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
503 Service temporarily unavailable, including when the authorization service cannot be reached, which fails closed
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/service-unavailable",
  "title": "Service Unavailable",
  "status": 503,
  "detail": "The service is temporarily unavailable. Please try again later.",
  "instance": "/users",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/users?accountId=...&cursor=...&pageSize=...&sortBy=...&sortOrder=..." \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/users` + "?" + new URLSearchParams({ "accountId": "...", "cursor": "...", "pageSize": "...", "sortBy": "...", "sortOrder": "..." }), {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/users",
    params={"accountId": "...", "cursor": "...", "pageSize": "...", "sortBy": "...", "sortOrder": "..."},
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "cursor": "eyJ2IjoiMSIsImIiOiI5ZjNhIiwicyI6WyJEb2UiLCJmNjIwIl19",
  "pageSize": 100,
  "count": 1284,
  "entities": [
    {
      "id": "f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "firstName": "Jane",
      "lastName": "Doe",
      "createdAt": "2026-03-15T14:22:00.000000Z",
      "updatedAt": "2026-03-18T09:15:30.000000Z"
    },
    {
      "id": "b8a3d1e2-4c5f-6789-0abc-def123456789",
      "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "firstName": "John",
      "lastName": "Smith",
      "createdAt": "2026-03-16T08:00:00.000000Z",
      "updatedAt": null
    }
  ]
}

Get user by ID

GET/users/{userId}

Returns a single unified user by ID. The ID may be given in any supported style: the unified user ID (UUID) or a native infrastructure user ID (currently Alianza One — Base62-URL or legacy numeric; Core/Fusion styles will resolve once those infrastructures are supported, and return 404 until then). The returned user always carries the unified ID.

A user the caller is not authorized to view is reported as 404, identically to a user that does not exist, so that this endpoint cannot be used to discover which user IDs are real.

Scopes: users:manage

Path parameters

userIdrequiredstringThe user ID in any supported style (unified UUID or native One ID). Unsupported styles return 404.

Responses

200 User retrieved successfully.
FieldTypeDescription
idrequiredstring(uuid)Unique unified user identifier.
read-only
accountIdrequiredstring(uuid)The unified account this user belongs to.
read-only
firstNamestringUser's first name.
lastNamestringUser's last name.
createdAtrequiredstring(date-time)When the entity was created. ISO 8601 UTC format.
read-only
updatedAtstring,null(date-time)When the entity was last updated. ISO 8601 UTC format. Null if never updated.
read-only
{
  "id": "f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "firstName": "Jane",
  "lastName": "Doe",
  "createdAt": "2026-03-15T14:22:00.000000Z",
  "updatedAt": "2026-03-18T09:15:30.000000Z"
}
401 Unauthorized. The OAuth token is missing, invalid, or carries no urn:alianza:claims:principal_id claim. Authentication is required via bearer token.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/unauthorized",
  "title": "Unauthorized",
  "status": 401,
  "detail": "Missing or invalid bearer token.",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
403 Forbidden - The access token does not hold the users:manage scope. A caller that holds the scope but may not view this user receives a 404, not a 403
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/forbidden",
  "title": "Forbidden",
  "status": 403,
  "detail": "The caller is not permitted to perform this operation.",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
404 No user found with the given ID, the caller is not authorized to view it, or the ID is not in a supported format. These cases are deliberately indistinguishable, so that the endpoint cannot be used to discover which user IDs exist.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/not-found",
  "title": "Resource Not Found",
  "status": 404,
  "detail": "User not found with id=f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
429 Too many requests. The client has exceeded the rate limit for this API.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "title": "Too Many Requests",
  "status": 429,
  "detail": "Rate limit exceeded. Please slow down and try again.",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
500 Unexpected server error. detail is always this fixed generic message.
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/server-error",
  "title": "Internal Server Error",
  "status": 500,
  "detail": "An unexpected error occurred while processing your request.",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
503 Service temporarily unavailable, including when the authorization service cannot be reached, which fails closed
FieldTypeDescription
typestringURI reference that identifies the problem type
titlerequiredstringShort human-readable summary of the problem type
statusrequiredintegerThe HTTP status code
detailstringHuman-readable explanation specific to this occurrence of the problem
instancestringURI reference identifying the specific resource or endpoint on which the problem occurred
traceIdrequiredstringTrace ID for tracking the request
errorsarray of objectOptional list of errors encountered during the request
{
  "type": "https://problems-registry.smartbear.com/service-unavailable",
  "title": "Service Unavailable",
  "status": 503,
  "detail": "The service is temporarily unavailable. Please try again later.",
  "instance": "/users/f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "traceId": "6d4a3a62-0d4b-4b96-9171-8c5070e01c35"
}
curl -X GET "https://api.b2.alianza.com/users/{userId}" \
  -H "Authorization: Bearer $TOKEN"
const res = await fetch(
  `https://api.b2.alianza.com/users/\${userId}`, {
  method: "GET",
  headers: {
    Authorization: `Bearer ${token}`
  }
});
const data = await res.json();
import requests
resp = requests.get(
    f"https://api.b2.alianza.com/users/{userId}",
    headers={"Authorization": f"Bearer {token}"},
)
resp.raise_for_status()
data = resp.json()
Try it
Example response · 200
{
  "id": "f6201f5f-7fc0-49c8-a84f-eac6e6f1f950",
  "accountId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "firstName": "Jane",
  "lastName": "Doe",
  "createdAt": "2026-03-15T14:22:00.000000Z",
  "updatedAt": "2026-03-18T09:15:30.000000Z"
}