Skip to content

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:

{
  "error": {
    "statusCode": 400,
    "message": "Malformed request"
  }
}

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:

{
  "error": {
    "statusCode": 400,
    "message": "Missing body"
  }
}

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