Skip to main content

Custom Workloads

Instead of using a preset, you can define arbitrary step DAGs with custom_job in your plan request. The planner handles placement, transfer insertion, and scheduling the same way it does for presets.

Request Structure

Send custom_job instead of preset_id in POST /v1/plan:

Step Schema

Each step in the steps array:
string
required
Unique identifier within the job. Used in depends_on references.
string
required
Human-readable step name.
string
required
Where the step runs: onboard, ground, or either. When set to either, the planner decides based on data reduction ratio and transfer cost.
number
required
Execution duration in seconds. Must be positive.
string[]
required
IDs of prerequisite steps. Use [] for steps with no dependencies.
object
required
Resource requirements:
  • power_w — Power consumption in watts
  • compute — Fraction of compute capacity (0.0–1.0)
  • thermal_w — Thermal dissipation in watts
  • memory_mb — Memory required in MB
  • storage_mb — Storage required in MB
number
default:"0"
Input data size in MB.
number
default:"0"
Output data size in MB.
number
Output/input ratio. 0.1 means 10:1 reduction. Set to null for data-generating steps.
number
default:"0"
Checkpoint frequency in seconds. 0 disables checkpointing.
string
default:"retry_immediate"
fail, retry_next_window, or retry_immediate.
number
default:"1"
Maximum retry attempts.
string
default:"none"
none, aes128, or aes256. Adds data expansion overhead.
string
default:"none"
none, crc32, or sha256.
object
default:"null"
Fault tolerance. If set, provide min_data_fraction (0.0–1.0) and reduced_duration_s.

Security Overrides

Optional security object at the job level:
Defaults: AES-256 encryption, restricted classification, authenticated uplink, key rotation every 24 orbits.

Policy

Optional policy object:

Validation Rules

  • Every step must have a unique id
  • depends_on references must point to existing step IDs
  • No circular dependencies (validated via DFS)
  • location must be onboard, ground, or either
  • duration_s must be positive
  • requires must include all 5 resource fields
Invalid requests return 400 with a validation_error describing the issue.

Example

A 2-step pipeline: capture sensor data on-board, then process on the ground.
The planner automatically inserts transfer steps (downlink/uplink) at space-ground boundaries. Your 2-step job may produce a plan with 3+ segments.