Home

Cirrus Identity Identities API

v1.0.0
Base URL
/identities/v1

Permissions

Identities API credentials are managed by organizational admins in the Cirrus Console.

You can validate the permissions associated with your credential under the Miscellaneous category.

Supported Miscellaneous operations:

  • retrieve permissions for the current API credential

Identities

Identity objects are the top-level records that track information or assets associated with a user.

Supported identities operations:

  • list all identities
  • list identities with an attribute collection associated with a specific authority (for example, show all identities with the "alumni" authority)
  • fetch a single identity by cirrusUid
  • create a new identity, along with optional associations that may be configured for your environment, such as OrgBrandedID login credentials, generated user identifiers with a specific format, or specific attribute collections
  • modify an existing identity -- update any of givenName, sn, and mail
  • search identities by a keyword (searchTerm) -- name and email fields on the identity, and any linked attribute collections, will be searched using this term as a sub-string match

Attribute Collections

Attribute collections are bundles of attributes associated with a specific authority, such as a department or a sign-in credential.

Supported attributeCollections operations:

  • create a new attribute collection under an authorized authority
  • modify an existing attribute collection (replace or merge attributes)
  • delete an existing attribute collection

OrgBrandedIDs

OrgBrandedID is a hosted username and password option included with many Cirrus Identity subscriptions.

Supported OrgBrandedID operations:

  • create a new OBID and link its attribute collection to an existing identity

Authentication

HTTPBasichttp

Scheme: basic

miscellaneous

Fetch Permissions

GET
/identities/v1/permissions

Return permissions for the current credential.

Permissions are returned as a JSON object with a structure similar to the following:

{
    "username": "KQRAMJQXENIABXTZ",
    "orgDomain": "athena-institute.net",
    "environments": {
        "prod": {
            "permissions": [
                "admin-all",
                "read",
                "write"
            ],
            "customerUidKeys": ["athena:netId"],
            "attributeAuthorities": ["parking", "foundation"]
        },
        "test": {
            "permissions": [
                "admin-all",
                "read",
                "write"
            ],
            "customerUidKeys": ["athena:netId"],
            "attributeAuthorities": ["parking", "foundation"],
        }
    },
    "obid": [
        "read",
        "write"
    ]
}

Properties in the permissions object:

  • username: API credential username currently being used
  • orgDomain: the organizational domain for which the credential was provisioned
  • environments: there will be two environments listed here, test and prod
    • environments.<environment>.permissions: an array of permissions in the specified identity environment:
      • admin-all: API credential has all available identity record permissions, including permissions introduced in the future
      • read: API credential has read access to identity records
      • write: API credential has write access (create/modify) to identity records
    • environments.<environment>.customerUidKeys: an array of customer-defined UID keys which the API credential may use when creating identities. Please contact Cirrus Identity Support for additional information.
    • environments.<environment>.attributeAuthorities: an array of attribute authority identifiers which the API credential may use when creating identities or creating/modifying attribute collections. Please contact Cirrus Identity Support for additional information.
  • obid: an array of permissions for OBID accounts. These permissions apply in both the test and prod environments:
    • read: API credential has read access to OBID account attribute collections
    • write: API credential may auto-create an OBID account at identity creation time, or create an OBID account for a pre-existing identity

Response

200OKIdentitiesApiUserPermissionsModel

Success

401Unauthorized

Unauthorized

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Fetch Permissions
curl -X GET '/identities/v1/permissions'
const response = await fetch('/identities/v1/permissions', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('/identities/v1/permissions')
data = response.json()
{
  "username": "KQRAMJQXENIABXTZ",
  "orgDomain": "athena-institute.net",
  "environments": {
    "prod": {
      "permissions": [
        "admin-all",
        "read",
        "write"
      ],
      "customerUidKeys": [
        "athena:netId"
      ],
      "attributeAuthorities": [
        "parking",
        "foundation"
      ]
    },
    "test": {
      "permissions": [
        "admin-all",
        "read",
        "write"
      ],
      "customerUidKeys": [
        "athena:netId"
      ],
      "attributeAuthorities": [
        "parking",
        "foundation"
      ]
    }
  },
  "obid": [
    "read",
    "write"
  ]
}
{
  "detail": "not authorized"
}
{
  "detail": "database error: ..."
}

identities

List Identities

GET
/identities/v1/list/{environment}

List all identity records for a specific environment (test or prod).

Parameters

environmentIdentityEnvironmenttestprodrequiredpath

identity environment

page_idxinteger>= 11query

requested page index

page_sizeinteger[1, 50]10query

requested number of items per page

sort_keyIdentityListSortKeycirrusUidsngivenNamemailcreateTimelastUpdateTimecreateTimequery

sort key

sort_orderIdentityListSortOrderascdescascquery

sort order

search_termstring | nullquery

optional search term

Response

200OKPage_IdentityModelBase_

Successful Response

401Unauthorized

Unauthorized

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
List Identities
curl -X GET '/identities/v1/list/{environment}'
const response = await fetch('/identities/v1/list/{environment}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('/identities/v1/list/{environment}')
data = response.json()
{
  "items": [
    {
      "cirrusUid": "string",
      "mail": "string",
      "givenName": "string",
      "sn": "string",
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z"
    }
  ],
  "total_items": 0,
  "page_cnt": 0,
  "page_size": 0,
  "page_idx": 1
}
{
  "detail": "not authorized"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

List Identities By Attr Collection

GET
/identities/v1/list/byAttributeCollection/{environment}

List all identity records associated with a specific attributeCollectionAuthority (e.g., records containing an alumni attribute collection), or a combination of attributeCollectionAuthority and uid (e.g., find the alumni record with alumni uid of '1234567').

Parameters

environmentIdentityEnvironmenttestprodrequiredpath

identity environment

attributeAuthoritystringrequiredquery

attribute authority identitifer

attributeAuthorityUidstringquery

unique UID assigned by attribute authority

page_idxinteger>= 11query
page_sizeinteger[1, 50]10query
sort_keyIdentityListSortKeyidcirrusUidsngivenNamemailcreateTimelastUpdateTimecreateTimequery
sort_orderIdentityListSortOrderascdescascquery

Response

200OKPage_IdentityModel_

Successful Response

401Unauthorized

Unauthorized

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
List Identities By Attr Collection
curl -X GET '/identities/v1/list/byAttributeCollection/{environment}'
const response = await fetch('/identities/v1/list/byAttributeCollection/{environment}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('/identities/v1/list/byAttributeCollection/{environment}')
data = response.json()
{
  "items": [
    {
      "cirrusUid": "string",
      "mail": "string",
      "givenName": "string",
      "sn": "string",
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollections": [
        {
          "attributeCollectionAuthority": "string",
          "uid": "string",
          "attributes": {},
          "createTime": "2024-01-15T09:30:00Z",
          "lastUpdateTime": "2024-01-15T09:30:00Z",
          "attributeCollectionAuthorityType": "sor"
        }
      ]
    }
  ],
  "total_items": 0,
  "page_cnt": 0,
  "page_size": 0,
  "page_idx": 1
}
{
  "detail": "not authorized"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Search Identities

GET
/identities/v1/search/{environment}/{searchTerm}

List cirrusUid values for identity records matching search term. Search includes attribute collections.

Parameters

environmentIdentityEnvironmenttestprodrequiredpath

identity environment

searchTermstringrequiredpath

term to use in search; will be sub-string matched against name and email fields in identity and linked attributeCollections

Response

200OKArray<string>

Success

401Unauthorized

Unauthorized

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Search Identities
curl -X GET '/identities/v1/search/{environment}/{searchTerm}'
const response = await fetch('/identities/v1/search/{environment}/{searchTerm}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('/identities/v1/search/{environment}/{searchTerm}')
data = response.json()
[
  "2ca73926-1c6a-44e9-8fc1-6c0c835d4a15",
  "2d615256-c822-4435-bf38-d36ba3c0f6c4",
  "9b8dadb8-62c1-4461-a4d7-2201a1cac407"
]
{
  "detail": "not authorized"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Fetch Identity

GET
/identities/v1/fetch/{cirrusUid}

Retrieve a single identity record by cirrusUid.

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

Response

200OKIdentityModel

Successful Response

401Unauthorized

Unauthorized

404Not Found

Not Found

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Fetch Identity
curl -X GET '/identities/v1/fetch/{cirrusUid}'
const response = await fetch('/identities/v1/fetch/{cirrusUid}', {
  method: 'GET',
});

const data = await response.json();
import requests

response = requests.get('/identities/v1/fetch/{cirrusUid}')
data = response.json()
{
  "cirrusUid": "string",
  "mail": "string",
  "givenName": "string",
  "sn": "string",
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z",
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {},
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollectionAuthorityType": "sor"
    }
  ]
}
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Create Identity

POST
/identities/v1/create/{environment}

Create an identity record, including optional additions as permitted for your credential:

  • obid - Create an OrgBrandedID sign-in credential for the identity, inviting the user to set a password for it, e.g.:
    obid: true
  • attributeCollections - Create one or more authorized types of attribute collections for the identity, e.g.:
    attributeCollections": [
        {
            "attributeCollectionAuthority": "alumni",
            "uid": "al-12345",
            "attributes": {
                "alumniId": [
                    "al-12345"
                ],
                "givenName": [
                    "Alice"
                ],
                "sn": [
                    "Arcus"
                ]
            }
        }
    ],
  • customerUidGen - Auto-generate an identifier with a format customized to your organization, e.g.:
    "customerUidGen": "athenaCustomId"

Body

application/json

model for creating a new identity record

mailstring<email>required

email address

givenNamestringrequired

given name

snstringrequired

surname

customerUidGenstring | null

optional Cirrus-provided key for generating customer-defined UIDs

obidbooleanfalse

whether to create/link an OrgBrandedID account for mail value

allowDuplicateEmailbooleanfalse

whether to allow creation of an identity record with an email address already associated with another identity

attributeCollectionsArray<AttributeCollectionInput> | null

optional list of attribute collections to create and link to identity record

Parameters

environmentIdentityEnvironmenttestprodrequiredpath

identity environment

Response

201CreatedIdentityModel

Successful Response

401Unauthorized

Unauthorized

409Conflict

Conflict

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Create Identity
curl -X POST '/identities/v1/create/{environment}' \
  -H 'Content-Type: application/json' \
  -d '{
    "mail": "user@example.com",
    "givenName": "string",
    "sn": "string",
    "customerUidGen": "string",
    "obid": false,
    "allowDuplicateEmail": false,
    "attributeCollections": [
      {
        "attributeCollectionAuthority": "string",
        "uid": "string",
        "attributes": {}
      }
    ]
  }'
const response = await fetch('/identities/v1/create/{environment}', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "mail": "user@example.com",
      "givenName": "string",
      "sn": "string",
      "customerUidGen": "string",
      "obid": false,
      "allowDuplicateEmail": false,
      "attributeCollections": [
        {
          "attributeCollectionAuthority": "string",
          "uid": "string",
          "attributes": {}
        }
      ]
    }),
});

const data = await response.json();
import requests

payload = {
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "customerUidGen": "string",
  "obid": False,
  "allowDuplicateEmail": False,
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {}
    }
  ]
}

response = requests.post('/identities/v1/create/{environment}', json=payload)
data = response.json()
Request Body
{
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "customerUidGen": "string",
  "obid": false,
  "allowDuplicateEmail": false,
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {}
    }
  ]
}
{
  "cirrusUid": "string",
  "mail": "string",
  "givenName": "string",
  "sn": "string",
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z",
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {},
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollectionAuthorityType": "sor"
    }
  ]
}
{
  "detail": "not authorized"
}
{
  "detail": "identity record(s) for email \"user@domain.edu\" already exist: c2a34150-8f43-4f52-9601-3e7518ef0f34"
}
{
  "detail": "OBID Error: account for \"user@domain.edu\" exists and is linked to other identity records: c2a34150-8f43-4f52-9601-3e7518ef0f34"
}
{
  "detail": "attribute collection for (authority = \"sorId\", uid = \"sorUid\") already exists for identity UID = \"60ebb104-e6de-481e-aeed-b9f53083d05b\""
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Modify Identity

PATCH
/identities/v1/modify/{cirrusUid}

Modify core attributes of identity record.

The attributes that may be modified are:

  • givenName
  • sn
  • mail

Any combination of these attributes may be provided; only provided attribute values will be updated. Attributes with a value of null will be ignored (treated the same as omitting them).

If the mail attribute value is present on another identity in the same environment, a 409 Conflict error will be returned. If you wish to override this behavior, and allow duplicate email values, pass true for the boolean parameter, allowDuplicateEmail.

The updated identity record is returned upon success.

Body

application/json

model for modifying base properties on existing identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

surname

allowDuplicateEmailbooleanfalse

whether to allow creation of an identity record with an email address already associated with another identity

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

Response

200OKIdentityModel

Successful Response

401Unauthorized

Unauthorized

404Not Found

Not Found

409Conflict

Conflict

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Modify Identity
curl -X PATCH '/identities/v1/modify/{cirrusUid}' \
  -H 'Content-Type: application/json' \
  -d '{
    "mail": "user@example.com",
    "givenName": "string",
    "sn": "string",
    "allowDuplicateEmail": false
  }'
const response = await fetch('/identities/v1/modify/{cirrusUid}', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "mail": "user@example.com",
      "givenName": "string",
      "sn": "string",
      "allowDuplicateEmail": false
    }),
});

const data = await response.json();
import requests

payload = {
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "allowDuplicateEmail": False
}

response = requests.patch('/identities/v1/modify/{cirrusUid}', json=payload)
data = response.json()
Request Body
{
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "allowDuplicateEmail": false
}
{
  "cirrusUid": "string",
  "mail": "string",
  "givenName": "string",
  "sn": "string",
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z",
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {},
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollectionAuthorityType": "sor"
    }
  ]
}
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": "identity record(s) for email \"user@domain.edu\" already exist: c2a34150-8f43-4f52-9601-3e7518ef0f34"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

attributeCollections

Create Attribute Collection

POST
/identities/v1/attributeCollections/create/{cirrusUid}

Create a new attribute collection under an authorized authority for an existing identity record.

Body

application/json

attribute collection model

attributeCollectionAuthoritystringrequired

identifier of attribute collection authority

uidstringrequired

unique identifier for attribute collection

attributesobject[object Object]

object of attribute keys and list of values

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

Response

201CreatedAttributeCollectionCreateOrModifyOutput

Successful Response

401Unauthorized

Unauthorized

404Not Found

Not Found

409Conflict

Conflict

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Create Attribute Collection
curl -X POST '/identities/v1/attributeCollections/create/{cirrusUid}' \
  -H 'Content-Type: application/json' \
  -d '{
    "attributeCollectionAuthority": "string",
    "uid": "string",
    "attributes": {}
  }'
const response = await fetch('/identities/v1/attributeCollections/create/{cirrusUid}', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {}
    }),
});

const data = await response.json();
import requests

payload = {
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {}
}

response = requests.post('/identities/v1/attributeCollections/create/{cirrusUid}', json=payload)
data = response.json()
Request Body
{
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {}
}
{
  "cirrusUid": "string",
  "attributeCollection": {
    "attributeCollectionAuthority": "string",
    "uid": "string",
    "attributes": {},
    "createTime": "2024-01-15T09:30:00Z",
    "lastUpdateTime": "2024-01-15T09:30:00Z",
    "attributeCollectionAuthorityType": "sor"
  }
}
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": "record already exists"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Modify Attribute Collection

PUT
/identities/v1/attributeCollections/modify/{cirrusUid}

Modify a specific attribute collection under an authorized authority for an identity record.

Body

application/json

attribute collection model

attributeCollectionAuthoritystringrequired

identifier of attribute collection authority

uidstringrequired

unique identifier for attribute collection

attributesobject[object Object]

object of attribute keys and list of values

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

overwritebooleanfalsequery

completely overwrite attributes (true) or merge (default, false)

Response

200OKAttributeCollectionCreateOrModifyOutput

Successful Response

401Unauthorized

Unauthorized

404Not Found

Not Found

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Modify Attribute Collection
curl -X PUT '/identities/v1/attributeCollections/modify/{cirrusUid}' \
  -H 'Content-Type: application/json' \
  -d '{
    "attributeCollectionAuthority": "string",
    "uid": "string",
    "attributes": {}
  }'
const response = await fetch('/identities/v1/attributeCollections/modify/{cirrusUid}', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {}
    }),
});

const data = await response.json();
import requests

payload = {
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {}
}

response = requests.put('/identities/v1/attributeCollections/modify/{cirrusUid}', json=payload)
data = response.json()
Request Body
{
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {}
}
{
  "cirrusUid": "string",
  "attributeCollection": {
    "attributeCollectionAuthority": "string",
    "uid": "string",
    "attributes": {},
    "createTime": "2024-01-15T09:30:00Z",
    "lastUpdateTime": "2024-01-15T09:30:00Z",
    "attributeCollectionAuthorityType": "sor"
  }
}
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Delete Attribute Collection

DELETE
/identities/v1/attributeCollections/delete/{cirrusUid}

Delete a specific attribute collection under an authorized authority from an identity record.

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

attributeAuthoritystringrequiredquery

identifier of attribute collection authority

attributeAuthorityUidstringrequiredquery

unique identifier for attribute collection

Response

204No Content

Successful Response

401Unauthorized

Unauthorized

404Not Found

Not Found

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Delete Attribute Collection
curl -X DELETE '/identities/v1/attributeCollections/delete/{cirrusUid}'
const response = await fetch('/identities/v1/attributeCollections/delete/{cirrusUid}', {
  method: 'DELETE',
});

const data = await response.json();
import requests

response = requests.delete('/identities/v1/attributeCollections/delete/{cirrusUid}')
data = response.json()
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

obid

Create Obid

POST
/identities/v1/obids/create/{cirrusUid}

Create a new OrgBrandedID sign-in credential for an existing identity record, sending an onboarding email to the designated email address.

Body

application/json

model for creating a new OBID account

givenNamestring | null

first name

surnamestringrequired

last name

emailstring<email>required

email address

Parameters

cirrusUidstringrequiredpath

cirrusUid of identity record

Response

201CreatedAttributeCollectionCreateOrModifyOutput

Success

401Unauthorized

Unauthorized

404Not Found

Not Found

409Conflict

Conflict

422Unprocessable EntityHTTPValidationError

Validation Error

500Internal Server Error

Internal Server Error

Authorization

HTTPBasichttp (basic)
Create Obid
curl -X POST '/identities/v1/obids/create/{cirrusUid}' \
  -H 'Content-Type: application/json' \
  -d '{
    "givenName": "string",
    "surname": "string",
    "email": "user@example.com"
  }'
const response = await fetch('/identities/v1/obids/create/{cirrusUid}', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
      "givenName": "string",
      "surname": "string",
      "email": "user@example.com"
    }),
});

const data = await response.json();
import requests

payload = {
  "givenName": "string",
  "surname": "string",
  "email": "user@example.com"
}

response = requests.post('/identities/v1/obids/create/{cirrusUid}', json=payload)
data = response.json()
Request Body
{
  "givenName": "string",
  "surname": "string",
  "email": "user@example.com"
}
{
  "cirrusUid": "a82113d1-7072-494f-91c5-be3dbe2db08d",
  "attributeCollection": {
    "attributeCollectionAuthority": "https://athena-guest.idp.cirrusidentity.com/idp",
    "uid": "cuid-8a37d4f4-d09f-4ac5-bf67-9e38f987bf1c",
    "attributes": {
      "urn:oid:2.5.4.4": [
        "Arcus"
      ],
      "urn:oid:0.9.2342.19200300.100.1.3": [
        "aarcus@athena-institute.net"
      ],
      "urn:oid:2.16.840.1.113730.3.1.241": [
        "Alice Arcus"
      ],
      "urn:oid:2.5.4.3": [
        "Alice Arcus"
      ],
      "urn:oid:0.9.2342.19200300.100.1.1": [
        "8a37d4f4-d09f-4ac5-bf67-9e38f987bf1c"
      ],
      "urn:oid:2.5.4.42": [
        "Alice"
      ],
      "scope": [
        "athena-guest.idp.cirrusidentity.com"
      ],
      "urn:oid:1.3.6.1.4.1.5923.1.1.1.6": [
        "8a37d4f4-d09f-4ac5-bf67-9e38f987bf1c@athena-guest.idp.cirrusidentity.com"
      ]
    },
    "createTime": "2025-10-31T19:12:08+00:00",
    "lastUpdateTime": "2025-10-31T19:12:08+00:00",
    "attributeCollectionAuthorityType": "obid"
  }
}
{
  "detail": "not authorized"
}
{
  "detail": "record not found"
}
{
  "detail": "OBID Error: Account for [user@domain.edu] exists and cannot be created again."
}
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}
{
  "detail": "database error: ..."
}

Models

AttributeCollectionAuthorityType

string

enum for deployment patterns

stringsoridpobidgateway
Example
"sor"

AttributeCollectionCreateOrModifyOutput

object

wrapper for returning attribute collections along with cirrusUid

cirrusUidstringrequired

cirrusUid of identity record

attributeCollectionAttributeCollectionOutputrequired

output attribute collection model

Show child attributes
attributeCollectionAuthoritystringrequired

identifier of attribute collection authority

uidstringrequired

unique identifier for attribute collection

attributesobject[object Object]

object of attribute keys and list of values

createTimestring<date-time>required

attribute collection creation timestamp

lastUpdateTimestring<date-time>required

attribute collection last update timestamp

attributeCollectionAuthorityTypeAttributeCollectionAuthorityTypesoridpobidgatewayrequiredread only

type of attribute collection authority

Example
{
  "cirrusUid": "string",
  "attributeCollection": {
    "attributeCollectionAuthority": "string",
    "uid": "string",
    "attributes": {},
    "createTime": "2024-01-15T09:30:00Z",
    "lastUpdateTime": "2024-01-15T09:30:00Z",
    "attributeCollectionAuthorityType": "sor"
  }
}

AttributeCollectionInput

object

attribute collection model

attributeCollectionAuthoritystringrequired

identifier of attribute collection authority

uidstringrequired

unique identifier for attribute collection

attributesobject[object Object]

object of attribute keys and list of values

Example
{
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {}
}

AttributeCollectionOutput

object

output attribute collection model

attributeCollectionAuthoritystringrequired

identifier of attribute collection authority

uidstringrequired

unique identifier for attribute collection

attributesobject[object Object]

object of attribute keys and list of values

createTimestring<date-time>required

attribute collection creation timestamp

lastUpdateTimestring<date-time>required

attribute collection last update timestamp

attributeCollectionAuthorityTypeAttributeCollectionAuthorityTypesoridpobidgatewayrequiredread only

type of attribute collection authority

Example
{
  "attributeCollectionAuthority": "string",
  "uid": "string",
  "attributes": {},
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z",
  "attributeCollectionAuthorityType": "sor"
}

HTTPValidationError

object
detailArray<ValidationError>
Show child attributes
locArray<string | integer>required
Show child attributes
Any of
string
integer
msgstringrequired
typestringrequired
inputany
ctxobject
Example
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "ctx": {}
    }
  ]
}

IdentitiesApiUserPermissionsModel

object

model for user/permissions model (for identities API)

usernamestringrequired
orgDomainstringrequired
environmentsobject[object Object]

Map of linkgroup names to linkgroup permissions

obidArray<string>

List of OBID permissions

Example
{
  "username": "string",
  "orgDomain": "string",
  "environments": {},
  "obid": []
}

IdentityCreateInput

object

model for creating a new identity record

mailstring<email>required

email address

givenNamestringrequired

given name

snstringrequired

surname

customerUidGenstring | null

optional Cirrus-provided key for generating customer-defined UIDs

obidbooleanfalse

whether to create/link an OrgBrandedID account for mail value

allowDuplicateEmailbooleanfalse

whether to allow creation of an identity record with an email address already associated with another identity

attributeCollectionsArray<AttributeCollectionInput> | null

optional list of attribute collections to create and link to identity record

Example
{
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "customerUidGen": "string",
  "obid": false,
  "allowDuplicateEmail": false,
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {}
    }
  ]
}

IdentityEnvironment

string

enum for allowed linking environments

stringtestprod
Example
"test"

IdentityListSortKey

string

enum for allowed fields to sort identity list by

stringidcirrusUidsngivenNamemailcreateTimelastUpdateTime
Example
"id"

IdentityListSortOrder

string

enum for allowed orders to sort identity list by

stringascdesc
Example
"asc"

IdentityModel

object

full identity model

cirrusUidstringrequired

cirrusUid of identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

Surname

createTimestring<date-time>required

identity creation timestamp

lastUpdateTimestring<date-time>required

identity last update timestamp

attributeCollectionsArray<AttributeCollectionOutput> | null

list of AttributeCollectionOutput

Example
{
  "cirrusUid": "string",
  "mail": "string",
  "givenName": "string",
  "sn": "string",
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z",
  "attributeCollections": [
    {
      "attributeCollectionAuthority": "string",
      "uid": "string",
      "attributes": {},
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollectionAuthorityType": "sor"
    }
  ]
}

IdentityModelBase

object

base identity model

cirrusUidstringrequired

cirrusUid of identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

Surname

createTimestring<date-time>required

identity creation timestamp

lastUpdateTimestring<date-time>required

identity last update timestamp

Example
{
  "cirrusUid": "string",
  "mail": "string",
  "givenName": "string",
  "sn": "string",
  "createTime": "2024-01-15T09:30:00Z",
  "lastUpdateTime": "2024-01-15T09:30:00Z"
}

IdentityModifyInput

object

model for modifying base properties on existing identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

surname

allowDuplicateEmailbooleanfalse

whether to allow creation of an identity record with an email address already associated with another identity

Example
{
  "mail": "user@example.com",
  "givenName": "string",
  "sn": "string",
  "allowDuplicateEmail": false
}

LinkGroup

object

linkgroup model

permissionsArray<string>

List of permissions for org + link group

customerUidKeysArray<string>

List of Customer UID tenantShortName:attributeCollectionAuthority pairs

attributeAuthoritiesArray<string>

List of Customer attribute authorities

Example
{
  "permissions": [],
  "customerUidKeys": [],
  "attributeAuthorities": []
}

OrgBrandedIdAccountCreateInput

object

model for creating a new OBID account

givenNamestring | null

first name

surnamestringrequired

last name

emailstring<email>required

email address

Example
{
  "givenName": "string",
  "surname": "string",
  "email": "user@example.com"
}

Page_IdentityModelBase_

object
itemsArray<IdentityModelBase>required

list of items on this page

Show child attributes
cirrusUidstringrequired

cirrusUid of identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

Surname

createTimestring<date-time>required

identity creation timestamp

lastUpdateTimestring<date-time>required

identity last update timestamp

total_itemsinteger>= 0required

total number of items

page_cntinteger>= 0required

total number of pages

page_sizeinteger>= 0required

number of items on this page

page_idxinteger>= 1required

current page index

Example
{
  "items": [
    {
      "cirrusUid": "string",
      "mail": "string",
      "givenName": "string",
      "sn": "string",
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z"
    }
  ],
  "total_items": 0,
  "page_cnt": 0,
  "page_size": 0,
  "page_idx": 1
}

Page_IdentityModel_

object
itemsArray<IdentityModel>required

list of items on this page

Show child attributes
cirrusUidstringrequired

cirrusUid of identity record

mailstring | null

email address

givenNamestring | null

given name

snstring | null

Surname

createTimestring<date-time>required

identity creation timestamp

lastUpdateTimestring<date-time>required

identity last update timestamp

attributeCollectionsArray<AttributeCollectionOutput> | null

list of AttributeCollectionOutput

total_itemsinteger>= 0required

total number of items

page_cntinteger>= 0required

total number of pages

page_sizeinteger>= 0required

number of items on this page

page_idxinteger>= 1required

current page index

Example
{
  "items": [
    {
      "cirrusUid": "string",
      "mail": "string",
      "givenName": "string",
      "sn": "string",
      "createTime": "2024-01-15T09:30:00Z",
      "lastUpdateTime": "2024-01-15T09:30:00Z",
      "attributeCollections": [
        {
          "attributeCollectionAuthority": "string",
          "uid": "string",
          "attributes": {},
          "createTime": "2024-01-15T09:30:00Z",
          "lastUpdateTime": "2024-01-15T09:30:00Z",
          "attributeCollectionAuthorityType": "sor"
        }
      ]
    }
  ],
  "total_items": 0,
  "page_cnt": 0,
  "page_size": 0,
  "page_idx": 1
}

ValidationError

object
locArray<string | integer>required
Show child attributes
Any of
string
integer
msgstringrequired
typestringrequired
inputany
ctxobject
Example
{
  "loc": [
    "string"
  ],
  "msg": "string",
  "type": "string",
  "ctx": {}
}