---
name: "curl_easy_init"
section: "3"
platform: "linux"
package: "curl"
version: "8.23.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "macos"]
url: "https://new.carta.tech/curl_easy_init"
---

# curl\_easy\_init(3)

create an easy handle

## NAME

curl\_easy\_init - create an easy handle

## SYNOPSIS

```
#include <curl/curl.h>
CURL *curl_easy_init();
```

## DESCRIPTION

This function allocates and returns an easy handle. Such a handle is used as input to other functions in the easy interface. This call must have a corresponding call to *[curl\_easy\_cleanup(3)](/curl_easy_cleanup/3.md)* when the operation is complete.

The easy handle is used to hold and control a single network transfer. It is encouraged to reuse easy handles for repeated transfers.

An alternative way to get a new easy handle is to duplicate an already existing one with *[curl\_easy\_duphandle(3)](/curl_easy_duphandle/3.md)*, which has the upside that it gets all the options that were set in the source handle set in the new copy as well.

If you did not already call *[curl\_global\_init(3)](/curl_global_init/3.md)* before calling this function, *[curl\_easy\_init(3)](/curl_easy_init/3.md)* does it automatically. This can be lethal in multi-threaded cases for platforms where *[curl\_global\_init(3)](/curl_global_init/3.md)* is not thread-safe, and it may then result in resource problems because there is no corresponding cleanup.

You are strongly advised to not allow this automatic behavior, by calling *[curl\_global\_init(3)](/curl_global_init/3.md)* yourself properly. See the description in *[libcurl(3)](/libcurl/3.md)* of global environment requirements for details of how to use this function.

## PROTOCOLS

This functionality affects all supported protocols

## EXAMPLE

```
int main(void)
{
  CURL *curl = curl_easy_init();
  if(curl) {
    CURLcode result;
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
    result = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
  }
}
```

## AVAILABILITY

Added in curl 7.1

## RETURN VALUE

If this function returns NULL, something went wrong and you cannot use the other curl functions.

## SEE ALSO

[**curl\_easy\_cleanup**(3)](/curl_easy_cleanup/3.md), [**curl\_easy\_duphandle**(3)](/curl_easy_duphandle/3.md), [**curl\_easy\_perform**(3)](/curl_easy_perform/3.md), [**curl\_easy\_reset**(3)](/curl_easy_reset/3.md), [**curl\_global\_init**(3)](/curl_global_init/3.md), [**curl\_multi\_init**(3)](/curl_multi_init/3.md)
