# Screening

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

> Screening tags the legal floor of every Offer and withdraws any Offer the Startup cannot lawfully deliver.

Screening tags the legal floor of every [Offer](/business/nouns/offer) and withdraws any Offer the [Startup](/business/nouns/startup) cannot lawfully deliver.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each Offer is tagged for Reserved Acts, regulated data and Credentials, and stays unpublished while any Credential is missing. |
| Reads | [Offer](/business/nouns/offer) |
| Leaves | [Offer](/business/nouns/offer), [Reserved Act](/business/nouns/reserved-act) |
| Runs in | Each Startup |

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

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Screen an Offer](/workflows/processes/screening/screen-offer) | on `Offer.created` | [Legal Team](/agents/legal) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Screen an Offer](/workflows/processes/screening/screen-offer) | 1. Tag each Reserved Act the Offer performs. | [Compliance Officer](/agents/legal/compliance-officer) | [ReservedAct.create](/business/nouns/reserved-act/create) | None |
| [Screen an Offer](/workflows/processes/screening/screen-offer) | 2. Tag each class of regulated data it touches. | [Compliance Officer](/agents/legal/compliance-officer) | [Offer.update](/business/nouns/offer/update) | None |
| [Screen an Offer](/workflows/processes/screening/screen-offer) | 3. List the Credentials delivery requires. | [Compliance Officer](/agents/legal/compliance-officer) | [Credential.list](/business/nouns/credential/list) | None |
| [Screen an Offer](/workflows/processes/screening/screen-offer) | 4. Keep the Offer unpublished while any Credential is missing. | [Compliance Officer](/agents/legal/compliance-officer) | [Offer.withdraw](/business/nouns/offer/withdraw) | Asks first |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Offer.created` | Starts [Screen an Offer](/workflows/processes/screening/screen-offer) |
| Out | `ReservedAct.created` | Raised by step 1 of [Screen an Offer](/workflows/processes/screening/screen-offer) |
| Out | `Offer.updated` | Raised by step 2 of [Screen an Offer](/workflows/processes/screening/screen-offer) |
| Out | [`Offer.withdrawn`](/business/events/Offer.withdrawn) | Raised by step 4 of [Screen an Offer](/workflows/processes/screening/screen-offer) |

## Plays
No Play names this Process.

## Controls
No Control names this Process or a Workflow of it.

## Settings
None.

## 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 [Licensing](/systems/legal-and-corporate/floor/licensing).

## Code

**Ask**

```text
Turn on screening
```

**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.

## Example
A home-appraisal service adds an Offer for signed appraisal reports. [Screen an Offer](/workflows/processes/screening/screen-offer) tags appraisal signing as a [Reserved Act](/business/nouns/reserved-act) and holds the Offer until an appraiser's [Credential](/business/nouns/credential) is on file.