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

# Report the result

> POST /v1/copy-trading/instructions/status: tell CabalSpy ID whether a copy instruction was executed, failed or skipped, with the transaction signature and the executed amount.

After your app has handled a [copy instruction](https://docs.cabalspy.xyz/cabalspy-id/copy-trading.md#the-instruction), report what happened. Report **every** instruction, also those you did not execute:

* `executed`: the trade went through. Add the transaction signature and the amount in USD.
* `failed`: you tried and it did not work, for example for lack of balance or a failed transaction.
* `skipped`: you decided not to execute it, for example because the price moved beyond `max_price_usd` or `min_price_usd`, the instruction expired, or your own risk rules said no.

The result matters for later sells: a copied buy reported as `failed` or `skipped` means the trader's later sells of that token are not copied for that user, because there is no position to sell. A buy you never report counts as a position.

You can report an instruction after it expired, for example `executed` when your transaction confirmed late.

`executed`, `failed` and `skipped` are final. Sending the same report again is fine and returns the instruction unchanged, so you can retry safely. A different status after that is refused with 409 `already_reported`.

`POST /v1/copy-trading/instructions/status`

### Body

**id** `string` *required*

The instruction id.

**status** `string` *required*

`executed`, `failed` or `skipped`.

**tx\_signature** `string`

The transaction signature or hash, 10 to 200 characters.

**executed\_amount\_usd** `number`

What was actually bought or sold, in USD. Above 0, at most 10,000,000.

**note** `string`

A short note, for example why it failed or was skipped. Longer notes are cut at 300 characters. Shown on the dashboard's [Copy trading](https://docs.cabalspy.xyz/cabalspy-id/dashboard.md#copy-trading) tab.

**api\_key** `string` *required*

Your API key. Alternatively pass it as an Authorization Bearer header.

### Usage Example

```bash cURL theme={null}
curl -X POST "https://api-id.cabalspy.xyz/v1/copy-trading/instructions/status" \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"id": "9d4b2f6e-1c3a-5e7f-8a9b-0c1d2e3f4a5b", "status": "executed", "tx_signature": "4hXt9...", "executed_amount_usd": 19.8}'
```

```python Python theme={null}
import requests

r = requests.post("https://api-id.cabalspy.xyz/v1/copy-trading/instructions/status",
                  json={"id": "9d4b2f6e-1c3a-5e7f-8a9b-0c1d2e3f4a5b", "status": "failed",
                        "note": "insufficient balance"},
                  headers={"Authorization": "Bearer YOUR_KEY"})
print(r.json()["data"]["status"])
```

```javascript JavaScript theme={null}
const res = await fetch("https://api-id.cabalspy.xyz/v1/copy-trading/instructions/status", {
  method: "POST",
  headers: { Authorization: "Bearer YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ id: "9d4b2f6e-1c3a-5e7f-8a9b-0c1d2e3f4a5b", status: "skipped", note: "price above the limit" }),
});
console.log((await res.json()).data.status);
```

### Response

The [instruction](https://docs.cabalspy.xyz/cabalspy-id/copy-trading.md#the-instruction) with its new status, `tx_signature`, `executed_amount_usd`, `note` and `updated_at`.

```json Response theme={null}
{
  "success": true,
  "data": {
    "id": "9d4b2f6e-1c3a-5e7f-8a9b-0c1d2e3f4a5b",
    "type": "copy_instruction",
    "status": "executed",
    "created_at": "2026-11-01T18:02:11Z",
    "expires_at": "2026-11-01T18:04:11Z",
    "csid_id": "3f9a1c2e-5b7d-4e8f-a1b2-c3d4e5f60718",
    "action": { "blockchain": "solana", "mint": "3Pkrq4MmLvDXyn1fa3sz5MekKRkZkc1iLDcz5AzWpump", "side": "buy", "amount_usd": 20.0, "...": "the full action" },
    "...": "the full instruction",
    "tx_signature": "4hXt9...",
    "executed_amount_usd": 19.8,
    "note": null,
    "updated_at": "2026-11-01T18:02:19Z"
  },
  "meta": { "request_id": "req_5162c7cf7f87", "cached": false, "cache_age_seconds": 0, "version": "v1", "timestamp": "2026-11-01T18:02:19Z" }
}
```

### Errors

| Status | Code | Meaning |
| - | - | - |
| 400 | missing\_parameter | id or status is missing. |
| 400 | invalid\_parameter | id is not a valid id, status is not `executed`, `failed` or `skipped`, tx\_signature is not 10 to 200 characters, or executed\_amount\_usd is not a number above 0. `parameter` names it. |
| 401 | missing\_api\_key | API key missing. |
| 403 | invalid\_api\_key | API key invalid or not enabled for CabalSpy ID. |
| 404 | [not\_found](https://docs.cabalspy.xyz/cabalspy-id/errors.md#not_found) | No copy instruction with this id for your instance. |
| 409 | [already\_reported](https://docs.cabalspy.xyz/cabalspy-id/errors.md#already_reported) | The instruction was already reported with a different status. The message names it. |
| 429 | rate\_limit\_exceeded | Rate limit exceeded. |

See [Errors](https://docs.cabalspy.xyz/cabalspy-id/errors.md) for the full list.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.