Skip to main content

Modules API

The Modules API provides endpoints for managing site modules in Joomla.

Base URL

/api/index.php/v1/modules

Endpoints Overview

MethodEndpointDescription
GET/modules/siteRetrieve all modules
GET/modules/site/{id}Retrieve specific module
POST/modules/siteCreate new module
PATCH/modules/site/{id}Update module
DELETE/modules/site/{id}Delete module

Retrieve all modules

GET /api/index.php/v1/modules/site

Response

{
"data": [
{
"type": "modules",
"id": "1",
"attributes": {
"title": "Main Menu",
"module": "mod_menu",
"position": "sidebar-left",
"published": 1,
"access": 1,
"showtitle": 1,
"language": "*",
"note": ""
}
}
]
}

Retrieve specific module

GET /api/index.php/v1/modules/site/{id}

Parameters

ParameterTypeDescription
idintegerModule ID

Example

curl -X GET "https://yoursite.com/api/index.php/v1/modules/site/1" \
-H "X-Joomla-Token: YOUR_API_TOKEN"

Create module

POST /api/index.php/v1/modules/site

Request Body

{
"title": "My Custom Module",
"module": "mod_custom",
"position": "sidebar-right",
"published": 1,
"access": 1,
"showtitle": 1,
"language": "*",
"note": "Custom HTML module",
"params": {
"content": "<p>This is custom HTML content</p>"
}
}

Required fields

FieldTypeDescription
titlestringModule title
modulestringModule type
positionstringTemplate position

Optional fields

FieldTypeDefaultDescription
publishedint1Publication status
accessint1Access level
showtitleint1Show title (0=no, 1=yes)
languagestring"*"Language code
notestring""Note
orderingint0Order
paramsobjectModule specific parameters

Example

curl -X POST "https://yoursite.com/api/index.php/v1/modules/site" \
-H "X-Joomla-Token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Welcome Message",
"module": "mod_custom",
"position": "banner",
"published": 1,
"showtitle": 0,
"params": {
"content": "<h2>Welcome to our site!</h2>"
}
}'

Update module

PATCH /api/index.php/v1/modules/site/{id}

Request Body

{
"title": "Updated Module",
"position": "footer",
"published": 0
}

Example

curl -X PATCH "https://yoursite.com/api/index.php/v1/modules/site/1" \
-H "X-Joomla-Token: YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Updated Module Title"
}'

Delete module

DELETE /api/index.php/v1/modules/site/{id}

Example

curl -X DELETE "https://yoursite.com/api/index.php/v1/modules/site/5" \
-H "X-Joomla-Token: YOUR_API_TOKEN"

Module States

ValueStatus
-2Trash
0Unpublished
1Published

Common Module Types

ModuleDescription
mod_menuMenu module
mod_customCustom HTML
mod_articles_latestLatest articles
mod_articles_popularPopular articles
mod_articles_categoryArticles from category
mod_breadcrumbsBreadcrumb trail
mod_loginLogin form
mod_searchSearch form
mod_tags_popularPopular tags
mod_footerFooter information

Template Positions

Template positions vary per template. Common positions:

PositionDescription
bannerBanner area
sidebar-leftLeft sidebar
sidebar-rightRight sidebar
top-aAbove content
bottom-aBelow content
footerFooter
debugDebug position

Filtering

By position

GET /api/index.php/v1/modules/site?filter[position]=sidebar-left

By module type

GET /api/index.php/v1/modules/site?filter[module]=mod_menu

By publication status

GET /api/index.php/v1/modules/site?filter[published]=1

Module Parameters

Each module type has its own parameters. Here is an example for mod_articles_latest:

{
"title": "Latest News",
"module": "mod_articles_latest",
"position": "sidebar-right",
"params": {
"catid": ["2"],
"count": 5,
"show_author": 0,
"show_date": 1,
"show_category": 1
}
}

Modules can be assigned to specific menu items. This is done via the assignment field:

ValueMeaning
0On all pages
-1On no pages
1Only on selected pages
info

Menu assignment via the API is complex. For advanced assignments, prefer using the Joomla administrator interface.