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

# Commission Lines

> Every calculated commission, line by line - review, decline, postpone, and adjust before it becomes a payout.

export const Headless = ({prompts = []}) => {
  const PromptRow = ({prompt}) => {
    const [copied, setCopied] = useState(false);
    const copy = () => {
      try {
        navigator.clipboard?.writeText(prompt);
      } catch {}
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    };
    return <div className="group flex items-center justify-between gap-3 px-4 py-3 transition-colors hover:bg-[#FD90FF]/[0.06]">
        <span className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-200">{prompt}</span>
        <button type="button" onClick={copy} aria-label={copied ? "Copied to clipboard" : "Copy prompt"} className={`shrink-0 rounded-md p-1.5 transition-all hover:bg-[#FD90FF]/10 focus:opacity-100 focus:outline-none ${copied ? "text-[#FD90FF] opacity-100" : "text-zinc-400 opacity-0 group-hover:opacity-100 dark:text-zinc-500"}`}>
          {copied ? <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg> : <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <rect x="9" y="9" width="11" height="11" rx="2" stroke="currentColor" strokeWidth="2" />
              <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>}
        </button>
      </div>;
  };
  return <>
      <p>
        Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
        Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
        action written straight back to your CRM source of truth. The portal is one surface, never the only one.
      </p>

      {prompts.length > 0 ? <div className="not-prose my-6 overflow-hidden rounded-2xl border border-zinc-200/80 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.02]">
          <div className="flex items-center gap-2 border-b border-zinc-200/80 bg-gradient-to-r from-[#FD90FF]/10 via-[#FD90FF]/5 to-transparent px-4 py-2.5 dark:border-white/10">
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4 text-[#FD90FF]" aria-hidden="true">
              <path d="M12 2.5l2 5.5 5.5 2-5.5 2-2 5.5-2-5.5L4.5 10l5.5-2 2-5.5z" fill="currentColor" />
              <path d="M18.5 14l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1 1-2.6z" fill="currentColor" opacity="0.55" />
            </svg>
            <span className="text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
              Try it from your LLM
            </span>
          </div>

          <div className="flex flex-col divide-y divide-zinc-100 dark:divide-white/[0.06]">
            {prompts.map(prompt => <PromptRow key={prompt} prompt={prompt} />)}
          </div>

          <a href="/headless" className="flex items-center justify-between gap-2 border-t border-zinc-200/80 px-4 py-2.5 text-sm font-medium text-zinc-600 no-underline transition-colors hover:text-[#FD90FF] dark:border-white/10 dark:text-zinc-300">
            <span>See the full headless playbook</span>
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic playbook - lifecycle deep dives and a Claude Code skill library that run your partner program
          from Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

> Commission Lines are the calculated detail behind every payout: each qualifying record becomes a line you can review, decline, postpone, or adjust, so what partners get paid is always correct.

## What it does

A commission line is a single calculated commission tied to a qualifying record and a partner.
Introw generates lines automatically from your plans, and each line moves through clear states,
from potential to expected to approved, with its own payment status. Your team reviews these lines
before they become payouts, so errors and edge cases are caught early rather than after a partner
is paid.

You stay in control of every line. Decline a line that should not be paid, postpone one that is
not ready, restore a line that was declined in error, or add a manual line for an adjustment. The
same line data is available through the API, so finance systems can read and act on it
programmatically.

## The problem it solves

Paying partners on un-reviewed calculations is how disputes and overpayments happen:

* **Calculations go straight to payment** → Lines are reviewable before they become payouts.
* **Bad lines slip through** → Decline lines that should not be paid.
* **Timing is wrong for some lines** → Postpone a line until it is ready.
* **Adjustments are impossible** → Add a manual line for corrections.

## From problem to solution

Commission Lines give you a reviewable layer between calculation and payment. Inspect each line,
decline or postpone the ones that need it, and adjust where necessary. Partners get paid the
right amount because every line was checked first.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  calculated["Calculated line"] --> review["Review, decline, adjust"]
  review --> paid["Partner paid the right amount"]
```

## Use cases

<CardGroup cols={2}>
  <Card title="Review before paying" icon="circle-check">
    Catch errors while lines are still pending.
  </Card>

  <Card title="Decline incorrect lines" icon="circle-check">
    Void lines that should not be paid.
  </Card>

  <Card title="Control timing" icon="circle-check">
    Postpone lines that are not ready yet.
  </Card>

  <Card title="Make adjustments" icon="circle-check">
    Add manual lines for corrections.
  </Card>
</CardGroup>

## Impact

* **Low total cost of ownership** - Partner ops controls every line before payment.
* **CRM-native** - Lines trace back to the CRM or billing records that created them.

## Who it's for

<CardGroup cols={2}>
  <Card title="Partner Operations" icon="user">
    Reviews and adjusts lines before payout.
  </Card>

  <Card title="Finance" icon="user">
    Wants accurate, auditable line-level detail.
  </Card>
</CardGroup>

## Works with

{/* CONNECTS:START - generated content goes here */}

<CardGroup cols={2}>
  <Card title="Commission Plans" icon="hand-holding-dollar" href="/features/commissions/commission-plans">
    Lines are produced by plan rules.
  </Card>

  <Card title="Payouts" icon="hand-holding-dollar" href="/features/commissions/payouts">
    Approved lines batch into payouts.
  </Card>

  <Card title="Partner Analytics" icon="chart-line" href="/features/reporting/partner-analytics">
    Earned commission rolls into analytics.
  </Card>
</CardGroup>

## Headless

<Headless
  prompts={[
"Show the commission lines generated for Acme this quarter and the deals behind them.",
"What's earned-but-unpaid for Acme right now?",
"Which deals drove the most commission this month across all partners?",
"Break down this quarter's commission by partner.",
]}
/>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Integration surface and code.
  </Card>
</CardGroup>
