---
url: 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api'
title: 'Referência de API | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T11:47:31+00:00'
updated: '2026-10-24T19:36:26+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  Os serviços PHP, pontos de extensão JavaScript e rotas que o
  DXPR Builder define. Os identificadores de serviço vêm de
  dxpr_builder.services.yml, as rotas de dxpr_builder.routing.yml.
  Para detalhes de pedido e resposta de cada rota, consulte
  Endpoints de API.
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: 'Referência de API'
      description: |-
        Os serviços PHP, pontos de extensão JavaScript e rotas que o
        DXPR Builder define. Os identificadores de serviço vêm de
        dxpr_builder.services.yml, as rotas de dxpr_builder.routing.yml.
        Para detalhes de pedido e resposta de cada rota, consulte
        Endpoints de API.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T11:47:31+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/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api'
      articleSection: 'Arquitetura e APIs'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/api'
      description: |-
        Os serviços PHP, pontos de extensão JavaScript e rotas que o
        DXPR Builder define. Os identificadores de serviço vêm de
        dxpr_builder.services.yml, as rotas de dxpr_builder.routing.yml.
        Para detalhes de pedido e resposta de cada rota, consulte
        Endpoints de API.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: Início
            item: 'https://dxpr.com/pt-pt'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: pt-pt
---
[Centro de ajuda](/pt-pt/node/75)/[Documentação](/pt-pt/hc/documentacao) /[Aprender DXPR Builder](/pt-pt/hc/documentation/learn-dxpr-builder) /[Estender](/pt-pt/hc/documentation/learn-dxpr-builder/extend) /[Arquitetura e APIs](/pt-pt/hc/documentation/learn-dxpr-builder/extend/architecture) # Referência de API.

 Aprender DXPR BuilderEstenderArquitetura e APIs

   ## Neste guia

Os serviços PHP, pontos de extensão JavaScript e rotas que o DXPR Builder define. Os identificadores de serviço vêm de `dxpr_builder.services.yml`, as rotas de `dxpr_builder.routing.yml`. Para detalhes de pedido e resposta de cada rota, consulte [Endpoints de API](/pt-pt/hc/documentacao/aprender-dxpr-builder/referencia/pontos-de-extremidade-da-api).

## Serviços PHP

| Service ID | Class (in `src/`) | Purpose |
|---|---|---|
| `dxpr_builder.service` | `Service\DxprBuilderService` | Prepara conteúdo do construtor para saída, trata tokens de caminho, constrói o registo de conjuntos de ícones |
| `dxpr_builder.license_service` | `Service\DxprBuilderLicenseService` | Estado da licença, utilizadores faturáveis, sincronização de editores com a DXPR |
| `dxpr_builder.key_service` | `Service\DxprBuilderKeyService` | Lê e guarda a chave de produto |
| `dxpr_builder.jwt_decoder` | `Service\DxprBuilderJWTDecoder` | Descodifica o conteúdo da chave de produto |
| `dxpr_builder.user_settings` | `Service\UserSettings` | As definições de editor próprias de cada editor, guardadas em dados de utilizador |
| `dxpr_builder.content_lock` | `Service\ContentLock` | Regista que utilizador está a editar uma revisão de entidade |
| `dxpr_builder.content_migration` | `Service\ContentMigrationService` | Corre migrações de conteúdo; recolhe serviços etiquetados com `dxpr_builder.content_migration` |
| `dxpr_builder.profile_handler` | `Service\Handler\ProfileHandler` | Transforma um perfil em definições de editor |
| `dxpr_builder.handler.block` | `Service\Handler\BlockHandler` | Apresenta blocos do Drupal colocados como elementos |
| `dxpr_builder.handler.view` | `Service\Handler\ViewHandler` | Apresenta apresentações de vistas colocadas como elementos |
| `dxpr_builder.template_image_validator` | `Service\TemplateImageValidator` | Valida imagens de pré-visualização de modelos |
| `dxpr_builder.rl_variant.extractor`, `dxpr_builder.rl_variant.registrar` | `RlIntegration\Service\*` | Variantes de teste A/B; inativo sem o módulo RL |
| `dxpr_builder.rl_sort.extractor`, `dxpr_builder.rl_sort.registrar` | `RlIntegration\Service\*` | Experiências de ordenação inteligente; inativo sem o módulo RL |
| `logger.channel.dxpr_builder` | canal de registo do núcleo | Canal de registo `dxpr_builder` |

### DxprBuilderServiceInterface

Implementado por `dxpr_builder.service`. Os métodos com maior probabilidade de chamar:

- `insertBaseTokens($content)`: substitui o URL base deste site, o diretório de ficheiros e o caminho do módulo por tokens. O editor guarda o conteúdo nesta forma.
- `replaceBaseTokens(&$content): void`: expande os tokens de volta em URL para o ambiente atual.
- `stripHtmlElementPersists(string $markup): string`: remove os atributos `data-az-persist`. Corra-o em marcação escrita fora do editor; o editor reconstrói-os ao carregar.
- `getCmsElementNames()`: os blocos e apresentações de vistas oferecidos como elementos, em cache.
- `getIconSets(): array`: o registo de conjuntos de ícones após descoberta YAML e `hook_dxpr_builder_icon_sets_alter()`.

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

```

### DxprBuilderLicenseServiceInterface

Implementado por `dxpr_builder.license_service`.

- `isBillableUser(?AccountInterface $account = NULL): bool`: TRUE para o utilizador 1 e para contas ativas com `edit with dxpr builder`não excluídas da edição do DXPR Builder.
- `getLicenseInfo()`: estado da licença do servidor de licenças da DXPR, em cache. Sem chave de produto devolve o plano gratuito: um utilizador e 100 conteúdos.
- `syncAllUsersWithCentralStorage(string $operation, string $json_web_token = ''): void`: envia os editores deste site para a DXPR. `$operation` é uma das constantes de interface `DXPR_USER_SYNC_OPERATION` (`sync`), `DXPR_USER_ADD_OPERATION` (`add`) ou `DXPR_USER_REMOVE_OPERATION`(`remove`).

### DxprBuilderKeyService

- `getApiKey(): ?string`: a chave de produto. Quando a definição `api_key_storage`é `key`, lê a entidade Key indicada em `key_provider`; senão lê `json_web_token`.
- `setApiKey(string $key_value, string $storage_type = 'config', ?string $selected_key_id = NULL): void`: guarda a chave na configuração ou numa entidade Key.

### DxprBuilderJWTDecoder

- `decodeJwt(string $access_token)`: devolve as afirmações `sub`, `scope` e `dxpr_tier` da chave de produto, cada uma NULL quando o token não pode ser lido. O resultado fica em cache por token.

## Pontos de extensão JavaScript

Os scripts do editor partilham dois arrays em `window.dxprBuilder`. Empurre os objetos próprios para eles entre o script que cria o array e `dxpr_builder.js`, que os lê uma vez ao correr.

| Array | Created by | What `dxpr_builder.js` does with it |
|---|---|---|
| `dxpr_param_types` | `dxpr_param_types.js` | Regista cada objeto como tipo de parâmetro com `register_param_type()` |
| `dxpr_elements` | `dxpr_elements.js` | `create_dxpr_elements()` regista cada definição com `register_animated_element()` e converte os `params` com `make_param_type()` |

Os tipos de parâmetro que o módulo regista são `boxmodel`, `checkbox`, `checkboxes`, `colorpicker`, `datetime`, `dropdown`, `dxb_slider`, `html`, `icon`, `image`, `images`, `link`, `links`, `numericfield`, `row_layout`, `saved_datetime`, `social_links`, `textarea`, `textfield` e `video`. Um parâmetro com `type` desconhecido apresenta-se como entrada de texto simples.

[Elementos personalizados](/pt-pt/hc/documentacao/aprender-dxpr-builder/desenvolvimento/elementos-personalizados) mostra uma definição de elemento completa e como a carregar no momento certo.

## Rotas do editor

Legenda de acesso: **billable** é a verificação `_dxpr_builder_billable_user`(utilizador 1, ou uma conta ativa com `edit with dxpr builder`não excluída); **CSRF** é `_csrf_token`.

| Path | Route name | Methods | Access |
|---|---|---|---|
| `/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 |

## Rotas de administração

Todas as páginas de administração ficam em **DXPR Studio &gt; DXPR Builder**. A coluna do separador mostra a etiqueta no menu de administração.

| Path | Tab | Permission |
|---|---|---|
| `/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` |