← All action domains

Assets

13 operations. Call each with POST https://app.chirply.io/api/v1/actions/<name> and a bearer token; the response is { "data": { "action", "summary", "result" } }. A read badge means the operation changes nothing; write requires the credential’s write scope.

New folder

assets.create_folderwrite

Create a library folder to organize files into.

Parameters

FieldTypeRequiredDescription
namestringrequiredThe folder's name.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.create_folder \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool assets_create_folder at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete files

assets.deletewriteconfirm

Permanently delete library files and their stored bytes. Anything embedding the file's URL (emails already sent, funnel pages, designs) will show a broken image. This cannot be undone.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idsarray of (string (uuid))requiredThe files to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.delete \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
    ]
  }'
Test with your API key

Over MCP the same operation is the tool assets_delete at https://app.chirply.io/api/mcp, same bearer token, same input.

Delete a folder

assets.delete_folderwriteconfirm

Permanently delete a library folder. The files inside are NOT deleted and their URLs keep working — they just become unfiled and reappear under 'All files'. The folder itself cannot be restored; recreating it does not re-gather what was in it, so the tidying has to be redone by hand.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe folder to delete.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.delete_folder \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool assets_delete_folder at https://app.chirply.io/api/mcp, same bearer token, same input.

Generate an AI image

assets.generate_imagewriteconfirm

Generate an image from a description and save it straight into the media library, returning its permanent URL. THIS SPENDS REAL MONEY: the request runs on the organization's OWN OpenRouter API key, so the image-generation charge lands on the tenant's OpenRouter bill directly — there is no credit pool and no free allowance to absorb it. Each call is a separate billed generation whether or not the result is any good.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
promptstringrequiredWhat the image should show.
style"photo" | "illustration" | "abstract" | "product"optionalVisual style. Default: "photo"

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.generate_image \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "example"
  }'
Test with your API key

Over MCP the same operation is the tool assets_generate_image at https://app.chirply.io/api/mcp, same bearer token, same input.

Open a file

assets.getread

Fetch one library file by id, including its permanent public URL.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe file's id.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.get \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool assets_get at https://app.chirply.io/api/mcp, same bearer token, same input.

Import a file from a URL

assets.import_from_urlwriteconfirm

Download a file from a public https URL into the organization's media library and return its permanent Chirply URL. Accepts images, video, audio and PDF up to 25 MB. Use this instead of hotlinking: imported files can't break when the source disappears. THIS MAKES AN OUTBOUND REQUEST FROM CHIRPLY'S SERVERS to whatever address is given, so everything in the URL — path, query string, fragment — is disclosed to whoever operates it. That is why it asks for confirmation.

Marked confirm: this operation is irreversible, reaches real people, or spends money. Holding a credential is itself the confirmation for API and MCP callers — call it only when you mean it. The in-app assistant refuses to run it without a human approving first.

Parameters

FieldTypeRequiredDescription
urlstring (uri)requiredThe public https URL of the file to import.
namestringoptionalDisplay name; defaults to the URL's filename.
folder_idstring (uuid)optionalFolder to file it into.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.import_from_url \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com"
  }'
Test with your API key

Over MCP the same operation is the tool assets_import_from_url at https://app.chirply.io/api/mcp, same bearer token, same input.

List files

assets.listread

List the organization's media library (uploaded images, videos, audio and documents), newest first, each with its permanent public URL. Filter by kind or folder and search names.

Parameters

FieldTypeRequiredDescription
limitintegeroptionalPage size. Default: 60
offsetintegeroptionalRows to skip. Default: 0
kind"image" | "video" | "audio" | "file"optionalOnly files of this media kind.
folder_idstring (uuid)optionalOnly files in this folder.
querystringoptionalText to match in file names.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.list \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "limit": 60,
    "offset": 0
  }'
Test with your API key

Over MCP the same operation is the tool assets_list at https://app.chirply.io/api/mcp, same bearer token, same input.

List folders

assets.list_foldersread

List the library's folders, alphabetically.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.list_folders \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool assets_list_folders at https://app.chirply.io/api/mcp, same bearer token, same input.

Move files to a folder

assets.movewrite

File one or more library files into a folder, or out of any folder.

Parameters

FieldTypeRequiredDescription
idsarray of (string (uuid))requiredThe files to move.
folder_idstring (uuid) (or null)requiredDestination folder id, or null to unfile them.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.move \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "ids": [
      "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
    ],
    "folder_id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11"
  }'
Test with your API key

Over MCP the same operation is the tool assets_move at https://app.chirply.io/api/mcp, same bearer token, same input.

Rename a file

assets.renamewrite

Change a library file's display name. The URL never changes.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe file to rename.
namestringrequiredThe new display name.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.rename \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool assets_rename at https://app.chirply.io/api/mcp, same bearer token, same input.

Rename folder

assets.rename_folderwrite

Change a library folder's display name. Nothing else moves: the files inside stay in it, and every file URL is unaffected because a folder is only a label on the library screen.

Parameters

FieldTypeRequiredDescription
idstring (uuid)requiredThe folder to rename (see assets.list_folders).
namestringrequiredThe folder's new name. Trimmed, and cut to 80 characters.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.rename_folder \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "2f6a1c1e-6c3b-4c62-9f6e-8a2d4b7c9e11",
    "name": "Example"
  }'
Test with your API key

Over MCP the same operation is the tool assets_rename_folder at https://app.chirply.io/api/mcp, same bearer token, same input.

Library totals

assets.statsread

The four headline counts on the Media Library screen: how many files are in the library, how many of those are images, how many Design Studio projects exist, and how many folders. Whole-account lifetime counts with no date window and no filters — assets.list answers 'which files' and pages, this answers 'how many'. Read-only.

Parameters

No parameters — POST an empty body.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.stats \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{}'
Test with your API key

Over MCP the same operation is the tool assets_stats at https://app.chirply.io/api/mcp, same bearer token, same input.

Upload files

assets.uploadwrite

Upload a file into the organization's media library by sending its bytes base64-encoded, and get back its permanent public Chirply URL — the same URL the Upload button produces, usable in emails, funnel pages, posts, designs and as an outbound message attachment. Accepts PNG, JPG, GIF, WebP, SVG, ICO, MP4, MOV, WebM, MP3, WAV, M4A, OGG and PDF files, up to 25 MB per file. THE EXTENSION ON `name` DECIDES THE TYPE: the file's real header bytes must match what that extension claims or the upload is rejected, and the stored content type comes from the extension alone — never from anything the caller asserts. Costs nothing and sends nothing; it stores the bytes and adds one row to the library, where anyone in the workspace can see and delete it. If the file is already on the public web, assets.import_from_url is cheaper than base64.

Parameters

FieldTypeRequiredDescription
namestringrequiredThe file name, INCLUDING its extension, e.g. "logo.png" — the extension is what decides the accepted type and the content type it will be served as. Accepted: PNG, JPG, GIF, WebP, SVG, ICO, MP4, MOV, WebM, MP3, WAV, M4A, OGG and PDF files. Path segments, quotes and control characters are stripped.
content_base64stringrequiredThe file's raw bytes, base64-encoded. A `data:` URL prefix and line breaks are accepted and stripped. The decoded size must be 25 MB or less.
folder_idstring (uuid)optionalLibrary folder to file it into (see assets.list_folders). Omit to leave it unfiled under 'All files'.

Example

curl -X POST https://app.chirply.io/api/v1/actions/assets.upload \
  -H "Authorization: Bearer chp_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Example",
    "content_base64": "example"
  }'
Test with your API key

Over MCP the same operation is the tool assets_upload at https://app.chirply.io/api/mcp, same bearer token, same input.

The machine-readable version of this page is GET https://app.chirply.io/api/v1/actions?domain=assets — same operations, with full JSON Schemas. Authentication, errors and rate limits are covered in the API documentation home.