The ConvertKit PHP SDK provides convinient access to the ConvertKit API from applications written in the PHP language.
It includes a pre-defined set of methods for interacting with the API.
SDK Version | API Version | API Authentication | PHP Version |
---|---|---|---|
1.x | v3 | API Key and Secret | 7.4+ |
2.x | v4 | OAuth | 8.0+ |
Refer to this guide for changes when upgrading to the v2 SDK.
You can install this PHP SDK via Composer. Run the following command:
composer require convertkit/convertkitapi
To use the PHP SDK, use Composer's autoload:
require_once 'vendor/autoload.php';
The PHP SDK require the following extensions in order to work properly:
If you use Composer, these dependencies should be handled automatically.
First, register your OAuth application in the OAuth Applications
section at https://app.convertkit.com/account_settings/advanced_settings.
Using the supplied Client ID and secret, redirect the user to ConvertKit to grant your application access to their ConvertKit account.
// Require the autoloader (if you're using a PHP framework, this may already be done for you).
require_once 'vendor/autoload.php';
// Initialize the API class.
$api = new \ConvertKit_API\ConvertKit_API(
clientID: '<your_oauth_client_id>',
clientSecret: '<your_oauth_client_secret>'
);
// Redirect to begin the OAuth process.
header('Location: '.$api->get_oauth_url('<your_redirect_uri>'));
Once the user grants your application access to their ConvertKit account, they'll be redirected to your Redirect URI with an authorization code. For example:
your-redirect-uri?code=<auth_code>
At this point, your application needs to exchange the authorization code for an access token and refresh token.
$result = $api->get_access_token(
authCode: '<auth_code>',
redirectURI: '<your_redirect_uri>'
);
$result
is an array comprising of:
access_token
: The access token, used to make authenticated requests to the APIrefresh_token
: The refresh token, used to fetch a new access token once the current access token has expiredcreated_at
: When the access token was createdexpires_in
: The number of seconds fromcreated_at
that the access token will expire
Once you have an access token, re-initialize the API class with it:
// Initialize the API class.
$api = new \ConvertKit_API\ConvertKit_API(
clientID: '<your_oauth_client_id>',
clientSecret: '<your_oauth_client_secret>',
accessToken: '<your_access_token>'
);
To refresh an access token:
$result = $api->refresh_token(
refreshToken: '<your_refresh_token>',
redirectURI: '<your_redirect_uri>'
);
$result
is an array comprising of:
access_token
: The access token, used to make authenticated requests to the APIrefresh_token
: The refresh token, used to fetch a new access token once the current access token has expiredcreated_at
: When the access token was createdexpires_in
: The number of seconds fromcreated_at
that the access token will expire
Once you have refreshed the access token i.e. obtained a new access token, re-initialize the API class with it:
// Initialize the API class.
$api = new \ConvertKit_API\ConvertKit_API(
clientID: '<your_oauth_client_id>',
clientSecret: '<your_oauth_client_secret>',
accessToken: '<your_new_access_token>'
);
API requests may then be performed:
$result = $api->add_subscriber_to_form(12345, '[email protected]');
To determine whether a new entity / relationship was created, or an existing entity / relationship updated, inspect the HTTP code of the last request:
$result = $api->add_subscriber_to_form(12345, '[email protected]');
$code = $api->getResponseInterface()->getStatusCode(); // 200 OK if e.g. a subscriber already added to the specified form, 201 Created if the subscriber added to the specified form for the first time.
The PSR-7 response can be fetched and further inspected, if required - for example, to check if a header exists:
$result = $api->add_subscriber_to_form(12345, '[email protected]');
$api->getResponseInterface()->hasHeader('Content-Length'); // Check if the last API request included a `Content-Length` header
Get your ConvertKit API Key and API Secret here and set it somewhere in your application.
// Require the autoloader (if you're using a PHP framework, this may already be done for you).
require_once 'vendor/autoload.php';
// Initialize the API class.
$api = new \ConvertKit_API\ConvertKit_API('<your_public_api_key>', '<your_secret_api_key>');
The ConvertKit PHP SDK uses Guzzle for all HTTP API requests. Errors will be thrown as Guzzle's ClientException
(for 4xx errors),
or ServerException
(for 5xx errors).
try {
$forms = $api->add_subscriber_to_form('invalid-form-id');
} catch (GuzzleHttp\Exception\ClientException $e) {
// Handle 4xx client errors.
die($e->getMessage());
} catch (GuzzleHttp\Exception\ServerException $e) {
// Handle 5xx server errors.
die($e->getMessage());
}
For a more detailed error message, it's possible to fetch the API's response when a ClientException
is thrown:
// Errors will be thrown as Guzzle's ClientException or ServerException.
try {
$forms = $api->form_subscribe('invalid-form-id');
} catch (GuzzleHttp\Exception\ClientException $e) {
// Handle 4xx client errors.
// For ClientException, it's possible to inspect the API's JSON response
// to output an error or handle it accordingly.
$error = json_decode($e->getResponse()->getBody()->getContents());
die($error->message); // e.g. "Entity not found".
} catch (GuzzleHttp\Exception\ServerException $e) {
// Handle 5xx server errors.
die($e->getMessage());
}
See the PHP SDK docs
See our contributor guide for setting up your development environment, testing and submitting a PR.
For ConvertKit, refer to the deployment guide on how to publish a new release.