Required endpoints
Task apps must implement:GET /health– livenessGET /task_info– dataset metadata and schemaPOST /rollout– run one seed and return reward
Multiple tasks are required
For eval/GEPA/MIPRO, task apps must be configured with multiple tasks and support deterministic selection viaseed. This is how the optimizer evaluates
many examples and compares candidates.
Where task apps run
You can run task apps locally behind a tunnel, or deploy them to Synth Cloud. See SynthTunnel, Cloudflare, and Deploy to Synth for deployment details.Task info payload (what the optimizer needs)
/task_info tells GEPA/eval what data exists and how to map seeds to examples.
At minimum, include:
- dataset identifiers and splits
- input/output schema
- task metadata needed to interpret examples
- task list or dataset registry details
Rollout request (what you receive)
Each rollout targets a single seed and includes the inference URL:- map
seedto a deterministic example - run the prompt via
policy_config.inference_url - compute the reward
Rollout response (what you return)
Return a reward undermetrics.mean_return:
Auth and inference routing
Task apps sit between Synth and your environment, so auth and routing must be consistent across all rollouts.Task app auth (inbound)
- Task app endpoints require
X-API-Keywith the ENVIRONMENT_API_KEY - This key is injected by Synth for hosted apps, or set locally for dev
- Do not accept raw provider keys from clients
LLM routing (outbound)
- Always send LLM calls to
policy_config.inference_url(the interceptor URL) - The interceptor injects provider auth and captures traces for GEPA/eval
- Preserve query params on
inference_urlwhen appending paths - Do not append an extra
/v1if the URL already includes it
What not to do
- Do not call OpenAI/Anthropic directly from task apps
- Do not embed provider API keys in task app code or env
- Do not strip query params from
inference_url