# Contracting

URL: /workflows/processes/contracting · Id: `process:contracting`

> Contracting covers every Agreement the Startup offers or signs, from its published terms to a negotiated contract.

Contracting covers every [Agreement](/business/nouns/agreement) the [Startup](/business/nouns/startup) offers or signs, from its published terms to a negotiated contract.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | The terms and privacy notice are live before launch, and each incoming Agreement returns signable within the fallback positions or with an Approval. |
| Reads | [Agreement](/business/nouns/agreement) |
| Leaves | [Agreement](/business/nouns/agreement), [Purpose](/business/nouns/purpose), [Page](/business/nouns/page), [Approval](/business/nouns/approval) |
| Runs in | Each Startup |

## Accountable
[Legal Lead](/agents/legal/legal-lead), [Legal Team](/agents/legal).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Publish terms](/workflows/processes/contracting/publish-terms) | on `Startup.created` | [Legal Team](/agents/legal) |
| [Review a contract](/workflows/processes/contracting/review-contract) | on `Agreement.created` | [Legal Team](/agents/legal) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Publish terms](/workflows/processes/contracting/publish-terms) | 1. Draft the terms from the Startup’s Offers and jurisdictions. | [Legal Lead](/agents/legal/legal-lead) | [Agreement.create](/business/nouns/agreement/create) | None |
| [Publish terms](/workflows/processes/contracting/publish-terms) | 2. Draft the privacy notice from the data the Products store. | [Legal Lead](/agents/legal/legal-lead) | [Document.create](/business/nouns/document/create) | None |
| [Publish terms](/workflows/processes/contracting/publish-terms) | 3. Declare a Purpose for each use of personal data. | [Legal Lead](/agents/legal/legal-lead) | [Purpose.create](/business/nouns/purpose/create) | None |
| [Publish terms](/workflows/processes/contracting/publish-terms) | 4. Publish the terms and the privacy notice as Pages on the Startup’s Site. | [Legal Lead](/agents/legal/legal-lead) | [Page.create](/business/nouns/page/create) | None |
| [Review a contract](/workflows/processes/contracting/review-contract) | 1. Compare each clause with the fallback positions. | [Contracts Manager](/agents/legal/contracts-manager) | [Agreement.get](/business/nouns/agreement/get) | None |
| [Review a contract](/workflows/processes/contracting/review-contract) | 2. Accept, redline, or reject each clause. | [Contracts Manager](/agents/legal/contracts-manager) | [Agreement.update](/business/nouns/agreement/update) | None |
| [Review a contract](/workflows/processes/contracting/review-contract) | 3. Create an Approval for any term outside the fallbacks. | [Contracts Manager](/agents/legal/contracts-manager) | [Approval.create](/business/nouns/approval/create) | None |
| [Review a contract](/workflows/processes/contracting/review-contract) | 4. Return a signable draft. | [Contracts Manager](/agents/legal/contracts-manager) | [Document.render](/business/nouns/document/render) | Within a Mandate |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Startup.created` | Starts [Publish terms](/workflows/processes/contracting/publish-terms) |
| In | On `Agreement.created` | Starts [Review a contract](/workflows/processes/contracting/review-contract) |
| Out | `Agreement.created` | Raised by step 1 of [Publish terms](/workflows/processes/contracting/publish-terms) |
| Out | `Document.created` | Raised by step 2 of [Publish terms](/workflows/processes/contracting/publish-terms) |
| Out | `Purpose.created` | Raised by step 3 of [Publish terms](/workflows/processes/contracting/publish-terms) |
| Out | `Page.created` | Raised by step 4 of [Publish terms](/workflows/processes/contracting/publish-terms) |
| Out | `Agreement.updated` | Raised by step 2 of [Review a contract](/workflows/processes/contracting/review-contract) |
| Out | `Approval.created` | Raised by step 3 of [Review a contract](/workflows/processes/contracting/review-contract) |
| Out | [`Document.rendered`](/business/events/Document.rendered) | Raised by step 4 of [Review a contract](/workflows/processes/contracting/review-contract) |

## Plays
No Play names this Process.

## Controls
- [Conduct](/systems/trust-and-governance/controls/conduct)
- [Upstream review](/systems/trust-and-governance/controls/upstream-review)
- [Health data agreements](/systems/trust-and-governance/controls/health-data-agreements)
- [Privacy notice](/systems/trust-and-governance/controls/privacy-notice)
- [Disclosure record](/systems/trust-and-governance/controls/disclosure-record)

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `contracts.reviewWithin` | `string` | `2d` | Return contract redlines within two days | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Legal Lead](/agents/legal/legal-lead).

## Loop
No loop: the path is never randomized, because it serves [Notices](/systems/legal-and-corporate/floor/notices).

## Code

**Ask**

```text
Turn on contracting
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for every Product Template. [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Return contract redlines within two days
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":"2d","key":"contracts.reviewWithin"}'
```

**SDK**

```ts
import { $ } from 'startup-builder'

await $.Setting.update({ id: 'setting_1', value: '2d', key: 'contracts.reviewWithin' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":"2d","key":"contracts.reviewWithin"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Setting.update({ id: 'setting_1', value: '2d', key: 'contracts.reviewWithin' })"
  }
}
```

## Example
A tutoring marketplace launches with published terms, a privacy notice and parental [Consent](/business/nouns/consent) drawn from its definition. Months later a school district asks for unlimited liability. [Review a contract](/workflows/processes/contracting/review-contract) redlines it to 12 months of fees and returns a draft the district signs.