Skip to main content
The manifest describes your automation’s interface. floom uses it to generate the web UI, validate inputs, and install dependencies.

Full schema

{
  "name": "My Automation",
  "description": "One-sentence description",
  "schedule": "0 9 * * 1",
  "scheduleInputs": { "param1": "default_value" },
  "inputs": [
    {
      "name": "param_name",
      "label": "Human Label",
      "type": "text",
      "description": "What to put here",
      "required": true,
      "default": "default_value"
    }
  ],
  "outputs": [
    {
      "name": "output_key",
      "label": "Human Label",
      "type": "text"
    }
  ],
  "secrets_needed": ["GEMINI_API_KEY"],
  "python_dependencies": ["google-genai", "httpx"],
  "manifest_version": "1.0"
}

Input types

All values are passed to your run() function as the Python type shown.
TypePython typeUse forExtra fields
textstrShort strings (name, query, ID)
textareastrLong text (500+ chars)
urlstrLinks, API endpoints
filestrFile uploads. Receives an R2 URL; download with requests.get()accept: e.g. .pdf,.csv
numberfloat/intNumbers, percentagesmin, max
enumstrFixed choicesoptions: ["opt1", "opt2"]
booleanboolTrue/false toggles
datestrISO 8601 date string (2024-01-15)

Input field reference

FieldRequiredDescription
nameYesMust match the run() parameter name
labelYesDisplay label in the web UI
typeYesOne of the types above
descriptionNoHelp text shown below the input
requiredNoDefault true. Set false for optional inputs
defaultNoPre-filled value
optionsNoFor enum type only
acceptNoFor file type: accepted extensions
min, maxNoFor number type: value bounds

Output types

Your run() function returns a dict. Each key maps to an output entry.
TypeUse forExtra fields
textString output
tableList of dictscolumns: ["col1", "col2"]
numberFormatted number
htmlRendered HTML
pdfPDF document
imageBase64-encoded image

Scheduling

Add schedule with a cron string to run automatically. If the automation has required inputs, set scheduleInputs with default values.
{
  "schedule": "0 9 * * 1",
  "scheduleInputs": { "query": "weekly report" }
}
Common patterns:
  • 0 9 * * * — every day at 9am
  • 0 9 * * 1 — every Monday at 9am
  • 0 */6 * * * — every 6 hours
  • 0 0 1 * * — first of every month

Dependencies

List pip packages in python_dependencies. They are installed before each run.
{
  "python_dependencies": ["pandas", "openpyxl", "httpx"]
}
requests, httpx, and anthropic are always available. Only list additional packages.

Secrets

List required environment variables in secrets_needed. Store them via the secrets API or the dashboard.
{
  "secrets_needed": ["GEMINI_API_KEY", "SLACK_WEBHOOK_URL"]
}
Access them in your function:
import os
api_key = os.environ["GEMINI_API_KEY"]