API

extensions.magento.watch API

The /api/v1 surface reads the Magento and Mage-OS extension catalogue. Every declared state comes from a package composer.json declaration; static checks and install results are reported only where a run exists. The machine-readable document is at /api/v1/openapi.json.

11 operations. Responses are JSON; 200 responses share the envelope with data, _documentation and _description.

GET

/api/v1/health

Service health

Reports that the service is answering.

No parameters.

Example

curl 'https://extensions.magento.watch/api/v1/health'
Errors:404 not-found500 internal

GET

/api/v1/extensions

List or search extension packages

Returns catalogue packages, best text match first, or by monthly downloads when q is absent. Only public packages are returned.

NameInRequiredRules
q query no string; at least 1 characters; at most 200 characters
tag query no string; pattern ^[A-Za-z0-9][A-Za-z0-9-]{0,79}$; at most 80 characters
vendor query no string; pattern ^[A-Za-z0-9](?:[_.-]?[A-Za-z0-9])*$; at most 100 characters
cursor query no Opaque cursor from the previous page. Pass it back unchanged with the same filters.
limit query no integer; minimum 1; maximum 100; default 25

Example

curl 'https://extensions.magento.watch/api/v1/extensions?q=tag%20manager&limit=10'
Errors:400 invalid-filter400 invalid-query400 invalid-cursor400 invalid-limit404 not-found409 cursor-expired429 rate-limited500 internal

GET

/api/v1/extensions/{vendor}/{name}

Get one extension package

Returns the identity, description, tags and newest stable version of one package.

NameInRequiredRules
vendor path yes string; pattern ^[A-Za-z0-9](?:[_.-]?[A-Za-z0-9])*$; at most 100 characters
name path yes string; pattern ^[A-Za-z0-9](?:(?:[_.]|-{1,2})?[A-Za-z0-9])*$; at most 214 characters

Example

curl 'https://extensions.magento.watch/api/v1/extensions/mollie/magento2'
Errors:404 package-not-found404 not-found500 internal

GET

/api/v1/extensions/{vendor}/{name}/versions

List the versions of one extension

Returns the published versions of one package, newest first, with the requirements each declares.

NameInRequiredRules
vendor path yes string; pattern ^[A-Za-z0-9](?:[_.-]?[A-Za-z0-9])*$; at most 100 characters
name path yes string; pattern ^[A-Za-z0-9](?:(?:[_.]|-{1,2})?[A-Za-z0-9])*$; at most 214 characters
cursor query no Opaque cursor from the previous page. Pass it back unchanged with the same filters.
limit query no integer; minimum 1; maximum 100; default 25

Example

curl 'https://extensions.magento.watch/api/v1/extensions/mollie/magento2/versions'
Errors:400 invalid-limit400 invalid-cursor404 package-not-found404 not-found409 cursor-expired500 internal

GET

/api/v1/extensions/{vendor}/{name}/versions/{version}/compatibility

Declarations and results of one version

Returns, for every supported and pre-release target, the declared state and any static-check or install result recorded for the version. Install results do not cover checkout or storefront behaviour.

NameInRequiredRules
vendor path yes string; pattern ^[A-Za-z0-9](?:[_.-]?[A-Za-z0-9])*$; at most 100 characters
name path yes string; pattern ^[A-Za-z0-9](?:(?:[_.]|-{1,2})?[A-Za-z0-9])*$; at most 214 characters
version path yes string; pattern ^[A-Za-z0-9._+-]{1,64}$; at most 64 characters

Example

curl 'https://extensions.magento.watch/api/v1/extensions/mollie/magento2/versions/3.2.0/compatibility'
Errors:404 package-not-found404 version-not-found404 not-found500 internal

GET

/api/v1/{distribution}/versions/{version}/extensions

Packages with a recommended version for a target

Returns packages whose recommended version declares support for one Magento or Mage-OS release, with an optional PHP minor and storefront. Install results do not cover checkout or storefront behaviour.

NameInRequiredRules
distribution path yes one of magento-community, mage-os; string
version path yes string; pattern ^[A-Za-z0-9._+-]{1,64}$; at most 64 characters
php query no string; pattern ^\d+\.\d+$
frontend query no one of luma, hyva; string
tag query no string; pattern ^[a-z0-9]+(?:-[a-z0-9]+)*$; at most 80 characters
cursor query no Opaque cursor from the previous page. Pass it back unchanged with the same filters.
limit query no integer; minimum 1; maximum 100; default 25

Example

curl 'https://extensions.magento.watch/api/v1/magento-community/versions/2.4.9/extensions?php=8.5&frontend=luma'
Errors:400 invalid-filter400 invalid-limit400 invalid-cursor404 unknown-distribution404 unknown-version404 unknown-variant404 not-found409 cursor-expired500 internal503 retry

POST

/api/v1/{distribution}/versions/{version}/extensions/check

Assess a package set against one target

Assesses the requested packages against one target from their recorded declarations and results. Extension-only evidence: framework libraries are not assessed and the set was not resolved together. Nothing from the request is stored.

NameInRequiredRules
distribution path yes one of magento-community, mage-os; string
version path yes string; pattern ^[A-Za-z0-9._+-]{1,64}$; at most 64 characters

Example

curl 'https://extensions.magento.watch/api/v1/magento-community/versions/2.4.9/extensions/check' -H 'Content-Type: application/json' -d '{"input":{"kind":"map","packages":{"mollie/magento2":"3.1.2"}}}'
Errors:400 invalid-json400 invalid-input404 unknown-distribution404 unknown-version404 unknown-variant404 not-found413 body-too-large415 unsupported-media-type422 empty-input422 too-many-packages429 rate-limited500 internal503 retry

GET

/api/v1/meta/stats

Catalogue counts

Returns counts, the publication generation and the latest supported and pre-release versions.

No parameters.

Example

curl 'https://extensions.magento.watch/api/v1/meta/stats'
Errors:404 not-found500 internal

GET

/api/v1/meta/targets

Targets

Returns every target (release, PHP minor and frontend) with its identifier and lifecycle status, including historical releases, so target_id values in the change feed can be named.

No parameters.

Example

curl 'https://extensions.magento.watch/api/v1/meta/targets'
Errors:404 not-found500 internal

GET

/api/v1/meta/changes

Published catalogue changes

Returns published changes in sequence order, with an entity tag for conditional requests. The window is bounded; an expired since value returns 410 and asks for a resync.

NameInRequiredRules
since query no integer; minimum 0; default 0
limit query no integer; minimum 1; maximum 200; default 100
entity query no one of package, version, target, result, signal; string
package query no array; at most 50 items
cursor query no Opaque cursor from the previous page. Pass it back unchanged with the same filters.

Example

curl 'https://extensions.magento.watch/api/v1/meta/changes?since=0&limit=100'
Errors:400 invalid-filter400 invalid-limit400 invalid-cursor404 not-found410 window-expired500 internal

GET

/api/v1/openapi.json

This OpenAPI document

Returns this OpenAPI 3.1 document for the /api/v1 surface.

No parameters.

Example

curl 'https://extensions.magento.watch/api/v1/openapi.json'
Errors:404 not-found500 internal

MCP

The MCP server answers at POST https://extensions.magento.watch/mcp over stateless Streamable HTTP (some clients call the transport streamable-http). It negotiates one of the protocol versions 2024-11-05, 2025-03-26, 2025-06-18 and 2025-11-25. Call tools/list for the current tool names and input schemas; the list is not duplicated here.

Client configuration

{
  "mcpServers": {
    "extensions-magento-watch": {
      "type": "http",
      "url": "https://extensions.magento.watch/mcp"
    }
  }
}

Tools available now: 4

  • find_extension
  • get_extension
  • check_extension_compatibility
  • list_extension_changes