Campaigns
Catalog campaigns (campanias).
📄️ Get campaign by ID
Returns a single campaign by its primary key. The response carries a strong `ETag` header with the current version.
📄️ Update campaign
Full replacement of an existing campaign. Send the `If-Match` header with the current ETag for optimistic concurrency control.
📄️ Delete campaign
Deletes a campaign. Send the `If-Match` header with the current ETag for optimistic concurrency control.
📄️ Merge-patch campaign
RFC 7396 merge-patch over `application/merge-patch+json`. Send only the fields you want to change; include a field with value `null` to remove it. Use the `If-Match` header for optimistic concurrency control.
📄️ List campaigns
Returns a paginated list of campaigns with envelope `{data, totalCount, skip, limit, hasMore}`. Default sort is `startDate:desc` so most recent campaigns appear first. Limit is capped at 200; skip is clamped to >= 0.
📄️ Create campaign
Creates a new campaign. Business logic runs in the legacy WAR via the internal commands gateway.
📄️ Prototype campaign for a creation form
Returns a non-persisted campaign pre-populated with backend defaults. Optional hints include `companyId` and `copyFromId`. The response has no `id`, `version` or audit fields; call `POST /api/v2/campaigns` afterwards to persist it.