AddonsHub REST API v1

Programistyczny dostęp do katalogu modułów PrestaShop. Zarządzaj swoimi modułami, cenami, opisami i changelogiem bezpośrednio ze swojej aplikacji, CI/CD lub skryptu.

Base URL
https://addonshub.pl/api/v1
Format
application/json
Wersja
1.0

Autentykacja

Publiczne endpointy (GET) nie wymagają autoryzacji. Operacje zapisu wymagają klucza API w nagłówku X-API-Key.

Klucz API jest powiązany z Twoim profilem twórcy. Możesz go wygenerować lub zresetować w panelu twórcy.

Przykład z curl
curl https://addonshub.pl/api/v1/modules \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json"

Kody błędów

KodZnaczenie
200Sukces
201Zasób utworzony
204Sukces, brak treści (DELETE)
400Nieprawidłowe żądanie (invalid JSON)
401Brak lub nieprawidłowy klucz API
403Brak uprawnień (nie jesteś właścicielem)
404Zasób nie istnieje
409Konflikt (np. moduł o takiej nazwie już istnieje)
422Błędy walidacji — zwraca obiekt errors

GET /api/v1/modules publiczny

Zwraca paginowaną listę opublikowanych modułów.

Parametry query

ParametrTypOpis
qstringSzukaj po nazwie i opisie
category[]string[]Filtr po slugu kategorii (wielokrotny)
freeboolTylko bezpłatne (true)
sortstringdefault | rating | newest | installs | price_asc | price_desc
pageintStrona (domyślnie 1, 20 wyników/stronę)
Żądanie
GET /api/v1/modules?q=seo&sort=rating&page=1
Odpowiedź 200
{
  "data": [
    {
      "slug": "seo-audit-pro",
      "name": "SEO Audit Pro",
      "tagline": "Kompleksowy audyt SEO dla sklepu PS",
      "short_description": "...",
      "version": "2.1.0",
      "price": 49.0,
      "is_free": false,
      "rating": 4.8,
      "reviews_count": 127,
      "install_count": 3200,
      "status": "published",
      "audited": true,
      "category": "seo",
      "vendor": "prestaforge",
      "available_locales": ["pl", "en", "fr"],
      "updated_at": "2026-03-15"
    }
  ],
  "meta": {
    "total": 48,
    "page": 1,
    "per_page": 20,
    "total_pages": 3
  }
}

GET /api/v1/modules/{slug} publiczny

Szczegóły konkretnego opublikowanego modułu.

Żądanie
GET /api/v1/modules/seo-audit-pro
Odpowiedź 200 — pola dodatkowe vs lista
{
  "slug": "seo-audit-pro",
  "name": "SEO Audit Pro",
  "tagline": "Kompleksowy audyt SEO dla sklepu PS",
  "short_description": "Audytuj i optymalizuj SEO całego sklepu.",
  "version": "2.1.0",
  "price": 49.0,
  "is_free": false,
  "rating": 4.8,
  "reviews_count": 127,
  "install_count": 3200,
  "status": "published",
  "audited": true,
  "category": "seo",
  "vendor": "prestaforge",
  "available_locales": ["pl", "en", "fr"],
  "updated_at": "2026-03-15",
  "long_description": "<p>Pełny opis HTML...</p>",
  "purchase_url": "https://tworca.pl/kup",
  "demo_url": "https://demo.tworca.pl",
  "license_info": "Licencja na 1 sklep",
  "languages": ["pl", "en", "de"],
  "compatibility": {"8.0": "full", "8.1": "full", "9.0": "partial"},
  "php_requirement": ">=8.1",
  "mysql_requirement": ">=5.7",
  "requirements": "PrestaShop 8.0+\nPHP 8.1+",
  "translations": {
    "en": {
      "name": "SEO Audit Pro",
      "tagline": "Comprehensive SEO audit for your PS store",
      "short_description": "Audit and optimize the SEO of your entire shop.",
      "long_description": "<p>Full HTML description in English...</p>"
    },
    "fr": {
      "name": "SEO Audit Pro",
      "tagline": "Audit SEO complet pour votre boutique PS",
      "short_description": "Auditez et optimisez le référencement de votre boutique.",
      "long_description": "<p>Description HTML complète en français...</p>"
    }
  },
  "created_at": "2024-01-10"
}
Wielojęzyczność: Pole name, tagline, short_description i long_description zawsze zawierają treść w języku polskim (domyślny język platformy). Tłumaczenia na inne języki są w obiekcie translations. Pole available_locales to lista języków, dla których istnieje tłumaczenie (zawsze zaczyna się od "pl").

POST /api/v1/modules wymaga klucza

Tworzy nowy moduł w statusie draft. Slug generowany jest automatycznie z nazwy.

Body (JSON)

Pola name, tagline, short_description i long_description to treść w języku polskim. Tłumaczenia na inne języki podaj w polu translations.

PoleTypWymaganeOpis
namestringNazwa modułu (po polsku)
taglinestringKrótkie hasło (po polsku, max 250 znaków)
short_descriptionstringKrótki opis (po polsku, max 200 znaków)
long_descriptionstringPełny opis HTML (po polsku)
versionstringWersja, np. "1.0.0"
pricenumberCena w EUR (0 = bezpłatny)
purchase_urlstringURL zakupu u twórcy
demo_urlstringURL wersji demo
categorystringSlug kategorii
license_infostringOpis licencji
languagesstring[]Kody języków interfejsu modułu, np. ["pl","en"]
compatibilityobjectWersje PS → status, np. {"8.1":"full"}
php_requirementstringWymag. PHP, np. ">=8.1"
requirementsstringDodatkowe wymagania (plain text)
translations object Tłumaczenia na inne języki. Klucze: en, fr, es, it. Każda wartość to obiekt z polami name, tagline, short_description, long_description (wszystkie opcjonalne).
Żądanie — moduł wielojęzyczny
curl -X POST https://addonshub.pl/api/v1/modules \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Mój Nowy Moduł",
    "tagline": "Najlepszy moduł dla PS",
    "short_description": "Opis modułu po polsku.",
    "long_description": "<p>Rozbudowany opis po polsku...</p>",
    "version": "1.0.0",
    "price": 29,
    "category": "seo",
    "languages": ["pl", "en", "fr"],
    "compatibility": {"8.0": "full", "8.1": "full"},
    "php_requirement": ">=8.1",
    "translations": {
      "en": {
        "name": "My New Module",
        "tagline": "The best module for PS",
        "short_description": "Module description in English.",
        "long_description": "<p>Full description in English...</p>"
      },
      "fr": {
        "name": "Mon Nouveau Module",
        "tagline": "Le meilleur module pour PS",
        "short_description": "Description du module en français.",
        "long_description": "<p>Description complète en français...</p>"
      }
    }
  }'
Żądanie — tylko po polsku (minimum)
curl -X POST https://addonshub.pl/api/v1/modules \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Mój Nowy Moduł",
    "tagline": "Najlepszy moduł dla PS",
    "short_description": "Opis w jednym zdaniu.",
    "version": "1.0.0",
    "price": 29,
    "category": "seo",
    "languages": ["pl"],
    "compatibility": {"8.0": "full", "8.1": "full"},
    "php_requirement": ">=8.1"
  }'
Odpowiedź 201 Created
{
  "slug": "moj-nowy-modul",
  "status": "draft",
  "available_locales": ["pl", "en", "fr"],
  "translations": {
    "en": { "name": "My New Module", "tagline": "The best module for PS", ... },
    "fr": { "name": "Mon Nouveau Module", ... }
  },
  ...
}

PATCH /api/v1/modules/{slug} wymaga klucza

Częściowa aktualizacja modułu. Wysyłaj tylko pola, które chcesz zmienić. Działa tylko na własnych modułach. Akceptuje też PUT.

Dostępne pola

Pola tekstowe (name, tagline, short_description, long_description) to zawsze treść po polsku. Tłumaczenia na inne języki w polu translations.

PoleTypOpis
namestringNazwa modułu (PL)
taglinestringKrótkie hasło (PL)
short_descriptionstringKrótki opis (PL)
long_descriptionstringPełny opis HTML (PL)
versionstringNumer wersji
pricenumberCena w EUR
purchase_urlstringURL zakupu
demo_urlstringURL demo
categorystringSlug kategorii (null = usuń kategorię)
license_infostringOpis licencji
languagesstring[]Kody języków interfejsu
compatibilityobjectWersje PS → status
php_requirementstringWymag. PHP
requirementsstringDodatkowe wymagania
translations object Tłumaczenia. Klucze: en, fr, es, it. Wysłanie zastępuje istniejące tłumaczenia całego obiektu. Pola wewnątrz: name, tagline, short_description, long_description.
Aktualizacja ceny i wersji
curl -X PATCH https://addonshub.pl/api/v1/modules/moj-nowy-modul \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "price": 39,
    "version": "1.1.0"
  }'
Aktualizacja opisu po polsku
curl -X PATCH https://addonshub.pl/api/v1/modules/moj-nowy-modul \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "short_description": "Nowy, lepszy opis modułu.",
    "long_description": "<p>Rozbudowany opis HTML...</p>"
  }'
Aktualizacja tłumaczeń (EN + FR)
curl -X PATCH https://addonshub.pl/api/v1/modules/moj-nowy-modul \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "translations": {
      "en": {
        "name": "My New Module",
        "tagline": "The best module for PS",
        "short_description": "Module description in English.",
        "long_description": "<p>Full description in English...</p>"
      },
      "fr": {
        "name": "Mon Nouveau Module",
        "tagline": "Le meilleur module pour PS",
        "short_description": "Description du module en français.",
        "long_description": "<p>Description complète en français...</p>"
      },
      "es": {
        "name": "Mi Nuevo Módulo",
        "tagline": "El mejor módulo para PS",
        "short_description": "Descripción del módulo en español."
      },
      "it": {
        "name": "Il Mio Nuovo Modulo",
        "tagline": "Il miglior modulo per PS",
        "short_description": "Descrizione del modulo in italiano."
      }
    }
  }'
Aktualizacja opisu PL + tłumaczenie EN jednocześnie
curl -X PATCH https://addonshub.pl/api/v1/modules/moj-nowy-modul \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "short_description": "Zaktualizowany opis po polsku.",
    "long_description": "<p>Nowy pełny opis PL...</p>",
    "translations": {
      "en": {
        "short_description": "Updated description in English.",
        "long_description": "<p>New full description EN...</p>"
      }
    }
  }'
Odpowiedź 200 OK
{
  "slug": "moj-nowy-modul",
  "name": "Mój Nowy Moduł",
  "available_locales": ["pl", "en", "fr", "es", "it"],
  "translations": {
    "en": { "name": "My New Module", "tagline": "The best module for PS", ... },
    "fr": { "name": "Mon Nouveau Module", ... },
    "es": { "name": "Mi Nuevo Módulo", ... },
    "it": { "name": "Il Mio Nuovo Modulo", ... }
  },
  ...
}
Uwaga: Wysłanie pola translations zastępuje całkowicie dotychczasowy obiekt tłumaczeń. Aby zaktualizować tylko jeden język, pobierz najpierw aktualne tłumaczenia przez GET /modules/{slug}, zmodyfikuj odpowiedni klucz i wyślij z powrotem.

DELETE /api/v1/modules/{slug} wymaga klucza

Trwale usuwa moduł wraz ze zrzutami, changelog i recenzjami. Działa tylko na własnych modułach.

Żądanie
curl -X DELETE https://addonshub.pl/api/v1/modules/moj-nowy-modul \
  -H "X-API-Key: twoj-klucz-api"
Odpowiedź 204 No Content
(pusta treść)

GET /api/v1/modules/{slug}/changelog publiczny

Lista wszystkich wpisów changeloga dla modułu, sortowana od najnowszych.

Odpowiedź 200
{
  "module": "seo-audit-pro",
  "data": [
    {
      "id": 42,
      "version": "2.1.0",
      "type": "minor",
      "release_date": "2026-03-15",
      "changes": [
        "Dodano obsługę PS 9.x",
        "Poprawiono wydajność crawlera",
        "Nowy raport Core Web Vitals"
      ]
    }
  ]
}

Typy wpisów

bugfix minor security major

POST /api/v1/modules/{slug}/changelog wymaga klucza

Dodaje nowy wpis changeloga do modułu. Idealny do integracji z CI/CD — po każdym release automatycznie publikuj changelog.

Body (JSON)

PoleTypWymaganeOpis
versionstringNumer wersji, np. "2.1.0"
changesstring[]Tablica opisów zmian
typestringbugfix | minor | security | major (domyślnie minor)
release_datestringData w formacie Y-m-d (domyślnie dziś)
Przykład integracji CI/CD
curl -X POST https://addonshub.pl/api/v1/modules/moj-modul/changelog \
  -H "X-API-Key: twoj-klucz-api" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "2.1.0",
    "type": "minor",
    "release_date": "2026-05-18",
    "changes": [
      "Dodano obsługę PrestaShop 9.x",
      "Poprawiono błąd z pustym koszykiem",
      "Nowe tłumaczenie DE i FR"
    ]
  }'
Odpowiedź 201 Created
{
  "id": 43,
  "version": "2.1.0",
  "type": "minor",
  "release_date": "2026-05-18",
  "changes": ["Dodano obsługę PrestaShop 9.x", ...]
}