GenuineAIGenuineAI
For usersFor developers
  • Overview
  • Guides
  • How-to
  • API reference
Documentation
  • Quickstart
  • Authentication
  • Errors
  • Rate limits
  • API reference
Platform
  • Platform overview
  • Solutions
  • Pricing
  • Sign in
Company
  • Status
  • Trust Center
  • Contact
  • Terms of Service
  • Privacy Policy

© 2026 GenuineAI Ventures LLC

support@genuinehq.com
Overview
Core
Media library
AI
Documents
Knowledge
    Knowledge bases
    Knowledge base records
    Knowledge base schemas
    Objects
      List objectsgetCreate an objectpostGet an objectgetDelete an objectdeleteUpdate an objectpatchList relationsgetCreate a relationpostDelete a relationdeleteChange object statespostUpsert by keypost
    Object taxonomies
    Object schemas
    Object lifecycle flows
    Object sources
Creative
Website & content
Automation
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Objects

The workspace's own records — products, venues, courses, equipment. Their attributes come from a form rather than from fixed columns, and they link to each other, to files and to classification nodes.


List objects

GET
https://api.genuineai.app/api/v1
/objects

Beta — this operation may change on 30 days notice. See versioning.

Filter by kind with obj_type, by business key with obj_key, by attribute with obj_content, and by classification with taxonomy — one node id, or several comma-separated to match only objects filed under every one of them. q searches names and business keys.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

List objects › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
limit
​integer
obj_active
​boolean
​object · style: deepObject · explode: true
obj_created
​array
obj_form
​string · uuid
obj_id
​string · uuid
obj_key
​string
obj_name
​string
obj_state_item
​string · uuid
obj_type
​string
obj_updated
​array
offset
​integer · min: 0
q
​string
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$
taxonomy
​string

List objects › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

List objects › Responses

Success

​BusinessObject[] · required
has_more
​boolean · required

Whether more rows exist past this page.

next_cursor
​string | null · required

Pass back as cursor for the next page. Null on the last page.

GET/objects
curl https://api.genuineai.app/api/v1/objects \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "obj_id": "00000000-0000-0000-0000-000000000000", "obj_active": true, "obj_created": "2024-08-25T15:00:00Z", "obj_updated": "2024-08-25T15:00:00Z", "obj_created_by": "obj_created_by", "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "obj_form", "obj_content": {}, "obj_state_item": "obj_state_item", "obj_repo": "obj_repo", "obj_metadata": {} } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Create an object

POST
https://api.genuineai.app/api/v1
/objects

Beta — this operation may change on 30 days notice. See versioning.

obj_content is checked against the form obj_form names, so an attribute the form does not declare is refused rather than stored. Leave obj_form out and the schema declaring this obj_type is used — you need not know its id. A kind with no schema behind it is accepted as sent.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Create an object › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Create an object › Request Body

obj_type
​string · minLength: 1 · maxLength: 64 · required
obj_name
​string · minLength: 1 · maxLength: 500 · required
obj_key
​string · maxLength: 200
obj_form
​string · uuid
obj_content
​object
obj_state_item
​string · uuid
obj_repo
​object
obj_metadata
​object
obj_acl
​object

Create an object › Responses

Created

A record the workspace keeps about a thing — a product, a venue, a course. Its attributes are defined by the form `obj_form` names, not by fixed columns.
BusinessObject
obj_id
​string · uuid
obj_active
​boolean
obj_created
​string · date-time
obj_updated
​string · date-time
obj_created_by
​string
obj_type
​string
obj_key
​string
obj_name
​string
obj_form
​string
obj_content
​object
obj_state_item
​string
obj_repo
​string
obj_metadata
​object
POST/objects
curl https://api.genuineai.app/api/v1/objects \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "obj_type": "obj_type", "obj_name": "obj_name", "obj_key": "obj_key", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {}, "obj_acl": {} }'
Example Request Body
{ "obj_type": "obj_type", "obj_name": "obj_name", "obj_key": "obj_key", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {}, "obj_acl": {} }
json
Example Responses
{ "obj_id": "00000000-0000-0000-0000-000000000000", "obj_active": true, "obj_created": "2024-08-25T15:00:00Z", "obj_updated": "2024-08-25T15:00:00Z", "obj_created_by": "obj_created_by", "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "obj_form", "obj_content": {}, "obj_state_item": "obj_state_item", "obj_repo": "obj_repo", "obj_metadata": {} }
json
application/json

Get an object

GET
https://api.genuineai.app/api/v1
/objects/{id}

Beta — this operation may change on 30 days notice. See versioning.

Returns the object with its attributes and every relation it takes part in, in both directions.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Get an object › path Parameters

id
​string · uuid · required

Get an object › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Get an object › Responses

Success

A record the workspace keeps about a thing — a product, a venue, a course. Its attributes are defined by the form `obj_form` names, not by fixed columns.
obj_id
​string · uuid
obj_active
​boolean
obj_created
​string · date-time
obj_updated
​string · date-time
obj_created_by
​string
obj_type
​string
obj_key
​string
obj_name
​string
obj_form
​string
obj_content
​object
obj_state_item
​string
obj_repo
​string
obj_metadata
​object
​ObjectRelation[]
GET/objects/{id}
curl https://api.genuineai.app/api/v1/objects/:id \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "obj_id": "00000000-0000-0000-0000-000000000000", "obj_active": true, "obj_created": "2024-08-25T15:00:00Z", "obj_updated": "2024-08-25T15:00:00Z", "obj_created_by": "obj_created_by", "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "obj_form", "obj_content": {}, "obj_state_item": "obj_state_item", "obj_repo": "obj_repo", "obj_metadata": {}, "relations": [ { "rel_id": "00000000-0000-0000-0000-000000000000", "rel_active": true, "rel_created": "2024-08-25T15:00:00Z", "rel_created_by": "rel_created_by", "rel_type": "rel_type", "rel_from": "rel_from", "rel_from_type": "rel_from_type", "rel_to": "rel_to", "rel_to_type": "rel_to_type", "rel_metadata": {} } ] }
json
application/json

Delete an object

DELETE
https://api.genuineai.app/api/v1
/objects/{id}

Beta — this operation may change on 30 days notice. See versioning.

Deactivates the object and drops every relation it took part in. Its business key becomes free for a new record to use.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Delete an object › path Parameters

id
​string · uuid · required

Delete an object › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Delete an object › Responses

Success. No content.

No data returned
DELETE/objects/{id}
curl https://api.genuineai.app/api/v1/objects/:id \ --request DELETE \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Update an object

PATCH
https://api.genuineai.app/api/v1
/objects/{id}

Beta — this operation may change on 30 days notice. See versioning.

Applies the obj_-prefixed fields present in the body. obj_content replaces the stored attributes whole rather than merging into them.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Update an object › path Parameters

id
​string · uuid · required

Update an object › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Update an object › Request Body optional

obj_type
​string · minLength: 1 · maxLength: 64
obj_name
​string · minLength: 1 · maxLength: 500
obj_key
​string · maxLength: 200
obj_form
​string · uuid
obj_content
​object
obj_state_item
​string · uuid
obj_repo
​object
obj_metadata
​object
obj_acl
​object

Update an object › Responses

Success

A record the workspace keeps about a thing — a product, a venue, a course. Its attributes are defined by the form `obj_form` names, not by fixed columns.
BusinessObject
obj_id
​string · uuid
obj_active
​boolean
obj_created
​string · date-time
obj_updated
​string · date-time
obj_created_by
​string
obj_type
​string
obj_key
​string
obj_name
​string
obj_form
​string
obj_content
​object
obj_state_item
​string
obj_repo
​string
obj_metadata
​object
PATCH/objects/{id}
curl https://api.genuineai.app/api/v1/objects/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "obj_type": "obj_type", "obj_name": "obj_name", "obj_key": "obj_key", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {}, "obj_acl": {} }'
Example Request Body
{ "obj_type": "obj_type", "obj_name": "obj_name", "obj_key": "obj_key", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {}, "obj_acl": {} }
json
Example Responses
{ "obj_id": "00000000-0000-0000-0000-000000000000", "obj_active": true, "obj_created": "2024-08-25T15:00:00Z", "obj_updated": "2024-08-25T15:00:00Z", "obj_created_by": "obj_created_by", "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "obj_form", "obj_content": {}, "obj_state_item": "obj_state_item", "obj_repo": "obj_repo", "obj_metadata": {} }
json
application/json

List relations

GET
https://api.genuineai.app/api/v1
/objects/{id}/relations

Beta — this operation may change on 30 days notice. See versioning.

The edges this object takes part in, oldest first. direction narrows to the ones leading out of it or into it; by default you get both.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

List relations › path Parameters

id
​string · uuid · required

List relations › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
direction
​string · enum
Enum values:
from
to
both
limit
​integer
offset
​integer · min: 0
rel_type
​string
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List relations › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

List relations › Responses

Success

​ObjectRelation[] · required
has_more
​boolean · required

Whether more rows exist past this page.

next_cursor
​string | null · required

Pass back as cursor for the next page. Null on the last page.

GET/objects/{id}/relations
curl https://api.genuineai.app/api/v1/objects/:id/relations \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "rel_id": "00000000-0000-0000-0000-000000000000", "rel_active": true, "rel_created": "2024-08-25T15:00:00Z", "rel_created_by": "rel_created_by", "rel_type": "rel_type", "rel_from": "rel_from", "rel_from_type": "rel_from_type", "rel_to": "rel_to", "rel_to_type": "rel_to_type", "rel_metadata": {} } ], "has_more": true, "next_cursor": "next_cursor" }
json
application/json

Create a relation

POST
https://api.genuineai.app/api/v1
/objects/{id}/relations

Beta — this operation may change on 30 days notice. See versioning.

Links this object to something else — another object, a file, or a taxonomy node with classified-as. rel_type is your own vocabulary, not a fixed list. Asserting an edge that already exists updates its metadata instead of failing.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Create a relation › path Parameters

id
​string · uuid · required

Create a relation › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Create a relation › Request Body

rel_type
​string · minLength: 1 · maxLength: 64 · required
rel_to
​string · uuid · required
rel_to_type
​string · minLength: 1 · maxLength: 32 · required
rel_metadata
​object

Create a relation › Responses

Success

A typed, directional link between two things — one object and another, a file and an object, or an object and a classification node.
ObjectRelation
rel_id
​string · uuid
rel_active
​boolean
rel_created
​string · date-time
rel_created_by
​string
rel_type
​string
rel_from
​string
rel_from_type
​string
rel_to
​string
rel_to_type
​string
rel_metadata
​object
POST/objects/{id}/relations
curl https://api.genuineai.app/api/v1/objects/:id/relations \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "rel_type": "rel_type", "rel_to": "00000000-0000-0000-0000-000000000000", "rel_to_type": "rel_to_type", "rel_metadata": {} }'
Example Request Body
{ "rel_type": "rel_type", "rel_to": "00000000-0000-0000-0000-000000000000", "rel_to_type": "rel_to_type", "rel_metadata": {} }
json
Example Responses
{ "rel_id": "00000000-0000-0000-0000-000000000000", "rel_active": true, "rel_created": "2024-08-25T15:00:00Z", "rel_created_by": "rel_created_by", "rel_type": "rel_type", "rel_from": "rel_from", "rel_from_type": "rel_from_type", "rel_to": "rel_to", "rel_to_type": "rel_to_type", "rel_metadata": {} }
json
application/json

Delete a relation

DELETE
https://api.genuineai.app/api/v1
/objects/{id}/relations/{relation_id}

Beta — this operation may change on 30 days notice. See versioning.

Removes the link. Neither end is otherwise affected.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Delete a relation › path Parameters

id
​string · uuid · required
relation_id
​string · uuid · required

Delete a relation › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Delete a relation › Responses

Success

No data returned
DELETE/objects/{id}/relations/{relation_id}
curl https://api.genuineai.app/api/v1/objects/:id/relations/:relation_id \ --request DELETE \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>'
Example Responses
No example specified for this content type

Change object states

POST
https://api.genuineai.app/api/v1
/objects/actions/transition

Beta — this operation may change on 30 days notice. See versioning.

Moves objects to another state in the flow that governs them. A move the flow does not allow is refused rather than forced.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Change object states › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Change object states › Request Body

obj_ids
​string[] · required
target_state_id
​string · uuid · required

Change object states › Responses

Success

No data returned
POST/objects/actions/transition
curl https://api.genuineai.app/api/v1/objects/actions/transition \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "obj_ids": [ "00000000-0000-0000-0000-000000000000" ], "target_state_id": "00000000-0000-0000-0000-000000000000" }'
Example Request Body
{ "obj_ids": [ "00000000-0000-0000-0000-000000000000" ], "target_state_id": "00000000-0000-0000-0000-000000000000" }
json
Example Responses
No example specified for this content type

Upsert by key

POST
https://api.genuineai.app/api/v1
/objects/actions/upsert

Beta — this operation may change on 30 days notice. See versioning.

Creates or updates the object with this obj_type and obj_key, so an upstream system can send the same record repeatedly without producing duplicates. obj_content is validated against the schema declaring this obj_type, so a caller needs only its own vocabulary and never an id of ours. Answers 201 when it created one and 200 when it updated one.

Requires the module-objects license feature. Without it the request is refused with 403 license_required — see plans and modules.

Upsert by key › Headers

X-Tenant-Id
​string · uuid · required

The workspace this request acts in. Every row the API returns is isolated to it at the database layer by row-level security.

Upsert by key › Request Body

obj_type
​string · minLength: 1 · maxLength: 64 · required
obj_key
​string · minLength: 1 · maxLength: 200 · required
obj_name
​string · minLength: 1 · maxLength: 500
obj_form
​string · uuid
obj_content
​object
obj_state_item
​string · uuid
obj_repo
​object
obj_metadata
​object

Upsert by key › Responses

Success

A record the workspace keeps about a thing — a product, a venue, a course. Its attributes are defined by the form `obj_form` names, not by fixed columns.
BusinessObject
obj_id
​string · uuid
obj_active
​boolean
obj_created
​string · date-time
obj_updated
​string · date-time
obj_created_by
​string
obj_type
​string
obj_key
​string
obj_name
​string
obj_form
​string
obj_content
​object
obj_state_item
​string
obj_repo
​string
obj_metadata
​object
POST/objects/actions/upsert
curl https://api.genuineai.app/api/v1/objects/actions/upsert \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {} }'
Example Request Body
{ "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "00000000-0000-0000-0000-000000000000", "obj_content": {}, "obj_state_item": "00000000-0000-0000-0000-000000000000", "obj_repo": {}, "obj_metadata": {} }
json
Example Responses
{ "obj_id": "00000000-0000-0000-0000-000000000000", "obj_active": true, "obj_created": "2024-08-25T15:00:00Z", "obj_updated": "2024-08-25T15:00:00Z", "obj_created_by": "obj_created_by", "obj_type": "obj_type", "obj_key": "obj_key", "obj_name": "obj_name", "obj_form": "obj_form", "obj_content": {}, "obj_state_item": "obj_state_item", "obj_repo": "obj_repo", "obj_metadata": {} }
json
application/json

Knowledge base schemasObject taxonomies