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

# Creating a Workflow

> Step-by-step guide to creating your first Omni workflow from scratch.

This guide walks you through creating a workflow in the Omni dashboard. A workflow defines your verification logic — the policy, engines, and output format — that Omni applies every time you run an analysis.

## Prerequisites

Before you begin, make sure you have:

* An ARGOS Omni account with dashboard access
* A project created in the dashboard ([see Project Management](/en/omni/dashboard/project-management))
* An API key for running analyses after setup ([see Authentication](/en/omni/getting-started/authentication))

<Note>
  Each project supports up to **10 workflows**. If you need more, create an additional project.
</Note>

<Frame caption="Workflow List — if no workflows exist yet, use + Create New Workflow to start.">
  <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-list-empty.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=92edfe1c22657a0bc992bc31135b779e" alt="Workflow list empty state" width="1024" height="511" data-path="images/omni/en/workflow-list-empty.png" />
</Frame>

## Workflow Creation Steps

Creating a workflow involves four steps in the dashboard. Each step builds on the previous one.

<Steps>
  <Step title="Step 1: Basic Info">
    Start by giving your workflow a **name** and an optional **description**.

    * **Name** — A short, descriptive label for the workflow (e.g., "Invoice Review", "Vendor KYB Check"). This is how you will identify the workflow in the dashboard and API responses.
    * **Description** — A brief summary of what this workflow does. This is for your team's reference only and does not affect how Omni processes documents.

    <Frame caption="Step 1: Enter a workflow name and description.">
      <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-step1-filled.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=50719720f423a97a41219c43f9d2c7ed" alt="Workflow creation Step 1 - Basic info" width="1024" height="508" data-path="images/omni/en/workflow-step1-filled.png" />
    </Frame>

    <Tip>
      Use naming conventions that reflect the document type and verification purpose. For example: "Invoice - Amount Validation" or "KYB - Business Registration". This makes it easier to manage multiple workflows in a project.
    </Tip>
  </Step>

  <Step title="Step 2: Policy Definition">
    Write a **natural language policy** that describes what Omni should verify. This is the core of your workflow — it tells the AI agent what to check, what to extract, and how to make decisions.

    Your policy should include:

    * The type of documents you expect
    * Specific verification steps (what to check)
    * Pass/fail criteria (what constitutes approval vs. rejection)

    **Example policy:**

    ```text theme={null}
    Verify the submitted invoice by:
    1. Extracting the vendor name, invoice number, date, and total amount
    2. Checking that all required fields are present and non-empty
    3. Validating that the invoice date is not in the future
    4. Cross-checking that line item totals match the stated total amount
    5. Approve if all checks pass; reject if any critical field is missing or amounts do not match
    ```

    <Frame caption="Step 2: Write your verification policy in natural language. Optional policy documents can be uploaded.">
      <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-step2-filled.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=ba082d0279e5ed87a23f28164151c48e" alt="Workflow creation Step 2 - Policy definition" width="1024" height="508" data-path="images/omni/en/workflow-step2-filled.png" />
    </Frame>

    <Warning>
      Vague policies produce vague results. Be specific about what documents to expect, what fields to check, and what your approval criteria are. See the [Policy Writing Guide](/en/omni/guides/policy-writing-guide) for detailed best practices.
    </Warning>
  </Step>

  <Step title="Step 3: Engine Selection">
    Based on your policy, Omni automatically suggests which AI engines to activate. Review the suggestions and toggle engines on or off as needed.

    **Currently available engines:**

    | Engine                    | What It Does                                                                                        |
    | ------------------------- | --------------------------------------------------------------------------------------------------- |
    | **AML Search - Person**   | Screens individuals against global AML/sanctions watchlists (external database lookup)              |
    | **Text Verifier - Glove** | Extracts text, validates fields, cross-checks data across documents (RAG-based, no external lookup) |

    <Frame caption="Step 3: Review and toggle the engines recommended for your policy.">
      <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-step3-engine.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=ffa9b265c82d25fcd4005569f1c239f6" alt="Workflow creation Step 3 - Engine selection" width="1024" height="508" data-path="images/omni/en/workflow-step3-engine.png" />
    </Frame>

    <Tip>
      In most cases, the automatic suggestion is correct. If your policy mentions screening names against watchlists, AML Search will be suggested. If your policy focuses on document extraction and validation, Text Verifier will be suggested. You can always adjust this manually.
    </Tip>
  </Step>

  <Step title="Step 4: Output Schema">
    Define the **JSON structure** for the results you want back. This tells Omni exactly what format to return after analysis — field names, data types, and structure.

    **Example output schema:**

    ```json theme={null}
    {
      "invoice": {
        "vendorName": "string",
        "invoiceNumber": "string",
        "date": "string",
        "totalAmount": "number",
        "lineItems": ["string"]
      },
      "validation": {
        "allFieldsPresent": "boolean",
        "amountsMatch": "boolean",
        "dateValid": "boolean"
      },
    "decision": {
      "result": "APPROVE | REJECT | MANUAL_REVIEW",
      "verificationStatus": "pending_review | approved | rejected",
      "reasons": ["string"]
    }
    }
    ```

    Use the **Field Builder** tab to add fields visually, or **JSON Schema Input** to edit the schema as JSON. The Schema Writing Guide at the bottom of the step summarizes Draft-07 rules and Omni constraints (see [Output Schema](/en/omni/dashboard/workflow-setup/output-schema)).

    <Frame caption="Step 4 — Field Builder: define fields, types, and descriptions. Use JSON Schema Preview to validate.">
      <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-step4-field-builder.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=455a6f8b4325e76302739134eba1edc3" alt="Workflow creation Step 4 - Field Builder tab" width="1024" height="508" data-path="images/omni/en/workflow-step4-field-builder.png" />
    </Frame>

    <Frame caption="Step 4 — JSON Schema Input: edit Draft-07 JSON Schema directly; stays in sync with Field Builder.">
      <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-step4-schema-code.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=37546e5c7e06902e792021d65a9912ef" alt="Workflow creation Step 4 - JSON Schema Input tab" width="1024" height="508" data-path="images/omni/en/workflow-step4-schema-code.png" />
    </Frame>

    <Note>
      Always include a **decision block** with a result field, `verificationStatus`, and reasons array. This enables automated routing in your downstream systems. See the [Output Schema documentation](/en/omni/dashboard/workflow-setup/output-schema) for more details.
    </Note>
  </Step>
</Steps>

<Frame caption="After you finish Step 4, Omni shows a confirmation with your playbook ID and a summary of playbook actions.">
  <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-created-success.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=2ad6756fa6ddf1e7dd9d44e30437d1d4" alt="Workflow created successfully confirmation" width="1024" height="508" data-path="images/omni/en/workflow-created-success.png" />
</Frame>

## Align terminology across policy, Item names, and JSON output schema

Whenever you rely on specific **technical terms** or **verification targets** (such as document types), use the **same wording** in all three places below.

| Layer                  | What to keep consistent                                                                                                             |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| **Policy**             | Document names and target labels in your natural-language policy                                                                    |
| **Item name**          | The name you give each document when you add it to a profile (e.g. the `name` field when creating or uploading an Item via the API) |
| **JSON output schema** | Field names, descriptions, and any contextual text that refers to those documents or checks                                         |

For example, if the policy says you will review a **business registration certificate**, register the Item under the **same label** (e.g. the equivalent term your team uses consistently in Korean or English), and use that same term in the output schema where you describe validation for that document. That alignment helps the agent connect policy, uploaded files, and structured results reliably.

In a customer-defined **JSON output schema**, keep **descriptions and context** for specific values aligned as well. For instance, if a field such as `document_validation` is `true`, the surrounding description should refer to the same document type (e.g. business registration) and clarify what “sufficient information” means (company name, address, representative, and other fields expected on that document).

<Warning>
  At **runtime**, whenever you add an Item, set **`item.name`** (or the Item **name** field in the API) to match the **policy wording** and the **terminology used in your JSON output schema**. If these diverge, the agent may map documents and fields incorrectly.
</Warning>

<Frame caption="Data Objects — Item names shown here (e.g. business registration certificate) should match your policy and output schema.">
  <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/profile-data-objects.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=95df3fbb3ae6c7e55ae1103df0589f94" alt="Profile Data Objects tab with item names" width="1024" height="510" data-path="images/omni/en/profile-data-objects.png" />
</Frame>

## After Creation

Once you complete all four steps, your workflow is ready to use. You can open it from the workflow list to manage **profiles and analyses**, or review **policy, engines, and output schema** from the workflow configuration view.

<Frame caption="Workflow detail — profiles, analyses count, and Workflow modification.">
  <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-detail.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=a4ad16f39fddb725b5c703d24e97215f" alt="Workflow detail page with profile list" width="1024" height="510" data-path="images/omni/en/workflow-detail.png" />
</Frame>

<Frame caption="Workflow configuration — Policy definition, selected engines, and JSON output schema (after creation or via edit).">
  <img src="https://mintcdn.com/argosidentity/cr3FeY9T9OUFuAKv/images/omni/en/workflow-settings-overview.png?fit=max&auto=format&n=cr3FeY9T9OUFuAKv&q=85&s=f86031aba61eb0ac84831548d0d74bc0" alt="Workflow settings with policy, engines, and JSON output schema" width="1024" height="508" data-path="images/omni/en/workflow-settings-overview.png" />
</Frame>

### Using Your Workflow via the API

With your workflow created, follow this flow to run verifications:

<Steps>
  <Step title="Create a Profile">
    Each verification case (e.g., one invoice, one vendor) gets its own profile under the workflow.

    ```bash theme={null}
    curl -X POST "http://client-omni-api.argosidentity.com/v1/workflows/{workflowId}/profiles" \
      -H "x-api-key: your-api-key-here" \
      -H "Content-Type: application/json" \
      -d '{"name": "Invoice #1234 - Acme Corp"}'
    ```
  </Step>

  <Step title="Upload Documents">
    Upload the documents to be verified into the profile's folder.

    ```bash theme={null}
    curl -X POST "http://client-omni-api.argosidentity.com/v1/folders/{folderId}/items/upload" \
      -H "x-api-key: your-api-key-here" \
      -F "file=@/path/to/invoice.pdf" \
      -F "type=file"
    ```
  </Step>

  <Step title="Wait for ACTIVE Status">
    Poll the item status until all uploaded documents reach `ACTIVE` status. This means OCR and text extraction are complete.

    ```bash theme={null}
    curl -X GET "http://client-omni-api.argosidentity.com/v1/profiles/{profileId}/items/status" \
      -H "x-api-key: your-api-key-here"
    ```

    <Tip>
      Poll at **1-second intervals** with a **60-second timeout**. Do not trigger analysis until all items are `ACTIVE`.
    </Tip>
  </Step>

  <Step title="Trigger Analysis">
    Run the analysis. Omni applies your policy, engines, and output schema automatically.

    ```bash theme={null}
    curl -X POST "http://client-omni-api.argosidentity.com/v1/profiles/{profileId}/analyze" \
      -H "x-api-key: your-api-key-here"
    ```
  </Step>

  <Step title="Retrieve Results">
    Fetch the structured results that match your output schema.

    ```bash theme={null}
    curl -X GET "http://client-omni-api.argosidentity.com/v1/profiles/{profileId}" \
      -H "x-api-key: your-api-key-here"
    ```
  </Step>
</Steps>

For the complete API flow with detailed request/response examples, see the [Quickstart guide](/en/omni/getting-started/quickstart).

## Tips for Success

<AccordionGroup>
  <Accordion title="Start with a template">
    If your use case matches one of the [workflow templates](/en/omni/guides/workflow-templates) (KYB, Invoice, AML, Compliance), start there and customize. It is faster than building from scratch.
  </Accordion>

  <Accordion title="Test with real documents">
    After creating a workflow, run a few test profiles with actual documents to validate that your policy and schema produce the results you expect. Adjust as needed.
  </Accordion>

  <Accordion title="Iterate on your policy">
    Your first policy draft may not be perfect. Review the analysis results, identify where the AI misunderstood your intent, and refine the policy language. Small wording changes can significantly improve accuracy.
  </Accordion>

  <Accordion title="Keep output schemas aligned with your systems">
    Design your output schema to match what your backend or compliance system expects. This eliminates the need for post-processing transformations.
  </Accordion>
</AccordionGroup>

## What's Next?

<CardGroup cols={2}>
  <Card title="Policy Writing Guide" icon="pen" href="/en/omni/guides/policy-writing-guide">
    Learn best practices for writing effective verification policies.
  </Card>

  <Card title="Workflow Automation" icon="arrows-rotate" href="/en/omni/guides/automating-your-sop">
    Transform your manual review processes into automated workflows.
  </Card>
</CardGroup>
