• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn more.

XenForo API in Python


Well-known member
I know I'm not a programmer/developer and I don't pretend to be one, but reading the code - it looks like it leverages the XF user permissions... which is awesome...except for the fact everyone is going to be assigning it by default an XF admin account.

Digital Doctor

Well-known member
Cool :)


PyXenForoAPI is module that'll help you interact with websites running the famous XenForo forum.


Post in a thread
Edit a post
Delete a post
Create a thread in a specific section
Edit a thread
Start a new conversation
Reply to a conversation
Get all messages from a conversation

From PyPi:

$ pip install pyxenforoapi

$ easy_install pyxenforoapi
Or clone from Github:

$ git clone https://github.com/lqaz/pyxenforoapi

$ cd pyxenforoapi

$ sudo python3 setup.py install


from pyxenforoapi import pyxenforo

xf = pyxenforo.Xenforo(username, password, site)
If you want to use a proxy to login, pass the proxy parameter, the proxy must be passed as a dict. Example:

xf = pyxenforo.Xenforo(username, password, site, proxy={"http:" "http://user:pass@host:port/", "https": "https://user:pass@host:port/"})

username (str): The username you login with

password (str): Password to your account

site (str): Website to login to

Keyword args:

proxy (dict): Optional to pass, specify proxy as a dictionary if you wish to use a proxy. The proxy will be used on all your actions, only need to specify it once


LoginError if the login was unsuccessful

Post in a thread:

xf.post_in(thread, reply)

thread (str): thread id to post in

reply (str): message to reply with

Edit a post:

xf.edit_post(post_id, text)

post_id (str): id of the post to edit

text (str): text to replace the current post with

Delete a post:

xf.delete_post(post_id, delete_value, reason)

post_id (str): the ID of the post you want to delete.

delete_value (int): whether to soft (0) or hard delete a post (1)

reason (str): reason for removal of the post, empty string equals no reason.

Create a thread:

xf.create_thread_in(section, title, body)

section (str): which section to post the thread in

title (str): what to title the thread

body (str): the message of the thread

Edit a thread:

xf.edit_thread(thread, new_title)

thread (str): id of the thread you wish to edit

new_title (str): what to replace the current title with

Start a new conversation:

xf.new_conversation(recipient, title, message)

recipients (str): The names of users you want to start a conversation with. Separate names with comma

title (str): The title of the conversation

message (str): The message you want to start the conversation with

Reply to a conversation:

xf.reply_to_conversation(conversation_id, message)

message (str): The message to reply with

conversation_id (str): The conversation to add a reply to

Get conversation messages:


conversation_id (str): The conversation to get messages from


PyXenForoAPI is protected by the MIT license.