WRNEXUS API

One API for SMS, WhatsApp and email

Call https://api.wrnexus.com/<app>/<operation> with your API key. Create keys, allow your server addresses and add webhooks in Account.

Authentication

Send the key in the Authorization header. Calls are accepted only from addresses on your Allowed list, and only for the apps and operations the key allows.

curl -X POST https://api.wrnexus.com/sms/send \
  -H "Authorization: Bearer wrn_live_…" \
  -H "Content-Type: application/json" \
  -d '{"destination":"+919876543210","templateName":"otp","senderName":"WRNEXS","variables":{"code":"123456"}}'

Every response carries a requestId. Errors look like {"ok":false,"error":{"code":"ip-not-allowed","message":"…"}}.

Contacts

OperationMethod and URLFields
recordsVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /contacts/recordsquery, after, limit, kind, archived
recordVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /contacts/recordid
createVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/createrecord, target, requestKey
updateVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/updateid, revision, record, requestKey
archiveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/archiveid, revision, requestKey
linksVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /contacts/linksid
linkVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/linkid, revision, target, requestKey
method addVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/method-addid, revision, method, requestKey
method retireVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /contacts/method-retireid, revision, methodId, requestKey

Webhook events: contacts.record.changed

Notes

OperationMethod and URLFields
recordsVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /notes/recordsquery, after, limit, state
recordVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /notes/recordid
createVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /notes/createrecord, target, requestKey
updateVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /notes/updateid, revision, record, requestKey
archiveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /notes/archiveid, revision, requestKey
linksVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /notes/linksid
linkVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /notes/linkid, revision, target, requestKey
revisionsVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /notes/revisionsid
restoreVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /notes/restoreid, revision, restoreRevision, requestKey

Webhook events: notes.record.changed

Tasks

OperationMethod and URLFields
recordsVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /tasks/recordsquery, after, limit, view
recordVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /tasks/recordid
createVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/createrecord, target, requestKey
updateVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/updateid, revision, record, requestKey
archiveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/archiveid, revision, requestKey
linksVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /tasks/linksid
linkVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/linkid, revision, target, requestKey
statusVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/statusid, revision, status, requestKey
assignVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/assignid, revision, userId, requestKey
checklistVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /tasks/checklistid
checklist saveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/checklist-saveid, revision, items, requestKey
watchersVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /tasks/watchersid
watchers saveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/watchers-saveid, revision, users, requestKey
recurrence saveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /tasks/recurrence-saveid, revision, rule, requestKey

Webhook events: tasks.record.changed

Calendar reminders

OperationMethod and URLFields
remindersVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /calendar/remindersafter, limit
reminderVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /calendar/reminderid
reminder saveVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /calendar/reminder-savereminder, requestKey
reminder stopVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.POST /calendar/reminder-stopid, revision, requestKey
reminder jobsVersion 1 shared productivity operation. Organization, environment and workspace are fixed by the key; record permissions are rechecked.GET /calendar/reminder-jobsid

Webhook events: calendar.reminder.changed

SMS

OperationMethod and URLFields
Service BalanceRead the organization’s shared Service Balance in minor currency units.GET /sms/balance—
Send SMSSend an approved template to one number.POST /sms/senddestination, templateName, senderName, variables, idempotencyKey
Check statusCurrent delivery status of one message.GET /sms/statusid
Message detailsFull details of one message.GET /sms/detailsid
List messagesRecent messages, newest first.GET /sms/listlimit, status
List templatesApproved templates you can send.GET /sms/templates—
List sender IDsVerified sender IDs you can send from.GET /sms/senders—

Webhook events: sms.message.queued, sms.message.submitted, sms.message.delivered, sms.message.failed

WhatsApp

OperationMethod and URLFields
Service BalanceRead the organization’s shared Service Balance in minor currency units.GET /whatsapp/balance—
Send messageSend a text or approved template message.POST /whatsapp/sendto, kind, text, template_id, body_values, number_id, idempotency_key
Check statusCurrent status of one message.GET /whatsapp/statusid
Fetch messageFull details of one message.GET /whatsapp/detailsid
List messagesRecent messages, newest first.GET /whatsapp/listlimit, status
List templatesApproved templates you can send.GET /whatsapp/templates—

Webhook events: whatsapp.message.sent, whatsapp.message.delivered, whatsapp.message.read, whatsapp.message.failed, whatsapp.message.received, whatsapp.template.updated, whatsapp.order.paid

Email

OperationMethod and URLFields
Service BalanceRead the organization’s shared Service Balance in minor currency units.GET /email/balance—
Send emailSend an email from an assigned sender.POST /email/sendto, senderKey, fromName, subject, htmlBody, textBody, templateId
Check statusCurrent delivery status of one email.GET /email/statusid
Fetch emailFull details of one email.GET /email/detailsid
List emailsRecent emails, newest first.GET /email/listlimit, status
List templatesTemplates you can send.GET /email/templates—

Webhook events: email.message.queued, email.message.submitted, email.message.accepted, email.message.deferred, email.message.failed, email.message.tracking_unknown, email.message.opened, email.message.clicked, email.message.bounced, email.message.complained, email.message.unsubscribed

Notifications

OperationMethod and URLFields
AppsList apps and their configured channel routes.GET /notifications/apps—
Save appGroup Android, iOS and channel connections in one app.POST /notifications/app-saveid, revision, name, active, config
Send across channelsAdmit selected channels together with retry-safe billing.POST /notifications/app-sendappId, recipientId, channels, title, body, purpose, category, templateId, variables, url, screen, idempotencyKey
Push analyticsProvider submission and SDK-observed device receipt, opening and reading.GET /notifications/push-analyticsdays, recipientId, connectionId, platform, category, status
List workflow runsBrowse scoped workflow run status without event payloads.GET /notifications/workflow-runsworkflowId, cursor, limit
Read workflow runRead a retained run and its event/recipient snapshot.GET /notifications/workflow-runrunId
List workflow stepsBrowse durable node outcomes and linked send processing.GET /notifications/workflow-stepsrunId, cursor, limit
Cancel workflow runCancel the current revision and stop linked pending work; accepted and uncertain provider submissions remain retained.POST /notifications/workflow-run-cancelrunId, revision
Record workflow eventRecord an idempotent recipient event and retain matching published workflow runs. Records a correlation key for event processing; omitted keys use the recipient ID.POST /notifications/workflow-eventidempotencyKey, recipientId, event, correlationKey, data
List workflowsBrowse scoped workflow drafts and active versions.GET /notifications/workflowscursor, limit
Read workflowRead a scoped workflow draft.GET /notifications/workflowworkflowId
List workflow versionsBrowse retained workflow definitions and approval state.GET /notifications/workflow-versionsworkflowId, cursor, limit
Read workflow versionRead an immutable retained workflow definition.GET /notifications/workflow-versionversionId
Save workflow draftCreate or revise a typed workflow graph. Send nodes support config.delivery.urgent=true only with transactional published content. Delivery requires the published version creator's active urgent permission and shared hourly allowance. Does not start runs.POST /notifications/workflow-saveid, revision, name, config
Prepare workflow versionRetain a draft revision and its pinned templates; required approval stays pending. Does not start runs.POST /notifications/workflow-publishworkflowId, revision
Approve workflow versionApprove the exact retained version without replacing a newer active revision.POST /notifications/workflow-approveversionId
Browse campaign deliveriesPage through a scoped occurrence's per-recipient/channel delivery ledger, status, units and output identity.GET /notifications/campaign-deliveriesrunId, limit, cursor
Browse campaign schedulesPage through scoped schedule history for a campaign, including cancelled versions.GET /notifications/campaign-schedulescampaignId, limit, cursor
Schedule campaign versionRegister an approved immutable campaign version and capture schedule-time audience. Occurrence materialization and delivery use separate workers.POST /notifications/campaign-schedule-createversionId
Pause, resume or cancel campaign scheduleRevision-checked controls stop future occurrence creation and change queued runs. Already submitted deliveries require separate reconciliation.POST /notifications/campaign-schedule-controlscheduleId, revision, action
Read campaign scheduleRead scoped schedule state, revision, next occurrence and saved advisory estimate.GET /notifications/campaign-schedulescheduleId
Browse campaign runsPage through scoped persisted occurrences and audience capture state.GET /notifications/campaign-runsscheduleId, limit, cursor
Estimate campaign unitsEstimate current consent and policy eligible contacts/devices and unit bounds without reserving or sending. Advisory only; managed carrier quotes and transport readiness are evaluated separately.POST /notifications/campaign-estimateconfig
Preview campaign audienceCount and page current scoped campaign membership. This does not capture recipients or imply consent, channel eligibility, units or carrier costs.POST /notifications/campaign-audience-previewaudience, limit, cursor
Preview campaign occurrencesResolve the next local-calendar campaign times without saving, scheduling or sending. Explicit UTC/offset cutoff; monthly dates clamp, repeated times run once and skipped times shift forward.POST /notifications/campaign-schedule-previewschedule, after, limit
List campaign draftsPage through scoped campaign drafts. Publishing prepares immutable versions; execution is separate.GET /notifications/campaignslimit, cursor
Read campaign draftRead a scoped campaign configuration and revision.GET /notifications/campaigncampaignId
Read campaign versionRead immutable campaign configuration and publication/approval state.GET /notifications/campaign-versionversionId
List campaign versionsBrowse scoped retained campaign versions and approval state.GET /notifications/campaign-versionscampaignId, cursor, limit
Estimate retained campaign versionReview current advisory policy and unit counts and future dates using immutable version settings. Does not reserve, approve, schedule or send.GET /notifications/campaign-version-estimateversionId
Save campaign draftCreate or revise validated audience, schedule, delivery, limits and A/B settings. Optional config.delivery.urgent=true requires transactional template content. Delivery requires the scheduled sender's active urgent permission and shared hourly allowance per message/device. Does not schedule or send.POST /notifications/campaign-saveid, revision, name, config
Prepare campaign versionFreeze a campaign revision and pin approved template content; required approval remains pending. Does not launch.POST /notifications/campaign-publishcampaignId, revision
Approve campaign versionApprove the exact immutable campaign version. Does not launch.POST /notifications/campaign-approveversionId
List recipient segmentsPage through scoped dynamic recipient segments.GET /notifications/segmentslimit, cursor
Read recipient segmentRead saved audience rules and their current revision.GET /notifications/segmentsegmentId
Browse segment recipientsEvaluate saved audience rules against current scoped profiles. Dispatch still rechecks consent and delivery policy.GET /notifications/segment-memberssegmentId, limit, cursor
Save recipient segmentCreate or revise validated dynamic audience rules.POST /notifications/segment-saveid, revision, name, description, rules
Preview recipient segmentEvaluate draft audience rules without saving, sending or changing consent.POST /notifications/segment-previewrules, limit, cursor
Validate recipient CSVValidate up to 500 recipient rows and explicit destination consent without changing recipients or sending messages.POST /notifications/recipient-import-previewcsv
Export in-app report pageOwner-only scoped CSV of in-app creation, read and archive timestamps. Excludes titles, bodies, links and action content. Follow nextCursor to export the remaining records.GET /notifications/inbox-exportlimit, cursor
Export dispatch report pageOwner-only scoped CSV of external handoff outcomes and earliest recorded delivery/read/bounce/complaint/failure timestamps. Empty receipt fields mean no evidence recorded. Accepted means provider acceptance, not confirmed delivery or read. Excludes content, addresses, credentials and attachment details; follow nextCursor with the same filters.GET /notifications/delivery-exportlimit, cursor, channel, status
Export recipient pageExport scoped profile and destination CSV pages; preserves every address and explicit consent, excludes bearer tokens. Follow nextCursor for the remaining audience.GET /notifications/recipient-exportlimit, cursor
Import recipient CSVAtomically upsert validated recipient profiles and explicit destination consent; never sends messages or clears suppression.POST /notifications/recipient-importcsv
Upsert recipient batchAtomically upsert up to 500 scoped profiles with optional explicit destination consent.POST /notifications/recipient-bulk-upsertrecipients
Read recipient groupRead a scoped group and its current revision.GET /notifications/groupgroupId
Browse group recipientsPage through scoped members or recipients available to add, with optional name or customer ID search.GET /notifications/group-membersgroupId, membership, search, limit, cursor
List recipient groupsList scoped recipient groups and membership counts.GET /notifications/groupslimit, cursor
Save recipient groupCreate or revise a scoped recipient group.POST /notifications/group-saveid, revision, name, description
Update group membersAtomically add and remove scoped recipients without changing consent.POST /notifications/group-members-updategroupId, revision, add, remove
Send approved WhatsAppReserve the notification processing fee from Service Balance and queue approved content through a scoped registered business number. Optional urgent=true requires transactional purpose and an active sender permission with available hourly allowance; consent and provider approval still apply.POST /notifications/whatsapp-sendrecipientId, destinationId, guest, numberId, templateId, templateSnapshotHash, variables, headerText, code, couponCode, offerExpiresAt, urlSuffix, purpose, category, idempotencyKey, urgent
Send approved SMSReserve the notification processing fee from Service Balance and queue approved content through a verified sender. Select connectionId or useDefaultProvider=true. Optional backupConnectionIds retain order; the reserved managed backup requires allowPaidManagedBackup=true and maxManagedCostMinor. Backups follow confirmed pre-submission failures only. Retries retain reviewed routes; managed delivery uses Service Balance. Optional urgent=true requires transactional purpose and an active sender permission with available hourly allowance.POST /notifications/sms-sendrecipientId, destinationId, guest, senderId, templateId, templateSnapshotHash, variables, connectionId, useDefaultProvider, backupConnectionIds, allowPaidManagedBackup, maxManagedCostMinor, purpose, category, idempotencyKey, urgent
Mobile push connectionsRead scoped mobile provider setup without private credentials.GET /notifications/mobile-connections—
Email connectionsRead scoped Email provider metadata, form revision and delivery revision without SMTP credentials.GET /notifications/email-connections—
Save Email connectionConfigure authenticated customer SMTP (TLS on port 465 or STARTTLS on 587) or an assigned managed Email sender. Supply the current revision when editing; omit smtpPassword to retain it. Mode cannot change. Credentials are never returned.POST /notifications/email-connection-saveid, revision, name, mode, fromAddress, active, isDefault, smtpHost, smtpPort, smtpUsername, smtpPassword, managedSenderKey
External SMS connectionsRead scoped TLS SMPP provider metadata and country compliance settings without credentials.GET /notifications/external-sms-connections—
SMS provider defaultRead the selected environment’s SMS default provider mode, identity and revision without credentials.GET /notifications/sms-provider-default—
Save SMS provider defaultChoose managed delivery or an active compliant external SMS provider. Supply the current settings revision; changing this default never alters existing queued sends.POST /notifications/sms-provider-default-savemode, connectionId, revision
BrandingRead the display name, brand colour and logo shown on hosted preference pages and the recipient inbox for the selected environment.GET /notifications/branding—
Save brandingSet the display name, brand colour (#rrggbb) and logo (PNG, JPEG or WebP up to 256 KiB, base64) shown to recipients. Omit a field to keep it, send null to clear it, and supply the current revision.POST /notifications/branding-savedisplayName, brandColor, logo, revision
Email designsList published Email-studio designs a template's Email content can use, with the variables each needs. Saving a template with email.design {templateId, versionId} copies that exact version in.GET /notifications/email-designs—
Test recipientsList Test-environment recipients approved for real delivery and the channels that deliver for real (in-app, web push, mobile push, Email, SMS and WhatsApp, direct or managed). Messages using the simulation sender, number or template stay simulated.GET /notifications/test-recipients—
Approve test recipientApprove a Test-environment recipient for real delivery. Up to 25 per organisation. Applies to messages admitted afterwards; real Test sends consume Test units.POST /notifications/test-recipient-approverecipientId
Revoke test recipientStop real Test delivery to a recipient. Queued messages that have not been submitted are simulated instead.POST /notifications/test-recipient-revokerecipientId
Custom domainsList hostnames for hosted preference pages with their DNS TXT verification record, CNAME target and verification status.GET /notifications/custom-domains—
Add custom domainAdd a hostname for hosted preference pages. It routes only after verification. Up to five per environment; platform, local and IP hosts are refused.POST /notifications/custom-domain-savehostname
Verify custom domainCheck the hostname's _wrnexus-notifications TXT record. A host can be verified by only one organisation; unverified hosts stay pending with a reason.POST /notifications/custom-domain-verifyid
Remove custom domainStop serving hosted preference pages on a hostname. Links already sent with that host stop working.POST /notifications/custom-domain-removeid
Save external SMS connectionSave a TLS SMPP connection and supported country compliance profile. Supply the current revision when editing; omitted credentials and compliance are retained. Credentials are never returned.POST /notifications/external-sms-connection-saveid, revision, name, server, systemId, password, active, compliance
Save mobile push connectionConfigure a customer-owned FCM/APNs connection or an explicitly provisioned managed application.POST /notifications/mobile-connection-saveid, revision, name, provider, mode, applicationId, projectId, clientEmail, teamId, keyId, sandbox, privateKey, active, isDefault
Send mobile pushFreeze device targets and reserve one unit per device. Optional urgent=true requires transactional purpose and an active sender permission with hourly allowance for every target device. Test sends simulate by default.POST /notifications/mobile-push-sendrecipientId, connectionId, deviceIds, content, purpose, category, idempotencyKey, urgent
Send web push templateSend a published version with translated content and frozen device targets. Optional urgent=true requires a transactional published version and an active sender permission with hourly allowance for every target device.POST /notifications/push-template-sendtemplateId, versionId, recipientId, connectionId, deviceIds, variables, idempotencyKey, urgent
Send mobile push templateSend a published version with translated content and frozen device targets. Optional urgent=true requires a transactional published version and an active sender permission with hourly allowance for every target device.POST /notifications/mobile-push-template-sendtemplateId, versionId, recipientId, connectionId, deviceIds, variables, idempotencyKey, urgent
Mobile push request statusRead retained scoped mobile submission outcomes.GET /notifications/mobile-push-requestrequestId
Send web pushFreeze the active target devices and reserve one unit per device. Optional urgent=true requires transactional purpose and an active sender permission with hourly allowance for every target device. Test sends simulate without provider contact.POST /notifications/push-sendrecipientId, connectionId, deviceIds, content, purpose, category, idempotencyKey, urgent
Web push request statusRead the retained outcomes for a scoped web push request.GET /notifications/push-requestrequestId
Web push connectionsRead scoped web push connections and public subscription keys.GET /notifications/push-connections—
Save web push connectionConfigure a managed or customer-owned VAPID pair. Private credentials are write-only and encrypted.POST /notifications/push-connection-saveid, revision, name, mode, subject, publicKey, privateKey, active, isDefault
List templatesList scoped in-app template drafts.GET /notifications/templateslimit, cursor
Template detailsRead a draft and retained version history.GET /notifications/templatetemplateId
Save templateSave a draft with an optimistic revision check. Approval policy is fixed on creation.POST /notifications/template-saveid, revision, name, content, requireApproval
Publish templateFreeze a draft revision; approval-enabled templates wait for explicit approval.POST /notifications/template-publishtemplateId, revision
Approve template versionApprove and publish an immutable submitted version.POST /notifications/template-approveversionId
Preview templateRender content without sending or charging units.POST /notifications/template-previewcontent, language, variables, previewChannel
Send templateSend the latest published version or an exact published version; retries retain their original version. Optional urgent=true requires transactional published content and an active sender permission with available hourly allowance.POST /notifications/template-sendtemplateId, versionId, recipientId, variables, idempotencyKey, urgent
Recipient preference linkIssue short-lived, revocable access to the hosted preference page only.POST /notifications/recipient-preference-linkrecipientId
Recipient detailsRead a scoped recipient, preferences and in-app suppression.GET /notifications/recipientrecipientId
Save recipient destinationAdd or update a scoped email or phone destination with explicit consent and reversible delivery access.POST /notifications/destination-saverecipientId, destinationChannel, address, active, marketingConsent, consentEvidence
Queue email notificationQueue Email using connectionId, useDefaultConnection=true, or a legacy senderKey. Connection and default choices are mutually exclusive; senderKey is required only for legacy routing. Admission pins provider identity on replay. Optional urgent=true requires transactional purpose and an active sender permission, consumes the hourly urgency allowance and bypasses quiet hours. Test mode simulates delivery.POST /notifications/email-sendrecipientId, destinationId, guest, senderKey, fromName, content, connectionId, useDefaultConnection, attachments, purpose, category, idempotencyKey, urgent
Queue email templateQueue an exact or latest published Email template using connectionId, useDefaultConnection=true, or a legacy senderKey. Connection and default choices are mutually exclusive. Retries retain the original version and provider identity. Optional urgent=true requires transactional published content and an active sender permission with available hourly allowance.POST /notifications/email-template-sendtemplateId, versionId, recipientId, destinationId, senderKey, fromName, variables, attachments, idempotencyKey, connectionId, useDefaultConnection, urgent
List channel dispatchesRead scoped channel dispatch states, including unknown acceptance and simulations.GET /notifications/dispatcheslimit, cursor
Pause recipient notificationsPause or resume in-app delivery with an audit reason.POST /notifications/recipient-suppressionrecipientId, suppressed, reason
List recipientsList recipients in the key's environment.GET /notifications/recipientslimit, cursor
Save recipientCreate or update a customer recipient.POST /notifications/recipient-upsertcustomerId, name, language, attributes
Issue recipient tokenIssue a short-lived token for an existing recipient's inbox.POST /notifications/recipient-tokenrecipientId, ttlSeconds
Revoke recipient tokensInvalidate every outstanding token for one recipient.POST /notifications/recipient-token-revokerecipientId
Send in-app notificationInsert an in-app notification and charge the notification processing fee from Service Balance. Optional urgent=true requires transactional purpose and an active sender permission, consumes the hourly urgency allowance and bypasses quiet hours.POST /notifications/sendrecipientId, title, body, purpose, category, url, actions, idempotencyKey, urgent
List in-app deliveriesRead recent in-app deliveries in the key's environment.GET /notifications/deliverieslimit, cursor
Notification unitsRead Service Balance billing, current notification processing rates and usage. The legacy units field reports affordable, pending and processed notification counts.GET /notifications/units—

Webhook events: notifications.campaign.run.completed, notifications.campaign.run.expired, notifications.campaign.run.cancelled, notifications.campaign.scheduled, notifications.campaign.paused, notifications.campaign.resumed, notifications.campaign.cancelled, notifications.campaign.run.created, notifications.campaign.run.targets.frozen, notifications.campaign.audience.captured, notifications.campaign.saved, notifications.campaign.submitted, notifications.workflow.saved, notifications.workflow.submitted, notifications.workflow.published, notifications.workflow.event.recorded, notifications.workflow.run.started, notifications.workflow.run.cancelled, notifications.workflow.run.completed, notifications.workflow.run.failed, notifications.workflow.step.completed, notifications.workflow.send.admitted, notifications.campaign.published, notifications.group.saved, notifications.group.members.updated, notifications.segment.saved, notifications.message.queued, notifications.message.accepted, notifications.message.rejected, notifications.message.unknown, notifications.message.cancelled, notifications.message.simulated, notifications.message.reconciled, notifications.message.resumed, notifications.connection.updated, notifications.device.registered, notifications.device.rotated, notifications.device.unregistered, notifications.destination.updated, notifications.preferences.updated, notifications.template.published

SEO and Content

OperationMethod and URLFields
List websitesRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/websitescursor
List ai-modelsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/ai-modelscursor
List ai-reviewsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/ai-reviewscursor
List ai-review-batchesRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/ai-review-batchescursor
List auditsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/auditscursor
List findingsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/findingscursor
List keywordsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/keywordscursor
List contentRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/contentcursor
List versionsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/versionscursor
List approvalsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/approvalscursor
List publicationsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/publicationscursor
List publication-checksRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/publication-checkscursor
List mediaRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/mediacursor
List researchRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/researchcursor
List metricsRead organization-scoped SEO records in the single Live workspace with cursor pagination.GET /seo/metricscursor
Request AI site reviewExplicitly request AI review of every retained page in a completed site audit, with one total charge limit.POST /seo/ai-review-startsiteId, auditId, modelId, requestKey, maxChargeMinor
Reconcile AI site reviewResume the same incomplete review using its original paid operation identities.POST /seo/ai-review-resumesiteId, id
Stop AI site reviewStop remaining batches; an in-flight paid batch may still finish and charge.POST /seo/ai-review-cancelsiteId, id
Add websiteAdd a public HTTPS website; ownership verification remains a separate operation.POST /seo/website-createname, url, locale, goal, maxPages, maxDepth
Queue auditQueue a bounded audit of an ownership-verified site in Live mode.POST /seo/audit-startsiteId
Add keywordMap a keyword to a site, country, language and device.POST /seo/keyword-addsiteId, query, country, language, device, targetUrl, cluster
Save article versionUpdate an existing article with revision guards. Initial article creation uses the editor.POST /seo/content-saveid, revision, title, slug, locale, description, body, blocks, sources, remoteHash, remoteId, importNotes, wordpress, publishAt
Create article draftCreate an article draft once using a UUID request key. Reusing the key requires identical content.POST /seo/content-createsiteId, requestKey, title, slug, locale, description, body, blocks, sources, wordpress
Transfer or reconcile article imageCopy a saved PNG or JPEG image block to WordPress and save a new draft version. Requires Live mode, edit and publish permissions, accepted bridge and a UUID requestKey. Reuse the key after uncertainty; newer article edits are preserved.POST /seo/wordpress-mediaid, revision, blockIndex, requestKey
Check public publicationInspect a completed publication's public static response against its reviewed version. Requires Live mode, publish permission and verified ownership. Records observations without claiming indexing or ranking.POST /seo/publication-checkid
Refresh WordPress choicesRead permitted category, tag, author and featured-image choices and cache the bounded result. Requires Live mode, edit permission and verified ownership. Specify siteId or an existing article id; search narrows the choices.POST /seo/wordpress-choicessiteId, id, search
Import WordPress draftImport a post as an unapproved draft using siteId, remoteId and a UUID requestKey; refresh an existing bound article using id and its current revision. Requires Live mode and edit permission. Unsupported content fails without saving.POST /seo/wordpress-importsiteId, remoteId, requestKey, id, revision
Request article reviewAssign an active reviewer to the exact current document version.POST /seo/review-requestid, revision, reviewerId
Decide article reviewThe assigned reviewer approves or requests changes on an exact version.POST /seo/review-decideid, revision, decision, note
Queue licensed researchReserve allowance and queue a paid job using a unique request key.POST /seo/research-startsiteId, kind, requestKey, seed, locationCode, language, keywordId, competitorId
Publish or reconcilePublish an approved article version or reconcile the same durable operation key.POST /seo/publishid, revision, requestKey

Webhook events: seo.media.completed, seo.website.created, seo.audit.queued, seo.content.saved, seo.review.requested, seo.review.decided, seo.publication.completed

Webhooks

Each delivery is a POST with the JSON body {"id","event","app","createdAt","data"}. It carries your secret in X-WRNexus-Secret and X-WRNexus-Signature: v1=HMAC-SHA256(secret, timestamp + "." + body) with X-WRNexus-Timestamp. Reply with any 2xx status; failed deliveries are retried up to six times.