---
title: Quickstart
path: quickstart
status: published
---

# Quickstart

From zero to a deployed Echo agent in five minutes.

## 1. Open the canvas

Visit your tenant's ScaiFlow canvas (your operator will give you the URL — typically `https://scaiflow.<your-domain>`). Sign in with [ScaiKey](/docs/scaikey).

A fresh canvas opens with an empty flow named **Untitled Flow**.

## 2. Drop an entry and an LLM block

- From the left palette under **Entry points**, drag **API Entry** onto the canvas.
- From **LLM blocks**, drag **Flexible Prompt** onto the canvas to the right of the entry.

## 3. Wire the edge

Drag from the API Entry's `out_request` port to the Flexible Prompt's `in_message` port. ScaiFlow creates a sequential edge.

## 4. Configure the LLM step

Click the Flexible Prompt node. In the right-side property panel:

- **Goal**: `Echo the user's message back verbatim.`
- **Model role**: `primary` (the default — comes from the flow's model registry).
- **Output schema**: leave as `{}` for now.

## 5. Save + deploy

- Click **Save**. The flow is persisted to your tenant.
- Click **Deploy**. ScaiFlow compiles the flow to YAML and POSTs it to ScaiGrid. After a few seconds you'll see a toast: `Deployed core_id=core_abc123`.

You now have a running ScaiCore Core. To invoke it:

```bash
curl -X POST "https://scaigrid.scailabs.ai/v1/modules/scaicore/cores/${CORE_ID}/invoke" \
  -H "Authorization: Bearer ${SCAIGRID_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"input": {"message": "hello"}}'
```

## Make it a chat model

In the flow's property panel (click empty canvas to deselect), check **Publish as chat model**. Save + deploy again. The Core is now reachable via the OpenAI-compatible chat API at slug `scaicore/<your-tenant>/echo-agent`:

```bash
curl -X POST "https://scaigrid.scailabs.ai/v1/chat/completions" \
  -H "Authorization: Bearer ${SCAIGRID_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "scaicore/'"$TENANT"'/echo-agent",
    "messages": [{"role": "user", "content": "hello"}]
  }'
```

## What just happened

The canvas serialized your two-node graph to a `FlowGraph` JSON. The backend compiler turned that into a YAML manifest with one `api` trigger and one `llm_turn` step. The deploy step `POST`ed that YAML to `/v1/modules/scaicore/cores` on ScaiGrid, which returned a `core_id`. The optional publish step registered a `FrontendModel` against your tenant.

Read **[Concepts: Architecture](./concepts/architecture)** to understand the pieces that just moved.

## Next steps

- **[Tutorial: Customer support flow](./tutorials/customer-support-flow)** — branch on intent, call a knowledge plugin, route to a human reviewer.
- **[Tutorial: HITL approval](./tutorials/expense-approval-with-hitl)** — pause execution at a checkpoint and resume via ScaiQueue.
- **[Reference: REST API](./reference/rest-api)** — automate flow management from your CI.
