Integrators: start here
This section of the help is for system integrators: integration developers, solution architects and the integration companies that connect Exponential with other systems. Typical projects connect a CRM, an ERP or a product information system (PIM), a digital asset manager (DAM), an identity provider, a search server, a mail or newsletter service, a payment provider, an analytics tool, or another content management system that is being replaced or kept alongside.
It answers four questions: which integration surfaces Exponential actually has (and which it does not), which one fits a given job, how to build an integration that survives imports, failures and upgrades, and how to run an integration project from discovery to handover.
Note
Every technical statement in this section names the file, setting, class or command it relies on, and was checked
against the code of Exponential 6.0.15 and the extensions the root composer.json requires. Where something is not
provided, the page says so plainly. Examples use example.com, "your company" and placeholder identifiers; no page
describes a real customer or partner.
Contents
- Integrating Exponential in one minute
- What this section covers, and what it does not
- Map of the integrator pages
- Reading paths by role
- Your first week on an integration project
- Who to ask
Integrating Exponential in one minute
- Two HTTP APIs ship with the product. The REST content API of the
ezprestapiextension answers below/api/ezp/v1/and/api/ezp/v2/(reads at both versions, create and delete at v2), and theexpservicesextension offers about a thousand named services as JSON under/ezjscore/call/exp<domain>::<method>(REST API for integrators, Remote services with expservices). - Three kinds of credentials. OAuth 2.0 applications registered at Setup > oAuth admin, personal API keys
(
expk_...) for one program of one user, andexpservicestokens (expt_...). None of them can do more than the user behind it (Choosing credentials). - The PHP API is the strongest surface. Imports that run on the server use
eZContentFunctions::createAndPublishObject()andupdateAndPublishObject()with a stableremote_id, so the publish operation, workflows, caches and the search index all stay in step (Idempotent imports keyed by remote_id). - Hooks for "something happened". Workflows on triggers (for example
content / publish / after), event listeners ofezpEvent, notification handlers, and the audit trail's signed webhook sink (Workflows and triggers as hooks, Outgoing webhooks from the audit trail). - Feeds, packages and files. RSS 1.0, RSS 2.0, Atom and OPML exports, RSS imports by cronjob,
.ezpkgpackages, CSV import and export, and scheduled exchange to SFTP, S3, WebDAV or an HTTP endpoint withxrowextract. - Identity. Login handlers (
standard,LDAP,textfile, your own), single sign-on handlers, and social login through thesevenx_authentication_2faextension (Login handlers, Single sign-on and social login). - Everything runs as an extension. An integration is an extension: settings, classes, cronjob parts, console commands, workflow events. It can be versioned, tested, released and contributed back (Building an integration as an extension).
- What is not there. No OpenAPI description of the content API, no XML-RPC, no SAML, no message broker connector in the kernel, and no content update over REST (GraphQL has one). Plan these as custom work (Integration surfaces at a glance).
What this section covers, and what it does not
| Covered here | Read elsewhere |
|---|---|
| Choosing and using each integration surface for a job | Writing extensions in general: Extension development: the book |
| Integration patterns: push and pull, batch and real time, idempotency, mapping | Building applications on Exponential: App creators: start here |
| Security, testing, monitoring and upgrades of integrations | Hosting and operating servers: Hosting companies: start here |
| Running an integration project: estimates, statements of work, handover | The partner program itself: Partners: start here |
| Worksheets, checklists, FAQ and glossary for integrators | Working on the code with Git: Develop with Git |
Two sibling sections are written for neighboring roles: Resellers: start here for companies that sell Exponential and services around it, and Bundlers: start here for companies that ship Exponential inside a product or a distribution.
Map of the integrator pages
Reading paths by role
| You are | Read in this order |
|---|---|
| Solution architect deciding how systems connect | Integration surfaces at a glance, Choosing an integration surface, Push and pull, batch and real time, Mapping classes to external data, Security |
| Integration developer writing the code | CLI scripts and ezexec, Idempotent imports, Writing an import, Workflows and triggers, Error handling and logging, Testing, An integration as an extension |
| Developer of an external app calling Exponential over HTTP | Choosing credentials, REST API, Personal API keys, Remote services with expservices |
| Identity and security engineer | Login handlers, Single sign-on, Service accounts and roles, Security review checklist |
| Operations engineer running the integration | Cronjobs, Monitoring, Caching after imports, Velocity and performance, Upgrades |
| Project lead or account manager at an integration company | Project playbook, Discovery worksheet, Estimating, Statements of work, Handover, Integrators and the partner program |
The whole section in one order is on Integrators' reading path.
Your first week on an integration project
| Day | Do this | Page |
|---|---|---|
| 1 | Fill in the discovery worksheet with the customer: systems, data, direction, volume, timing | Integration discovery worksheet |
| 1 | Check which surfaces the installation has active (ActiveExtensions, rest.ini, soap.ini, webdav.ini) | Integration surfaces at a glance |
| 2 | Pick a surface and a credential per data flow, and write them down | Choosing an integration surface, Choosing credentials |
| 2 | Map each external record to a content class and a remote_id scheme | Mapping classes to external data |
| 3 | Set up a development installation from Git and a service account with a narrow role | Develop with Git, Service accounts and roles |
| 4 | Build a first import or call end to end, with a dry run | Writing an import |
| 5 | Write the interface specification and agree on error handling and monitoring | Interface specification template, Monitoring |
Who to ask
| Question | Where |
|---|---|
| Technical questions about the APIs and the kernel | The forums https://share.exponential.earth/forums and Telegram https://t.me/exponentialcms |
| Paid support, development or a review of your integration by 7x | https://se7enx.com/contact |
| The partner program, levels, referrals | The partner team: [email protected], or the form at https://exponential.earth/partner/contact-us |
| A security problem you found while integrating | [email protected], privately, never in a public issue |
| A bug or a missing feature in an extension | The extension's repository on https://github.com/se7enxweb (Writing good issues) |
Related pages
- Develop with Git: grow from user to developer
- Extension development: the book (start here)
- Partners: start here and Implementation partners
- Resellers: start here, Bundlers: start here
- App creators: start here
- Migrations in client projects, Migrations
- Free documentation: this page is free to copy, translate and improve under the GNU FDL 1.3.
Become an Exponential Partner
Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.