Skip to content

API

This section provides a comprehensive overview of the routes, types, and error codes for the features in the system, ensuring developers understand how to interact with the API and handle potent.

Component definitions returned by list and details, and results returned by run, use Monkedo's Value type system. Each value is an object with two fields:

{
  "type": { "id": 2 },
  "data": "hello"
}

Field

Description

type

Describes the shape of data. Uses a numeric TypeId (see table below). Composite types include a schema.

data

The actual payload. Format depends on type.id.

TypeId reference

Code

Name

Description

0

Unknown

Accepts any value. Used when the exact shape is not fixed (?).

1

Empty

No data. Used for signal-only outputs (e.g. "done", "not found"). data is omitted or undefined.

2

Text

String.

3

Number

Numeric value (integer or decimal).

4

Boolean

true or false.

5

Date

Date/time. Pass an ISO 8601 string (e.g. "2026-06-08T10:00:00.000Z").

7

Time

Time of day as seconds since midnight (not milliseconds).

8

File

File reference object (see below).

9

Entity

Plain object ({ "key": value, … }). Keys match the entity schema when defined.

10

List

Array. Each item matches the list's schema type.

11

Table

2D array β€” rows of column values: [ ["col1", "col2"], ["a", "b"] ].

12

Query

! Not supported for this feature

Composite types in component definitions

When you call list or details, each input and output includes a type object. Common patterns:

Definition string

JSON type object

data format

Text

{ "id": 2 }

"string"

Number

{ "id": 3 }

42

Boolean

{ "id": 4 }

true

List<Text>

{ "id": 10, "schema": { "id": 2 } }

["a", "b"]

Entity<?>

{ "id": 9, "schema": [], "generic": "?", "genericSchema": true }

{ "anyKey": "anyValue" }

Table<?>

{ "id": 11, "schema": [], "generic": "?", "genericSchema": true }

[ ["row1col1", "row1col2"], ["row2col1", "row2col2"] ]

If an entity schema is known, schema is an array of [fieldName, fieldType] pairs:

{
  "id": 9,
  "schema": [
    ["length", { "id": 3 }],
    ["unit", { "id": 2 }]
  ]
}

File values

When an input expects type File (id: 8), data must be a file reference:

{
  "type": { "id": 8 },
  "data": {
    "_id": "507f1f77bcf86cd799439011",
    "name": "report.pdf",
    "size": 102400,
    "s3Name": "uploads/abc123.pdf"
  }
}

!! File references are created through Monkedo's file upload flow; you typically obtain them from a prior action output rather than constructing them manually.

Sending inputs to run

POST /api/v1/components/:componentId/run expects each entry in inputs to be a Value object β€” not a raw string or number.

Use the component's inputs array from list or details to determine field names and types, then wrap each value accordingly.

Do not send _connection. Monkedo injects the connection configured on your API key automatically.

Example β€” action.cubicl.get-client

Component input clientId has type Text (id: 2):

{
  "inputs": {
    "clientId": {
      "type": { "id": 2 },
      "data": "507f1f77bcf86cd799439011"
    }
  }
}

Example β€” action.google-sheets.get-values

After reading the component definition, a typical request looks like:

{
  "inputs": {
    "sheetId": {
      "type": { "id": 2 },
      "data": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
    },
    "sheetName": {
      "type": { "id": 2 },
      "data": "Sheet1"
    },
    "hasHeaderRow": {
      "type": { "id": 4 },
      "data": true
    }
  }
}

Optional inputs can be omitted unless the component requires them.

Run response outputs

Successful run responses include an outputs object. Each output is also a Value:

{
  "name": "Client (Acme Corp)",
  "outputs": {
    "client": {
      "type": { "id": 9, "schema": [], "generic": "?", "genericSchema": true },
      "data": {
        "name": "Acme Corp",
        "email": "contact@acme.com"
      }
    },
    "customFields": {
      "type": { "id": 10, "schema": { "id": 9, "schema": [], "generic": "?", "genericSchema": true } },
      "data": []
    }
  },
  "componentId": "action.cubicl.get-client"
}

Read output data from outputs.<outputName>.data.

Trigger registration inputs

POST /api/v1/components/triggers uses plain JSON for inputs, not Value objects. Pass settings directly as defined by the trigger component:

{
  "componentKey": "trigger.schedule",
  "inputs": {
    "type": "interval",
    "interval": { "length": 20, "unit": "minute" }
  }
}

Every request requires a valid API key in the Authorization header.

A key can only access components you explicitly enabled when configuring the key. Requests for anything else are rejected.

List Available Applications

GET api/v1/components/apps

List apps available to this key.

200: OK
[
  {
    "name": "Cubicl",
    "icon": "cubicl.png",
    "key": "cubicl"
  }
]

Get Component Definitions

GET api/v1/components/list

Return definitions (inputs, outputs, descriptions) for all components this key may use.

200: OK
[
  {
    id: 'action.cubicl.get-client',
    name: 'Get Client',
    desc: 'Gets client details. [See the docs here](https://docs.cubicl.io/api-integration/clients#get-client-by-id).',
    auth: 'apiKey',
    appKey: 'cubicl',
    appName: 'Cubicl',
    keywords: ['get customer', 'find client', 'fetch client'],
    inputs: [
      {
        name: 'clientId',
	type: TypeId.Text,
	desc: 'The ID of the client to be retrieved.',
      },
    ],
    outputs: [
      {
	name: 'client',
	type: TypeId.Entity<?>,
      },
      {
	name: 'customFields',
	type: TypeId.List<Entity<?>>,
	desc: 'Shows the names of the "id" values in the customFields field of the client. If not defined in the Cubicl, it comes empty.',
      },
      {
	name: 'notFound',
	type: TypeId.Empty,
	color: '#e9596e',
      },
    ],
  }
]

Get Component Details

GET api/v1/components/details/:componentKey

Return the full definition for one component.

Path Parameters

Name

Type

Description

componentKey*

String

Component key β€” e.g. "action.cubicl.get-client"

200: OK
// Component Details

Run Component

GET api/v1/components/:componentId/run

Execute an action.

Path Parameters

Name

Type

Description

componentId*

String

Component id β€” e.g. "action.cubicl.get-client"

Body

Name

Type

Description

inputs*

Object

Component inputs

200: OK
{
  "name": "Result name",
  "outputs": {
    "result": {
      "type": TypeId.Text,
      "data": "value"
    }
  },
  "componentId": "action.misc.logger",
  "creditsUsed": 1
}

Each entry in outputs is a typed value (type + data). Paid components may consume credits from your team's balance.

List Registered Triggers

List triggers registered with this key.

200: OK
[
  {
    "_id": "...",
    "componentId": "trigger.schedule",
    "inputs": {
      "type": "interval",
      "interval": { "length": 20, "unit": "minute" }
    },
    "createdAt": "..."
  }
]

Remove a trigger. Returns 404 if the trigger does not belong to this key.

Errors are returned as JSON with an HTTP status code:

{
  "statusCode": 403,
  "message": "Invalid API key.",
  "error": "Forbidden"
}

Authentication (403 Forbidden)

Message

Meaning

API key not provided or malformed.

Missing header or incorrect Bearer format

Invalid API key.

Key is wrong, deleted, or regenerated

Authorization (403 Forbidden)

Message

Meaning

the component you are trying to run is not enabled for this api key…

Component not enabled on this key β€” update the key in the dashboard

API key does not have access to component '…'

Trigger component not enabled on this key

Not found (404)

Message

Meaning

API key not found

Key ID invalid or not in your team

Component '…' not found or not allowed

Unknown component or not enabled on this key

Trigger '…' not found or not owned by this API key

Trigger missing or belongs to another key

Validation (400 Bad Request)

Message

Meaning

Connection not found for app …

Linked account is missing or invalid

App … requires a connection but none was provided.

Authenticated app configured without a connection

An app has a connection but no components are selected…

Connection set but no components chosen

Invalid component id

Unrecognized component ID

INVALID_NODE_CONNECTION

Linked account expired or revoked at runtime

Runtime failures

Status

Meaning

400

Invalid or incomplete inputs

422

The action ran but failed (e.g. upstream API error)

500

Unexpected server error β€” contact support if it persists

Replace YOUR_API_KEY and the base URL with your values.

# List allowed components
curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://app.monkedo.com/api/v1/components/list

# Run an action
curl -X POST \
  -H "Authorization: Bearer qt3145g83ln4jpu81icdg0p0gn493vxd" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"getOnlyNames": {"id": 4, "data": true}, "limit": {"id": 3, "data": 50}, "skip": {"id": 3, "data": 0}}}' \
  https://app.monkedo.com/api/v1/components/action.cubicl.get-clients/run