Skip to Content
APIResourcesElements

Elements

Manage reusable, immutable-version visual references and their user-defined collections.

Base URL: https://app.gavana.ai/api/canvas-agent/v1 · Authentication: HTTP bearer, token format cba_<token-id>.<secret>

Operations

OperationPurposeScopes
GET /elementsList or search Elementselement:read
POST /elementsCreate an Elementelement:write
GET /elements/{elementId}Read an Element or exact immutable versionelement:read
PATCH /elements/{elementId}Update, organize, archive, or restore an Elementelement:write
GET /elements/{elementId}/versionsList immutable Element versionselement:read
GET /element-collectionsList user-defined Element collectionselement:read
POST /element-collectionsCreate an Element collectionelement:write
PATCH /element-collections/{collectionId}Rename an Element collectionelement:write
DELETE /element-collections/{collectionId}Delete an Element collection after confirmationelement:write

GET /elements

List or search Elements

Returns owner-scoped active or archived Elements with mutable and current version-pinned handles.

  • Operation id: listElements
  • Scopes: Requires element:read.
  • CLI equivalent: gavana element list

Parameters

ParameterInTypeRequiredNotes
statequerystringNoOne of active, archived. Default "active".
searchquerystringNomax length 160.
limitqueryintegerNoMaximum number of items in this page. min 1, max 100.
cursorquerystringNoOpaque continuation cursor from page.nextCursor. Reuse it with the same list filters. max length 8192.

Responses

StatusPayloadMeaning
200ElementListResponseA bounded page of Elements.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
elementsarray of ElementYes—
elements[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
elements[].handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
elements[].versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
elements[].namestringYesmin length 1, max length 160.
elements[].typestringYesOne of character, product/object, environment, style, material/texture, lighting.
elements[].sourceAssetIdsarray of StableIdYesmax items 8.
elements[].collectionIdsarray of StableIdYesmax items 24.
elements[].guidelinesstringNomax length 2000.
elements[].ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
elements[].versionintegerYesmin 1.
elements[].lifecyclestringYesOne of active, archived.
elements[].createdAtstring (date-time)Yes—
elements[].updatedAtstring (date-time)Yes—
elements[].archivedAtstring (date-time)No—
elements[].sourceHealthElementSourceHealthYes—
elements[].sourceHealth.statusstringYesOne of available, unavailable, unknown.
elements[].sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.
pageCursorPageYes—
page.limitintegerYesmin 1, max 200.
page.hasMorebooleanYes—
page.nextCursorstring | nullYesmax length 8192.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/elements" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

POST /elements

Create an Element

Creates version 1 from prompt instructions, one to eight owned image Assets, or both.

  • Operation id: createElement
  • Scopes: Requires element:write.
  • CLI equivalent: gavana element create

Request body (application/json, required)

FieldTypeRequiredNotes
namestringYesmin length 1, max length 160.
typestringYesOne of character, product/object, environment, style, material/texture, lighting.
sourceAssetIdsarray of StableIdYesmax items 8.
guidelinesstringNomax length 2000.
collectionIdsarray of StableIdNomax items 24.

Responses

StatusPayloadMeaning
201ElementCurrentResponseThe created Element.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

201 response body

FieldTypeRequiredNotes
elementElementYes—
element.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
element.handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
element.versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
element.namestringYesmin length 1, max length 160.
element.typestringYesOne of character, product/object, environment, style, material/texture, lighting.
element.sourceAssetIdsarray of StableIdYesmax items 8.
element.collectionIdsarray of StableIdYesmax items 24.
element.guidelinesstringNomax length 2000.
element.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
element.versionintegerYesmin 1.
element.lifecyclestringYesOne of active, archived.
element.createdAtstring (date-time)Yes—
element.updatedAtstring (date-time)Yes—
element.archivedAtstring (date-time)No—
element.sourceHealthElementSourceHealthYes—
element.sourceHealth.statusstringYesOne of available, unavailable, unknown.
element.sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.

Example

curl -X POST "https://app.gavana.ai/api/canvas-agent/v1/elements" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '"<value>"'

GET /elements/{elementId}

Read an Element or exact immutable version

Without version, returns the current Element. With version, returns only that exact immutable revision and never upgrades silently.

  • Operation id: getElement
  • Scopes: Requires element:read.
  • CLI equivalent: gavana element get

Parameters

ParameterInTypeRequiredNotes
elementIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
versionqueryintegerNomin 1.

Responses

StatusPayloadMeaning
200ElementCurrentResponse | ElementVersionResponseThe current Element or requested immutable version.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
(ElementCurrentResponse).elementElementYes—
(ElementCurrentResponse).element.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(ElementCurrentResponse).element.handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
(ElementCurrentResponse).element.versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
(ElementCurrentResponse).element.namestringYesmin length 1, max length 160.
(ElementCurrentResponse).element.typestringYesOne of character, product/object, environment, style, material/texture, lighting.
(ElementCurrentResponse).element.sourceAssetIdsarray of StableIdYesmax items 8.
(ElementCurrentResponse).element.collectionIdsarray of StableIdYesmax items 24.
(ElementCurrentResponse).element.guidelinesstringNomax length 2000.
(ElementCurrentResponse).element.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(ElementCurrentResponse).element.versionintegerYesmin 1.
(ElementCurrentResponse).element.lifecyclestringYesOne of active, archived.
(ElementCurrentResponse).element.createdAtstring (date-time)Yes—
(ElementCurrentResponse).element.updatedAtstring (date-time)Yes—
(ElementCurrentResponse).element.archivedAtstring (date-time)No—
(ElementCurrentResponse).element.schemaVersion1Yes—
(ElementCurrentResponse).element.sourceHealthElementSourceHealthYes—
(ElementCurrentResponse).element.sourceHealth.statusstringYesOne of available, unavailable, unknown.
(ElementCurrentResponse).element.sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.
(ElementVersionResponse).versionElementVersionYes—
(ElementVersionResponse).version.idstringYesPattern ^v[1-9][0-9]*$.
(ElementVersionResponse).version.elementIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(ElementVersionResponse).version.handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
(ElementVersionResponse).version.versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
(ElementVersionResponse).version.elementNamestringYesmin length 1, max length 160.
(ElementVersionResponse).version.elementTypestringYesOne of character, product/object, environment, style, material/texture, lighting.
(ElementVersionResponse).version.sourceAssetIdsarray of StableIdYesmax items 8.
(ElementVersionResponse).version.guidelinesstringNomax length 2000.
(ElementVersionResponse).version.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(ElementVersionResponse).version.versionintegerYesmin 1.
(ElementVersionResponse).version.createdAtstring (date-time)Yes—
(ElementVersionResponse).version.schemaVersion1Yes—
(ElementVersionResponse).version.sourceHealthElementSourceHealthYes—
(ElementVersionResponse).version.sourceHealth.statusstringYesOne of available, unavailable, unknown.
(ElementVersionResponse).version.sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/elements/%3CelementId%3E" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

PATCH /elements/{elementId}

Update, organize, archive, or restore an Element

Content updates and restores append immutable versions. Archival requires confirm=true and never hard-deletes the Element.

  • Operation id: mutateElement
  • Scopes: Requires element:write.
  • CLI equivalent: gavana element update

Parameters

ParameterInTypeRequiredNotes
elementIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

FieldTypeRequiredNotes
(variant 1).operation“update”Yes—
(variant 1).elementany | objectYes—
(variant 1).element.namestringYesmin length 1, max length 160.
(variant 1).element.typestringYesOne of character, product/object, environment, style, material/texture, lighting.
(variant 1).element.sourceAssetIdsarray of StableIdYesmax items 8.
(variant 1).element.guidelinesstringNomax length 2000.
(variant 2).operation“collections”Yes—
(variant 2).collectionIdsarray of StableIdYesmax items 24.
(variant 3).operation“archive”Yes—
(variant 3).confirmtrueYesSet only after explicit user confirmation.
(variant 4).operation“restore”Yes—

Responses

StatusPayloadMeaning
200ElementCurrentResponseThe resulting current Element.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
elementElementYes—
element.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
element.handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
element.versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
element.namestringYesmin length 1, max length 160.
element.typestringYesOne of character, product/object, environment, style, material/texture, lighting.
element.sourceAssetIdsarray of StableIdYesmax items 8.
element.collectionIdsarray of StableIdYesmax items 24.
element.guidelinesstringNomax length 2000.
element.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
element.versionintegerYesmin 1.
element.lifecyclestringYesOne of active, archived.
element.createdAtstring (date-time)Yes—
element.updatedAtstring (date-time)Yes—
element.archivedAtstring (date-time)No—
element.sourceHealthElementSourceHealthYes—
element.sourceHealth.statusstringYesOne of available, unavailable, unknown.
element.sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.

Example

curl -X PATCH "https://app.gavana.ai/api/canvas-agent/v1/elements/%3CelementId%3E" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "operation": "update", "element": "<element>" }'

GET /elements/{elementId}/versions

List immutable Element versions

  • Operation id: listElementVersions
  • Scopes: Requires element:read.
  • CLI equivalent: gavana element history

Parameters

ParameterInTypeRequiredNotes
elementIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
limitqueryintegerNoMaximum number of items in this page. min 1, max 100.
cursorquerystringNoOpaque continuation cursor from page.nextCursor. Reuse it with the same list filters. max length 8192.

Responses

StatusPayloadMeaning
200ElementHistoryResponseA bounded newest-first page of immutable versions.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
versionsarray of ElementVersionYes—
versions[].idstringYesPattern ^v[1-9][0-9]*$.
versions[].elementIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
versions[].handlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}$.
versions[].versionHandlestringYesPattern ^element:[A-Za-z0-9_-]{1,160}@v[1-9][0-9]*$.
versions[].elementNamestringYesmin length 1, max length 160.
versions[].elementTypestringYesOne of character, product/object, environment, style, material/texture, lighting.
versions[].sourceAssetIdsarray of StableIdYesmax items 8.
versions[].guidelinesstringNomax length 2000.
versions[].ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
versions[].versionintegerYesmin 1.
versions[].createdAtstring (date-time)Yes—
versions[].sourceHealthElementSourceHealthYes—
versions[].sourceHealth.statusstringYesOne of available, unavailable, unknown.
versions[].sourceHealth.unavailableSourceAssetIdsarray of StableIdYesmax items 8.
pageCursorPageYes—
page.limitintegerYesmin 1, max 200.
page.hasMorebooleanYes—
page.nextCursorstring | nullYesmax length 8192.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/elements/%3CelementId%3E/versions" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

GET /element-collections

List user-defined Element collections

  • Operation id: listElementCollections
  • Scopes: Requires element:read.
  • CLI equivalent: gavana element collection-list

Parameters

ParameterInTypeRequiredNotes
limitqueryintegerNoMaximum number of items in this page. min 1, max 100.
cursorquerystringNoOpaque continuation cursor from page.nextCursor. Reuse it with the same list filters. max length 8192.

Responses

StatusPayloadMeaning
200ElementCollectionListResponseA bounded page of collections.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
collectionsarray of ElementCollectionYes—
collections[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
collections[].handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.
collections[].namestringYesmin length 1, max length 120.
collections[].ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
collections[].createdAtstring (date-time)Yes—
collections[].updatedAtstring (date-time)Yes—
pageCursorPageYes—
page.limitintegerYesmin 1, max 200.
page.hasMorebooleanYes—
page.nextCursorstring | nullYesmax length 8192.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/element-collections" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

POST /element-collections

Create an Element collection

  • Operation id: createElementCollection
  • Scopes: Requires element:write.
  • CLI equivalent: gavana element collection-create

Request body (application/json, required)

FieldTypeRequiredNotes
namestringYesmin length 1, max length 120.

Responses

StatusPayloadMeaning
201ElementCollectionMutationResponseThe created collection.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

201 response body

FieldTypeRequiredNotes
(variant 1).collectionElementCollectionYes—
(variant 1).collection.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.
(variant 1).collection.namestringYesmin length 1, max length 120.
(variant 1).collection.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.createdAtstring (date-time)Yes—
(variant 1).collection.updatedAtstring (date-time)Yes—
(variant 1).collection.schemaVersion1Yes—
(variant 2).idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 2).handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.

Example

curl -X POST "https://app.gavana.ai/api/canvas-agent/v1/element-collections" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "<name>" }'

PATCH /element-collections/{collectionId}

Rename an Element collection

  • Operation id: renameElementCollection
  • Scopes: Requires element:write.
  • CLI equivalent: gavana element collection-rename

Parameters

ParameterInTypeRequiredNotes
collectionIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

FieldTypeRequiredNotes
namestringYesmin length 1, max length 120.

Responses

StatusPayloadMeaning
200ElementCollectionMutationResponseThe renamed collection.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
(variant 1).collectionElementCollectionYes—
(variant 1).collection.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.
(variant 1).collection.namestringYesmin length 1, max length 120.
(variant 1).collection.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.createdAtstring (date-time)Yes—
(variant 1).collection.updatedAtstring (date-time)Yes—
(variant 1).collection.schemaVersion1Yes—
(variant 2).idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 2).handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.

Example

curl -X PATCH "https://app.gavana.ai/api/canvas-agent/v1/element-collections/%3CcollectionId%3E" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "<name>" }'

DELETE /element-collections/{collectionId}

Delete an Element collection after confirmation

Deletes only the organizational collection. Its Assets and Elements remain. The caller must obtain explicit user confirmation first.

  • Operation id: deleteElementCollection
  • Scopes: Requires element:write.
  • CLI equivalent: gavana element collection-delete

Parameters

ParameterInTypeRequiredNotes
collectionIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

Responses

StatusPayloadMeaning
200ElementCollectionMutationResponseThe deleted collection id and handle.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
(variant 1).collectionElementCollectionYes—
(variant 1).collection.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.
(variant 1).collection.namestringYesmin length 1, max length 120.
(variant 1).collection.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 1).collection.createdAtstring (date-time)Yes—
(variant 1).collection.updatedAtstring (date-time)Yes—
(variant 1).collection.schemaVersion1Yes—
(variant 2).idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(variant 2).handlestringYesPattern ^element-collection:[A-Za-z0-9_-]{1,160}$.

Example

curl -X DELETE "https://app.gavana.ai/api/canvas-agent/v1/element-collections/%3CcollectionId%3E" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "confirm": true }'

Errors

Every failure uses the shared error envelope described in Errors and X-Request-ID. The response always carries X-Request-ID; share that value with support instead of the request payload.

Last updated on