TotalAI Release 2.0 API
September 9, 2026
This release adds connector-based (credential-free) authentication for AWS Bedrock and Azure OpenAI models, plus a full new Asset API for creating, searching, updating, counting, and deleting AI assets like LLM models and MCP servers.
Before reviewing the API release highlights, learn more about the API server URL to use in your API requests by referring to the "Know Your Qualys API Server URL" section. For this API Release Notes, <qualys_base_url> is mentioned in the sample API requests.
AI Model Connector-based Authentication
With this release, you can authenticate an AWS Bedrock or Azure OpenAI model using an existing connector instead of providing long-lived credentials when creating a new model or updating an existing one:
- Create AWS Bedrock Model with Connector-based Authentication
- Update AWS Bedrock Model with Connector-based Authentication
- Create Azure OpenAI Model with Connector-based Authentication
- Update Azure OpenAI Model with Connector-based Authentication
Asset API
With this release, we are introducing the following Asset APIs to create, retrieve, search, update, count, and delete AI assets, including LLM models and MCP servers, in your account:
- Create an Asset
- Count Assets
- Delete Asset(s) Using Filter
- Search Assets
- Get an Asset by ID
- Update an Asset
- Delete Asset
New API
New API: Create an Asset
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/ |
| Method | POST |
| DTD or XSD changes | Not Applicable |
Create a new asset with the provided attributes. This feature supports creating LLM models and MCP servers with their respective configurations. Required fields vary based on the asset type and runtime.
The owner field is read-only, and the system automatically sets it to the authenticated user.
Sample: Create an LLM AssetSample: Create an LLM Asset
API Request
{
"name": "test model create from Public API 2026-07-17T14:26",
"type": "LLM",
"modelId": "vertex-g-123",
"runtime": "GOOGLE_VERTEX",
"region": "europe-west1",
"endpointId": "xxxxx",
"projectId": "xxxxx",
"optionProfile": {
"id": "xxxxx"
},
"authRecord": {
"authType": "SERVICE_ACCOUNT",
"serviceAccountAuthInputType": "JSON",
"serviceAccountFileContent": "ewogICJlbXB0eSI6ICJkYXRhIgp9Cg==",
"serviceAccountFileName": "filename.json"
}
}
API Response
Response 200 - LLM creation
{
"id": "xxxxx",
"uuid": "xxxxx",
"name": "test model create from Public API 2026-07-17T14:26",
"type": "LLM",
"createdDate": 1784298400661,
"lastUpdatedDate": 1784298400661,
"createdBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"modelId": "vertex-g-123",
"runtime": "GOOGLE_VERTEX",
"url": "https://europe-west1-aiplatform.googleapis.com",
"region": "europe-west1",
"projectId": "xxxxx",
"endpointId": "xxxxx",
"status": "CONFIRMED",
"scannerLocked": false,
"authRecord": {
"authType": "SERVICE_ACCOUNT",
"serviceAccountFileContent": "KioqKio=",
"serviceAccountFileName": "filename.json",
"serviceAccountAuthInputType": "JSON"
},
"optionProfile": {
"id": "xxxxx",
"name": "OP - John Doe"
},
"owner": {
"id": "xxxxx",
"uuid": "xxxxx",
"username": "test_jd",
"firstName": "John",
"lastName": "Doe"
}
}
Response 400 - The field [Description] does not exist.
{
"errorCode": "QAPI-400004",
"message": "The field [{field}] does not exist.",
"hint": "Check the documentation for the list of possible fields.",
"details": "The field [Description] does not exist.",
"parameters": {
"field": "Description"
},
"timestamp": 1766397052701
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 404 - Tag not found with UUID [xxxxx].
{
"errorCode": "QAPI-404003",
"message": "Tag not found with UUID [{uuid}].",
"hint": "Verify the provided UUID is correct.",
"timestamp": 1766395789612,
"parameters": {
"uuid": "xxxxx"
}
}
Response 404 - Tag not found with ID [xxxxx].
{
"errorCode": "QAPI-404002",
"message": "Tag not found with ID [{id}].",
"hint": "Verify the provided ID is correct.",
"timestamp": 1766396169637,
"parameters": {
"id": "xxxxx"
}
}
Response 404 - Option Profile not found with ID [xxxxx].
{
"errorCode": "QTAI-404004",
"message": "Option Profile not found with ID [{id}].",
"hint": "Verify the provided ID is correct and is in user scope.",
"timestamp": 1766396388669,
"parameters": {
"id": "xxxxx"
}
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
NEW API: Count Assets
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/count |
| Method | POST |
| DTD or XSD changes | Not Applicable |
Count all assets or only those that match the provided QQL filter. This operation returns the total number of accessible assets and applies the specified QQL criteria when provided. Use it to get quick statistics without retrieving full asset data.
Sample: Asset CountSample: Asset Count
API Request
{
"filter": {
"assetQql": "asset.id: {{createdModelID}}"
}
}
API Response
Response 200 - Asset Count
{
"count": 1
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
New API: Delete Asset(s) Using Filter
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/delete |
| Method | POST |
| DTD or XSD changes | Not Applicable |
Delete multiple assets that match the specified QQL query criteria in a single operation. This operation permanently removes all assets that match the provided filter. The response includes the ID of each deleted asset and the deletion status for each operation (success, failure, or partial). Verify that the QQL query is correct before executing this operation, as it deletes all matching assets. This operation performs the equivalent of searching for assets and deleting each result individually, but executes the entire process as a single bulk operation.
Sample: Delete Assets Matching a FilterSample: Delete Assets Matching a Filter
API Request
{
"filter": {
"assetQql": "asset.name: Test Hugging Face"
}
}
API Response
Response 200 - Asset Delete Matching
{
"entries": [
{
"entityId": "xxxxx",
"status": "SUCCESS"
},
{
"entityId": "xxxxx",
"status": "SUCCESS"
}
]
}
Response 200 - Asset Delete No Match
{}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
Search Assets
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/search |
| Method | POST |
| DTD or XSD changes | Not Applicable |
Search and retrieve assets that match the specified QQL criteria, with support for pagination, sorting, and field selection. When the fields parameter is omitted, this operation returns the default response fields. When fields is specified, it returns only the selected fields. In both cases, the response includes only non-null values.
Available Response FieldsAvailable Response Fields
| Field | Description |
|---|---|
| id | Asset identifier |
| uuid | Asset universally unique identifier |
| name | Asset name |
| type | Asset type (LLM or MCP) |
| createdDate | Creation timestamp in milliseconds since epoch |
| lastUpdatedDate | Last updated timestamp in milliseconds since epoch |
| lastScanDate | Last scan timestamp in milliseconds since epoch |
| confirmedDate | Last confirmed timestamp in milliseconds since epoch |
| createdBy | User who created the asset |
| createdBy.firstName | Creator first name |
| createdBy.id | Creator user identifier |
| createdBy.lastName | Creator last name |
| createdBy.username | Creator username |
| updatedBy | User who last updated the asset |
| updatedBy.firstName | Updater first name |
| updatedBy.id | Updater user identifier |
| updatedBy.lastName | Updater last name |
| updatedBy.username | Updater username |
| updatedDate | Last updated timestamp in milliseconds since epoch |
| modelId | Model ID, in case of an LLM asset |
| runtime | Associated runtime (always MCP_SERVER for MCP assets) |
| version | Asset version |
| description | Optional description |
| url | URL |
| region | Region |
| openAIVersion | OpenAI version |
| projectId | Project ID |
| endpointId | Endpoint ID |
| status | Status (POTENTIAL or CONFIRMED) |
| payload | Optional payload saved from scan |
| launchEligible | Indicates whether scan launch is allowed |
| endpoints | MCP server endpoints (not applicable for LLM assets) |
| tags | Organization tags for grouping and filtering |
| tags.id | Tag identifier |
| tags.uuid | Tag UUID |
| tags.name | Tag name |
| scannerLocked | Indicates whether the scanner is locked |
| defaultScanner | Default scanner |
| defaultScanner.id | Default scanner identifier |
| defaultScanner.name | Default scanner name |
| defaultScannerTags | Default scanner tags |
| defaultScannerTags.id | Tag identifier |
| defaultScannerTags.uuid | Tag UUID |
| defaultScannerTags.name | Tag name |
| authRecord | Associated auth record |
| authRecord.authType | Auth type (BEARER_TOKEN, ACCESS_KEY_SECRET_KEY, ASSUME_ROLE, API_KEY, SERVICE_ACCOUNT, BASIC) |
| authRecord.bearerToken | Bearer token |
| authRecord.accessKey | Access key |
| authRecord.secretKey | Secret key |
| authRecord.apiKey | API key |
| authRecord.serviceAccountFileContent | Service account file contents (Base64 encoded) |
| authRecord.serviceAccountFileName | Service account file name |
| authRecord.serviceAccountAuthInputType | Service account auth input type |
| authRecord.basicUsername | Basic username |
| authRecord.basicPassword | Basic password |
| optionProfile | Option profile (not applicable for MCP assets) |
| optionProfile.id | Option profile identifier (not applicable for MCP assets) |
| optionProfile.name | Option profile name (not applicable for MCP assets) |
| owner | User who owns the asset |
| owner.firstName | Owner first name |
| owner.id | Owner user identifier |
| owner.lastName | Owner last name |
| owner.username | Owner username |
Default Response Fields: id, uuid, name, type, tags, lastUpdatedDate.
Supported Order By Fields:
| Field | Description |
|---|---|
| id | Sort by asset identifier |
| name | Sort by asset name |
| lastUpdatedDate | Sort by last updated date |
| type | Sort by asset type |
Sample: Search Assets by NameSample: Search Assets by Name
API Request
{
"fields": "id,name,type,createdDate,lastUpdatedDate,lastScanDate,confirmedDate,createdBy,updatedBy,modelId,runtime,version,description,url,region,openAIVersion,projectId,endpointId,status,payload,endpoints,tags,scannerLocked,defaultScanner,defaultScannerTags,authRecord,optionProfile,owner,launchEligible",
"filter": {
"assetQql": "asset.name: Test Hugging Face"
},
"size": 3
}
API Response
Response 200 - Search Assets by Name
{
"totalElements": 26,
"scrollInfo": "eyJwYWdlIjoxLCJzaXplIjo1MH0=",
"content": [
{
"id": "xxxxx",
"name": "Test Hugging Face + Jailbreak",
"type": "LLM",
"createdDate": 1728027247000,
"lastUpdatedDate": 1730114631000,
"lastScanDate": 1730116594000,
"createdBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "#SYSTEM-USER#@Test_1365221",
"firstname": "SYSTEM",
"lastname": "USER"
},
"modelId": "llama3",
"runtime": "HUGGINGFACE_TGI_SERVER",
"url": "http://10.88.33.110:8083",
"status": "CONFIRMED",
"launchEligible": true,
"scannerLocked": false,
"authRecord": {
"authType": "BEARER_TOKEN",
"bearerToken": "*****"
},
"optionProfile": {
"id": "xxxxx",
"name": "Test Hugging Face + Jailbreak-Option Profile"
}
},
{
"id": "xxxxx",
"name": "TestHuggingInterfaceExternal_Bedrock",
"type": "LLM",
"createdDate": 1728902047000,
"lastUpdatedDate": 1737784058000,
"lastScanDate": 1737784739000,
"createdBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "#SYSTEM-USER#@Test_1365221",
"firstname": "SYSTEM",
"lastname": "USER"
},
"modelId": "meta.llama3-8b-instruct-v1:0",
"runtime": "AWS_BEDROCK",
"description": "The Mistral-Nemo-Instruct-2407 Large Language Model (LLM) is an instruct fine-tuned version of the Mistral-Nemo-Base-2407. Trained jointly by Mistral AI and NVIDIA, it significantly outperforms existing models smaller or similar in size.",
"url": "https://bedrock-runtime.us-west-2.amazonaws.com",
"region": "US West (Oregon)",
"status": "CONFIRMED",
"launchEligible": false,
"tags": [
{
"uuid": "xxxxx",
"name": "AI_ANJ_Test"
}
],
"scannerLocked": false,
"defaultScanner": {
"id": "xxxxx",
"name": "test64bit_LLM"
},
"authRecord": {
"authType": "ACCESS_KEY_SECRET_KEY",
"bearerToken": "*****",
"accessKey": "*****",
"secretKey": "*****"
},
"optionProfile": {
"id": "xxxxx",
"name": "TestHuggingInterfaceExternal_Bedrock-Option Profile"
}
},
{
"id": "xxxxx",
"name": "Test Model with Hugging Face-KB attack-updated",
"type": "LLM",
"createdDate": 1729154103000,
"lastUpdatedDate": 1778165415000,
"lastScanDate": 1778167123000,
"createdBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "#SYSTEM-USER#@Test_1365221",
"firstname": "SYSTEM",
"lastname": "USER"
},
"modelId": "meta.llama3-8b-instruct-v1:0",
"runtime": "HUGGINGFACE_TGI_SERVER",
"url": "http://10.88.33.110:8083",
"status": "CONFIRMED",
"launchEligible": true,
"scannerLocked": false,
"authRecord": {
"authType": "BEARER_TOKEN",
"bearerToken": "*****"
},
"optionProfile": {
"id": "xxxxx",
"name": "Test Model with Hugging Face-KB attack-updated-Option Profile"
}
}
]
}
Response 400 - Invalid orderBy field [invalidField].
{
"errorCode": "QAPI-400001",
"message": "Invalid orderBy field [{orderBy}].",
"hint": "Verify the possible orderBy field values.",
"timestamp": 1750686790423,
"parameters": {
"orderBy": "invalidField"
}
}
Response 400 - The token [asset.namo] is not supported.
{
"errorCode": "QAPI-400005",
"message": "The token [{name}] is not supported.",
"hint": "Check the documentation for the list of possible QQL tokens.",
"timestamp": 1764166727749,
"parameters": {
"name": "asset.namo"
}
}
Response 400 - The field [invalidField] does not exist.
{
"errorCode": "QAPI-400004",
"message": "The field [{field}] does not exist.",
"hint": "Check the documentation for the list of possible fields.",
"timestamp": 1784739281044,
"parameters": {
"field": "invalidField"
}
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
New API: Get an Asset by ID
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/{id} |
| Method | GET |
| DTD or XSD changes | Not Applicable |
Retrieve detailed information about a specific asset. Use the optional fields parameter to return only selected properties. When fields is not specified, the operation returns all available asset properties.
Input ParametersInput Parameters
| Name | Description |
|---|---|
| id | Asset identifier |
| fields | Comma separated list of field names to include in the response. Usage: - Omit parameter to get full asset representation (default) - Use comma separated values for specific fields: id,name,scannerLocked- Use dot notation for nested fields: owner.username,optionProfile.nameExamples: - ?fields=id,name,status - Basic information only- ?fields=id,name,runtime,url - Key configuration settingsSee operation description for the complete list of available field names. |
Sample: Get an LLM AssetSample: Get an LLM Asset
API Response
Response 200 - LLM get
{
"id": "xxxxx",
"uuid": "xxxxx",
"name": "test model create from Public API 2026-07-17T14:26",
"type": "LLM",
"createdDate": 1784298400661,
"lastUpdatedDate": 1784298400661,
"createdBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "test_jd",
"firstname": "John",
"lastname": "Doe"
},
"modelId": "vertex-g-123",
"runtime": "GOOGLE_VERTEX",
"url": "https://europe-west1-aiplatform.googleapis.com",
"region": "europe-west1",
"projectId": "xxxxx",
"endpointId": "xxxxx",
"status": "CONFIRMED",
"scannerLocked": false,
"authRecord": {
"authType": "SERVICE_ACCOUNT",
"serviceAccountFileContent": "KioqKio=",
"serviceAccountFileName": "filename.json",
"serviceAccountAuthInputType": "JSON"
},
"optionProfile": {
"id": "xxxxx",
"name": "OP - John Doe"
},
"owner": {
"id": "xxxxx",
"uuid": "xxxxx",
"username": "test_jd",
"firstName": "John",
"lastName": "Doe"
}
}
Response 400 - The field [invalidField] does not exist.
{
"errorCode": "QAPI-400004",
"message": "The field [{field}] does not exist.",
"hint": "Check the documentation for the list of possible fields.",
"timestamp": 1784739281044,
"parameters": {
"field": "invalidField"
}
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 404 - Asset not found with ID [xxxxx].
{
"errorCode": "QTAI-404007",
"message": "Asset not found with ID [{id}].",
"hint": "Verify the provided ID is correct and is in user scope.",
"timestamp": 1764166552483,
"parameters": {
"id": "xxxxx"
}
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
Update an Asset
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/{id} |
| Method | PUT |
| DTD or XSD changes | Not Applicable |
Update an asset with the specified ID. This operation supports partial updates and modifies only the fields included in the request body. For example, to update only the asset name, provide only the name field in the request body. The operation leaves all other fields unchanged. For complete details about partial update behavior, refer to the API Conventions section. The response returns the updated asset details.
The owner field is read-only. Do not include it in the request body, as the endpoint rejects such requests with a validation error.
Input ParametersInput Parameters
| Name | Description |
|---|---|
| id | Asset identifier |
Sample: Update an LLM AssetSample: Update an LLM Asset
API Request
{
"name": "test model update from Public API 2026-07-20T16:02"
}
API Response
Response 200 - LLM update
{
"id": "xxxxx",
"uuid": "xxxxx",
"name": "test model update from Public API 2026-07-20T16:02",
"type": "LLM",
"createdDate": 1784559970000,
"lastUpdatedDate": 1784563375018,
"createdBy": {
"username": "test_sd",
"firstname": "John",
"lastname": "Doe"
},
"updatedBy": {
"username": "test_sd",
"firstname": "John",
"lastname": "Doe"
},
"modelId": "vertex-g-123",
"runtime": "GOOGLE_VERTEX",
"url": "https://europe-west1-aiplatform.googleapis.com",
"region": "europe-west1",
"projectId": "xxxxx",
"endpointId": "xxxxx",
"status": "CONFIRMED",
"scannerLocked": false,
"authRecord": {
"authType": "SERVICE_ACCOUNT",
"serviceAccountFileContent": "KioqKio=",
"serviceAccountFileName": "filename.json",
"serviceAccountAuthInputType": "JSON"
},
"optionProfile": {
"id": "xxxxx",
"name": "OP - John Doe"
},
"owner": {
"id": "xxxxx",
"uuid": "xxxxx",
"username": "test_jd",
"firstName": "John",
"lastName": "Doe"
}
}
Response 400 - The field [Description] does not exist.
{
"errorCode": "QAPI-400004",
"message": "The field [{field}] does not exist.",
"hint": "Check the documentation for the list of possible fields.",
"details": "The field [Description] does not exist.",
"parameters": {
"field": "Description"
},
"timestamp": 1766397052701
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 404 - Asset not found with ID [xxxxx].
{
"errorCode": "QTAI-404007",
"message": "Asset not found with ID [{id}].",
"hint": "Verify the provided ID is correct and is in user scope.",
"timestamp": 1766401611347,
"parameters": {
"id": "xxxxx"
}
}
Response 404 - Tag not found with UUID [xxxxx].
{
"errorCode": "QAPI-404003",
"message": "Tag not found with UUID [{uuid}].",
"hint": "Verify the provided UUID is correct.",
"timestamp": 1766395789612,
"parameters": {
"uuid": "xxxxx"
}
}
Response 404 - Tag not found with ID [xxxxx].
{
"errorCode": "QAPI-404002",
"message": "Tag not found with ID [{id}].",
"hint": "Verify the provided ID is correct.",
"timestamp": 1766396169637,
"parameters": {
"id": "xxxxx"
}
}
Response 404 - Option Profile not found with ID [xxxxx].
{
"errorCode": "QTAI-404004",
"message": "Option Profile not found with ID [{id}].",
"hint": "Verify the provided ID is correct and is in user scope.",
"timestamp": 1766396388669,
"parameters": {
"id": "xxxxx"
}
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
New API
Delete Asset
| New or Updated API | New |
| API Endpoint | /api/1.1/asset/{id} |
| Method | DELETE |
| DTD or XSD changes | Not Applicable |
Delete an asset with the specified ID. This operation permanently removes the asset and returns the deletion status.
Input ParametersInput Parameters
| Name | Description |
|---|---|
| id | Asset identifier |
Sample: Delete an Asset by IDSample: Delete an Asset by ID
API Response
Response 200 - Asset Delete By ID
{
"entityId": "xxxxx",
"status": "SUCCESS"
}
Response 200 - Asset Delete Does Not Exist
{
"entityId": "xxxxx",
"status": "DOES_NOT_EXIST",
"reason": "Asset does not exist"
}
Response 401 - Invalid QAS token provided.
{
"errorCode": "QAPI-401001",
"message": "Invalid QAS token provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966241
}
Response 401 - Invalid QAS token type provided.
{
"errorCode": "QAPI-401002",
"message": "Invalid QAS token type provided.",
"hint": "Re-authenticate using your front office username and password.",
"timestamp": 1749023966242
}
Response 401 - QAS authentication failed.
{
"errorCode": "QAPI-401003",
"message": "QAS authentication failed.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966243
}
Response 401 - QAS bearer token not found.
{
"errorCode": "QAPI-401004",
"message": "QAS bearer token not found.",
"hint": "Make sure to authenticate with your front office username and password.",
"timestamp": 1749023966244
}
Response 401 - Unauthorized TAI Module Access.
{
"errorCode": "QAPI-401005",
"message": "Unauthorized {module} Module Access.",
"hint": "Request access to the module from your account manager.",
"timestamp": 1751378140433,
"parameters": {
"module": "TAI"
}
}
Response 401 - Unauthorized API Access.
{
"errorCode": "QAPI-401006",
"message": "Unauthorized API Access.",
"hint": "Request API access from your account manager.",
"timestamp": 1751378140434
}
Response 500 - An error occurred while processing the request.
{
"errorCode": "QAPI-500001",
"message": "An error occurred while processing the request.",
"hint": "Contact your account manager.",
"timestamp": 1749023966241
}
Updated API
Create API: Create AWS Bedrock Model with Connector-based Authentication
| New or Updated API | Updated |
| API Endpoint | /api/1.1/asset/ |
| Method | POST |
| DTD or XSD changes | Not Applicable |
You can now authenticate an AWS Bedrock model using an existing AWS connector instead of providing a long-lived access key and secret key when you create the model. When you associate a connector, TotalAI exchanges the connector's role details for short-lived AWS STS credentials at scan launch, so no static credentials are stored against the model.
Input ParametersInput Parameters
Use the following authRecord parameters to authenticate an AWS Bedrock model using a connector.
| Parameter | Data Type | Optional/ Mandatory | Description |
|---|---|---|---|
|
authRecord.authType |
String |
Mandatory |
Use this parameter to define the authentication type for the model. |
|
connectorObject.connectorId |
Integer |
Optional |
Use this parameter to provide the ID of the AWS connector to associate with the model. |
|
connectorObject.connectorUuid |
String |
Mandatory when using a connector |
Use this parameter to provide the UUID of the AWS connector. This value is required when authRecord.authType is set to ASSUME_ROLE. |
|
connectorObject.name |
String |
Optional |
Use this parameter to provide the display name of the AWS connector. |
When you provide connectorObject, do not send accessKey or secretKey. When you remove the connector or switch to static credentials, the previously stored connector association is cleared automatically.
Sample: Create AWS Bedrock Model with Connector-based AuthenticationSample: Create AWS Bedrock Model with Connector-based Authentication
API Request
{
"name": "Bedrock model - connector auth",
"type": "LLM",
"modelId": "bedrock_model",
"runtime": "AWS_BEDROCK",
"region": "Asia Pacific (Tokyo)",
"optionProfile": {
"id": 7290432
},
"authRecord": {
"authType": "ASSUME_ROLE"
},
"connectorObject": {
"connectorUuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "aws-prod-connector"
}
}
API Response
Response 200 - Bedrock model created with connector-based authentication
{
"id": 98139898,
"uuid": "f87ae520-a0e4-4113-a931-9e2d6adcf2e6",
"name": "Bedrock model - connector auth",
"type": "LLM",
"modelId": "bedrock_model",
"runtime": "AWS_BEDROCK",
"region": "Asia Pacific (Tokyo)",
"status": "CONFIRMED",
"authRecord": {
"authType": "ASSUME_ROLE"
},
"connectorObject": {
"connectorUuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "aws-prod-connector"
},
"optionProfile": {
"id": 7290432,
"name": "test OP"
}
}
Updated API
Update API: Update AWS Bedrock Model with Connector-based Authentication
| New or Updated API | Updated |
| API Endpoint | /api/1.1/asset/{id} |
| Method | PUT |
| DTD or XSD changes | Not Applicable |
You can now update an existing AWS Bedrock model to use connector-based authentication, associating an AWS connector in place of a long-lived access key and secret key. When you associate a connector, TotalAI exchanges the connector's role details for short-lived AWS STS credentials at scan launch, so no static credentials are stored against the model. This operation supports partial updates and modifies only the fields included in the request body.
Input ParametersInput Parameters
| Name | Description |
|---|---|
| id | Asset identifier |
Use the following authRecord parameters to switch an AWS Bedrock model to connector-based authentication.
| Parameter | Data Type | Optional/ Mandatory | Description |
|---|---|---|---|
|
authRecord.authType |
String |
Mandatory |
Use this parameter to define the authentication type for the model. |
|
connectorObject.connectorId |
Integer |
Optional |
Use this parameter to provide the ID of the AWS connector to associate with the model. |
|
connectorObject.connectorUuid |
String |
Mandatory when using a connector |
Use this parameter to provide the UUID of the AWS connector. This value is required when authRecord.authType is set to ASSUME_ROLE. |
|
connectorObject.name |
String |
Optional |
Use this parameter to provide the display name of the AWS connector. |
When you provide connectorObject, do not send accessKey or secretKey. When you remove the connector or switch to static credentials, the previously stored connector association is cleared automatically.
Sample: Update AWS Bedrock Model with Connector-based AuthenticationSample: Update AWS Bedrock Model with Connector-based Authentication
API Request
{
"authRecord": {
"authType": "ASSUME_ROLE"
},
"connectorObject": {
"connectorUuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "aws-prod-connector"
}
}
API Response
Response 200 - Bedrock model updated with connector-based authentication
{
"id": 98139898,
"uuid": "f87ae520-a0e4-4113-a931-9e2d6adcf2e6",
"name": "Bedrock model - connector auth",
"type": "LLM",
"modelId": "bedrock_model",
"runtime": "AWS_BEDROCK",
"region": "Asia Pacific (Tokyo)",
"status": "CONFIRMED",
"authRecord": {
"authType": "ASSUME_ROLE"
},
"connectorObject": {
"connectorUuid": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "aws-prod-connector"
},
"optionProfile": {
"id": 7290432,
"name": "test OP"
}
}
Updated API
Create API: Create Azure OpenAI Model with Connector-based Authentication
| New or Updated API | Updated |
| API Endpoint | /api/1.1/asset/ |
| Method | POST |
| DTD or XSD changes | Not Applicable |
You can now authenticate an Azure OpenAI model using an Azure Service Principal connector instead of a manually entered API key when you create the model. When you associate a connector, TotalAI retrieves the tenant, application, and client secret details from the connector at scan time, so the client secret is never stored in TotalAI.
Input ParametersInput Parameters
Use the following authRecord parameters to authenticate an Azure OpenAI model using a connector.
| Parameter | Data Type | Optional/ Mandatory | Description |
|---|---|---|---|
|
authRecord.authType |
String |
Mandatory |
Use this parameter to define the authentication type for the model. |
|
connectorObject.connectorUuid |
String |
Mandatory when using a connector |
Use this parameter to provide the UUID of the Azure connector that has an Azure Service Principal configured. This value is required when authRecord.authType is set to SERVICE_PRINCIPAL. |
|
connectorObject.name |
String |
Optional |
Use this parameter to provide the display name of the Azure connector. |
API Key authentication for Azure OpenAI models is unchanged and continues to be supported alongside Service Principal authentication.
Sample: Create Azure OpenAI Model with Connector-based AuthenticationSample: Create Azure OpenAI Model with Connector-based Authentication
API Request
{
"name": "Azure OpenAI model - connector auth",
"type": "LLM",
"runtime": "AZURE_OPEN_AI",
"url": "https://example.openai.azure.com",
"openAIVersion": "2024-02-01",
"optionProfile": {
"id": 7290432
},
"authRecord": {
"authType": "SERVICE_PRINCIPAL"
},
"connectorObject": {
"connectorUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "azure-prod-connector"
}
}
API Response
Response 200 - Azure OpenAI model created with connector-based authentication
{
"id": 98139901,
"uuid": "a1b2c3d4-1234-5678-9abc-def012345678",
"name": "Azure OpenAI model - connector auth",
"type": "LLM",
"runtime": "AZURE_OPEN_AI",
"url": "https://example.openai.azure.com",
"openAIVersion": "2024-02-01",
"status": "CONFIRMED",
"authRecord": {
"authType": "SERVICE_PRINCIPAL"
},
"connectorObject": {
"connectorUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "azure-prod-connector"
},
"optionProfile": {
"id": 7290432,
"name": "test OP"
}
}
Updated API
Update API: Update Azure OpenAI Model with Connector-based Authentication
| New or Updated API | Updated |
| API Endpoint | /api/1.1/asset/{id} |
| Method | PUT |
| DTD or XSD changes | Not Applicable |
You can now update an existing Azure OpenAI model to use an Azure Service Principal connector in place of a manually entered API key. When you associate a connector, TotalAI retrieves the tenant, application, and client secret details from the connector at scan time, so the client secret is never stored in TotalAI. This operation supports partial updates and modifies only the fields included in the request body.
Input ParametersInput Parameters
| Name | Description |
|---|---|
| id | Asset identifier |
Use the following authRecord parameters to switch an Azure OpenAI model to connector-based authentication.
| Parameter | Data Type | Optional/ Mandatory | Description |
|---|---|---|---|
|
authRecord.authType |
String |
Mandatory |
Use this parameter to define the authentication type for the model. |
|
connectorObject.connectorUuid |
String |
Mandatory when using a connector |
Use this parameter to provide the UUID of the Azure connector that has an Azure Service Principal configured. This value is required when authRecord.authType is set to SERVICE_PRINCIPAL. |
|
connectorObject.name |
String |
Optional |
Use this parameter to provide the display name of the Azure connector. |
API Key authentication for Azure OpenAI models is unchanged and continues to be supported alongside Service Principal authentication.
Sample: Update Azure OpenAI Model with Connector-based AuthenticationSample: Update Azure OpenAI Model with Connector-based Authentication
API Request
{
"authRecord": {
"authType": "SERVICE_PRINCIPAL"
},
"connectorObject": {
"connectorUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "azure-prod-connector"
}
}
API Response
Response 200 - Azure OpenAI model updated with connector-based authentication
{
"id": 98139901,
"uuid": "a1b2c3d4-1234-5678-9abc-def012345678",
"name": "Azure OpenAI model - connector auth",
"type": "LLM",
"runtime": "AZURE_OPEN_AI",
"url": "https://example.openai.azure.com",
"openAIVersion": "2024-02-01",
"status": "CONFIRMED",
"authRecord": {
"authType": "SERVICE_PRINCIPAL"
},
"connectorObject": {
"connectorUuid": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"name": "azure-prod-connector"
},
"optionProfile": {
"id": 7290432,
"name": "test OP"
}
}