> ## Documentation Index
> Fetch the complete documentation index at: https://docs.frayme.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Engineer guide

> What engineers own in Frayme: decision flows, data sources, API keys, webhooks and risk rules, and the order to wire them.

export const Shot = ({id, alt, caption}) => <Frame caption={caption}>
    <img className="block dark:hidden rounded-lg" src={`/images/guides/${id}.light.png`} alt={alt} loading="lazy" decoding="async" />
    <img className="hidden dark:block rounded-lg" src={`/images/guides/${id}.dark.png`} alt={alt} loading="lazy" decoding="async" />
  </Frame>;

You build the decision logic and the integration surface: the workflows that decide cases, the data providers they call, the API keys your systems submit cases with, the webhook endpoints Frayme posts results to, and the risk rules that fire on every case.

## What you see

<Shot id="shared/sidebar-02-tenant-admin" alt="Sidebar as an engineer: Workflow, Risk Management and Data Sources next to the review pages" caption="The engineer template sees the same navigation as a tenant admin; only the Settings tabs differ." />

## Wiring a tenant, in order

<Steps>
  <Step title="Connect data sources">
    Providers must be connected before an Integration node can pick them. [Data Sources](/guides/engineer/data-sources)
  </Step>

  <Step title="Create a webhook endpoint">
    Frayme posts decisions and callbacks to it; keep the signing secret. [Webhooks](/guides/engineer/webhooks)
  </Step>

  <Step title="Build and activate a decision flow">
    Input → data sources → logic → Review or terminal nodes. Validate, then activate. [Workflow builder](/guides/engineer/workflow-builder)
  </Step>

  <Step title="Create an API key">
    Your systems submit cases with it. [API keys](/guides/engineer/api-keys)
  </Step>

  <Step title="Submit a test case">
    From the builder (dry run) or with the API. Watch it in Executions and in the queue. [Submit a case](/guides/engineer/workflow-submit-case)
  </Step>
</Steps>

## Three verbs: Save, Validate, Activate

* **Save** stores the draft. It never validates, so you can save unfinished work. Saving an active flow forks a new draft version instead of editing the live one.
* **Validate** checks the draft and shows every problem without saving anything.
* **Activate** is the gate: it saves, validates and only then makes the version live. Blocking problems stop it; advisory ones do not.

## Pages in this guide

<CardGroup cols={2}>
  <Card title="Decision Flows list" href="/guides/engineer/workflows-list" icon="list" />

  <Card title="Workflow builder" href="/guides/engineer/workflow-builder" icon="diagram-project" />

  <Card title="Nodes" href="/guides/engineer/nodes-flow-and-decisions" icon="puzzle-piece" />

  <Card title="Expressions" href="/guides/engineer/workflow-expressions" icon="function" />

  <Card title="Save, validate, activate" href="/guides/engineer/workflow-validation" icon="check-double" />

  <Card title="Submit a case" href="/guides/engineer/workflow-submit-case" icon="paper-plane" />

  <Card title="Execution history" href="/guides/engineer/workflow-executions" icon="clock-rotate-left" />

  <Card title="Versions and history" href="/guides/engineer/workflow-versions-and-history" icon="code-branch" />

  <Card title="Data Sources" href="/guides/engineer/data-sources" icon="database" />

  <Card title="API keys" href="/guides/engineer/api-keys" icon="key" />

  <Card title="Webhooks" href="/guides/engineer/webhooks" icon="webhook" />

  <Card title="Risk Management" href="/guides/engineer/risk-management" icon="shield-halved" />
</CardGroup>
