Matomo Languages Manager API

The LanguagesManager API lets you access existing Matomo translations, and change Users languages preferences. "getTranslationsForLanguage" will return all translation strings for a given language, so you can leverage Matomo translations in your application (and automatically benefit from the 40+ translations!). This is mostly useful to developers who integrate Matomo API results in their own application. You can also request the default language to load for a user via "getLanguageForUser", or update it via "setLanguageForUser".

Operations 9

GET /index.php?module=API&method=LanguagesManager.isLanguageAvailable #
GET /index.php?module=API&method=LanguagesManager.getAvailableLanguages #
GET /index.php?module=API&method=LanguagesManager.getAvailableLanguagesInfo #
GET /index.php?module=API&method=LanguagesManager.getAvailableLanguageNames #
GET /index.php?module=API&method=LanguagesManager.getTranslationsForLanguage #
GET /index.php?module=API&method=LanguagesManager.getLanguageForUser #
GET /index.php?module=API&method=LanguagesManager.setLanguageForUser #
GET /index.php?module=API&method=LanguagesManager.uses12HourClockForUser #
GET /index.php?module=API&method=LanguagesManager.set12HourClockForUser #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/matomo-languagesmanager-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

matomo-languagesmanager-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Matomo Reporting API for plugin Languages Manager API
  version: 1.0.0
  description: The LanguagesManager API lets you access existing Matomo translations, and change Users languages preferences.  "getTranslationsForLanguage" will return all translation strings for a given language, so you can leverage Matomo translations in your application (and automatically benefit from the <a href='https://matomo.org/translations/' rel='noreferrer' target='_blank'>40+ translations</a>!). This is mostly useful to developers who integrate Matomo API results in their own application.  You can also request the default language to load for a user via "getLanguageForUser", or update it via "setLanguageForUser".
servers:
- url: https://demo-proxy.innocraft.cloud/
  description: Current Matomo instance
security:
- MatomoToken: []
tags:
- name: LanguagesManager
  description: The LanguagesManager API lets you access existing Matomo translations, and change Users languages preferences.  "getTranslationsForLanguage" will return all translation strings for a given language, so you can leverage Matomo translations in your application (and automatically benefit from the <a href='https://matomo.org/translations/' rel='noreferrer' target='_blank'>40+ translations</a>!). This is mostly useful to developers who integrate Matomo API results in their own application.  You can also request the default language to load for a user via "getLanguageForUser", or update it via "setLanguageForUser".
paths:
  /index.php?module=API&method=LanguagesManager.isLanguageAvailable:
    get:
      tags:
      - LanguagesManager
      description: Returns whether a language code can be used in the current Matomo instance.
      operationId: LanguagesManager.isLanguageAvailable
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: languageCode
        in: query
        description: The ISO language code to validate.
        required: true
        schema:
          type: string
          example: en
      - name: _ignoreConfig
        in: query
        description: Whether to ignore the configured language allowlist.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: 'True if the language is available, `false` otherwise.


            Example responses require Super User access. Use Try it out to see a live response.'
          content:
            text/xml: []
            application/json: []
            application/vnd.ms-excel: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.getAvailableLanguages:
    get:
      tags:
      - LanguagesManager
      description: Returns the available Matomo language codes.
      operationId: LanguagesManager.getAvailableLanguages
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: _ignoreConfig
        in: query
        description: Whether to ignore the configured language allowlist.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: 'Available ISO language codes.


            Example responses require Super User access. Use Try it out to see a live response.'
          content:
            text/xml: []
            application/json: []
            application/vnd.ms-excel: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.getAvailableLanguagesInfo:
    get:
      tags:
      - LanguagesManager
      description: Returns translation coverage information for each available language.
      operationId: LanguagesManager.getAvailableLanguagesInfo
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: excludeNonCorePlugins
        in: query
        description: Whether to exclude non-core plugins from the translation percentage calculation.
        required: false
        schema:
          type: boolean
          default: true
      - name: _ignoreConfig
        in: query
        description: Whether to ignore the configured language allowlist.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: 'Translation metadata for each available language, including code, names, translators, and completion percentage.


            Example responses require Super User access. Use Try it out to see a live response.'
          content:
            text/xml: []
            application/json: []
            application/vnd.ms-excel: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.getAvailableLanguageNames:
    get:
      tags:
      - LanguagesManager
      description: Returns the available languages with their localized and English names.
      operationId: LanguagesManager.getAvailableLanguageNames
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: _ignoreConfig
        in: query
        description: Whether to ignore the configured language allowlist.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: 'Available languages with `code`, `name`, and `english_name` fields.


            Example responses require Super User access. Use Try it out to see a live response.'
          content:
            text/xml: []
            application/json: []
            application/vnd.ms-excel: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.getTranslationsForLanguage:
    get:
      tags:
      - LanguagesManager
      description: Returns translation strings for a specific language across core and loaded plugins.
      operationId: LanguagesManager.getTranslationsForLanguage
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: languageCode
        in: query
        description: The ISO language code to load.
        required: true
        schema:
          type: string
          example: en
      responses:
        '200':
          description: 'Translation entries with `label` and `value` keys, or `false` if the language is unavailable.


            Example responses require Super User access. Use Try it out to see a live response.'
          content:
            text/xml: []
            application/json: []
            application/vnd.ms-excel: []
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.getLanguageForUser:
    get:
      tags:
      - LanguagesManager
      description: Returns the saved language preference for a user.
      operationId: LanguagesManager.getLanguageForUser
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: login
        in: query
        description: The user login to read the language for.
        required: true
        schema:
          type: string
          example: alice
      responses:
        '200':
          description: 'The saved language code, or `false` for the anonymous user.


            Example responses require Super User access. Use Try it out to see a live response.'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.setLanguageForUser:
    get:
      tags:
      - LanguagesManager
      description: Stores the language preference for a user.
      operationId: LanguagesManager.setLanguageForUser
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: login
        in: query
        description: The user login to update.
        required: true
        schema:
          type: string
          example: alice
      - name: languageCode
        in: query
        description: The ISO language code to store.
        required: true
        schema:
          type: string
          example: en
      responses:
        '200':
          description: '`true` if the language was stored, `false` if the language code is unavailable.


            Example responses require Super User access. Use Try it out to see a live response.'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.uses12HourClockForUser:
    get:
      tags:
      - LanguagesManager
      description: Returns whether a user prefers 12-hour time formatting.
      operationId: LanguagesManager.uses12HourClockForUser
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: login
        in: query
        description: The user login to query.
        required: true
        schema:
          type: string
          example: alice
      responses:
        '200':
          description: '`true` if the user uses a 12-hour clock, `false` otherwise or for the anonymous user.


            Example responses require Super User access. Use Try it out to see a live response.'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
  /index.php?module=API&method=LanguagesManager.set12HourClockForUser:
    get:
      tags:
      - LanguagesManager
      description: Stores whether a user prefers 12-hour time formatting.
      operationId: LanguagesManager.set12HourClockForUser
      parameters:
      - $ref: '#/components/parameters/formatOptional'
      - name: login
        in: query
        description: The user login to update.
        required: true
        schema:
          type: string
          example: alice
      - name: use12HourClock
        in: query
        description: Whether to enable 12-hour clock formatting.
        required: true
        schema:
          type: boolean
          example: true
      responses:
        '200':
          description: '`true` if the preference was stored, `false` for the anonymous user.


            Example responses require Super User access. Use Try it out to see a live response.'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
        default:
          $ref: '#/components/responses/DefaultError'
components:
  responses:
    NotFound:
      description: Resource not found.
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: The method is not available.'
        text/html:
          schema:
            type: string
          example: The method is not available.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
    ServerError:
      description: Unexpected server error.
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: There was an error.'
        text/html:
          schema:
            type: string
          example: There was an error.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
    Unauthorized:
      description: Authentication failed or missing token.
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: You must be logged in to access this functionality.'
        text/html:
          schema:
            type: string
          example: You must be logged in to access this functionality.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
    Forbidden:
      description: Authenticated but not allowed to access the resource.
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: Not authorised.'
        text/html:
          schema:
            type: string
          example: Not authorised.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
    DefaultError:
      description: Default error response (any non-2xx).
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: There was an error.'
        text/html:
          schema:
            type: string
          example: There was an error.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
    BadRequest:
      description: Bad request (validation or missing parameters).
      content:
        text/plain:
          schema:
            type: string
          example: 'Error: There was an error.'
        text/html:
          schema:
            type: string
          example: There was an error.
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
        application/xml:
          schema:
            $ref: '#/components/schemas/ErrorXml'
  parameters:
    formatOptional:
      name: format
      in: query
      description: Response format. Defaults to `xml`. Use `original` to get the original PHP data structure.
      required: false
      schema:
        type: string
        default: xml
        enum:
        - xml
        - json
        - csv
        - tsv
        - html
        - rss
        - original
  schemas:
    ErrorXml:
      description: Generic Matomo error payload in XML.
      properties:
        error:
          properties:
            message:
              type: string
              xml:
                attribute: true
              example: There was an error
          type: object
          xml:
            name: error
      type: object
      xml:
        name: result
    Error:
      description: Generic Matomo error payload.
      required:
      - result
      - message
      properties:
        result:
          type: string
          example: error
        message:
          type: string
          example: There was an error
        code:
          type: integer
      type: object
      additionalProperties: true
  securitySchemes:
    MatomoToken:
      type: http
      description: Paste your token generated from Personal > Security. Swagger will send it as a Bearer token.
      scheme: bearer
externalDocs:
  description: Matomo Reporting API developer page
  url: https://developer.matomo.org/api-reference/reporting-api/