> Źródło: https://redai.pl/dev/trzy-zgody-jak-modul-trafia-na-cudza-instancje/ (dokumentacja modułów portalu redAi). Cała dokumentacja w jednym pliku: https://redai.pl/dev/moduly.md

## Trzy zgody: jak moduł trafia na cudzą instancję

Typowa sytuacja: zrobiliście moduł na instancji jednej firmy i chcecie go dać na instancję, którą prowadzi inny developer albo inna firma. Moduł staje na instancji dopiero, gdy zgodzą się trzy strony:

1. **redAi** sprawdza każde wydanie (status `oczekuje` → `zaakceptowane`). Bez tego żadna instancja modułu nie widzi.
2. **Wy** wskazujecie instancję przy module (konto › moduł › Instancje albo `POST /api/moduly/adresy`). To Wasza zgoda, że moduł może tam trafić. Nową instancję na liście zatwierdza redAi (patrz niżej).
3. **Administrator instancji** widzi moduł w **Administracja › Moduły**, w kategorii **„Moduły innych developerów”**, z nazwą autora. Instaluje go sam i sam włącza. Dodanie adresu niczego nie instaluje.

Po instalacji kolejne zaakceptowane wersje modułu prywatnego wchodzą na tę instancję same. Usunięcie adresu z listy odcina instancji nowe wersje, ale nie odinstalowuje modułu, który już tam stoi.

Na koncie przy każdym adresie widzicie, na jakim etapie jest moduł:

| Stan | Co znaczy |
|---|---|
| czeka na akcept redAi | nie ma jeszcze zaakceptowanego wydania |
| jeszcze nie widzi | instancja nie pytała katalogu od dodania adresu (pyta raz dziennie albo po „Sprawdźcie teraz”) |
| czeka na administratora | instancja widzi moduł, administrator go jeszcze nie zainstalował |
| zainstalowany, wyłączony | stoi, administrator jeszcze go nie włączył |
| działa | zainstalowany i włączony, obok wersja |
| nieznana instancja | pod tym adresem nie znamy instancji redAi, sprawdźcie literówkę |

**Widoczność przez API.** Listę instancji (i przejście na moduł publiczny) ustawiacie też kluczem API, np. z terminala albo przez asystenta AI. Działa to dokładnie jak sekcja Instancje na karcie modułu: usunięcie adresu i powrót do prywatnego wchodzą od razu, nowe instancje i katalog publiczny idą do zatwierdzenia przez redAi (zaufany autor albo moduł publiczny: nowe instancje od razu). Dodanie adresu niczego nie instaluje.

```bash
# stan: widoczność, instancje na liście, wniosek czekający na redAi
curl -sS "https://redai.pl/api/moduly/adresy?klucz=notatki" -H "Authorization: Bearer $REDAI_KLUCZ"

# dopisanie i usunięcie instancji (reszta listy bez zmian)
curl -sS -X POST https://redai.pl/api/moduly/adresy -H "Authorization: Bearer $REDAI_KLUCZ" \
  -H "Content-Type: application/json" \
  -d '{"klucz": "notatki", "dodaj": ["https://firma.redai.pl"], "usun": ["https://stara-firma.redai.pl"]}'

# pełna lista (zastępuje obecną) albo zmiana widoczności
curl -sS -X POST https://redai.pl/api/moduly/adresy -H "Authorization: Bearer $REDAI_KLUCZ" \
  -H "Content-Type: application/json" -d '{"klucz": "notatki", "adresy": ["https://firma.redai.pl"], "publiczny": false}'
```

Pola: `klucz` (wymagany) i jedno z `adresy` (pełna lista) albo `dodaj` / `usun`, opcjonalnie `publiczny` (`true` / `false`, brak = bez zmian). `dodaj` i `usun` liczą się od obecnej listy razem z tym, co już czeka we wniosku. Adres może być bez `https://`. Odpowiedź:

```json
{"ok": true, "klucz": "notatki", "widocznosc": "prywatny", "adresy": ["https://firma-magazyn.redai.pl"],
 "wniosek": {"publiczny": false, "adresy": ["https://firma.redai.pl"]},
 "zmiana": {"dodane": [], "usuniete": ["https://stara-firma.redai.pl"], "prywatny": false,
            "do_zatwierdzenia": {"publiczny": false, "adresy": ["https://firma.redai.pl"]}},
 "pominiete": [], "komunikat": "Usunięte z listy: ... Do zatwierdzenia przez redAi: ..."}
```

- `adresy`: instancje, które widzą moduł już teraz, `wniosek`: to, co czeka na redAi (decyzja przyjdzie mailem),
- `pominiete`: wpisy, które nie są adresami. Jeden moduł ma najwyżej 200 instancji.

