---
url: 'https://dxpr.com/pl/hc/dokumentacja/nauka-dxpr-builder/ai/dokumentacja-api'
title: 'Dokumentacja API AI | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:36:05+00:00'
updated: '2026-10-24T17:19:22+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  Kreator DXPR udostępnia trzy trasy AI. Przeglądarka
  je wywołuje, a kontrolery przekazują żądanie
  przez drupalowy moduł AI do dostawcy DXPR
  (ai_provider_dxpr), więc klucz API nigdy nie dociera
  do przeglądarki. Trasy zdefiniowano w
  dxpr_builder.routing.yml; zachowanie poniżej pochodzi
  z src/Controller/AiChatController.php i
  src/Controller/AiImageController.php.
tags:
  - 'Architecture and APIs'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T17:19:22+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'Dokumentacja API AI'
      description: |-
        Kreator DXPR udostępnia trzy trasy AI. Przeglądarka
        je wywołuje, a kontrolery przekazują żądanie
        przez drupalowy moduł AI do dostawcy DXPR
        (ai_provider_dxpr), więc klucz API nigdy nie dociera
        do przeglądarki. Trasy zdefiniowano w
        dxpr_builder.routing.yml; zachowanie poniżej pochodzi
        z src/Controller/AiChatController.php i
        src/Controller/AiImageController.php.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:36:05+0000'
      dateModified: '2026-10-24T17:19:22+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/pl/hc/dokumentacja/nauka-dxpr-builder/ai/dokumentacja-api'
      articleSection: 'Architektura i API'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pl/hc/dokumentacja/nauka-dxpr-builder/ai/dokumentacja-api'
      description: |-
        Kreator DXPR udostępnia trzy trasy AI. Przeglądarka
        je wywołuje, a kontrolery przekazują żądanie
        przez drupalowy moduł AI do dostawcy DXPR
        (ai_provider_dxpr), więc klucz API nigdy nie dociera
        do przeglądarki. Trasy zdefiniowano w
        dxpr_builder.routing.yml; zachowanie poniżej pochodzi
        z src/Controller/AiChatController.php i
        src/Controller/AiImageController.php.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 'Strona Główna'
            item: 'https://dxpr.com/pl'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pl
---
[Centrum pomocy](/pl/hc)/[Dokumentacja](/pl/hc/dokumentacja) /[Poznaj DXPR Builder](/pl/hc/documentation/learn-dxpr-builder) /[Rozszerzenia](/pl/hc/documentation/learn-dxpr-builder/extend) /[Architektura i API](/pl/hc/documentation/learn-dxpr-builder/extend/architecture) # Dokumentacja API AI.

 Poznaj DXPR BuilderRozszerzeniaArchitektura i API

   ## W tym przewodniku

 Powiązane przewodniki

- [Modele i dostawcy](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/modele-i-dostawcy)
- [Konfiguracja AI](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/konfiguracja)
- [Rozwiązywanie problemów z AI](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/rozwiazywanie-problemow)

Kreator DXPR udostępnia trzy trasy AI. Przeglądarka je wywołuje, a kontrolery przekazują żądanie przez drupalowy moduł AI do dostawcy DXPR (`ai_provider_dxpr`), więc klucz API nigdy nie dociera do przeglądarki. Trasy zdefiniowano w `dxpr_builder.routing.yml`; zachowanie poniżej pochodzi z `src/Controller/AiChatController.php` i `src/Controller/AiImageController.php`.

## Wymagania dostępu (wszystkie trzy trasy)

| Wymaganie | Źródło |
|---|---|
| Metoda HTTP `POST` | `methods: [POST]` w trasie |
| Uprawnienie `edit with dxpr builder` | `_permission` |
| Użytkownik rozliczany (ważne miejsce licencyjne) | `_dxpr_builder_billable_user`, sprawdzane przez `DxprBuilderBillableUserAccessCheck` |
| Token CSRF w `token` w parametrze zapytania | `_csrf_token: 'TRUE'` |
| Ciasteczko zalogowanej sesji Drupala | Kontrole dostępu Drupala działają dla użytkownika |

Token to drupalowy token CSRF trasy dla ścieżki trasy. Kreator DXPR generuje go po stronie serwera i osadza w `drupalSettings.dxprBuilder.aiAgent`jako `endpointUrl`, `imageEndpointUrl` i `imageEditEndpointUrl` (zobacz `DxprBuilderFormatter`). Odczytaj jedną z tych wartości ze strony z wczytanym edytorem, aby uzyskać działający URL. Nieudana kontrola dostępu zwraca standardową odpowiedź `403` Drupala.

Kontrolery zawsze tworzą instancję dostawcy `dxpr`; dostawca ustawiony w `/admin/config/ai/settings` nie jest używany.

## Czat

`POST /dxpr_builder/ajax/ai/chat?token=...`

Używane przez polecenia tekstowe, tworzenie stron i sugestie promptów. Kontroler odczytuje treść JSON i wywołuje `$provider->chat()`.

### Treść żądania

| Pole | Typ | Wymagane | Uwagi |
|---|---|---|---|
| `messages` | tablica `{role, content}` | tak | `role` to `system`, `user` albo `assistant` |
| `model` | ciąg | nie | Domyślnie `kavya-m1`. Musi być na liście dozwolonych modeli dostawcy |
| `stream` | wartość logiczna | nie | Domyślnie `true` |
| `prediction` | obiekt | nie | Przekazywane dalej, na przykład `{"type":"content","content":"<p>...</p>"}` |
| `providers` | ciąg | nie | Identyfikatory dostawców po przecinku, na przykład `openai,mistral` |
| `allowed_html_tags` | ciąg | nie | Przekazywane dalej; kreator wysyła `Bootstrap 5 HTML` |
| `allowed_html_classes` | ciąg | nie | Przekazywane dalej; kreator wysyła `Bootstrap 5 Classes` |
| `web_search` | wartość logiczna | nie | Tylko `false` jest przekazywane dalej |
| `response_format` | obiekt | nie | Przekazywane dalej, na przykład obiekt `json_schema` w treści |

Kontroler zawsze dodaje `jsonrpc: false` do konfiguracji dostawcy. Przed wywołaniem scala domeny z **AI Output Filtering &gt; Allowed domains** do filtra nazw hostów modułu AI na czas żądania (`*` przełącza filtr na pełne zaufanie).

### Odpowiedź

Strumieniowana (`stream` true, domyślnie): `200`, `Content-Type: text/event-stream`. Każde zdarzenie to `data: {json}` z pustym wierszem, a strumień kończy `data: [DONE]`.

```text
data: {"choices":[{"delta":{"content":"Hello"}}],"id":"...","model":"kavya-m1","usage":{...}}

data: [DONE]

```

`id`, `object`, `created`, `model`, `original_model` i `usage` kopiowane są z surowego fragmentu dostawcy, gdy występują.

Niestrumieniowana (`stream` false): `200`, `application/json`:

```json
{"choices":[{"message":{"role":"assistant","content":"..."}}]}

```

### Błędy

| Status | Treść |
|---|---|
| `400` | Zwykły tekst `Invalid request: messages required` |
| `403` | `{"error":{"code":"model_not_allowed","message":"The selected model is not allowed. Please refresh the page to update your model options."}}`, gdy `ai_provider_dxpr` jest zainstalowany i nie ma `model` na liście dozwolonych modeli |
| `500` | `{"error":{"message":"The request could not be completed."}}` (szczegóły w kanale dziennika `dxpr_builder`) |

### Przykład

```js
const url = drupalSettings.dxprBuilder.aiAgent.endpointUrl;
const res = await fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    model: "kavya-m1",
    stream: false,
    messages: [
      { role: "system", content: "You are a copywriter." },
      { role: "user", content: "Shorten: <p>Our team ...</p>" }
    ]
  })
});
const data = await res.json();
console.log(data.choices[0].message.content);

```

## Generowanie obrazów

`POST /dxpr_builder/ajax/ai/image?token=...`

Wywołuje `$provider->textToImage()`.

### Treść żądania

| Pole | Typ | Wymagane | Uwagi |
|---|---|---|---|
| `prompt` | ciąg | tak | Tekstowy opis obrazu |
| `model` | ciąg | nie | Domyślnie `kavya-image` |
| `size` | ciąg | nie | Kreator wysyła `1024x1024`, `1536x1024` albo `1024x1536`; pomijane dla Auto |
| `quality` | ciąg | nie | Przekazywane do dostawcy bez zmian |
| `background` | ciąg | nie | Przekazywane do dostawcy bez zmian |

### Odpowiedź

`200`, `application/json`. Zwracany jest tylko pierwszy obraz, zakodowany base64. Dostawca DXPR żąda wyniku `webp`.

```json
{"data":[{"b64_json":"UklGRi..."}]}

```

### Błędy

| Status | Treść |
|---|---|
| `400` | `{"error":{"message":"Invalid request: prompt required"}}` |
| `500` | `{"error":{"message":"No image was generated"}}` |
| `500` | `{"error":{"message":"Image generation failed. Please try again."}}` |

### Przykład

```bash
curl -X POST "https://example.com/dxpr_builder/ajax/ai/image?token=TOKEN" \
  -H "Content-Type: application/json" \
  -H "Cookie: SESSxxx=..." \
  -d '{"prompt":"Flat illustration of a rocket","size":"1536x1024"}'

```

## Edycja obrazów

`POST /dxpr_builder/ajax/ai/image/edit?token=...`

Wywołuje `$provider->imageToImage()` z przesłanym obrazem i promptem.

### Treść żądania

| Pole | Typ | Wymagane | Uwagi |
|---|---|---|---|
| `prompt` | ciąg | tak | Instrukcja edycji |
| `image` | ciąg | tak | Dane obrazu base64 bez prefiksu `data:`; ścisłe dekodowanie |
| `mimeType` | ciąg | nie | Domyślnie `image/png`; podtyp staje się rozszerzeniem pliku |
| `model` | ciąg | nie | Domyślnie `kavya-image` |
| `size`, `quality`, `background` | ciąg | nie | Jak przy generowaniu obrazów |

### Odpowiedź

Kształt jak przy generowaniu obrazów: `{"data":[{"b64_json":"..."}]}`.

### Błędy

| Status | Treść |
|---|---|
| `400` | `{"error":{"message":"Invalid request: prompt and image required"}}` |
| `400` | `{"error":{"message":"Invalid image data: base64 decode failed"}}` |
| `500` | `{"error":{"message":"No image was generated"}}` |
| `500` | `{"error":{"message":"Image editing failed. Please try again."}}` |

### Przykład

```js
const url = drupalSettings.dxprBuilder.aiAgent.imageEditEndpointUrl;
const res = await fetch(url, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    prompt: "Remove the background",
    image: base64String,
    mimeType: "image/jpeg"
  })
});
const { data } = await res.json();

```

## Zapisywanie wygenerowanego obrazu

Trasy zwracają tylko bajty obrazu. Kreator konwertuje `b64_json` do pliku `webp` i przesyła go do `POST /dxpr_builder/ajax/file_upload`(`drupalSettings.dxprBuilder.fileUploadUrl`, pole formularza `upload[]`), które odpowiada z adresem `url` pliku i `fid`. Prompt staje się nazwą pliku (pierwsze 80 znaków) i atrybutem alt.

## Co dalej?

- [Modele i dostawcy](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/modele-i-dostawcy)
- [Konfiguracja AI](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/konfiguracja)
- [Rozwiązywanie problemów z AI](/pl/hc/dokumentacja/nauka-dxpr-builder/ai/rozwiazywanie-problemow)