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
Creative
    Designs
      List designsgetCreate a designpostGet a designgetDelete a designdeleteUpdate a designpatchGet who has accessgetSet who has accessputFill fields with AIpostApply the brand kitpostCreate designs from rowspostSet categoriesputCreate from a templatepostDuplicate a designpostExport a designpostExport to the librarypostExtract layerspostList fillable fieldsgetList design filesgetFill fieldspatchFill a templatepostList kit piecesgetAdd a kit piecepostDelete a kitdeleteRename a kitpatchBind a chart layerputList layersgetAdd a layerpostGet a layergetUpdate a layerputDelete a layerdeleteLock or unlockpatchPropose layers with AIpostRefresh bound datapostRender the previewpostReset fieldspostResize a designpostSave as a templatepostTranslate the textpostList size variantsgetList versionsgetSave a versionpostDelete a versiondeleteRestore a versionpostCount designsgetErase or fill an areapostGenerate a documentpostCreate from a backgroundpostGenerate an imagepostGenerate an asset kitpostPlan a documentpostImport a Figma framepostList Figma framespostRemove a backgroundpost
    Design categories
    Studio
    Infographics
    Presentations
    Presentation templates
Website & content
Automation
Customer channels
Administration
Schemas
GenuineAI API
GenuineAI API

Designs

Editable multi-layer artwork, its fillable fields and its data-bound charts.


List designs

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

Returns designs the caller may see, newest edit first. Version snapshots are never listed, and templates are excluded unless is_template=true — which narrows alongside cat and q rather than replacing them.

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

List designs › query Parameters

cat
​string
de_type
​string
is_template
​boolean
limit
​integer · min: 1 · max: 1000
offset
​integer · min: 0
q
​string · maxLength: 200

List designs › 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 designs › Responses

Success

​Design[]
Editable multi-layer artwork: the canvas its layers sit on, and the preview rendered from them.
Design
de_id
​string · uuid
de_created
​string · date-time
de_updated
​string · date-time
de_user
​string
de_name
​string
de_description
​string
de_type
​string
de_template
​string
de_categories
​string
de_canvas_width
​string
de_canvas_height
​string
de_canvas_unit
​string
de_canvas_dpi
​string
de_canvas_background
​string
de_preview_file
​string
de_export_settings
​object
de_metadata
​object
de_version
​string
preview_file
​object
GET/designs
curl https://api.genuineai.app/api/v1/designs \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
[ { "de_id": "00000000-0000-0000-0000-000000000000", "de_created": "2024-08-25T15:00:00Z", "de_updated": "2024-08-25T15:00:00Z", "de_user": "de_user", "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_template": "de_template", "de_categories": "de_categories", "de_canvas_width": "de_canvas_width", "de_canvas_height": "de_canvas_height", "de_canvas_unit": "de_canvas_unit", "de_canvas_dpi": "de_canvas_dpi", "de_canvas_background": "de_canvas_background", "de_preview_file": "de_preview_file", "de_export_settings": {}, "de_metadata": {}, "de_version": "de_version", "preview_file": {} } ]
application/json

Create a design

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

Creates an empty design of the given canvas size. To start from something, use POST /designs/{id}/copy or one of the generate endpoints.

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

Create a design › 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 design › Request Body

de_name
​string · required
de_type
​string · required
de_canvas_width
​integer · min: 1 · required
de_canvas_height
​integer · min: 1 · required
de_description
​string
de_canvas_unit
​string · enum
Enum values:
px
pt
in
mm
cm
de_canvas_dpi
​integer · min: 36 · max: 600
de_canvas_background
​object
de_metadata
​object

Create a design › Responses

Created

Editable multi-layer artwork: the canvas its layers sit on, and the preview rendered from them.
Design
de_id
​string · uuid
de_created
​string · date-time
de_updated
​string · date-time
de_user
​string
de_name
​string
de_description
​string
de_type
​string
de_template
​string
de_categories
​string
de_canvas_width
​string
de_canvas_height
​string
de_canvas_unit
​string
de_canvas_dpi
​string
de_canvas_background
​string
de_preview_file
​string
de_export_settings
​object
de_metadata
​object
de_version
​string
preview_file
​object
POST/designs
curl https://api.genuineai.app/api/v1/designs \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_canvas_width": 1, "de_canvas_height": 1, "de_canvas_unit": "px", "de_canvas_dpi": 36, "de_canvas_background": {}, "de_metadata": {} }'
Example Request Body
{
  "de_name": "de_name",
  "de_description": "de_description",
  "de_type": "de_type",
  "de_canvas_width": 1,
  "de_canvas_height": 1,
  "de_canvas_unit": "px",
  "de_canvas_dpi": 36,
  "de_canvas_background": {},
  "de_metadata": {}
}
Example Responses
{ "de_id": "00000000-0000-0000-0000-000000000000", "de_created": "2024-08-25T15:00:00Z", "de_updated": "2024-08-25T15:00:00Z", "de_user": "de_user", "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_template": "de_template", "de_categories": "de_categories", "de_canvas_width": "de_canvas_width", "de_canvas_height": "de_canvas_height", "de_canvas_unit": "de_canvas_unit", "de_canvas_dpi": "de_canvas_dpi", "de_canvas_background": "de_canvas_background", "de_preview_file": "de_preview_file", "de_export_settings": {}, "de_metadata": {}, "de_version": "de_version", "preview_file": {} }
application/json

Get a design

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

Returns the design with its canvas, its metadata and its resolved preview file. The layers on it are read through GET /designs/{id}/layers.

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

Get a design › path Parameters

id
​string · uuid · required

Get a design › 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 a design › Responses

Success

Editable multi-layer artwork: the canvas its layers sit on, and the preview rendered from them.
Design
de_id
​string · uuid
de_created
​string · date-time
de_updated
​string · date-time
de_user
​string
de_name
​string
de_description
​string
de_type
​string
de_template
​string
de_categories
​string
de_canvas_width
​string
de_canvas_height
​string
de_canvas_unit
​string
de_canvas_dpi
​string
de_canvas_background
​string
de_preview_file
​string
de_export_settings
​object
de_metadata
​object
de_version
​string
preview_file
​object
GET/designs/{id}
curl https://api.genuineai.app/api/v1/designs/:id \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
{ "de_id": "00000000-0000-0000-0000-000000000000", "de_created": "2024-08-25T15:00:00Z", "de_updated": "2024-08-25T15:00:00Z", "de_user": "de_user", "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_template": "de_template", "de_categories": "de_categories", "de_canvas_width": "de_canvas_width", "de_canvas_height": "de_canvas_height", "de_canvas_unit": "de_canvas_unit", "de_canvas_dpi": "de_canvas_dpi", "de_canvas_background": "de_canvas_background", "de_preview_file": "de_preview_file", "de_export_settings": {}, "de_metadata": {}, "de_version": "de_version", "preview_file": {} }
application/json

Delete a design

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

Deactivates the design. It stops being listed and stops being readable through the API; its versions and layers go with it.

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

Delete a design › path Parameters

id
​string · uuid · required

Delete a design › 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 design › Responses

Success. No content.

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

Update a design

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

Applies the de_-prefixed fields present in the body. This is the canvas and its metadata; the artwork itself is edited through the layer endpoints.

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

Update a design › path Parameters

id
​string · uuid · required

Update a design › 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 a design › Request Body optional

de_name
​string
de_description
​string
de_type
​string
de_canvas_width
​integer · min: 1
de_canvas_height
​integer · min: 1
de_canvas_unit
​string · enum
Enum values:
px
pt
in
mm
cm
de_canvas_dpi
​integer · min: 36 · max: 600
de_canvas_background
​object
de_export_settings
​object
de_metadata
​object

Update a design › Responses

Success

Editable multi-layer artwork: the canvas its layers sit on, and the preview rendered from them.
Design
de_id
​string · uuid
de_created
​string · date-time
de_updated
​string · date-time
de_user
​string
de_name
​string
de_description
​string
de_type
​string
de_template
​string
de_categories
​string
de_canvas_width
​string
de_canvas_height
​string
de_canvas_unit
​string
de_canvas_dpi
​string
de_canvas_background
​string
de_preview_file
​string
de_export_settings
​object
de_metadata
​object
de_version
​string
preview_file
​object
PATCH/designs/{id}
curl https://api.genuineai.app/api/v1/designs/:id \ --request PATCH \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_canvas_width": 1, "de_canvas_height": 1, "de_canvas_unit": "px", "de_canvas_dpi": 36, "de_canvas_background": {}, "de_export_settings": {}, "de_metadata": {} }'
Example Request Body
{
  "de_name": "de_name",
  "de_description": "de_description",
  "de_type": "de_type",
  "de_canvas_width": 1,
  "de_canvas_height": 1,
  "de_canvas_unit": "px",
  "de_canvas_dpi": 36,
  "de_canvas_background": {},
  "de_export_settings": {},
  "de_metadata": {}
}
Example Responses
{ "de_id": "00000000-0000-0000-0000-000000000000", "de_created": "2024-08-25T15:00:00Z", "de_updated": "2024-08-25T15:00:00Z", "de_user": "de_user", "de_name": "de_name", "de_description": "de_description", "de_type": "de_type", "de_template": "de_template", "de_categories": "de_categories", "de_canvas_width": "de_canvas_width", "de_canvas_height": "de_canvas_height", "de_canvas_unit": "de_canvas_unit", "de_canvas_dpi": "de_canvas_dpi", "de_canvas_background": "de_canvas_background", "de_preview_file": "de_preview_file", "de_export_settings": {}, "de_metadata": {}, "de_version": "de_version", "preview_file": {} }
application/json

Get who has access

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

Returns who may read and edit this design. An empty result means unrestricted — everyone in the workspace with the design permissions.

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

Get who has access › path Parameters

id
​string · uuid · required

Get who has access › 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 who has access › Responses

Success

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

Set who has access

PUT
https://api.genuineai.app/api/v1
/designs/{id}/acl

An empty object clears the restriction, making it visible to the whole workspace.

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

Set who has access › path Parameters

id
​string · uuid · required

Set who has access › 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.

Set who has access › Request Body

acl
​object · required

Set who has access › Responses

Success

No data returned
PUT/designs/{id}/acl
curl https://api.genuineai.app/api/v1/designs/:id/acl \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "acl": {}
}'
Example Request Body
{
  "acl": {}
}
Example Responses
No example specified for this content type

Fill fields with AI

POST
https://api.genuineai.app/api/v1
/designs/{id}/ai-fill

Returns proposed values for review — it does not apply them. Committing them goes through the same fill endpoint a person uses, so generated copy is held to the same field whitelist and can never alter the layout. Runs a model, so it consumes credits.

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

Fill fields with AI › path Parameters

id
​string · uuid · required

Fill fields with AI › 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.

Fill fields with AI › Request Body

brief
​string · minLength: 3 · maxLength: 4000 · required

Fill fields with AI › Responses

Success

No data returned
POST/designs/{id}/ai-fill
curl https://api.genuineai.app/api/v1/designs/:id/ai-fill \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "brief": "brief"
}'
Example Request Body
{
  "brief": "brief"
}
Example Responses
No example specified for this content type

Apply the brand kit

POST
https://api.genuineai.app/api/v1
/designs/{id}/brand-restyle

Proposes a coherent restyle — per-layer colors and fonts plus a canvas background — rather than mechanically substituting brand colors. Runs a model, so it consumes credits.

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

Apply the brand kit › path Parameters

id
​string · uuid · required

Apply the brand kit › 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.

Apply the brand kit › Request Body optional

page_id
​string
page_ids
​string[]
layer_ids
​string[]
apply
​object

Apply the brand kit › Responses

Success

No data returned
POST/designs/{id}/brand-restyle
curl https://api.genuineai.app/api/v1/designs/:id/brand-restyle \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "page_id": "page_id", "page_ids": [ "string" ], "layer_ids": [ "00000000-0000-0000-0000-000000000000" ], "apply": {} }'
Example Request Body
{
  "page_id": "page_id",
  "page_ids": [
    "string"
  ],
  "layer_ids": [
    "00000000-0000-0000-0000-000000000000"
  ],
  "apply": {}
}
Example Responses
No example specified for this content type

Create designs from rows

POST
https://api.genuineai.app/api/v1
/designs/{id}/bulk-fill

One design per row, each filled from that row's values.

Requires either design:create or design:contribute.

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

Create designs from rows › path Parameters

id
​string · uuid · required

Create designs from rows › 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 designs from rows › Request Body

​array · required
name_field
​string

Create designs from rows › Responses

Success

No data returned
POST/designs/{id}/bulk-fill
curl https://api.genuineai.app/api/v1/designs/:id/bulk-fill \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "rows": [
    {}
  ],
  "name_field": "name_field"
}'
Example Request Body
{
  "rows": [
    {}
  ],
  "name_field": "name_field"
}
Example Responses
No example specified for this content type

Set categories

PUT
https://api.genuineai.app/api/v1
/designs/{id}/categories

Replaces the design's categories. Categories are the workspace's own taxonomy, defined under /design-categories.

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

Set categories › path Parameters

id
​string · uuid · required

Set categories › 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.

Set categories › Request Body

categories
​string[] · required

Set categories › Responses

Success

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

Create from a template

POST
https://api.genuineai.app/api/v1
/designs/{id}/copy

Copies a template into a new design owned by the caller's workspace. The template is unchanged, and the copy keeps its fillable fields.

Requires either design:create or design:contribute.

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

Create from a template › path Parameters

id
​string · uuid · required

Create from a template › 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 from a template › Request Body optional

name
​string

Create from a template › Responses

Created

No data returned
POST/designs/{id}/copy
curl https://api.genuineai.app/api/v1/designs/:id/copy \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "name": "name"
}'
Example Request Body
{
  "name": "name"
}
Example Responses
No example specified for this content type

Duplicate a design

POST
https://api.genuineai.app/api/v1
/designs/{id}/duplicate

Copies the design, its layers and its filing into an independent design named " (Copy)" unless a name is given. The original is unchanged.

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

Duplicate a design › path Parameters

id
​string · uuid · required

Duplicate a design › 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.

Duplicate a design › Request Body optional

name
​string

Duplicate a design › Responses

Created

No data returned
POST/designs/{id}/duplicate
curl https://api.genuineai.app/api/v1/designs/:id/duplicate \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "name": "name"
}'
Example Request Body
{
  "name": "name"
}
Example Responses
No example specified for this content type

Export a design

POST
https://api.genuineai.app/api/v1
/designs/{id}/export

Renders it to a downloadable file in the requested format and size.

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

Export a design › path Parameters

id
​string · uuid · required

Export a design › 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.

Export a design › Request Body

format
​string · enum · required
Enum values:
png
jpg
svg
pdf
quality
​number · min: 0 · max: 1
transparent
​boolean
dpi
​integer · min: 36 · max: 600
scale
​number · min: 0.05 · max: 20
page_id
​string
pages
​string · enum
Enum values:
current
all

Export a design › Responses

Success

No data returned
POST/designs/{id}/export
curl https://api.genuineai.app/api/v1/designs/:id/export \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "format": "png", "quality": 0, "transparent": true, "dpi": 36, "scale": 0.05, "page_id": "page_id", "pages": "current" }'
Example Request Body
{
  "format": "png",
  "quality": 0,
  "transparent": true,
  "dpi": 36,
  "scale": 0.05,
  "page_id": "page_id",
  "pages": "current"
}
Example Responses
No example specified for this content type

Export to the library

POST
https://api.genuineai.app/api/v1
/designs/{id}/export-to-media

The same render, filed as a library file rather than returned for download.

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

Export to the library › path Parameters

id
​string · uuid · required

Export to the library › 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.

Export to the library › Request Body optional

page_id
​string

Export to the library › Responses

Success

No data returned
POST/designs/{id}/export-to-media
curl https://api.genuineai.app/api/v1/designs/:id/export-to-media \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "page_id": "page_id"
}'
Example Request Body
{
  "page_id": "page_id"
}
Example Responses
No example specified for this content type

Extract layers

POST
https://api.genuineai.app/api/v1
/designs/{id}/extract-layers

Reverse-engineers a flat image into text blocks with their formatting, graphic overlays and picture regions — the way to get an existing artwork into an editable state. Runs a model.

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

Extract layers › path Parameters

id
​string · uuid · required

Extract layers › 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.

Extract layers › Request Body

file_id
​string · uuid · required

Extract layers › Responses

Success

No data returned
POST/designs/{id}/extract-layers
curl https://api.genuineai.app/api/v1/designs/:id/extract-layers \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "file_id": "00000000-0000-0000-0000-000000000000"
}'
Example Request Body
{
  "file_id": "00000000-0000-0000-0000-000000000000"
}
Example Responses
No example specified for this content type

List fillable fields

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

What a template lets you change without editing its layout.

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

List fillable fields › path Parameters

id
​string · uuid · required

List fillable fields › 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 fillable fields › Responses

Success

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

List design files

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

Files belonging to this design — the assets placed on it and the previews rendered from it.

Requires any one of media:view, document:view, knowledge-base:view, thread:view, design:view, prompt:view or presentation:view.

List design files › path Parameters

id
​string · uuid · required

List design files › query Parameters

cursor
​string · maxLength: 512 · pattern: ^[A-Za-z0-9_-]+$
file_added_by
​string · uuid
file_created
​array
file_hash
​string
file_id
​string · uuid
file_name
​string
file_provider_id
​string
​object · style: deepObject · explode: true
file_status
​string
file_type
​string
file_updated
​array
limit
​integer
offset
​integer · min: 0
repo_id
​string · uuid
repo_type
​string · enum
Enum values:
media
generated
docs
ds
thread
design
prompt
ppt
sort
​string · minLength: 1 · maxLength: 64 · pattern: ^-?[a-z0-9_]+$

List design files › 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 design files › Responses

Success

​File[] · 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/designs/{id}/files
curl https://api.genuineai.app/api/v1/designs/:id/files \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
{ "data": [ { "file_repo": { "library": [ "media" ], "ds": "00000000-0000-0000-0000-000000000000", "thread": "00000000-0000-0000-0000-000000000000", "design": "00000000-0000-0000-0000-000000000000", "prompt": "00000000-0000-0000-0000-000000000000", "ppt": "00000000-0000-0000-0000-000000000000", "ppt_template": "00000000-0000-0000-0000-000000000000", "form": "00000000-0000-0000-0000-000000000000", "submission": "00000000-0000-0000-0000-000000000000", "field": "field", "infographic": "00000000-0000-0000-0000-000000000000", "sitemap": "00000000-0000-0000-0000-000000000000", "node": "00000000-0000-0000-0000-000000000000", "wf_instance": "00000000-0000-0000-0000-000000000000", "wf_name": "wf_name" }, "file_id": "00000000-0000-0000-0000-000000000000", "file_name": "file_name", "file_type": "file_type", "file_size": 0, "file_created": "2024-08-25T15:00:00Z", "file_updated": "2024-08-25T15:00:00Z", "file_metadata": {}, "file_provider_id": "00000000-0000-0000-0000-000000000000", "file_bucket": "file_bucket", "file_folder": "file_folder", "file_hash": "file_hash", "file_status": "file_status", "file_added_by": "file_added_by", "file_replicas": "file_replicas", "file_summary": "file_summary", "file_pref": {} } ], "has_more": true, "next_cursor": "next_cursor" }
application/json

Fill fields

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

Writes values into declared fields only. With apply_to_variants, a field key present in several size variants is written to all of them; with apply_to_kit, the same happens across the design's kit — one edit updates the date on the flyer, the post and the email page at once. Either way the set stays consistent, and siblings that lack a key are reported, not failed.

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

Fill fields › path Parameters

id
​string · uuid · required

Fill fields › 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.

Fill fields › Request Body

values
​object · required
apply_to_variants
​boolean
apply_to_kit
​boolean

Fill fields › Responses

Success

No data returned
PATCH/designs/{id}/fill
curl https://api.genuineai.app/api/v1/designs/:id/fill \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "values": {},
  "apply_to_variants": true,
  "apply_to_kit": true
}'
Example Request Body
{
  "values": {},
  "apply_to_variants": true,
  "apply_to_kit": true
}
Example Responses
No example specified for this content type

Fill a template

POST
https://api.genuineai.app/api/v1
/designs/{id}/generate

Spawns a design from an approved template and writes its copy from a brief or from source material — the layout, color and imagery stay exactly as the designer approved them and only the words move. This is POST /designs/generate with the layout already decided, and it is the path to prefer whenever a template fits: a brand-approved page beats a generated one. Left unnamed, the design is named from the copy that was written rather than after the template.

filled and unfilled name the fields in display terms. A field in unfilled still shows the template's placeholder text, so ask for those specifics rather than shipping the page as-is; changed counts what the write actually altered, and a changed of 0 means the design reads exactly like the template.

Requires either design:create or design:contribute.

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

Fill a template › path Parameters

id
​string · uuid · required

Fill a template › 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.

Fill a template › Request Body optional

brief
​string · maxLength: 4000
​object
name
​string

Fill a template › Responses

Created

No data returned
POST/designs/{id}/generate
curl https://api.genuineai.app/api/v1/designs/:id/generate \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "brief": "brief",
  "content": {
    "text": "text"
  },
  "name": "name"
}'
Example Request Body
{
  "brief": "brief",
  "content": {
    "text": "text"
  },
  "name": "name"
}
Example Responses
No example specified for this content type

List kit pieces

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

The sibling designs generated together by POST /designs/generate-kit, in channel order (flyer, social, story, email), the caller's own design included. designs is empty when this design is not part of a kit.

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

List kit pieces › path Parameters

id
​string · uuid · required

List kit pieces › 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 kit pieces › Responses

Success

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

Add a kit piece

POST
https://api.genuineai.app/api/v1
/designs/{id}/kit

Composes one more piece into this design's kit from the content plan stored at generation time — no model runs when the plan is present, so the new piece cannot drift from the others. output takes the same shapes as generate-kit: a channel role, {platform}, {preset} or an explicit size. A kit made before plans were stored falls back to one writing call from the stored brief.

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

Add a kit piece › path Parameters

id
​string · uuid · required

Add a kit piece › 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.

Add a kit piece › Request Body

output
​string · required
format
​object

Add a kit piece › Responses

Created

No data returned
POST/designs/{id}/kit
curl https://api.genuineai.app/api/v1/designs/:id/kit \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "output": "output",
  "format": {}
}'
Example Request Body
{
  "output": "output",
  "format": {}
}
Example Responses
No example specified for this content type

Delete a kit

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

Soft-deletes every piece of this design's kit in one call.

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

Delete a kit › path Parameters

id
​string · uuid · required

Delete a kit › 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 kit › Responses

Success

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

Rename a kit

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

Renames every piece of this design's kit to the given base name with its channel appended ("Name (Flyer)", "Name (Story)").

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

Rename a kit › path Parameters

id
​string · uuid · required

Rename a kit › 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.

Rename a kit › Request Body

name
​string · maxLength: 100 · required

Rename a kit › Responses

Success

No data returned
PATCH/designs/{id}/kit
curl https://api.genuineai.app/api/v1/designs/:id/kit \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "name": "name"
}'
Example Request Body
{
  "name": "name"
}
Example Responses
No example specified for this content type

Bind a chart layer

PUT
https://api.genuineai.app/api/v1
/designs/{id}/layer/{layer_id}/binding

Points a chart at data and pulls the current figures in. Send an empty body to unbind — the last fetched numbers stay behind as ordinary editable values.

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

Bind a chart layer › path Parameters

id
​string · uuid · required
layer_id
​string · uuid · required

Bind a chart layer › 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.

Bind a chart layer › Request Body optional

binding
​object

Bind a chart layer › Responses

Success

No data returned
PUT/designs/{id}/layer/{layer_id}/binding
curl https://api.genuineai.app/api/v1/designs/:id/layer/:layer_id/binding \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "binding": {}
}'
Example Request Body
{
  "binding": {}
}
Example Responses
No example specified for this content type

List layers

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

Returns every layer on the design in stacking order, lowest first.

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

List layers › path Parameters

id
​string · uuid · required

List layers › query Parameters

limit
​integer · min: 1 · max: 1000

List layers › 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 layers › Responses

Success

​DesignLayer[]
One element on a design's canvas — text, an image, a shape or a group — with where it sits and how it looks.
DesignLayer
dl_id
​string · uuid
dl_created
​string · date-time
dl_updated
​string · date-time
dl_parent
​string
dl_name
​string
dl_type
​string
dl_order
​integer
dl_locked
​boolean
dl_visible
​boolean
dl_opacity
​string
dl_position
​string
dl_size
​integer
dl_rotation
​string
dl_scale
​string
dl_flip
​string
dl_content
​object
dl_style
​string
dl_constraints
​string
dl_metadata
​object
GET/designs/{id}/layers
curl https://api.genuineai.app/api/v1/designs/:id/layers \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
[ { "dl_id": "00000000-0000-0000-0000-000000000000", "dl_created": "2024-08-25T15:00:00Z", "dl_updated": "2024-08-25T15:00:00Z", "dl_parent": "dl_parent", "dl_name": "dl_name", "dl_type": "dl_type", "dl_order": 0, "dl_locked": true, "dl_visible": true, "dl_opacity": "dl_opacity", "dl_position": "dl_position", "dl_size": 0, "dl_rotation": "dl_rotation", "dl_scale": "dl_scale", "dl_flip": "dl_flip", "dl_content": {}, "dl_style": "dl_style", "dl_constraints": "dl_constraints", "dl_metadata": {} } ]
application/json

Add a layer

POST
https://api.genuineai.app/api/v1
/designs/{id}/layers

Adds a layer to the design. dl_order decides what it sits above; omit it and the layer goes on top.

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

Add a layer › path Parameters

id
​string · uuid · required

Add a layer › 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.

Add a layer › Request Body

dl_name
​string · required
dl_type
​string · enum · required
Enum values:
text
image
shape
path
chart
group
video
frame
dl_order
​integer · min: 0 · required
dl_position
​object · required
dl_size
​object · required
dl_content
​object · required
dl_style
​object

Add a layer › Responses

Created

One element on a design's canvas — text, an image, a shape or a group — with where it sits and how it looks.
DesignLayer
dl_id
​string · uuid
dl_created
​string · date-time
dl_updated
​string · date-time
dl_parent
​string
dl_name
​string
dl_type
​string
dl_order
​integer
dl_locked
​boolean
dl_visible
​boolean
dl_opacity
​string
dl_position
​string
dl_size
​integer
dl_rotation
​string
dl_scale
​string
dl_flip
​string
dl_content
​object
dl_style
​string
dl_constraints
​string
dl_metadata
​object
POST/designs/{id}/layers
curl https://api.genuineai.app/api/v1/designs/:id/layers \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "dl_name": "dl_name", "dl_type": "text", "dl_order": 0, "dl_position": {}, "dl_size": {}, "dl_content": {}, "dl_style": {} }'
Example Request Body
{
  "dl_name": "dl_name",
  "dl_type": "text",
  "dl_order": 0,
  "dl_position": {},
  "dl_size": {},
  "dl_content": {},
  "dl_style": {}
}
Example Responses
{ "dl_id": "00000000-0000-0000-0000-000000000000", "dl_created": "2024-08-25T15:00:00Z", "dl_updated": "2024-08-25T15:00:00Z", "dl_parent": "dl_parent", "dl_name": "dl_name", "dl_type": "dl_type", "dl_order": 0, "dl_locked": true, "dl_visible": true, "dl_opacity": "dl_opacity", "dl_position": "dl_position", "dl_size": 0, "dl_rotation": "dl_rotation", "dl_scale": "dl_scale", "dl_flip": "dl_flip", "dl_content": {}, "dl_style": "dl_style", "dl_constraints": "dl_constraints", "dl_metadata": {} }
application/json

Get a layer

GET
https://api.genuineai.app/api/v1
/designs/{id}/layers/{layer_id}

Returns one layer with its position, its transform and its type-specific content.

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

Get a layer › path Parameters

id
​string · uuid · required
layer_id
​string · uuid · required

Get a layer › 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 a layer › Responses

Success

One element on a design's canvas — text, an image, a shape or a group — with where it sits and how it looks.
DesignLayer
dl_id
​string · uuid
dl_created
​string · date-time
dl_updated
​string · date-time
dl_parent
​string
dl_name
​string
dl_type
​string
dl_order
​integer
dl_locked
​boolean
dl_visible
​boolean
dl_opacity
​string
dl_position
​string
dl_size
​integer
dl_rotation
​string
dl_scale
​string
dl_flip
​string
dl_content
​object
dl_style
​string
dl_constraints
​string
dl_metadata
​object
GET/designs/{id}/layers/{layer_id}
curl https://api.genuineai.app/api/v1/designs/:id/layers/:layer_id \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
{ "dl_id": "00000000-0000-0000-0000-000000000000", "dl_created": "2024-08-25T15:00:00Z", "dl_updated": "2024-08-25T15:00:00Z", "dl_parent": "dl_parent", "dl_name": "dl_name", "dl_type": "dl_type", "dl_order": 0, "dl_locked": true, "dl_visible": true, "dl_opacity": "dl_opacity", "dl_position": "dl_position", "dl_size": 0, "dl_rotation": "dl_rotation", "dl_scale": "dl_scale", "dl_flip": "dl_flip", "dl_content": {}, "dl_style": "dl_style", "dl_constraints": "dl_constraints", "dl_metadata": {} }
application/json

Update a layer

PUT
https://api.genuineai.app/api/v1
/designs/{id}/layers/{layer_id}

Replaces the layer. This is a PUT: fields absent from the body are reset to their defaults, which is what the editor's autosave sends.

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

Update a layer › path Parameters

id
​string · uuid · required
layer_id
​string · uuid · required

Update a layer › 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 a layer › Request Body optional

dl_active
​boolean

Update a layer › Responses

Success

One element on a design's canvas — text, an image, a shape or a group — with where it sits and how it looks.
DesignLayer
dl_id
​string · uuid
dl_created
​string · date-time
dl_updated
​string · date-time
dl_parent
​string
dl_name
​string
dl_type
​string
dl_order
​integer
dl_locked
​boolean
dl_visible
​boolean
dl_opacity
​string
dl_position
​string
dl_size
​integer
dl_rotation
​string
dl_scale
​string
dl_flip
​string
dl_content
​object
dl_style
​string
dl_constraints
​string
dl_metadata
​object
PUT/designs/{id}/layers/{layer_id}
curl https://api.genuineai.app/api/v1/designs/:id/layers/:layer_id \
  --request PUT \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "dl_active": true
}'
Example Request Body
{
  "dl_active": true
}
Example Responses
{ "dl_id": "00000000-0000-0000-0000-000000000000", "dl_created": "2024-08-25T15:00:00Z", "dl_updated": "2024-08-25T15:00:00Z", "dl_parent": "dl_parent", "dl_name": "dl_name", "dl_type": "dl_type", "dl_order": 0, "dl_locked": true, "dl_visible": true, "dl_opacity": "dl_opacity", "dl_position": "dl_position", "dl_size": 0, "dl_rotation": "dl_rotation", "dl_scale": "dl_scale", "dl_flip": "dl_flip", "dl_content": {}, "dl_style": "dl_style", "dl_constraints": "dl_constraints", "dl_metadata": {} }
application/json

Delete a layer

DELETE
https://api.genuineai.app/api/v1
/designs/{id}/layers/{layer_id}

Removes the layer from the design.

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

Delete a layer › path Parameters

id
​string · uuid · required
layer_id
​string · uuid · required

Delete a layer › 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 layer › Responses

Success. No content.

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

Lock or unlock

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

A locked design has its layout frozen: only declared fields can change, for everyone including its author. This is what makes an approved template stay approved.

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

Lock or unlock › path Parameters

id
​string · uuid · required

Lock or unlock › 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.

Lock or unlock › Request Body

locked
​boolean · required

Lock or unlock › Responses

Success

No data returned
PATCH/designs/{id}/lock
curl https://api.genuineai.app/api/v1/designs/:id/lock \
  --request PATCH \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "locked": true
}'
Example Request Body
{
  "locked": true
}
Example Responses
No example specified for this content type

Propose layers with AI

POST
https://api.genuineai.app/api/v1
/designs/{id}/propose-layers

Suggests layers for the design. Proposals are returned, not saved — the editor adds them as drafts you can accept or discard. Runs a model, so it consumes credits.

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

Propose layers with AI › path Parameters

id
​string · uuid · required

Propose layers with AI › 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.

Propose layers with AI › Request Body

mode
​string · enum · required
Enum values:
text
overlay
instructions
​string
page_id
​string

Propose layers with AI › Responses

Success

No data returned
POST/designs/{id}/propose-layers
curl https://api.genuineai.app/api/v1/designs/:id/propose-layers \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "mode": "text",
  "instructions": "instructions",
  "page_id": "page_id"
}'
Example Request Body
{
  "mode": "text",
  "instructions": "instructions",
  "page_id": "page_id"
}
Example Responses
No example specified for this content type

Refresh bound data

POST
https://api.genuineai.app/api/v1
/designs/{id}/refresh-data

Fetches current figures for every bound chart and writes them back. No model is involved — a binding records where the numbers come from, so this is a read and an update, and it costs no credits.

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

Refresh bound data › path Parameters

id
​string · uuid · required

Refresh bound data › 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.

Refresh bound data › Responses

Success

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

Render the preview

POST
https://api.genuineai.app/api/v1
/designs/{id}/render-preview

Refreshes the thumbnail shown in listings.

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

Render the preview › path Parameters

id
​string · uuid · required

Render the preview › 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.

Render the preview › Responses

Success

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

Reset fields

POST
https://api.genuineai.app/api/v1
/designs/{id}/reset-fill

Clears every filled field, returning the design to the template's own copy and imagery.

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

Reset fields › path Parameters

id
​string · uuid · required

Reset fields › 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.

Reset fields › Request Body optional

​array

Reset fields › Responses

Success

No data returned
POST/designs/{id}/reset-fill
curl https://api.genuineai.app/api/v1/designs/:id/reset-fill \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "keys": [
    {}
  ]
}'
Example Request Body
{
  "keys": [
    {}
  ]
}
Example Responses
No example specified for this content type

Resize a design

POST
https://api.genuineai.app/api/v1
/designs/{id}/resize

Re-lays the design out at a new size rather than scaling a picture of it.

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

Resize a design › path Parameters

id
​string · uuid · required

Resize a design › 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.

Resize a design › Request Body optional

platform
​string
preset
​string · enum
Enum values:
US Letter
US Legal
Tabloid
A3
A4
A5
Business Card
Postcard
landscape
​boolean
width
​integer · min: 1
height
​integer · min: 1

Resize a design › Responses

Success

No data returned
POST/designs/{id}/resize
curl https://api.genuineai.app/api/v1/designs/:id/resize \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "platform": "platform",
  "preset": "US Letter",
  "landscape": true,
  "width": 1,
  "height": 1
}'
Example Request Body
{
  "platform": "platform",
  "preset": "US Letter",
  "landscape": true,
  "width": 1,
  "height": 1
}
Example Responses
No example specified for this content type

Save as a template

POST
https://api.genuineai.app/api/v1
/designs/{id}/save-as-template

Copies the design into a template others can start from. The original is unchanged.

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

Save as a template › path Parameters

id
​string · uuid · required

Save as a template › 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.

Save as a template › Request Body optional

name
​string

Save as a template › Responses

Success

No data returned
POST/designs/{id}/save-as-template
curl https://api.genuineai.app/api/v1/designs/:id/save-as-template \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "name": "name"
}'
Example Request Body
{
  "name": "name"
}
Example Responses
No example specified for this content type

Translate the text

POST
https://api.genuineai.app/api/v1
/designs/{id}/translate

Translates the copy while keeping tone and roughly the same length, so the text still fits its boxes. Runs a model, so it consumes credits.

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

Translate the text › path Parameters

id
​string · uuid · required

Translate the text › 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.

Translate the text › Request Body

language
​string · minLength: 2 · maxLength: 60 · required
​object[] · required

Translate the text › Responses

Success

No data returned
POST/designs/{id}/translate
curl https://api.genuineai.app/api/v1/designs/:id/translate \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "language": "language", "texts": [ { "id": "id", "value": "value" } ] }'
Example Request Body
{
  "language": "language",
  "texts": [
    {
      "id": "id",
      "value": "value"
    }
  ]
}
Example Responses
No example specified for this content type

List size variants

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

Returns the other sizes this design has been resized into, which are separate designs that remember where they came from.

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

List size variants › path Parameters

id
​string · uuid · required

List size variants › 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 size variants › Responses

Success

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

List versions

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

Returns the design's saved snapshots, newest first, with a preview and a layer count for each.

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

List versions › path Parameters

id
​string · uuid · required

List versions › 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 versions › Responses

Success

​DesignVersion[]
One saved snapshot of a design, as the version timeline lists it.
DesignVersion
de_id
​string · uuid
de_name
​string
de_created
​string · date-time
de_version
​string
de_metadata
​object
de_canvas_width
​string
de_canvas_height
​string
de_canvas_unit
​string
de_canvas_dpi
​string
de_preview_file
​string
preview_file
​object
layer_count
​integer
GET/designs/{id}/versions
curl https://api.genuineai.app/api/v1/designs/:id/versions \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
[ { "de_id": "00000000-0000-0000-0000-000000000000", "de_name": "de_name", "de_created": "2024-08-25T15:00:00Z", "de_version": "de_version", "de_metadata": {}, "de_canvas_width": "de_canvas_width", "de_canvas_height": "de_canvas_height", "de_canvas_unit": "de_canvas_unit", "de_canvas_dpi": "de_canvas_dpi", "de_preview_file": "de_preview_file", "preview_file": {}, "layer_count": 0 } ]
application/json

Save a version

POST
https://api.genuineai.app/api/v1
/designs/{id}/versions

Takes a snapshot of the design as it stands. Snapshots are what restore restores, and they are not created automatically.

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

Save a version › path Parameters

id
​string · uuid · required

Save a version › 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.

Save a version › Request Body optional

label
​string · maxLength: 120

Save a version › Responses

Success

No data returned
POST/designs/{id}/versions
curl https://api.genuineai.app/api/v1/designs/:id/versions \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "label": "label"
}'
Example Request Body
{
  "label": "label"
}
Example Responses
No example specified for this content type

Delete a version

DELETE
https://api.genuineai.app/api/v1
/designs/{id}/versions/{version_id}

Removes one snapshot. The design itself and its other snapshots are untouched.

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

Delete a version › path Parameters

id
​string · uuid · required
version_id
​string · uuid · required

Delete a version › 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 version › Responses

Success. No content.

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

Restore a version

POST
https://api.genuineai.app/api/v1
/designs/{id}/versions/{version_id}/restore

Replaces the design's current layers with the snapshot's. Take a version first if the current state is worth keeping — restoring does not snapshot it for you.

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

Restore a version › path Parameters

id
​string · uuid · required
version_id
​string · uuid · required

Restore a version › 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.

Restore a version › Responses

Success

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

Count designs

GET
https://api.genuineai.app/api/v1
/designs/counts

How many designs and how many templates match cat and q, plus the same pair per category with cat left out. This is what a library screen needs to label its tabs and category filters without listing both sides.

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

Count designs › query Parameters

cat
​string
q
​string · maxLength: 200

Count designs › 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.

Count designs › Responses

Success

designs
​integer

Matching designs.

templates
​integer

Matching templates.

​object[]
GET/designs/counts
curl https://api.genuineai.app/api/v1/designs/counts \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>'
Example Responses
{
  "designs": 0,
  "templates": 0,
  "categories": [
    {
      "cat_id": "00000000-0000-0000-0000-000000000000",
      "designs": 0,
      "templates": 0
    }
  ]
}
application/json

Erase or fill an area

POST
https://api.genuineai.app/api/v1
/designs/edit-image

Send the region to change as a PNG mask; the model regenerates only what the mask covers. Runs a model, so it consumes credits.

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

Erase or fill an area › 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.

Erase or fill an area › Request Body

file_id
​string · uuid · required
mode
​string · enum · required
Enum values:
erase
fill
mask
​string · minLength: 64 · maxLength: 1048576 · required
prompt
​string · maxLength: 2000

Erase or fill an area › Responses

Success

No data returned
POST/designs/edit-image
curl https://api.genuineai.app/api/v1/designs/edit-image \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "file_id": "00000000-0000-0000-0000-000000000000",
  "mode": "erase",
  "mask": "maskaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "prompt": "prompt"
}'
Example Request Body
{
  "file_id": "00000000-0000-0000-0000-000000000000",
  "mode": "erase",
  "mask": "maskaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "prompt": "prompt"
}
Example Responses
No example specified for this content type

Generate a document

POST
https://api.genuineai.app/api/v1
/designs/generate

Writes a one-page document from a brief or from source material — a story, a post, an announcement — and lays it out at the requested size. Unlike generate-from-background the subject is the content: a background image is one optional ingredient, and format accepts a paper preset (US Letter, A4), a social platform, or explicit dimensions in any supported unit.

The layout comes from a fixed library of archetypes rather than from the model, so the page is set properly whatever the copy turns out to be. Every text slot is returned as a fill field, which means the result is immediately usable as a template: save it and fill it for the next story through PATCH /designs/{id}/fill or POST /designs/{id}/bulk-fill.

Where an approved template already fits, prefer POST /designs/{id}/generate — same request, but a designer's layout instead of an archetype. For a design built around a photograph rather than around its words, use POST /designs/generate-from-background.

imagery_used reports whether a supplied photo was actually placed: a page too full to hold the band composes without it rather than failing.

Pass plan to lay out a content plan you already have (from generate-plan, edited or not) and the writing step is skipped along with its cost.

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

Generate a document › 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.

Generate a document › Request Body optional

​object
brief
​string · maxLength: 4000
​object
archetype
​string · enum
Enum values:
customer_story
flyer
stat_sheet
checklist
agenda
plan
​object
​object
name
​string

Generate a document › Responses

Created

No data returned
POST/designs/generate
curl https://api.genuineai.app/api/v1/designs/generate \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "format": { "preset": "US Letter", "platform": "Instagram", "landscape": true, "width": 0.01, "height": 0.01, "unit": "px" }, "brief": "brief", "content": { "text": "text" }, "archetype": "customer_story", "plan": {}, "imagery": { "mode": "none", "file_id": "00000000-0000-0000-0000-000000000000" }, "name": "name" }'
Example Request Body
{ "format": { "preset": "US Letter", "platform": "Instagram", "landscape": true, "width": 0.01, "height": 0.01, "unit": "px" }, "brief": "brief", "content": { "text": "text" }, "archetype": "customer_story", "plan": {}, "imagery": { "mode": "none", "file_id": "00000000-0000-0000-0000-000000000000" }, "name": "name" }
Example Responses
No example specified for this content type

Create from a background

POST
https://api.genuineai.app/api/v1
/designs/generate-from-background

Builds a design around a photograph: the image becomes a full-bleed background, and a brand overlay, the logo and the on-image copy are placed onto it. Always a social-platform size.

Choose by the subject. A photograph the design is built on belongs here; words the design is built from belong in POST /designs/generate, which takes any canvas size including paper, treats imagery as optional, and returns an editable page rather than a composed picture. Neither substitutes for the other.

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

Create from a background › 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 from a background › Request Body

file_id
​string · uuid · required
platform
​string
instructions
​string
background_is_clean
​boolean
caption
​string
thread_id
​string · uuid

Create from a background › Responses

Success

No data returned
POST/designs/generate-from-background
curl https://api.genuineai.app/api/v1/designs/generate-from-background \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "file_id": "00000000-0000-0000-0000-000000000000",
  "platform": "platform",
  "instructions": "instructions",
  "background_is_clean": true,
  "caption": "caption",
  "thread_id": "00000000-0000-0000-0000-000000000000"
}'
Example Request Body
{
  "file_id": "00000000-0000-0000-0000-000000000000",
  "platform": "platform",
  "instructions": "instructions",
  "background_is_clean": true,
  "caption": "caption",
  "thread_id": "00000000-0000-0000-0000-000000000000"
}
Example Responses
No example specified for this content type

Generate an image

POST
https://api.genuineai.app/api/v1
/designs/generate-image

With transparent, the subject is generated against a backdrop that is knocked out — so it can sit over the design rather than in a box. Runs a model, so it consumes credits.

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

Generate an image › 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.

Generate an image › Request Body

prompt
​string · minLength: 3 · maxLength: 2000 · required
aspect_ratio
​string · enum
Enum values:
1:1
2:3
3:2
3:4
4:3
4:5
5:4
9:16
transparent
​boolean

Generate an image › Responses

Success

No data returned
POST/designs/generate-image
curl https://api.genuineai.app/api/v1/designs/generate-image \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "prompt": "prompt",
  "aspect_ratio": "1:1",
  "transparent": true
}'
Example Request Body
{
  "prompt": "prompt",
  "aspect_ratio": "1:1",
  "transparent": true
}
Example Responses
No example specified for this content type

Generate an asset kit

POST
https://api.genuineai.app/api/v1
/designs/generate-kit

One brief, several designs for the same occasion, each an ordinary layered design ready to edit. An outputs entry is a channel role (flyer, social, story, email) or a format of its own: {platform} for any social preset, {preset, landscape} for any paper size, or explicit {width, height, unit}. All are generated exactly as POST /designs/generate would, from one shared content plan, so the date, the offer and the call to action cannot drift between the pieces. Document surfaces (paper, the email column) carry the full plan; social surfaces carry a condensed announcement cut of it.

Every produced design carries kit, kit_role and kit_label in its metadata, and the response's kit_id ties the set together. Each design is an ordinary row afterward — the kit imposes nothing after creation.

Role defaults are US Letter, Instagram, Instagram Story and a 600px email column; formats overrides them per role. Pass plan (from generate-plan, edited or not) to skip the writing step. A leg that fails is reported in errors rather than failing the kit.

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

Generate an asset kit › 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.

Generate an asset kit › Request Body

outputs
​string[] · required
brief
​string · maxLength: 4000
​object
​object
plan
​object
name
​string · maxLength: 120

Generate an asset kit › Responses

Created

No data returned
POST/designs/generate-kit
curl https://api.genuineai.app/api/v1/designs/generate-kit \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "brief": "brief", "content": { "text": "text" }, "outputs": [ "string" ], "formats": { "flyer": {}, "social": {}, "story": {}, "email": {} }, "plan": {}, "name": "name" }'
Example Request Body
{ "brief": "brief", "content": { "text": "text" }, "outputs": [ "string" ], "formats": { "flyer": {}, "social": {}, "story": {}, "email": {} }, "plan": {}, "name": "name" }
Example Responses
No example specified for this content type

Plan a document

POST
https://api.genuineai.app/api/v1
/designs/generate-plan

The writing half of POST /designs/generate on its own: returns the content plan — headline, pull quote, the figures worth setting large, the sections, the call to action — without building anything. Made for a review step in front of generation, since a long source document is worth agreeing on before a layout is built from it. Hand the plan back to generate to lay it out.

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

Plan a document › 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.

Plan a document › Request Body optional

​object
brief
​string · maxLength: 4000
​object
archetype
​string · enum
Enum values:
customer_story
flyer
stat_sheet
checklist
agenda

Plan a document › Responses

Success

No data returned
POST/designs/generate-plan
curl https://api.genuineai.app/api/v1/designs/generate-plan \ --request POST \ --header 'Content-Type: application/json' \ --header 'X-Tenant-Id: <string>' \ --header 'X-Api-Key: <api-key>' \ --data '{ "format": { "preset": "US Letter", "platform": "Instagram", "landscape": true, "width": 0.01, "height": 0.01, "unit": "px" }, "brief": "brief", "content": { "text": "text" }, "archetype": "customer_story" }'
Example Request Body
{ "format": { "preset": "US Letter", "platform": "Instagram", "landscape": true, "width": 0.01, "height": 0.01, "unit": "px" }, "brief": "brief", "content": { "text": "text" }, "archetype": "customer_story" }
Example Responses
No example specified for this content type

Import a Figma frame

POST
https://api.genuineai.app/api/v1
/designs/import/figma

Runs inline rather than as a background job: a design is only usable once every layer exists, so it finishes before responding.

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

Import a Figma frame › 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.

Import a Figma frame › Request Body

token
​string · required
file_url
​string · required
node_id
​string
name
​string
vector_mode
​string · enum
Enum values:
raster
path

Import a Figma frame › Responses

Success

No data returned
POST/designs/import/figma
curl https://api.genuineai.app/api/v1/designs/import/figma \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "token": "token",
  "file_url": "file_url",
  "node_id": "node_id",
  "name": "name",
  "vector_mode": "raster"
}'
Example Request Body
{
  "token": "token",
  "file_url": "file_url",
  "node_id": "node_id",
  "name": "name",
  "vector_mode": "raster"
}
Example Responses
No example specified for this content type

List Figma frames

POST
https://api.genuineai.app/api/v1
/designs/import/figma/inspect

Lists what can be imported so you can choose before fetching the whole document. The Figma token is used for the request and not stored.

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

List Figma frames › 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 Figma frames › Request Body

token
​string · required
file_url
​string · required

List Figma frames › Responses

Success

No data returned
POST/designs/import/figma/inspect
curl https://api.genuineai.app/api/v1/designs/import/figma/inspect \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "token": "token",
  "file_url": "file_url"
}'
Example Request Body
{
  "token": "token",
  "file_url": "file_url"
}
Example Responses
No example specified for this content type

Remove a background

POST
https://api.genuineai.app/api/v1
/designs/remove-background

Cuts the subject out of an image and returns it with a transparent background. The source image is not modified.

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

Remove a background › 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.

Remove a background › Request Body

file_id
​string · uuid · required

Remove a background › Responses

Success

No data returned
POST/designs/remove-background
curl https://api.genuineai.app/api/v1/designs/remove-background \
  --request POST \
  --header 'Content-Type: application/json' \
  --header 'X-Tenant-Id: <string>' \
  --header 'X-Api-Key: <api-key>' \
  --data '{
  "file_id": "00000000-0000-0000-0000-000000000000"
}'
Example Request Body
{
  "file_id": "00000000-0000-0000-0000-000000000000"
}
Example Responses
No example specified for this content type

Object sourcesDesign categories