Skip to content
php class for cpanel's UAPI
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
examples oops - i thought i had pushed this. Jul 7, 2019
otphp Manually add OTPHP Nov 24, 2017
.gitignore changelog and gitignore Jul 13, 2014 Update Apr 18, 2019
changelog.txt Multiple improvements Nov 2, 2016
cpaneluapi.class.php Update cpaneluapi.class.php Mar 15, 2019
license.txt Update license.txt Feb 18, 2018

cPanel UAPI and API2 PHP class

GitHub release

PHP class to provide an easy-to-use interface with cPanel's UAPI and API2. Uses PHP magic functions to provide a simple and powerful interface.

v2.0 is not backwards compatible with v1.x, and will likley undergo a few more changes. See the changelog for details. The class has been renamed to cpanelAPI. Some more testing is required.

  • Note while this class is not depricated, there is a new Agnostic API class available which will do everything this class does (except 2FA) and works with any RESTful / HTTP API - basically anything thats not SOAP.


If you choose to use this class, please Star it in Github. This gives me a better idea of the number of users and those effected when changes are made.

See the example files, but typical usage takes the form of:

Instantiate the class

$cPanel = new cpanelAPI('user', 'password', '');

The API we want to use and the Module (also called Scope) are now protected and are set by __get().

The request layout looks like this: $cPanel->api->method->Module->request(args[])

The ->method part should be replaced with ->get for GET requests and ->post for POST requests, or omitted to default to GET requests.

As an example, suppose we want to use the UAPI to call the Mysql::get_server_information function:

$response = $cPanel->uapi->Mysql->get_server_information();

Now that we have set both the API and the Module, we can call other functions within this API and Module without specifying them again:

$response = $cPanel->create_database(['name' => $cPanel->user.'_MyDatabase']);

We can also change the Module scope without respecifying the API. Note that the Module call is case-sensitive.

$response = $cPanel->SSL->list_certs();

File upload example

$cPanel = new cpanelAPI($username, $password, $hostname);
       ->upload_files(['dir' => REMOTE_PATH_RELATIVE_TO_HOME,
                       'file-1' => new CURLFile(LOCAL_PATH_TO_FILE)


API2 is used in exactly the same way as the UAPI

$cPanel = new cpanelAPI('user', 'password', '');

For example, suppose we want to use the API2 to add a subdomain:

$response = $cPanel->api2->SubDomain->addsubdomain(['rootdomain' => '', 'domain' => 'sub']);

Two-Factor Authentication

To use this class on a cPanel instance with two-factor authentication (2FA), you need to pass the secret into the class constructor:

$cPanel = new cpanelAPI('user', 'password', '', 'secret');

The secret can be found on the 2FA setup page. See Two-Factor Authentication for cPanel – Configure two-factor authentication for details.

You can’t perform that action at this time.