# Create and deploy activities

Create reusable workflow operations, deploy them, and check their status.

Source: https://docs.rumata.dev/guides/activities
Reviewed: 2026-09-08

## Before you start

- A project and permission to inspect its activities.
- Activity/build allowance for deployment or execution.

<a id="create"></a>

## Create an activity

Open [System Explorer](https://docs.rumata.dev/guides/controls-preview#navigation) → [Activities](https://docs.rumata.dev/guides/controls-activities#list) → [New Activity](https://docs.rumata.dev/guides/controls-activities#wizard). The wizard has four steps.

1. [Basic Info](https://docs.rumata.dev/guides/controls-activities#wizard): give the action a name and description.
2. [Activity Code](https://docs.rumata.dev/guides/controls-activities#wizard): write or review its Python files.
3. [Configuration](https://docs.rumata.dev/guides/controls-activities#configuration): choose the entry function and its arguments.
4. [Machine Spec](https://docs.rumata.dev/guides/controls-activities#wizard): review the resources, then click [Create Activity](https://docs.rumata.dev/guides/controls-activities#wizard).

Creating an activity queues a build. Wait for the build to finish before deploying. [Creation wizard and field details](https://docs.rumata.dev/guides/controls-activities#wizard).

<a id="deploy-activity"></a>

## Deploy it and use it

Open the activity details and check the build result. If it succeeded, deploy the build and wait for the deployment to be ready. Fix a failed build before trying to run it.

Add the deployed activity to a workflow and test it with sample input. [Build and source controls](https://docs.rumata.dev/guides/controls-activities#builds-source) · [Deploy and stop controls](https://docs.rumata.dev/guides/controls-activities#deployment).

<a id="what-is-activity"></a>

## What is an activity?

An activity is a reusable backend operation that a workflow can call. It can contain application logic or handle an integration. The workflow determines when to call it and what to do with the result.

A [Code](https://docs.rumata.dev/guides/controls-workflow-nodes#fields-code) or [Edit Fields](https://docs.rumata.dev/guides/controls-workflow-nodes#fields-code) node may be enough for a simple data transformation, and an [HTTP Request](https://docs.rumata.dev/guides/controls-workflow-nodes#http) node may be enough for a direct external API call. Use a deployed activity when the operation needs a reusable backend implementation.

![Activity details dialog describing a login operation and its configuration fields.](https://docs.rumata.dev/media/manual/activity-details.jpg)

Reference capture from the separate Sabai Talk Thai application (September 8, 2026). The details describe what the operation expects. Field definitions are different from actual secret values or customer data.

<a id="inspect"></a>

## Inspect an activity before using it

1. Open [Activities](https://docs.rumata.dev/guides/controls-activities#list) in [System Explorer](https://docs.rumata.dev/guides/controls-preview#navigation).
2. Select the operation you intend to use and inspect its available metadata, inputs, and deployment state.
3. Confirm which project owns it and which workflow may invoke it.
4. Add an [Activity node](https://docs.rumata.dev/guides/controls-workflow-nodes#activity) to the workflow, then select and configure that operation.
5. Provide a safe input, run the workflow, and inspect the activity output and error path.

An activity may appear in the list before it is ready to run. Check its deployment state and configuration before relying on it in a workflow.

![Sabai Talk Thai Activities list with login, registration, SQL, and file-storage operations.](https://docs.rumata.dev/media/manual/activities.jpg)

Reference capture from the separate Sabai Talk Thai application (September 8, 2026). These reusable operations support the application’s backend. Open [Details](https://docs.rumata.dev/guides/controls-activities#builds-source) to inspect an operation before using it.

<a id="errors"></a>

## Handle errors as part of the process

An activity can fail because of invalid input, missing permission, an unavailable dependency, an expired credential, a timeout, or exhausted runtime allowance. Route errors deliberately where the workflow supports it, and preserve enough redacted context to diagnose the failure.

> **Retries can repeat side effects**
> If an operation creates a record or calls an external service, make sure retries do not unintentionally duplicate the action.

## Related guides

- [Activity creation and deployment controls](https://docs.rumata.dev/guides/controls-activities)
- [Workflows](https://docs.rumata.dev/guides/system-explorer-workflows)
- [Keys & secrets](https://docs.rumata.dev/guides/system-explorer-secrets)
- [Code and development machines](https://docs.rumata.dev/guides/development)
- [Understand plans and usage](https://docs.rumata.dev/guides/billing)