generated: '2026-08-13' method: derived source: >- openapi/*.yml ($ref graph, path hierarchy and PKey link fields) enriched from https://experienceleague.adobe.com/en/docs/campaign/campaign-v8/developer/datamodel (fetched 2026-08-13, HTTP 200). summary: >- Adobe Campaign's data model is a relational schema in the customer's Campaign database, exposed over the API as a small set of top-level resources with hypermedia links between them. The critical property for any integrator is that the model is PER-INSTANCE EXTENSIBLE: customers extend the built-in schemas, extended resources surface under /profileAndServicesExt/, and the deployed shape must be discovered at runtime with getResourceMetadata. A spec harvested from one tenant does not describe another tenant. identifiers: primary_key: name: PKey type: string description: >- Opaque, deployment-specific primary key generated by Campaign. Returned in responses and embedded in href links. persistence_rule: >- Adobe explicitly instructs that PKey values must NEVER be stored in an external database or website. Define a business key on your side and address resources by custom key. custom_key: description: >- A profile resource extended with a custom key field can be addressed as /profileAndServicesExt/profile/{customKey}. Immutable via PATCH. linking: >- Related objects are returned as link objects carrying {PKey, href, label, name, title}. Traverse by following href; never construct a URL. entities: - name: Profile api_path: /profileAndServices/profile underlying_table: nmsRecipient description: >- The marketing profile — the main table of the Campaign data model. Stores the person, their channel addresses and their marketing attributes. operations: - listProfiles - getProfile - createProfile - updateProfile - deleteProfile extensible: true extension_path: /profileAndServicesExt/profile - name: Service api_path: /profileAndServices/service description: >- A subscription service (for example a newsletter). Profiles subscribe to services; a service has a name, label and title. operations: - listServices - getService - createService - updateService - deleteService - name: Subscription api_path: /profileAndServices/profile/{PKEY}/subscriptions description: The join between a Profile and a Service. operations: - subscribeProfile - unsubscribeProfile - subscribe - unsubscribe - name: MarketingHistory api_path: /profileAndServices/history/{PKEY} underlying_table: NmsBroadLogRcp / NmsTrackingLogRcp description: >- Read-only delivery and tracking log for a profile — what was sent to this person and how they reacted (opens, clicks). Adobe notes nmsBroadlog is the largest table in the system and that logs are purged on a retention schedule, so history is not permanent. operations: - getMarketingHistory read_only: true - name: Delivery api_path: /nl/jsp/soaprouter.jsp/nms-delivery/* underlying_table: NmsDelivery description: >- One record per delivery action or delivery template, carrying target, content and execution parameters. Updated repeatedly as the delivery progresses. Only reachable through the Classic SOAP surface in this repo. operations: - submitDelivery - deliveryPrepareAndStart - name: Workflow api_path: /workflow/execution/{workflowID}/commands underlying_table: xtkWorkflow description: >- The orchestration engine object. Controlled by command (start, pause, stop, resume) rather than by CRUD. operations: - controlWorkflow - workflowStart - workflowStop - workflowPostEvent - name: TransactionalEvent api_path: /{transactionalAPI}/{eventID} description: >- A real-time event that triggers a transactional message. POST returns a Primary Key; GET on the same path with that key returns the event status. Optional `expiration` and `scheduled` ISO 8601 fields bound the send window. Channel is inferred from the payload: `email` present triggers email, `mobilePhone` present triggers SMS. operations: - triggerTransactionalEvent - getTransactionalEventStatus - pushEvent - pushEvents - name: CustomResource api_path: /customResources/{cusResourceName} description: Rows of a non-profile custom resource published to the API. operations: - listCustomResources - name: ProfileLinkedCustomResource api_path: /profileAndServicesExt/{cusResourceName} description: Rows of a custom resource linked to the profile table. operations: - listProfileLinkedCustomResources - name: ResourceMetadata api_path: /profileAndServices/resourceType/{resourceName} description: >- The schema description of a Campaign resource. The discovery mechanism for a per-tenant model — call this before writing. operations: - getResourceMetadata - name: OrganizationalUnit api_path: /profileAndServicesExt/orgUnitBase underlying_table: xtkGroup (related) description: >- Organizational units used for data partitioning. Note that API callers run in the administrator context and are excluded from the role context by default, so org units do not constrain an API credential unless Adobe configures it. operations: - listOrgUnits - name: PrivacyRequest api_path: /privacy/privacyTool description: A GDPR/CCPA data subject access or deletion request. operations: - createPrivacyRequest - name: Session api_path: /nl/jsp/soaprouter.jsp/xtk-session/* underlying_table: xtkSessionInfo description: >- Campaign Classic authentication session. Logon returns the session token and security token pair; Write/WriteCollection perform generic data writes against any schema. operations: - sessionLogon - sessionLogout - sessionWrite - sessionWriteCollection - name: QueryDef api_path: /nl/jsp/soaprouter.jsp/xtk-queryDef/ExecuteQuery description: >- The generic data-access mechanism. Executes an XML query definition against any table in the data model — the widest-reach operation on the whole surface. operations: - executeQuery relationships: - from: Profile to: Subscription type: has_many via: /profileAndServices/profile/{PKEY}/subscriptions - from: Service to: Subscription type: has_many via: /profileAndServices/service/{servicePKEY}/subscriptions/{profilePKEY} - from: Subscription to: Service type: belongs_to via: service.href - from: Subscription to: Profile type: belongs_to via: profile PKEY path segment - from: Profile to: MarketingHistory type: has_many via: /profileAndServices/history/{PKEY} - from: Profile to: ProfileLinkedCustomResource type: has_many via: /profileAndServicesExt/{cusResourceName} - from: Delivery to: MarketingHistory type: has_many via: NmsBroadLogRcp delivery log rows - from: TransactionalEvent to: Delivery type: has_one via: transactional message execution - from: Workflow to: Delivery type: has_many via: workflow delivery activities - from: OrganizationalUnit to: Profile type: has_many via: data partitioning (not enforced for API callers by default) - from: ResourceMetadata to: Profile type: describes via: /profileAndServices/resourceType/{resourceName} retention: note: >- Delivery logs and tracking logs are purged after a configurable retention period. Adobe recommends exporting logs regularly. Any integration that treats marketing history as durable is wrong. maintainers: - FN: Kin Lane email: kin@apievangelist.com