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

# FCALL

> Invoke a function.

## Arguments

<ParamField body="function" type="string" required>
  The function name.
</ParamField>

<ParamField body="keys" type="string[]">
  The keys that the function accesses.

  <Warning>
    The function can only read/write from the keys that are provided in the `keys` argument.
  </Warning>
</ParamField>

<ParamField body="args" type="string[]">
  The arguments for the function.
</ParamField>

## Response

<ResponseField type="unknown" required>
  The return value of the function.
</ResponseField>

<RequestExample>
  ```ts Basic theme={"system"}
  const code = `
  #!lua name=mylib
  redis.register_function('helloworld', 
    function()
      return 'Hello World!'
    end
  )
  `;

  await redis.functions.load({ code, replace: true });

  const res = await redis.functions.call("helloworld");
  console.log(res); // "Hello World!"
  ```

  ```ts Advanced theme={"system"}
  const code = `
  #!lua name=mylib

  redis.register_function('my_hset',
    function (keys, args)
      local hash = keys[1]
      local time = redis.call('TIME')[1]
      return redis.call('HSET', hash, '_last_modified_', time, unpack(args))
    end
  )
  `;

  await redis.functions.load({ code, replace: true });

  const res = await redis.functions.call(
    "my_hset",
    ["myhash"],
    [
      "myfield",
      "some value",
      "another_field",
      "another value",
    ],
  );
  ```
</RequestExample>
