Configuration API¶
17 confirmed endpoints — 11 respond with data, 6 require valid input.
Endpoints with Response Data¶
GET /config/api/v1/bookmarks¶
Retrieve all visible system bookmarks
✅ Live — responds with data
Sample Response:
[
{
"id": "1d83ec5d-8ef7-4acd-8ef4-c1838ae77f55",
"title": "CNBC AP FEEDS",
"path": "/folders?searchString=type%3Afile%20metadatafield.d9094375-c89d-4201-9478-7ae74b863777%3A%27Versant%E2%96%B8News%E2%96%B8CNBC%27&viewType=list&isFuzzy=false&atSameTime=false&defaultDateRangeField=mediaCreatedOn&ts=1775060621701&useCustomSearchHook=false&allTypes=false&folderId=a204e31f-6b1b-4e25-9216-440ba8293a3f",
"icon": "bookmark",
"isFilterBookmark": false,
"sortKey": "O"
},
{
"id": "216b8a8c-785a-49ae-99e5-4b4aa4e6a453",
"title": "CNBC Digital",
"path": "/folders?searchString=type%3Aimage&viewType=list&isFuzzy=false&atSameTime=false&defaultDateRangeField=mediaCreatedOn&ts=1774610555075&useCustomSearchHook=false&allTypes=false&folderId=986c9867-2b6e-4372-b058-33c94b168a10",
"icon": "folder",
"isFilterBookmark": false,
"visibleToGroups": [
"versantstaging:Access-CNBCDigital"
],
"sortKey": "P"
}
]
PUT /config/api/v1/bookmarks¶
Delete old system bookmarks and create new bookmarks from payload
✅ Live — responds with data
Sample Response:
[
{
"id": "73c95b32-4b66-4c4a-a7e7-d7a514a328d2",
"title": "My bookmark",
"path": "/search-item",
"icon": "local_offer",
"isFilterBookmark": false,
"visibleToGroups": [
"b60d57d2-4b12-a80c-6f14-c5eefaa91460",
"c60dx7d2-19o2-a8md-6f14-d5eefaa91461"
]
}
]
DELETE /config/api/v1/bookmarks/{bookmarkId}¶
Delete a system bookmark
✅ Live — responds with data
GET /config/api/v1/config¶
Get tenant configuration information
✅ Live — responds with data
Response keys: featureFlags, confidenceLevel, faceDetectionMinimumWidthRatio, unknownPersonDetectionConfig, trintApiKey, realtimeTrintConfig, transcodingService, subtitleParametricRules, serviceRate, secondaryTranslationLanguage, projectTemplates, paragraphParametricRules, organizationLabel, isMoveDefault, forceCreateP2RootItem, editProxyConfig, conformAnalyticConfig, recordingsAnalyticConfig, tenantWideTimezone, tenantWideTimeFormat, speakerDiarizationEnabled, autoTranslationEnabled, autoAddImagesToDetectedPersons, analyticConfig, translationLanguage, mdfTypeDefaults, metadataDefaults, mdfTypePermissions, shouldDefaultExportMdfOverride, showPersonFunctionality, showLabelFunctionality, showFolderFunctionality, showFileFunctionality, showAudioFunctionality, shouldCreateItemForProjectTemplates, crashRecordingDuration, crashRecordingName, defaultCompactViewFields, plugins, subclipFormatConfig, uploadAllPremiereClips, customActions, customActionsHeaders, customIcons, customIconRules, cutterConfig, shareLimits, useCutterRendererForSubclips, defaultSubclipPresetId, blacklistedFileExtensions, skippedFileExtensionsForPremiere, usePremierePreferenceForScaleToFrame, showAllItemTypesInDefaultSearch, pluginConfig
POST /config/api/v1/config¶
Update the tenant configuration information
✅ Live — responds with data
Response keys: featureFlags, confidenceLevel, faceDetectionMinimumWidthRatio, unknownPersonDetectionConfig, trintApiKey, realtimeTrintConfig, transcodingService, subtitleParametricRules, serviceRate, secondaryTranslationLanguage, projectTemplates, paragraphParametricRules, organizationLabel, isMoveDefault, forceCreateP2RootItem, editProxyConfig, conformAnalyticConfig, recordingsAnalyticConfig, tenantWideTimezone, tenantWideTimeFormat, speakerDiarizationEnabled, autoTranslationEnabled, autoAddImagesToDetectedPersons, analyticConfig, translationLanguage, mdfTypeDefaults, metadataDefaults, mdfTypePermissions, shouldDefaultExportMdfOverride, showPersonFunctionality, showLabelFunctionality, showFolderFunctionality, showFileFunctionality, showAudioFunctionality, shouldCreateItemForProjectTemplates, crashRecordingDuration, crashRecordingName, defaultCompactViewFields, plugins, subclipFormatConfig, uploadAllPremiereClips, customActions, customActionsHeaders, customIcons, customIconRules, cutterConfig, shareLimits, useCutterRendererForSubclips, defaultSubclipPresetId, blacklistedFileExtensions, skippedFileExtensionsForPremiere, usePremierePreferenceForScaleToFrame, showAllItemTypesInDefaultSearch, pluginConfig
GET /config/api/v1/configs/kelda¶
Retrieve kelda
✅ Live — responds with data
Response keys: l, i, s, t
DELETE /config/api/v1/configs/kelda/{id}¶
Delete kelda
✅ Live — responds with data
Note
ct-prod-foundation-v9.yaml — delete kelda config
GET /config/api/v1/storages¶
Get all storages under the tenant
✅ Live — responds with data
Sample Response:
{
"total": 1,
"_embedded": {
"collection": [
{
"id": "versantstaging-test-id",
"name": "test-name",
"private": false,
"description": "test-description",
"owner": "0101e008-d785-4c6c-b549-a1c9bcefa282"
}
]
}
}
Response Schema:
| Field | Type | Required |
|---|---|---|
_embedded |
object | Yes |
total |
integer | Yes |
POST /config/api/v1/storages¶
Create a storage under the tenant
✅ Live — responds with data
Sample Response:
{
"id": "versantstaging-test-id",
"name": "test-name",
"private": false,
"description": "test-description",
"owner": "0101e008-d785-4c6c-b549-a1c9bcefa282"
}
Response Schema:
| Field | Type | Required |
|---|---|---|
description |
string | Yes |
id |
string | Yes |
name |
string | Yes |
owner |
string | Yes |
private |
boolean | Yes |
GET /ingest/api/v1/ingestStorageConfigs¶
Get all ingest configuration in the system
✅ Live — responds with data
Sample Response:
[
{
"id": "730e2a54-248e-410e-8da6-82a1d99eacb7",
"title": "CNBC Digital Asset Ingestion",
"ingestConfigType": "ingest_media",
"isDisabled": false,
"storageProvider": "s3_native",
"sourceBucket": "archive-cnbc",
"sourceKeyPrefix": "2022/12/221216_CN_16_Seawalls_LEJ",
"accessType": "assume-role",
"externalId": "dmVyc2FudHN0YWdpbmcjMzEyMzFhZjctNTVlNi00MjVhLThiNGUtMGI3ZjNjZmIwMGQy",
"sourceEndpoint": null,
"ingestFileExtensions": null,
"ingestFileTags": [],
"ingestIfAnyTagsMatch": false,
"highresFolder": null,
"targetFolder": "CNBC/Digital/2022/12/",
"targetFolderRemoveSourcePrefix": false,
"requireSidecar": false,
"sidecarParser": null,
"sidecarFileName": null,
"confidence": 90,
"sourceLastModified": "2026-01-02T17:28:39.807Z",
"analyticConfig": {
"textDetectionEnabled": false,
"labelDetectionEnabled": false,
"personDetectionEnabled": false,
"celebrityDetectionEnabled": false,
"transcriptionEnabled": false
},
"enableS3Acceleration": false,
"isProxyOnlyIngestConfig": false,
"defaultMetadata": null,
"defaultTimedMetadata": null,
"scanStorageState": {
"message": "Scanning complete. Total processed items: 2896, ingested items: 2895",
"modifiedOn": "2026-01-20T18:20:02.006Z",
"state": "complete"
},
"deleteEnabled": false,
"visibleTo": {
"level": "tenant",
"groups": []
},
"visibleToGroupList": null,
"skipProcessing": true,
"tenantId": "versantstaging",
"accessKey": "arn:aws:iam::916863632944:role/versant-mimir-staging-ingest",
"awsAccountId": null,
"areCredentialsSaved": true
}
]
POST /ingest/api/v1/ingestStorageConfigs¶
Create a new ingest storage configuration
✅ Live — responds with data
Sample Response:
{
"id": "a16770e5-9f87-4702-9cb7-5d2fbc9de4de",
"title": "ingest_media-testing",
"ingestConfigType": "ingest_media",
"isDisabled": false,
"storageProvider": "s3_native",
"sourceBucket": "testing",
"sourceKeyPrefix": "",
"accessType": "iam-user",
"externalId": null,
"sourceEndpoint": "",
"ingestFileExtensions": null,
"ingestFileTags": null,
"ingestIfAnyTagsMatch": null,
"highresFolder": null,
"targetFolder": null,
"targetFolderRemoveSourcePrefix": null,
"requireSidecar": null,
"sidecarParser": null,
"sidecarFileName": null,
"confidence": null,
"sourceLastModified": null,
"analyticConfig": {
"transcriptionEnabled": false,
"labelDetectionEnabled": false,
"textDetectionEnabled": false,
"personDetectionEnabled": false,
"celebrityDetectionEnabled": false,
"transcriptionConfig": null,
"textDetectionSettings": null,
"personDetectionConfig": null,
"analyticPlugins": null
},
"enableS3Acceleration": false,
"isProxyOnlyIngestConfig": null,
"defaultMetadata": null,
"defaultTimedMetadata": null,
"scanStorageState": null,
"deleteEnabled": false,
"visibleTo": null,
"visibleToGroupList": null,
"skipProcessing": null,
"tenantId": "versantstaging",
"accessKey": null,
"awsAccountId": null
}
Response Schema:
| Field | Type | Required |
|---|---|---|
accessKey |
null | No |
accessType |
string | Yes |
analyticConfig |
object | Yes |
awsAccountId |
null | No |
confidence |
null | No |
defaultMetadata |
null | No |
defaultTimedMetadata |
null | No |
deleteEnabled |
boolean | Yes |
enableS3Acceleration |
boolean | Yes |
externalId |
null | No |
highresFolder |
null | No |
id |
string | Yes |
ingestConfigType |
string | Yes |
ingestFileExtensions |
null | No |
ingestFileTags |
null | No |
ingestIfAnyTagsMatch |
null | No |
isDisabled |
boolean | Yes |
isProxyOnlyIngestConfig |
null | No |
requireSidecar |
null | No |
scanStorageState |
null | No |
sidecarFileName |
null | No |
sidecarParser |
null | No |
skipProcessing |
null | No |
sourceBucket |
string | Yes |
sourceEndpoint |
string | Yes |
sourceKeyPrefix |
string | Yes |
sourceLastModified |
null | No |
storageProvider |
string | Yes |
targetFolder |
null | No |
targetFolderRemoveSourcePrefix |
null | No |
tenantId |
string | Yes |
title |
string | Yes |
visibleTo |
null | No |
visibleToGroupList |
null | No |
Note
Error: {'statusCode': 500, 'message': 'Expected body', 'developerMessage': 'Expected body', 'payload': {'messages': ['Expected body'], 'debug': ['Error'], 'stack': 'Error: Expected body\n at invariant (/v
Endpoints Requiring Valid Input¶
These endpoints are confirmed live but need proper request bodies.
POST /config/api/v1/bookmarks¶
Create a new system bookmark
⚠️ Live — requires valid request body
Sample Response:
{
"error": {
"statusCode": 400,
"message": "folderTreePath should not be provided in API version 2 or later"
}
}
Response Schema:
| Field | Type | Required |
|---|---|---|
error |
object | Yes |
Note
[400] {'statusCode': 400, 'message': 'folderTreePath should not be provided in API version 2 or later'}
GET /config/api/v1/bookmarks/{bookmarkId}¶
Retrieve a system bookmark
📝 Live — use a different HTTP method
Response Schema:
| Field | Type | Required |
|---|---|---|
icon |
string | Yes |
id |
string | Yes |
isFilterBookmark |
boolean | No |
parentFolder |
string | No |
path |
string | Yes |
title |
string | Yes |
visibleToGroups |
array | No |
PUT /config/api/v1/bookmarks/{bookmarkId}¶
Update a system bookmark
⚠️ Live — requires valid request body
Sample Response:
Response Schema:
| Field | Type | Required |
|---|---|---|
error |
object | Yes |
Note
[400] {'statusCode': 400, 'message': 'Malformed request'}
POST /config/api/v1/configs/kelda¶
Create a new kelda
⚠️ Live — requires valid request body
Sample Response:
Response Schema:
| Field | Type | Required |
|---|---|---|
error |
object | Yes |
Note
ct-prod-foundation-v9.yaml — kelda config
DELETE /config/api/v1/storages/{storageId}¶
Delete a storage entry
⚠️ Live — requires valid request body
Sample Response:
{
"error": {
"statusCode": 400,
"message": "The conditional request failed",
"developerMessage": "The conditional request failed",
"payload": {
"messages": [
"The conditional request failed"
],
"debug": [
"ConditionalCheckFailedException"
],
"httpStatusCode": 400,
"requestId": "ET3SEK2RRQU4QJOJ7CN016HU63VV4KQNSO5AEMVJF66Q9ASUAAJG",
"attempts": 1,
"totalRetryDelay": 0,
"stack": "ConditionalCheckFailedException: The conditional request failed\n at de_ConditionalCheckFailedExceptionRes (/var/task/src/api/tenant/tenantStorage.js:21587:25)\n at de_CommandError (/var/task/src/api/tenant/tenantStorage.js:21502:23)\n at process.processTicksAndRejections (node:internal/process/task_queues:103:5)\n at async /var/task/src/api/tenant/tenantStorage.js:1664:24\n at async /var/task/src/api/tenant/tenantStorage.js:1780:22\n at async /var/task/src/api/tenant/tenantStorage.js:11290:42\n at async /var/task/src/api/tenant/tenantStorage.js:1441:26\n at async _TenantStorageMapper.deleteInternal (/var/task/src/api/tenant/tenantStorage.js:29218:28)\n at async _TenantStorageMapper.delete (/var/task/src/api/tenant/tenantStorage.js:29179:12)\n at async deleteStorageHandler (/var/task/src/api/tenant/tenantStorage.js:32142:5)",
"requestID": "ee759a9b-9f44-41bb-9353-058fea9e0b5c"
}
}
}
Response Schema:
| Field | Type | Required |
|---|---|---|
error |
object | Yes |
Note
[400] {'statusCode': 400, 'message': 'The conditional request failed', 'developerMessage': 'The conditional request failed', 'payload': {'messages': ['The conditional request failed'], 'debug': ['Conditiona
PUT /config/api/v1/storages/{storageId}¶
Update a storage under the tenant
⚠️ Live — requires valid request body
Sample Response:
{
"error": {
"statusCode": 400,
"message": "The server could not understand the request due to invalid syntax."
}
}
Response Schema:
| Field | Type | Required |
|---|---|---|
error |
object | Yes |
Note
[400] {'statusCode': 400, 'message': 'The server could not understand the request due to invalid syntax.'}
Not Found¶
| Method | Path | Code |
|---|---|---|
GET |
/config/api/v1/configs |
404 |
GET |
/config/api/v1/configs/s3 |
404 |
GET |
/config/api/v1/configs/transcription |
404 |