---
title: "act: arm play"
description: "a strategy, the play and its version, the goal it serves, and the share it is armed on with its holdout (a share under one makes the play an experiment) to the armed play with its class proposed from the kind's usual class and the rivals' coverage, and the demand cells it raised"
section: reference
address: /reference/act/arm_play
contract: 0476e35e6e275db5
---

# act: arm play

a strategy, the play and its version, the goal it serves, and the share it is armed on with its holdout (a share under one makes the play an experiment) to the armed play with its class proposed from the kind's usual class and the rivals' coverage, and the demand cells it raised

[figure: The caller sends ArmPlayInput to /v1/act/arm_play. The platform returns a card whose body is ArmPlayAnswer.]

<span class="op-method">POST</span><span class="op-path">/v1/act/arm_play</span>

Arm a play. The call needs the strategy rung under a token with the act grant, and it is served by the platform.

The route takes [ArmPlayInput](/concepts/armplayinput) and returns a card whose body is [ArmPlayAnswer](/concepts/armplayanswer).



## Request body
The request body is [ArmPlayInput](/concepts/armplayinput).



| field | type | required | note |
|---|---|---|---|
| `play` | `id` | yes |  |
| `strategy` | `id` | yes |  |
| `brand` | `id` | yes |  |
| `arm` | `bool` | yes |  |
| `share` | `share` | no | the share of the admitted members the arming admits; absent keeps the play's own |
| `holdout` | `share` | no | the share left alone at random, read as the effect's comparison; absent keeps the play's own |



## Response
The route returns a card whose body is [ArmPlayAnswer](/concepts/armplayanswer). Every card ends with a foot that states the basis of each number, the scope of the call, and the time when the facts were true.

## Headers


| header | required | meaning |
|---|---|---|
| `Scale-Scope` | yes | the scope the call runs in: tenant/<id>, then /brand/<id>, then /strategy/<id> |
| `Scale-As-True-On` | no | the date the facts must have been true on; defaults to now |
| `Scale-As-Known-On` | no | the date the facts must have been known on; defaults to now |
| `Scale-Key` | no | for a change, the key made from the input; a repeat under the same key returns the unit held and writes nothing |



A caller needs the strategy rung and a token with the act grant. The platform serves this route.

## Example
The example sends the smallest body that ArmPlayInput allows. The build validates it against the schema of ArmPlayInput.

<details class="wire"><summary>Example</summary>





```sh
curl -X POST https://api.scaleintelligence.co/v1/act/arm_play \
  -H "Scale-Key: $SCALE_KEY" -H "Scale-Scope: tenant/<id>" \
  -H "content-type: application/json" \
  -d '{ "play": "…", "strategy": "…", "brand": "…", "arm": false }'
```




```typescript
import { client } from "@scale/sdk";
const answer = await client.act.arm_play({
    "play": "…",
    "strategy": "…",
    "brand": "…",
    "arm": false
  });
// answer.body is a ArmPlayAnswer. answer.foot holds the basis, the scope and the time.
```




```python
import requests
answer = requests.post("https://api.scaleintelligence.co/v1/act/arm_play",
    headers={"Scale-Key": KEY, "Scale-Scope": "tenant/<id>"},
    json={
      "play": "…",
      "strategy": "…",
      "brand": "…",
      "arm": false
    }).json()
```




```rust
let answer: Card = client.post("https://api.scaleintelligence.co/v1/act/arm_play")
    .header("Scale-Key", key).header("Scale-Scope", "tenant/<id>")
    .json(&ArmPlayInput { /* the fields of the page */ }).send().await?.json().await?;
```




</details>

## MCP tool
The MCP tool `si.act.arm_play` takes the same input and returns the same card. The tool changes data and needs a grant. An MCP host that renders cards draws this card from `ui://scale-intelligence/cards/ArmPlayAnswer`. The [tool's page](/reference/tools/si-act-arm_play) describes it.
