Dashboard HTTP API

This page documents the REST HTTP endpoints for dashboard operations. All endpoints are prefixed with /api/dashboards/v1/ and identify the AI Employee via a persona_id parameter (passed in the query string for GET requests and in the JSON body for POST/DELETE requests).

All endpoints support an optional callback_url parameter. When provided, Ema sends the result to the callback URL upon completion instead of requiring polling.

Upload and Run Rows

Create a row from one or more input documents and trigger workflow processing on it.

PropertyValue
URL/api/dashboards/v1/upload-and-run-rows
HTTP MethodPOST
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
inputsarrayYesArray of Input objects supplying the row's input values
callback_urlstringNoURL to receive results upon completion
expire_after_secondsintegerNoTime-to-live for the row, in seconds

Each Input object has the shape:

FieldTypeDescription
namestringThe input column name
string_valuestringString value (use exactly one of string_value / number_value / boolean_value / document_value)
number_valuenumberNumeric value
boolean_valuebooleanBoolean value
document_valuearrayArray of FileInfo objects (name, contents, is_base64_encoded, mime_type)

Example

curl -X POST https://your-instance.ema.co/api/dashboards/v1/upload-and-run-rows \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>",
 "inputs": [
 {
 "name": "source_document",
 "document_value": [
 {
 "name": "data.xlsx",
 "contents": "<base64-encoded-file-contents>",
 "is_base64_encoded": true,
 "mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
 }
 ]
 }
 ],
 "callback_url": "https://your-server.com/webhook"
 }'

Response

FieldTypeDescription
row_idstringUUID of the created row

Get Row Result

Retrieve the result of a single processed row.

PropertyValue
URL/api/dashboards/v1/get-row-result
HTTP MethodGET
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token

Query Parameters

ParameterTypeRequiredDescription
row_idstringYesUUID of the row
persona_idstringYesUUID of the AI Employee
include_file_contentsbooleanNoWhen true, includes inline file contents for document columns

Example

curl -X GET "https://your-instance.ema.co/api/dashboards/v1/get-row-result?row_id=<row_id>&persona_id=<persona_id>" \
 -H "Authorization: Bearer <access_token>"

Response

FieldTypeDescription
rowobjectThe dashboard row, serialized as JSON (includes the row's state and all column values)
additional_column_detailsarrayPer-column extras computed by the service. Each entry: column_name, documents (array of FileInfo), ema_ui_url.

Get All Row Results

Retrieve results for all rows in the dashboard.

PropertyValue
URL/api/dashboards/v1/get-all-row-results
HTTP MethodGET
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token

Query Parameters

ParameterTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
include_file_contentsbooleanNoWhen true, includes inline file contents for document columns

Example

curl -X GET "https://your-instance.ema.co/api/dashboards/v1/get-all-row-results?persona_id=<persona_id>" \
 -H "Authorization: Bearer <access_token>"

Response

FieldTypeDescription
rowsarrayArray of row result objects, each with the same shape as Get Row Result's response (row + additional_column_details).

Add Row

Create an empty row in the dashboard. To populate values for the row, follow this with Update Row; to trigger workflow processing on it, use Trigger Row.

PropertyValue
URL/api/dashboards/v1/add-row
HTTP MethodPOST
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
expire_after_secondsintegerNoTime-to-live for the row, in seconds

Example

curl -X POST https://your-instance.ema.co/api/dashboards/v1/add-row \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>"
 }'

Response

FieldTypeDescription
row_idstringUUID of the new row

Update Row

Update the input values of an existing row.

PropertyValue
URL/api/dashboards/v1/update-row
HTTP MethodPOST
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
row_idstringYesUUID of the row to update
inputsarrayYesArray of Input objects (see Upload and Run Rows for the Input shape)

Example

curl -X POST https://your-instance.ema.co/api/dashboards/v1/update-row \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>",
 "row_id": "<row-uuid>",
 "inputs": [
 { "name": "company_name", "string_value": "Acme Corporation" }
 ]
 }'

Response

FieldTypeDescription
successbooleantrue if the row was updated

Delete Rows

Delete one or more rows from the dashboard.

PropertyValue
URL/api/dashboards/v1/delete-rows
HTTP MethodDELETE
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
row_idsarrayYesList of row UUIDs to delete

Example

curl -X DELETE https://your-instance.ema.co/api/dashboards/v1/delete-rows \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>",
 "row_ids": ["<row-uuid-1>", "<row-uuid-2>"]
 }'

Response

FieldTypeDescription
successbooleantrue if the rows were deleted

Trigger Row

Trigger workflow processing for a specific row.

PropertyValue
URL/api/dashboards/v1/trigger-row
HTTP MethodPOST
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
row_idstringYesUUID of the row to trigger
callback_urlstringNoURL to receive results

Example

curl -X POST https://your-instance.ema.co/api/dashboards/v1/trigger-row \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>",
 "row_id": "<row-uuid>",
 "callback_url": "https://your-server.com/webhook"
 }'

Response

FieldTypeDescription
successbooleantrue if the row was queued for processing

Get Continuation Message

Retrieve the HITL continuation message for a paused row.

PropertyValue
URL/api/dashboards/v1/get-continuation-message
HTTP MethodGET
ProtocolREST (HTTP/JSON)

Query Parameters

ParameterTypeRequiredDescription
row_idstringYesUUID of the paused row
persona_idstringYesUUID of the AI Employee

Example

curl -X GET "https://your-instance.ema.co/api/dashboards/v1/get-continuation-message?row_id=<row_id>&persona_id=<persona_id>" \
 -H "Authorization: Bearer <access_token>"

Response

FieldTypeDescription
continuation_messageobjectThe HITL prompt (form, buttons, or text) the workflow is waiting on
row_statestringCurrent state of the row

Continue Row

Submit a HITL response to resume a paused workflow.

PropertyValue
URL/api/dashboards/v1/continue-row
HTTP MethodPOST
ProtocolREST (HTTP/JSON)

Headers

HeaderTypeRequiredDescription
AuthorizationstringYesBearer token
Content-TypestringYesapplication/json

Request Body

FieldTypeRequiredDescription
persona_idstringYesUUID of the AI Employee
row_idstringYesUUID of the paused row
continuation_messageobjectYesThe user's response to the HITL prompt (shape mirrors the prompt returned by Get Continuation Message)

Example

curl -X POST https://your-instance.ema.co/api/dashboards/v1/continue-row \
 -H "Authorization: Bearer <access_token>" \
 -H "Content-Type: application/json" \
 -d '{
 "persona_id": "<persona_id>",
 "row_id": "<row-uuid>",
 "continuation_message": {
 "approved": true,
 "comment": "Looks good, proceed."
 }
 }'

Response

FieldTypeDescription
successbooleantrue if the row resumed processing

Last updated: Jul 3, 2026