---
url: 'https://dxpr.com/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/api'
title: 'API-Referenz | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T04:04:50+00:00'
updated: '2026-10-24T19:36:26+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  Die PHP-Dienste, JavaScript-Erweiterungspunkte und Routen, die
  DXPR Builder definiert. Dienst-IDs stammen aus
  dxpr_builder.services.yml, Routen aus dxpr_builder.routing.yml.
  Für Anfrage- und Antwortdetails jeder Route siehe
  API-Endpunkte.
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-24T19:36:26+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: API-Referenz
      description: |-
        Die PHP-Dienste, JavaScript-Erweiterungspunkte und Routen, die
        DXPR Builder definiert. Dienst-IDs stammen aus
        dxpr_builder.services.yml, Routen aus dxpr_builder.routing.yml.
        Für Anfrage- und Antwortdetails jeder Route siehe
        API-Endpunkte.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T04:04:50+0000'
      dateModified: '2026-10-24T19:36:26+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/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/api'
      articleSection: 'Architektur und APIs'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/api'
      description: |-
        Die PHP-Dienste, JavaScript-Erweiterungspunkte und Routen, die
        DXPR Builder definiert. Dienst-IDs stammen aus
        dxpr_builder.services.yml, Routen aus dxpr_builder.routing.yml.
        Für Anfrage- und Antwortdetails jeder Route siehe
        API-Endpunkte.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Startseite
            item: 'https://dxpr.com/de'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: de
---
[Hilfe-Center](/de/hc)/[Dokumentation](/de/hc/dokumentation) /[DXPR Builder lernen](/de/hc/documentation/learn-dxpr-builder) /[Erweitern](/de/hc/documentation/learn-dxpr-builder/extend) /[Architektur und APIs](/de/hc/documentation/learn-dxpr-builder/extend/architecture) # API-Referenz.

 DXPR Builder lernenErweiternArchitektur und APIs

   ## In diesem Leitfaden

Die PHP-Dienste, JavaScript-Erweiterungspunkte und Routen, die DXPR Builder definiert. Dienst-IDs stammen aus `dxpr_builder.services.yml`, Routen aus `dxpr_builder.routing.yml`. Für Anfrage- und Antwortdetails jeder Route siehe [API-Endpunkte](/de/hc/dokumentation/dxpr-builder-lernen/referenz/api-endpunkte).

## PHP-Dienste

| Dienst-ID | Klasse (in `src/`) | Zweck |
|---|---|---|
| `dxpr_builder.service` | `Service\DxprBuilderService` | Bereitet Builder-Inhalte für die Ausgabe vor, behandelt Pfad-Token, baut die Icon-Set-Registry |
| `dxpr_builder.license_service` | `Service\DxprBuilderLicenseService` | Lizenzstatus, abrechenbare Konten, Redaktions-Sync mit DXPR |
| `dxpr_builder.key_service` | `Service\DxprBuilderKeyService` | Liest und speichert den Produktschlüssel |
| `dxpr_builder.jwt_decoder` | `Service\DxprBuilderJWTDecoder` | Decodiert die Payload des Produktschlüssels |
| `dxpr_builder.user_settings` | `Service\UserSettings` | Die eigenen Editor-Einstellungen jeder bearbeitenden Person, gehalten in Benutzerdaten |
| `dxpr_builder.content_lock` | `Service\ContentLock` | Vermerkt, welches Konto eine Entitätsrevision bearbeitet |
| `dxpr_builder.content_migration` | `Service\ContentMigrationService` | Führt Inhaltsmigrationen aus; sammelt Dienste mit Tag `dxpr_builder.content_migration` |
| `dxpr_builder.profile_handler` | `Service\Handler\ProfileHandler` | Macht aus einem Profil Editor-Einstellungen |
| `dxpr_builder.handler.block` | `Service\Handler\BlockHandler` | Rendert Drupal-Blöcke, die als Elemente platziert sind |
| `dxpr_builder.handler.view` | `Service\Handler\ViewHandler` | Rendert Ansichtsanzeigen, die als Elemente platziert sind |
| `dxpr_builder.template_image_validator` | `Service\TemplateImageValidator` | Validiert Vorlagen-Vorschaubilder |
| `dxpr_builder.rl_variant.extractor`, `dxpr_builder.rl_variant.registrar` | `RlIntegration\Service\*` | A/B-Test-Varianten; ohne RL-Modul inaktiv |
| `dxpr_builder.rl_sort.extractor`, `dxpr_builder.rl_sort.registrar` | `RlIntegration\Service\*` | Smart-Sort-Experimente; ohne RL-Modul inaktiv |
| `logger.channel.dxpr_builder` | Core-Logger-Kanal | Protokollkanal `dxpr_builder` |

### DxprBuilderServiceInterface

Implementiert von `dxpr_builder.service`. Die Methoden, die Sie am wahrscheinlichsten aufrufen:

- `insertBaseTokens($content)`: ersetzt Basis-URL, Dateiverzeichnis und Modulpfad dieser Website durch Token. Der Editor speichert Inhalte in dieser Form.
- `replaceBaseTokens(&$content): void`: expandiert die Token zurück zu URLs für die aktuelle Umgebung.
- `stripHtmlElementPersists(string $markup): string`: entfernt die `data-az-persist`-Attribute. Führen Sie es auf Markup aus, das außerhalb des Editors geschrieben wurde; der Editor baut sie beim Laden neu auf.
- `getCmsElementNames()`: die als Elemente angebotenen Block- und Ansichtsanzeigen, zwischengespeichert.
- `getIconSets(): array`: die Icon-Set-Registry nach YAML-Erkennung und `hook_dxpr_builder_icon_sets_alter()`.

```php
$markup = \Drupal::service('dxpr_builder.service')->insertBaseTokens($html);

```

### DxprBuilderLicenseServiceInterface

Implementiert von `dxpr_builder.license_service`.

- `isBillableUser(?AccountInterface $account = NULL): bool`: TRUE für Benutzer 1 und für aktive Konten mit `edit with dxpr builder`, die nicht vom DXPR-Builder-Bearbeiten ausgeschlossen sind.
- `getLicenseInfo()`: Lizenzstatus vom DXPR-Lizenzserver, zwischengespeichert. Ohne Produktschlüssel liefert es die Gratis-Stufe: ein Konto und 100 Inhalte.
- `syncAllUsersWithCentralStorage(string $operation, string $json_web_token = ''): void`: sendet die Bearbeitenden dieser Website an DXPR. `$operation` ist eine der Interface-Konstanten `DXPR_USER_SYNC_OPERATION` (`sync`), `DXPR_USER_ADD_OPERATION` (`add`) oder `DXPR_USER_REMOVE_OPERATION`(`remove`).

### DxprBuilderKeyService

- `getApiKey(): ?string`: der Produktschlüssel. Wenn die `api_key_storage`-Einstellung `key` ist, liest er die Key-Entität, die in `key_provider` genannt ist; sonst liest er `json_web_token`.
- `setApiKey(string $key_value, string $storage_type = 'config', ?string $selected_key_id = NULL): void`: speichert den Schlüssel in der Konfiguration oder in einer Key-Entität.

### DxprBuilderJWTDecoder

- `decodeJwt(string $access_token)`: liefert die Claims `sub`, `scope` und `dxpr_tier` des Produktschlüssels, je NULL, wenn das Token nicht lesbar ist. Das Ergebnis wird pro Token zwischengespeichert.

## JavaScript-Erweiterungspunkte

Die Editor-Skripte teilen zwei Arrays auf `window.dxprBuilder`. Pushen Sie eigene Objekte darauf, zwischen dem Skript, das das Array erzeugt, und `dxpr_builder.js`, das sie beim Laufen einmal liest.

| Array | Erzeugt von | Was `dxpr_builder.js` damit tut |
|---|---|---|
| `dxpr_param_types` | `dxpr_param_types.js` | Registriert jedes Objekt als Parametertyp mit `register_param_type()` |
| `dxpr_elements` | `dxpr_elements.js` | `create_dxpr_elements()` registriert jede Definition mit `register_animated_element()` und konvertiert ihre `params` durch `make_param_type()` |

Die Parametertypen, die das Modul registriert, sind `boxmodel`, `checkbox`, `checkboxes`, `colorpicker`, `datetime`, `dropdown`, `dxb_slider`, `html`, `icon`, `image`, `images`, `link`, `links`, `numericfield`, `row_layout`, `saved_datetime`, `social_links`, `textarea`, `textfield` und `video`. Ein Parameter mit unbekanntem `type` rendert als schlichte Texteingabe.

[Eigene Elemente](/de/hc/dokumentation/dxpr-builder-lernen/entwicklung/eigene-elemente) zeigt eine vollständige Elementdefinition und wie sie im richtigen Moment geladen wird.

## Editor-Routen

Legende: **billable** ist die `_dxpr_builder_billable_user`-Prüfung (Benutzer 1, oder ein aktives Konto mit `edit with dxpr builder`, das nicht ausgeschlossen ist); **CSRF** ist `_csrf_token`.

| Pfad | Routenname | Methoden | Zugang |
|---|---|---|---|
| `/dxpr_builder/ajax` | `dxpr_builder.ajax_callback` | any | billable, CSRF |
| `/dxpr_builder/ajax/file_upload` | `dxpr_builder.ajax_file_upload_callback` | POST, DELETE | billable, CSRF |
| `/dxpr_builder/ajax/ai/chat` | `dxpr_builder.ai_chat` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/ajax/ai/image` | `dxpr_builder.ai_image` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/ajax/ai/image/edit` | `dxpr_builder.ai_image_edit` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/csrf` | `dxpr_builder.csrf_refresh` | any | billable |
| `/dxpr_builder/ajax/help_link_validator` | `dxpr_builder.ajax_help_link_validator` | any | billable |
| `/dxpr_builder/media-library` | `dxpr_builder.media_library` | any | `view media` |
| `/dxpr_builder/entity-link-suggestions` | `dxpr_builder.entity_link_suggestions` | GET | `edit with dxpr builder`, CSRF |
| `/dxpr_builder/user-settings` | `dxpr_builder.user_settings` | POST | `edit with dxpr builder`, CSRF |

## Admin-Routen

Alle Admin-Seiten liegen unter **DXPR Studio &gt; DXPR Builder**. Die Tab-Spalte zeigt die Bezeichnung im Admin-Menü.

| Pfad | Tab | Berechtigung |
|---|---|---|
| `/admin/dxpr_studio` | DXPR Studio | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder` | DXPR Builder | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/settings` | General Settings | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/ai_settings` | AI | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/content` | Content Items | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/migration-status` | Migrations (under Content Items) | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/page_template` | Page Templates | `administer site configuration` |
| `/admin/dxpr_studio/dxpr_builder/user_licenses` | User Licenses | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/profile` | User Profiles | `administer dxpr_builder_profile` |
| `/admin/dxpr_studio/dxpr_builder/user_templates` | User Templates | `administer site configuration` |