Mementom, patent pending Developer

Mementom API v1

Marketing API

Connect your company’s marketing tools to Mementom. Build audiences, manage content, create campaign drafts and read results through the same workspace your marketers use.

Start with your workspace
Version
v1
Base URL
https://mementom.app/api/v1/marketing
Format
application/json
Access
Scoped server credential

Your application, one marketing workspace

The API and marketing console use the same records, validation and permissions. An audience or draft saved by your integration is the one your team sees in the console.

An insight is a registered, non-identifying field. An audience selects permitted insight values. Content holds an offer, questions or an insight request. A campaign draft combines audiences, content and planned terms.

The API works with your company’s application and catalog. The separate Aster demonstration is a teaching example you can replace with your own configuration.

From your server to the marketing console

Use returned IDs and revisions through the whole workflow.

  1. Read the workspace

    Get your application’s current catalog and revision.

  2. Build an audience

    Save filters using registered values, then count eligible matches.

  3. Save content

    Create an offer, questionnaire or insight request.

  4. Create a draft

    Combine the saved records with planned fees and budgets.

  5. Verify the result

    Read back IDs, inspect message traces and open the same console workspace.

Authentication and scopes

Send a scoped marketing credential from your backend over HTTPS. Each credential belongs to one company, one application and an active staff account. It is separate from the Developer API’s company credential.

Create, rotate and revoke credentials in Marketing API credentials. Keep secrets in your server secret store. Do not expose them in browser JavaScript, logs, URLs or AI prompts. Requests with browser Origin or Sec-Fetch-Site headers are rejected.

The default lifetime is 30 days; choose 1–90 days. Current membership, role, company/application status, expiry and revocation are checked on every request. A company switch or additional agency account requires its own authorized application credential.

Request headers

HeaderValue
AuthorizationBearer {marketingCredential}
Content-Typeapplication/json for JSON requests

Scopes

ScopeAllows
marketing:readList applications, read workspace, count an audience, read reports and activity.
marketing:audiences:writeCreate or replace audiences.
marketing:content:writeCreate, edit or duplicate content.
marketing:campaigns:writeCreate campaign drafts.
marketing:pricing:writeSet planning assumptions.
marketing:insights:proposePropose custom insight definitions for review.
marketing:objective:writeSet the workspace objective.

marketing:read is mandatory. Add only the write scopes your integration needs. Console credential management requires an owner, admin or marketing session; a Bearer credential cannot create another credential.

Revisions and safe retries

Read the workspace before saving. Every mutation requires its latest expectedRevision and a payload. A successful write returns the complete workspace and advances its revision. Use that response for the next call.

Concurrent writes with the same revision cannot both succeed. A stale write returns 409. Content edits additionally check expectedContentRevision. Unknown fields are rejected.

After a conflict, timeout or lost response, read back the workspace and reconcile saved IDs before writing again. There is no idempotency-key contract or automatic SDK retry. Blindly refreshing the revision and repeating a create can create another draft.

Multi-step workflows are not one transaction. Keep earlier successful records when a later operation fails. Response examples below show selected fields; every accepted mutation returns the full Workspace response.

Errors and limits

Errors return a machine-readable error, an optional message and, when available, activityId. The SDK exposes these as code, message, status and activityId.

HTTPMeaning and recovery
400Invalid JSON, fields, enum values, catalog bindings or planning assumptions. Correct the input.
401Credential/session is absent, expired, revoked or no longer authorized.
403Scope, role, browser-origin restriction or console-only operation. Use the correct access path.
404Resource is unavailable in this company/application. Foreign IDs are not disclosed.
409Workspace/content revision or immutable definition conflict. Refresh and reconcile.
413Request exceeds its body limit, or report exceeds its supported event count.
429Rate limit or sign-in cooldown. Honor Retry-After when supplied.
500 / 503Service/dependency failure. Save the correlation ID and reconcile uncertain writes.

Count and credential-issue JSON bodies are limited to 32 KiB. Authenticated content and campaign writes allow 4 MiB of total JSON, including every base64 image. Other workspace writes retain the 192 KiB limit. The marketing console prepares uploaded images automatically; direct API clients must keep the encoded request within its limit. Reports support up to 10,000 stored events per campaign/mode.

Each application supports 100 non-starter-pack audiences, content records, campaign drafts and definitions. Activity pages accept offsets 0–10,000 and limits 1–100. See the guide for field-specific limits.

SDK and integration downloads

Use Node.js 22 or later. Save the server module outside your public web directory and pin the reviewed version in your company repository. No Mementom database or private package access is needed.

Use your registered application, insight definitions and landing URLs. Aster is optional. The Developer API covers registration, protected actions and permitted company insight ingestion.

GET/applications

List applications

Read the active application available to this credential.

Required scope: marketing:read

Request fields

FieldMeaning
No request bodyThe credential selects one company/application. Console sessions can list their authorized company applications.

Use the returned applicationId for every workspace call. A foreign application ID returns 404; possession of an ID grants no access.

GET/applications/{applicationId}/workspace

Read the workspace

Read the current catalog, saved marketing records and revision.

Required scope: marketing:read

Request fields

FieldMeaning
applicationIdRequired path ID from List applications.
No request bodyReturns catalog definitions, saved records, revision, planning assumptions and capabilities.

Marketing responses omit developer-only templates, datasets and ingestion receipts. Keep sample provenance and unavailable capabilities visible.

POST/applications/{applicationId}/workspace/audiences

Save an audience

Build a saved audience from registered, permitted insight values.

Required scope: marketing:audiences:write

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payload.namePlain text, 1–100 characters; describes the audience.
payload.mode / rulesSimple format: all or any; 1–8 rules, one per definition.
payload.schemaVersion / logic / criteriaGrouped format: schemaVersion 2; root head; 1–64 criteria, maximum 256 nodes and depth 16.
payload.audienceIdOptional same-app ID to replace an audience; omit to create.

Editing an audience preserves its ID. Referencing campaigns keep their snapshots and are marked audienceChanged. Sample-derived audiences retain isSample.

See rules, grouped logic and criterion bindings.

POST/applications/{applicationId}/workspace/count

Count an audience

Count holders matching a proposed audience using current permissions and unexpired insights.

Required scope: marketing:read

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision, checked even though counting does not save.
audienceA simple or structured audience definition. This is not a payload mutation envelope.

A sample-based audience returns available:false, count:null and a reason. That is unavailable live reach, not zero. No holder IDs or individual insight values are returned.

POST/applications/{applicationId}/workspace/content

Save content

Create an offer, questionnaire or insight request, or revise a saved content record.

Required scope: marketing:content:write

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payloadComplete author-controlled content fields; see Content save model.
payload.contentId / expectedContentRevisionFor editing: existing content ID and its current content revision.
payload.duplicateFromIdFor duplicating: existing same-app content ID. Do not combine with contentId or expectedContentRevision.

Questionnaires require 1–10 questions; other types use an empty questions array. Insight requests need at least one requested insight. Up to 20 distinct requested insight IDs are allowed. Saving does not grant consent.

Leave content.landingUrl empty for the Mementom offer page, or provide your company’s HTTPS destination. Saved offers return a separate hostedUrl for the current edition. Opening that preview requires a marketing session for the owning company; saving a draft does not publish it.

See content save, creative and typed questions.

POST/applications/{applicationId}/workspace/campaigns

Create a campaign draft

Create a campaign draft from your saved audiences and content.

Required scope: marketing:campaigns:write

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payload.schemaVersion2 for the full engagement format.
payloadSee Campaign draft and Engagement models for all fields.
payload.engagements1–10 offer, questionnaire or insight-request engagements. References must belong to this application.

Both dates are null or both timezone-bearing with end after start. Daily cap cannot exceed total budget; both must cover a full engagement plus purchase. Fees are even USD cents and positive in combination; purchase fees apply only to offers. Saved status is always draft. There is no publish or delivery call.

See campaign fields and engagement fields. A referenced content edition must match its supplied creative (including authored offer details and design), questions, tags and requested insights. The campaign placement may use different engagement and purchase fees from the saved content defaults.

GET/applications/{applicationId}/workspace/report

Read a campaign report

Read aggregate campaign and engagement measurements in one explicit mode.

Required scope: marketing:read

Request fields

FieldMeaning
campaignIdRequired query parameter; saved campaign ID in this app.
modeOptional query: live (default) or test. Test is synthetic.

A draft has no live delivery. Costs are modeled from draft terms; settledMinor is null. Rates/times are null when unavailable. Live question distributions are withheld below five answers. Sample starter campaigns may generate a synthetic preview in test mode.

GET/applications/{applicationId}/workspace/activity

Read API activity

Trace server and console requests for one authorized application.

Required scope: marketing:read

Request fields

FieldMeaning
activityIdOptional returned mact_ correlation ID, maximum 100 characters.
offsetInteger 0–10,000; default 0.
limitInteger 1–100; default 20.
Query validationOnly these three query fields, each supplied once.

Safe events include result, timestamp, operation, method, status, revision/error when relevant, source and correlation ID. No credentials, raw content or holder identities are logged here. Activity reads do not recursively create trace events.

POST/applications/{applicationId}/workspace/pricing

Set pricing assumptions

Set pricing assumptions used to compare campaign plans.

Required scope: marketing:pricing:write

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payload.policySave a pricing policy. Do not combine with definitionId/profile.
payload.definitionId / profileAlternatively, save planning assumptions for one outside-catalog definition.

Omitted policy/profile fields reset to defaults, rather than preserving prior customized values. Audience estimates are recalculated; existing campaign drafts are marked pricingChanged. These are assumptions, not quotes or settlement.

See policy defaults and insight profiles.

POST/applications/{applicationId}/workspace/proposals

Propose an insight

Request a new non-identifying field for developer review.

Required scope: marketing:insights:propose

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payload.keyUnique dotted key, maximum 64 characters. Standard template keys cannot be proposed.
payload.label / descriptionNon-identifying plain text, maximum 80 / 240 characters.
payload.typeenum, boolean or integer.
payload.valuesEnum only: 2–20 distinct categories, each maximum 48 characters.
payload.minimum / maximumInteger only: whole numbers from 0–99, maximum at least minimum.
payload.windowDays / ttlDaysBoth required, integers 1–30.

The definition is saved pending_review and cannot be used until reviewed. Marketing cannot approve it or register standard templates. Identifying metadata, URLs and tracking identifiers are rejected.

POST/applications/{applicationId}/workspace/objective

Set the workspace objective

Choose the goal used for workspace suggestions.

Required scope: marketing:objective:write

Request fields

FieldMeaning
expectedRevisionCurrent workspace revision.
payload.objectivereturn_visitors or learn_preferences. This is separate from a campaign’s objective.

This changes workspace suggestions without changing an individual campaign’s saved objective.

GET/api-tokens

List credentials

List visible API credential metadata without revealing secrets.

Authentication: marketing console session only. Manage credentials.

Request fields

FieldMeaning
Console sessionRequired owner/admin/marketing session. Bearer credentials cannot use this route.
No request bodyOwners/admins see company tokens; marketers see their own. Secrets are omitted.

Creation, expiry and revocation timestamps use Unix milliseconds. Credential metadata describes staff access, never consumer identity.

POST/api-tokens

Issue a credential

Issue one scoped, expiring server credential from the marketing console.

Authentication: marketing console session only. Manage credentials.

Request fields

FieldMeaning
applicationIdActive application owned by the current company.
labelPlain text, 1–80 characters.
scopesDistinct documented scopes; marketing:read is required.
expiresInDaysInteger 1–90, default 30.
Console sessionRequired; same-origin write protection applies.

The 201 response returns the generated secret once with no-store. Store it directly in your server secret manager. The example below is redacted and cannot authenticate.

DELETE/api-tokens/{tokenId}

Revoke a credential

End a credential’s access without deleting its audit history.

Authentication: marketing console session only. Manage credentials.

Request fields

FieldMeaning
tokenIdRequired path ID returned by credential issue/list.
Console sessionOwners/admins can revoke company credentials; marketers can revoke their own.
No request bodyRevoking an already-revoked visible credential is safe.

Subsequent calls with the revoked credential fail. Rotation: issue a replacement, update the server secret, verify a read, then revoke the old one.

Data model

Audience rule

Use an ID/version from this workspace. equals supports enum/boolean/numeric; gte/lte numeric; contains enumset. Values must match the definition domain.

FieldTypeMeaning
definitionIdstring
Required
1 minimum characters.
versioninteger
Required
1 minimum.
operatorequals / contains / gte / lte
Required
See the example and validation rules.
valuestring / number / boolean
Required
See the example and validation rules.

Data model

Grouped audience logic

Groups evaluate children left to right, using leaf logic or group peerLogic. Defaults are AND. Whole tree: at most 256 nodes and depth 16; node IDs are unique.

FieldTypeMeaning
idstring
Required
See the example and validation rules.
logicAND / OR
Optional
See the example and validation rules.
peerLogicAND / OR
Optional
See the example and validation rules.
childrenarray of AudienceLeaf or AudienceGroup
Required
1 minimum items.

A leaf instead has id, insight (criterion ID) and optional logic. Root ID is head. Every criterion must be referenced. Joins evaluate left to right; this is not SQL operator precedence.

Data model

Criterion binding

Fields used by the corresponding operation.

FieldTypeMeaning
idstring
Required
See the example and validation rules.
definitionIdstring
Required
1 minimum characters.
versioninteger
Required
1 minimum.
operatorequals / contains / gte / lte
Required
See the example and validation rules.
valuestring / number / boolean
Required
See the example and validation rules.

Data model

Creative fields

Fields used by the corresponding operation.

FieldTypeMeaning
headlinestring
Required
1 minimum characters; 120 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
bodystring
Required
1 minimum characters; 2000 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
ctastring
Required
1 minimum characters; 60 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
landingUrlstring
Optional
Optional company destination: a public HTTPS URL without username, password, query string or fragment. Omit or leave empty to use the Mementom offer page. The saved response supplies hostedUrl separately; keep landingUrl empty when using that default.
imagestring
Optional
Optional PNG/JPEG/WebP base64 data URL. There is no separate per-image character limit. The complete authenticated content or campaign request, including all images, must fit the 4 MiB JSON limit.
brandNamestring
Optional
Plain text, up to 80 characters. Brand shown on the creative; empty leaves the brand line blank.
offerLabelstring
Optional
Plain text, up to 120 characters. Authored offer badge or benefit. No fee or completion wording is inserted automatically.
termsstring
Optional
Plain text, up to 1000 characters. Offer terms shown as authored.
promoCodestring
Optional
Plain text, up to 80 characters. Optional promotional code.
imageAltstring
Optional
Plain text, up to 180 characters. Description of the image for assistive technology.
designCreative design
Optional
Controlled background, layout, text, image and button settings. Omitted settings use defaults.

Data model

Creative design

Choose a layout, palette and typography for the authored creative. Only these settings are accepted; arbitrary CSS, unknown keys, null and out-of-range values are rejected. Older records use the defaults. Empty optional text and a default-equivalent design remain compatible with legacy saved content.

FieldTypeMeaning
layoutstring
Optional
image-top, background, text. Default: image-top.
backgroundColorstring
Optional
Six-digit hexadecimal color. Default: #ffffff.
textColorstring
Optional
Six-digit hexadecimal color. Default: #182840.
accentColorstring
Optional
Six-digit hexadecimal color. Default: #245cdb.
buttonTextColorstring
Optional
Six-digit hexadecimal color. Default: #ffffff.
overlayColorstring
Optional
Six-digit hexadecimal color. Default: #000000.
overlayOpacitynumber
Optional
0–85. Overlay opacity as a percentage. Default: 45.
imagePositionstring
Optional
center, top, bottom, left, right. Default: center.
textAlignstring
Optional
left, center. Default: left.
contentPositionstring
Optional
top, center, bottom. Default: bottom.
fontFamilystring
Optional
sans, serif. Default: sans.
headlineSizestring
Optional
small, medium, large. Default: medium.
buttonStylestring
Optional
rounded, pill, square. Default: rounded.
imageFitstring
Optional
cover, contain. Default: cover.

Data model

Typed question

Use an approved or standard company insight of the same type. Multiple choice uses enum choices; boolean and slider require single answer and maxAnswers=1. Slider requires integer step dividing the registered integer range; other types forbid step. Choice count and maxAnswers must fit the registered domain.

FieldTypeMeaning
schemaVersion1
Required
See the example and validation rules.
promptstring
Required
1 minimum characters; 240 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
questionTypemultipleChoice / boolean / slider
Required
See the example and validation rules.
answerTypesingle / multiple
Required
See the example and validation rules.
maxAnswersinteger
Required
1 minimum; 20 maximum.
stepinteger
Optional
1 minimum.
insightQuestionInsight
Required
See the example and validation rules.

Use an approved or standard company definition. Enum choices come from its finite domain; boolean and slider require one answer. Slider step must divide its registered integer range. Existing legacy prompt/options questions remain compatible; new integrations should bind a typed question to an insight.

Data model

Campaign engagement

Include at least one same-app saved audience; included/excluded IDs must be disjoint. Combined engagement and purchase fees must be positive. Purchase fees only apply to offers. Optional saved contentId/contentRevision require the unchanged creative, questions, tags and requested insights of that edition; the service snapshots definitions and content. Placement fees may differ from the saved content defaults.

FieldTypeMeaning
namestring
Required
1 minimum characters; 100 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
typeoffer / questionnaire / insight_request
Required
See the example and validation rules.
contentCreative
Required
See the example and validation rules.
questionsarray of QuestionInput
Required
10 maximum items.
requestedInsightIdsarray of string
Required
20 maximum items; distinct values.
audienceIdsarray of string
Required
1 minimum items; 20 maximum items; distinct values.
excludedAudienceIdsarray of string
Optional
20 maximum items; distinct values.
refinementsarray of Rule
Optional
8 maximum items.
engagementMinorinteger
Required
0 minimum; 100000 maximum.
purchaseMinorinteger
Required
0 minimum; 100000 maximum.
contentIdstring
Optional
See the example and validation rules.
contentRevisioninteger
Optional
1 minimum.

Data model

Campaign draft fields

Preferred draft format. Both dates null or both valid timezone-bearing dates, end after start. Daily cap <= total budget. Both budgets must cover a full priced engagement plus purchase fee. Values are USD cents; all pricing remains a planning estimate. Campaigns are created, not updated or activated.

FieldTypeMeaning
schemaVersion2
Required
See the example and validation rules.
namestring
Required
1 minimum characters; 100 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
objectivereturn_visitors / learn_preferences / collect_insights
Required
See the example and validation rules.
startAtstring or null
Required
See the example and validation rules.
endAtstring or null
Required
See the example and validation rules.
budgetMinorinteger
Required
1 minimum; 100000000 maximum.
dailyCapMinorinteger
Required
1 minimum; 100000000 maximum.
responseWindowHours24 / 72 / 168
Required
See the example and validation rules.
engagementsarray of Engagement
Required
1 minimum items; 10 maximum items.

Data model

Content save fields

Omit IDs to create. Edit with contentId and its current expectedContentRevision. Duplicate with duplicateFromId and a complete payload; do not combine it with contentId. A new/duplicate record forbids expectedContentRevision. Historical editions remain available for campaign snapshots and their saved offer previews. Optional engagementMinor and purchaseMinor set the default combined fees in even USD cents (0–100000 each, positive in combination; purchase fees apply only to offers). Omission preserves the current or duplicated record’s values. New content defaults to 200 and 0; these are defaults, not minimum fees.

FieldTypeMeaning
namestring
Required
1 minimum characters; 100 maximum characters. Nonempty plain text. HTML, control characters and identifying fields are rejected where applicable.
typeoffer / questionnaire / insight_request
Required
See the example and validation rules.
contentCreative
Required
See the example and validation rules.
questionsarray of QuestionInput
Required
10 maximum items.
requestedInsightIdsarray of string
Required
20 maximum items; distinct values.
contentIdstring
Optional
See the example and validation rules.
expectedContentRevisioninteger
Optional
1 minimum.
duplicateFromIdstring
Optional
See the example and validation rules.
engagementMinorinteger
Optional
Even USD cents, 0–100000. Default combined engagement fee for campaign reuse. Omission preserves an existing or duplicated value; new content defaults to 200.
purchaseMinorinteger
Optional
Even USD cents, 0–100000. Offer purchase fee. Omission preserves an existing or duplicated value; new content defaults to 0.

Data model

Pricing policy

Planning assumptions. Omitted fields reset to documented defaults: version 1, pro/retail, weights .15/.1/.5/1, baseCPA 5, split false. This is not a patch against prior custom settings.

FieldTypeMeaning
schemaVersion1
Optional
See the example and validation rules.
brandTierfree / basic / pro / enterprise
Optional
See the example and validation rules.
marketTiereconomy / retail / mid / luxury / ultra
Optional
See the example and validation rules.
sourceWeightnumber
Optional
0 minimum; 1 maximum.
dataPointWeightnumber
Optional
0 minimum; 1 maximum.
uniquenessWeightnumber
Optional
0 minimum; 1 maximum.
confidenceWeightnumber
Optional
0 minimum; 1 maximum.
baseCPAnumber
Optional
0 minimum; 1000 maximum. Scenario base purchase fee in dollars; this is not a charge.
splitAddOnCostsWithCPAboolean
Optional
See the example and validation rules.

Data model

Insight pricing profile

One outside-catalog definition only. Omitted values use default behavior/general, counts 1, uniqueness 0, confidence 1, age 0, half-life 30, expiry 90. No paid license or settlement is created.

FieldTypeMeaning
typedemographic / location / behavior / question
Optional
See the example and validation rules.
purchaseTypegeneral / precision / subscription
Optional
See the example and validation rules.
baseMinorinteger
Optional
0 minimum; 100000 maximum.
sourceCountinteger
Optional
1 minimum; 100 maximum.
dataPointCountinteger
Optional
1 minimum; 1000000 maximum.
uniquenessnumber
Optional
0 minimum; 1 maximum.
confidencenumber
Optional
0 minimum; 1 maximum.
ageDaysnumber
Optional
0 minimum; 36500 maximum.
halfLifeDaysnumber
Optional
1 minimum; 3650 maximum.
expiresAfterDaysnumber
Optional
1 minimum; 3650 maximum.

Data model

Credential metadata

Fields used by the corresponding operation.

FieldTypeMeaning
idstring
Required
See the example and validation rules.
labelstring
Required
See the example and validation rules.
applicationIdApplicationId
Required
See the example and validation rules.
developerAccountIdstring
Required
Issuing staff account; this is never a consumer identity.
scopesarray of Scope
Required
See the example and validation rules.
createdAtinteger
Required
0 minimum. Unix milliseconds.
expiresAtinteger
Required
0 minimum. Unix milliseconds.
revokedAtinteger or null
Required
See the example and validation rules.
statusactive / expired / revoked
Required
See the example and validation rules.

Data model

Workspace response

Same saved records as the marketing console. Marketing responses omit developer-only templates, datasets and ingestion receipts. Respect isSample and market provenance; catalog planning examples are not paid inventory.

FieldTypeMeaning
applicationIdApplicationId
Required
See the example and validation rules.
revisioninteger
Required
0 minimum.
definitionsarray of InsightDefinition
Required
See the example and validation rules.
outsideCatalogarray of InsightDefinition
Required
See the example and validation rules.
captureCatalogarray of InsightDefinition
Optional
See the example and validation rules.
audiencesarray of SavedAudience
Required
See the example and validation rules.
contentLibraryarray of SavedContent
Required
See the example and validation rules.
campaignsarray of SavedCampaign
Required
See the example and validation rules.
objectivereturn_visitors / learn_preferences
Required
See the example and validation rules.
pricingPolicyPricingPolicy
Required
See the example and validation rules.
pricingProfilesobject
Required
See the example and validation rules.
pricingUpdatedAtstring
Optional
See the example and validation rules.
suggestionsarray of object
Optional
See the example and validation rules.
sampleSummaryobject
Optional
See the example and validation rules.
marketobject
Optional
Aggregate catalog coverage and provenance; earnings may be unavailable.
capabilitiesobject
Required
See the example and validation rules.
readinessstring
Required
See the example and validation rules.
generatedAtstring
Required
See the example and validation rules.
activityIdActivityId
Optional
See the example and validation rules.

Every saved audience has an ID, rules, status and planning price. Content includes its ID, current revision and retained editions. Campaigns contain engagement IDs, audience/content/insight snapshots, completion-event names, pricing and draft terms. Saved offer content and offer engagements also include a read-only hostedUrl. Library previews use /marketing/offers/{appId}/content/{contentId}/{revision}; campaign previews use /marketing/offers/{appId}/campaign/{campaignId}/{campaignRevision}/{engagementId}. The returned absolute URL requires the owning company’s marketing session. It does not publish the draft or replace the authored content.landingUrl. Duplicates receive their own preview URL. The OpenAPI contract defines the complete saved-object shapes.

Data model

Report metrics

Counts are aggregate. Rates and monetary ratios are null when their denominator is zero. Revenue is null unless all net purchases carry recorded amounts. Modeled costs are not settled spend.

FieldTypeMeaning
deliveredinteger
Required
0 minimum.
viewedinteger
Required
0 minimum.
startedinteger
Required
0 minimum.
respondedinteger
Required
0 minimum.
completedinteger
Required
0 minimum.
arrivalsinteger
Required
0 minimum.
insightsReleasedinteger
Required
0 minimum.
purchasesinteger
Required
0 minimum.
reversalsinteger
Required
0 minimum.
netPurchasesinteger
Required
0 minimum.
optedOutinteger
Required
0 minimum.
matureinteger
Required
0 minimum.
matureRespondedinteger
Required
0 minimum.
matureStartedinteger
Required
0 minimum.
matureCompletedinteger
Required
0 minimum.
matureArrivalsinteger
Required
0 minimum.
matureNetPurchasesinteger
Required
0 minimum.
pendinginteger
Required
0 minimum.
timedRespondersinteger
Required
0 minimum.
viewTimedRespondersinteger
Required
0 minimum.
modeledSpendMinorinteger
Required
0 minimum.
modeledConsumerMinorinteger
Required
0 minimum.
responseRatenumber or null
Required
See the example and validation rules.
matureResponseRatenumber or null
Required
See the example and validation rules.
medianResponseMsnumber or null
Required
See the example and validation rules.
p90ResponseMsnumber or null
Required
See the example and validation rules.
medianViewedResponseMsnumber or null
Required
See the example and validation rules.
costPerResponseMinornumber or null
Required
See the example and validation rules.
costPerPurchaseMinornumber or null
Required
See the example and validation rules.
revenueMinornumber or null
Required
See the example and validation rules.
settledMinornull
Required
No settlement integration.
windowsarray of object
Required
See the example and validation rules.

The report also supplies campaignId, campaignRevision, mode, generatedAt, windowHours, budgetMinor, recommendations, per-engagement metrics/question distributions, isSample and limitations. These fields describe recorded evidence; they do not prove delivery, billing or causal lift.

Marketing automation and AI/MCP

Use the SDK from your company’s jobs, internal tools or agency backend. Keep server credentials separate per application and grant the minimum scopes. An integration must preserve current membership, company/application ownership and revision checks.

The Marketing MCP server exposes tools backed by these operations. Keep credentials, private photos/captions, keyring material and holder identities out of model input. Your backend supplies the credential after authorization. Persist returned IDs and reconcile uncertain writes.

Use hosted OAuth or local stdio as described in the MCP connection guide. Draft creation is not publishing or spending. A wrapper cannot add capabilities or permissions that the API does not grant.

Tool purposeExisting SDK method
Read catalog and draftsgetWorkspace
Count an audiencecountAudience
Save audience/contentsaveAudience / saveContent
Create a draftcreateCampaign
Read reports and tracesgetReport / getActivity

See the flow in Aster

After reading the contract, use Aster to see actual messages, saved IDs and console readback in a concrete company example. Aster’s settings are replaceable; your company does not need an Aster account or Aster insight to integrate.

The downloadable example exports a configurable draft workflow. Replace the company name, insight key/value, content and landing URL with your registered application’s values. The API reference remains available without the demonstration or a signed-in session.

Open Aster marketing demo

Endpoint index

All paths are relative to https://mementom.app/api/v1/marketing. Credential lifecycle operations require a console session; other operations accept scoped server credentials.

MethodPathPurpose
GET/applicationsList applications
GET/applications/{applicationId}/workspaceRead the workspace
POST/applications/{applicationId}/workspace/audiencesSave an audience
POST/applications/{applicationId}/workspace/countCount an audience
POST/applications/{applicationId}/workspace/contentSave content
POST/applications/{applicationId}/workspace/campaignsCreate a campaign draft
GET/applications/{applicationId}/workspace/reportRead a campaign report
GET/applications/{applicationId}/workspace/activityRead API activity
POST/applications/{applicationId}/workspace/pricingSet pricing assumptions
POST/applications/{applicationId}/workspace/proposalsPropose an insight
POST/applications/{applicationId}/workspace/objectiveSet the workspace objective
GET/api-tokensList credentials
POST/api-tokensIssue a credential
DELETE/api-tokens/{tokenId}Revoke a credential