# Handling actions from Neuro

Action commands from Neuro, whether forced or voluntary, have the following structure:

```ts
{
    "command": "action",
    "data": {
        "id": string,
        "name": string,
        "data"?: string
    }
}
```

## `data` Parameters

- `id` - a string that identifies this specific execution. You'll need to use this ID when returning an [action result](/neuro-sdk-docs/base/actions/result).
- `name` - the name of the action Neuro wants to execute. During [action forces](/neuro-sdk-docs/base/actions/force), this will influence whether or not Neuro retries the entire action force.
- `data` - If the action has a schema attached, this field contains the data to fulfill the schema.
**Danger:** The `data` for the action comes from Neuro herself. As such, **do not assume that it will always be correct!**
It may not conform to the schema, or it may even be invalid JSON (potentially missing curly braces, for example).

You need to be able to handle if the data doesn't conform to the schema, and send unsuccessful action results back to Neuro if she doesn't conform to your action's schema.
**Tip:** Most languages already throw an error if they have to parse invalid JSON.
You could try and catch this to send back an unsuccessful action result.

## More info about handling actions

- You should be able to handle an action being sent the moment you unregister that action.
- Neuro will be waiting for the action result before sending another action. For that reason, action results should be about validation, not actual results. [See more at the action result page](/neuro-sdk-docs/base/actions/result)