# Tool parameters

Parameters tell the model which arguments a webhook Tool accepts and tell Operade how to validate every call before any Secret is read or HTTP request is sent.

## Write a closed JSON Schema

Enter a JSON Schema whose root is an `object`. Put named inputs under `properties`, add a useful description to each property, and list mandatory inputs under `required`. Operade validates the schema when the Tool is saved and closes every object with `additionalProperties: false`, including nested objects. This prevents the model from sending undeclared fields.

```json
{
  "type": "object",
  "properties": {
    "order_id": {
      "type": "string",
      "description": "The order identifier supplied by the customer"
    },
    "include_history": {
      "type": "boolean",
      "description": "Whether to include prior status changes"
    }
  },
  "required": ["order_id"]
}
```

Malformed JSON, an invalid schema, missing required values, wrong value types, and extra properties fail validation before authentication or network access.

## Route arguments predictably

An argument named in a URL placeholder such as `{order_id}` is URL-encoded into the path. Other arguments become query parameters for GET and DELETE requests. For POST, PUT, and PATCH requests, the remaining arguments become the JSON body. Operade uses one schema for all three locations, so do not repeat path, query, and body definitions.

## Design for reliable calls

Keep property names stable and descriptions specific. Mark a value required only when the endpoint cannot proceed without it. If the model repeatedly supplies a wrong shape, inspect the `tool_call` record under **[Activity](/docs/monitor/transcript-and-activity)** and improve the description or schema.

Next, configure [authentication and Secrets](/docs/tools/authentication-and-secrets) or learn how [dynamic variables](/docs/tools/dynamic-variables) reuse response values.
