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

# Custom Functions

## How to Call Custom Functions in XanoScript

Custom functions in XanoScript are reusable logic blocks defined in the `functions/` directory. To execute a custom function from your API, another function, or a task, use the `function.run` statement.

### Syntax

```javascript theme={null}
function.run <function_name> {
	input = {
		<param1>: <value1>,
		<param2>: <value2>,
		// ...additional parameters
	}
} as <result_variable>
```

* `<function_name>`: Path to your function, e.g., `maths/calculate_total`.
* `input`: Object containing all required and optional parameters as defined in the function’s `input` block.
* `as <result_variable>`: Stores the function’s response for further use.

### Example

Suppose you have a function `maths/calculate_total`:

```javascript theme={null}
function maths/calculate_total {
	input {
		int quantity
		decimal price_per_item
	}
	stack {
		var $total {
			value = $input.quantity * $input.price_per_item
		}
	}
	response = $total
}
```

To call it:

```javascript theme={null}
function.run maths/calculate_total {
	input = {
		quantity: 5,
		price_per_item: 20
	}
} as $result
```

### Usage Tips

* Always match input parameter names and types to the function’s definition.
* Use the returned variable (`$result` above) in subsequent logic or as your API response.
* You can call functions from any other logic.

### Error Handling

If the function uses `precondition` or input filters, invalid inputs will throw an error. Handle errors using `try_catch` if needed.

### Best Practices

* Organize functions in subfolders for clarity.
* Document your function’s inputs and outputs.
