> For the complete documentation index, see [llms.txt](https://hyperhq.gitbook.io/docs-hyper-sh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hyperhq.gitbook.io/docs-hyper-sh/index-2/index-1/index/index-11/create.md).

# Func create

`POST /funcs/create`

**Example request**:

```
POST /funcs/create HTTP/1.1
Content-Type: application/json

{
    "Name": "helloworld",
    "Config": {
        "Cmd": [
            "echo",
            "HelloWorld"
        ],
        "Image": "ubuntu"
    }
}
```

**Example response**:

```
HTTP/1.1 201 Created
Content-Type: application/json

{
    "Name": "helloworld",
    "ContainerSize": "s4",
    "Timeout": 300,
    "UUID": "e62c014e-386c-42ea-8d07-41d44e98cc3d",
    "Created": "2017-03-16T07:05:24.473Z",
    "Config": {
        "Env": [],
        "Cmd": [
            "echo",
            "HelloWorld"
        ],
        "Image": "ubuntu",
        "StopSignal": "SIGTERM"
    },
    "HostConfig": {
        "NetworkMode": "bridge"
    },
    "NetworkingConfig": {
        "EndpointsConfig": null
    }
}
```

**Json parameters**:

* **Name** - the function name.
* **ContainerSize** - the size of containers to run the function (e.g. s1, s2, s3, s4, m1, m2, m3, l1, l2, l3).
* **Timeout** - The maximum execution duration of function call, default is 300 seconds, maximum is 86400 seconds.
* **UUID** - The uuid of function.
* **Created** - The created timestamp of function.
* **Config**
  * **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed.
  * **ExposedPorts** - An object mapping ports to an empty object in the form of:

    &#x20; `"ExposedPorts": { "<port>/<tcp|udp>: {}" }`
  * **Env** - A list of environment variables in the form of `["VAR=value"[,"VAR2=value2"]]`
  * **Cmd** - Command to run specified as a string or an array of strings.
  * **Image** - A string specifying the image name to use for the container.
  * **Entrypoint** - Set the entry point for the container as a string or an array

    &#x20; of strings.
  * **WorkingDir** - A string specifying the working directory for commands to
  * **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}`
  * `IGNORED` **StopSignal** - Signal to stop a container as a string or unsigned integer. `SIGTERM` by default.
* **HostConfig**
  * **Links** - A list of links for the container. Each link entry should be

    &#x20; in the form of `container_name:alias`.
  * **PortBindings** - A map of exposed container ports and the host port they

    &#x20; should map to. A JSON object in the form

    &#x20; `{ <port>/<protocol>: [{ "HostPort": "<port>" }] }`

    &#x20; Take note that `port` is specified as a string and not an integer value.
  * **PublishAllPorts** - Allocates a random host port for all of a container's

    &#x20; exposed ports. Specified as a boolean value.
  * **VolumesFrom** - A list of volumes to inherit from another container.

    &#x20; Specified in the form `<container name>[:<ro|rw>]`
  * **NetworkMode** - Sets the networking mode for the container. Supported

    &#x20; values are: `bridge`, `host`, and `container:<name|id>`

**Status Codes**:

* 201 - no error
* 400 - bad parameter
* 409 - name conflicts with an existing object
* 500 - server error
