Drupal FAQs

What Is This Feature?

Kapost’s integration with Drupal enables you to publish content you create in Kapost directly to Drupal.

  • Supported content types: HTML
    • Files can be sent to Drupal by implementing the XML-RPC files API, which you can find here.
  • Supported versions: Kapost supports Drupal 7 and Drupal 8
  • Supported analytics: total page views, click-throughs, inbound links, downloads, Facebook shares
  • Kapost uses XML-RPC to interact with Drupal

How It Helps

Drupal is an open-source content management software. It provides a framework for websites, ranging from personal blogs to corporate and government sites. Drupal’s modules and tools enable users to build versatile, structured content for dynamic web experiences.

Drupal is highly customizable. We recommend that you speak with your Kapost Implementation Manager or Customer Success Manager to discuss the best way to set up this integration.


This article includes many questions and their answers about your Kapost-Drupal 7 or 8 integration. If the following information doesn’t provide the answers you’re looking, speak with your Kapost customer success manager.

The quickest way to find the information you’re looking for is to use ctrl+F on a PC, or command+F on a Mac, to search for a key term.

I’ve worked with a Kapost developer to make my Drupal site Kapost-ready.  What’s next?

Each of your Drupal nodes (or, blog types or content types) must be created as a separate connection in Kapost, so we recommend you work with your Kapost customer success team to complete this.

For example, if your Drupal blog has two content types/nodes called Articles and Stories, each one will have its own connection in the Kapost App Center settings in your instance.

If you’re comfortable setting up these connections for your Drupal site, you can complete this in the App Center settings in your Kapost instance. Instructions are detailed here.


Why am I getting an error when I try to connect my Drupal site to the Kapost App Center in my instance?

First, ensure your username and password are up to date in Drupal.

One you confirm your credentials, the error may be arising from using a longform of your blog’s URL. Kapost requires the simplest form of the URL. For example, if the longform URL is “,” the simple URL would be “”

If using a simple URL doesn’t resolve the error, please submit a support ticket and our team will help troubleshoot:


How do Drupal upgrades impact my integration?

Kapost supports Drupal 7 and 8. Upgrades will rarely affect the module, and will not impact your Kapost instance.

If your Drupal site(s) are heavily customized, any upgrades to themes you’re using, or to your custom-built modules, could affect the Kapost module and cause issues during publishing. Let your Kapost customer success team know before your organization makes upgrades to avoid potential issues.


What if I’m experiencing a connection issue?

A connection issue likely will return a 302, 404, 401, or 403 error.

A 302 error means that the XML-RPC endpoint is redirecting.

  • This is generally the case if the Drupal instance redirects automatically from http to https and the URL in Kapost is using http.
  • Alternatively, this occurs when your Drupal instance blindly enforces trailing slashes in URLs, and the rule happens to also be applied to xmlrpc.php. In this case, the solution is to set a custom endpoint.


A 404 error means that the XML-RPC endpoint is not in the “assumed” default location, or it has been disabled via the means of .htaccess or other server configuration.

A 401 or 403 error is an authentication error and it means one of two things.

1) The .htaccess rules or other server configuration has been used to disable the XML-RPC endpoint. To resolve this, we need to work with your developers or devops team.

2) The XML-RPC endpoint is behind a “Basic Authentication Challenge,” in which case the username and password can be embedded in the URL (or endpoint URL if a custom endpoint is used). The following formula can be used to do this: (the user and password are separated with a ‘:’).

Access the XML-RPC endpoint directly in your browser.

  • If you’re using Drupal 7, you should see the message: “XML-RPC server accepts POST requests only.”
  • If you’re using Drupal 8, you should see the message: “The website encountered an unexpected error. Please try again later.”

If there’s any other message or this redirects, then the XML-RPC endpoint is not available or it has been tampered with. This means that it must be restored in order for Kapost to be able to connect.

  • The actual endpoint URL is always: siteurl + /xmlrpc.php

Where siteurl is the “root” URL of the Drupal instance, and it doesn’t include admin or login.php. For example, if the Drupal instance is located at then the endpoint URL is


Why isn't my featured image being published correctly?

First, make sure the Kapost Byline Module is downloaded and installed. Then, confirm that the image allotment size in Drupal is set as high as possible to enable images to publish from Kapost to your Drupal site.

If you’ve checked these and you’re still experiencing this issue, contact Kapost Support:


What if my author names or bios aren’t carrying through to Drupal from Kapost?

First, make sure the Kapost Byline Module is downloaded and installed. Then, confirm the author's email listed in Kapost matches the email listed in Drupal.

If you’ve checked these and you’re still experiencing this issue, contact Kapost Support:


What if I want to publish a piece of content with a different author than the one listed in Kapost?

If the author in Drupal isn’t a user in Kapost, you’ll need to create a custom field to note the Drupal author email to be associated with the content asset when you publish it. Instructions for doing this can be found here.


Why are my analytics listed at 0?

First, make sure the Kapost Byline Module is downloaded and installed. Then, ensure that you have a tracking method set up by integrating with Google Analytics.

Check the performance tracking option in your general settings in Kapost. If you check this box and Google Analytics isn’t installed, Kapost will add a tracking code to every published asset to collect analytics.


What happens if I want to remove a piece of content from Kapost that I published to Drupal?

First, republish the content as a draft in Kapost. This will make it hidden in Drupal. To do this, click the publish button on the content in Kapost and choose draft in the modal.

Next, edit your content. Republish the content when it’s ready to be live again on your Drupal site.

Don’t remove the content asset from Drupal and then republish it from Kapost. You’ll encounter an error that will require assistance from Kapost Support. Only remove a content asset from Drupal if you’re not going to republish it later from Kapost.


What should I do when I need to debug XML-RPC?

The first thing to do when you need to debug XML-RPC is to fire up a Python (3) shell and use the bundled xmlrpc library:


>>> import xmlprc.client

>>> s = xmlrpc.client.ServerProxy("")

>>> s.system.listMethods()

[‘system.multicall', 'system.listMethods', 'system.getCapabilities', …]



This will let you check if the XML-RPC endpoint is working and confirm the existence of various XML-RPC methods, such as “kapost.version” which is exposed by the Kapost Drupal module.

If this call fails, then the XML-RPC endpoint is not working.


To check the Kapost Drupal module version:

>>> import xmlprc.client

>>> s = xmlrpc.client.ServerProxy("")

>>> s.kapost.version()




To check the available blogs:


>>> import xmlprc.client

>>> s = xmlrpc.client.ServerProxy("")

>>> s.blogger.getUsersBlogs(‘1’, ‘admin’, ‘password’)

[{'url': '', 'blogid': 'article', 'blogName': 'admin: article'}]



To see the actual RAW HTTP requests, one can initialize the XML-RPC client like so:


>>> s = xmlrpc.client.ServerProxy("", verbose = True)



If the Drupal instance has problems with its SSL certificates, then it’s possible to disable SSL verification by initializing the XML-RPC client:


>>> import ssl

>>> s = xmlrpc.client.ServerProxy("", context=ssl._create_unverified_context())



Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request