For survey creation, start with survey_authoring_help. Call it empty for the generated index, then fetch focused paths such as quick-start, questions/scale or logic/visible-if. The older compact authoring pack remains an API endpoint, but it is no longer advertised as an MCP tool.
Start
4 toolsget_started
Explain what Dayalogs Surveys is and the recommended MCP workflow for creating and previewing schema-first surveys. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_capabilities
Return Dayalogs API capabilities, granted scopes, reserved contexts, endpoint map and safety workflow guidance such as preview/test/real campaign delivery.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_mcp_changes
Return Dayalogs MCP release notes and tool/API changes by version.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_mcp_backlog
Return MCP-facing planned backlog items and target versions.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}Authoring
7 toolssurvey_authoring_help
Return focused Dayalogs survey authoring help. Call with no arguments for the generated index, with path for a folder or file, or with keywords to find relevant help. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
View input JSON schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Optional help path. Empty input returns the generated index. Examples: quick-start, questions/scale, questions/scale/help.md."
},
"keyword": {
"type": "string",
"description": "Optional single keyword search. Examples: smiley, csat, contact, endings."
},
"keywords": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional keyword list. When present, matching files must contain all terms."
}
},
"required": []
}get_survey_schema
Return the live Dayalogs survey JSON schema contract. This is large; for drafting surveys, call survey_authoring_help first and use the full schema only for exact field-level constraints. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_survey_interface_texts
Return supported respondent UI locales and the public survey.renderer.* keys that can be overridden with interface_literals.
View input JSON schema
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"description": "Optional supported UI locale. Includes default texts and exact placeholders for safe overrides. Use en for unsupported content languages."
}
},
"required": []
}validate_survey
Validate a Dayalogs survey definition without importing it. Returns structural schema errors separately from behavioural flow errors and warnings; blocking flow errors must be fixed before import or publication. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
View input JSON schema
{
"type": "object",
"properties": {
"survey": {
"type": "object",
"description": "Dayalogs survey definition object."
},
"definition": {
"type": "object",
"description": "Alias for survey."
},
"survey_json": {
"type": "string",
"description": "Dayalogs survey definition encoded as a JSON string."
}
},
"required": []
}get_theme_schema
Return the live Dayalogs survey theme/style JSON schema contract.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_theme_authoring_pack
Return theme/style authoring guidance, schema and examples as structured JSON.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}validate_theme
Validate a Dayalogs survey theme/style config without persisting it.
View input JSON schema
{
"type": "object",
"properties": {
"config": {
"type": "object",
"description": "Dayalogs survey theme/style config object."
},
"theme": {
"type": "object",
"description": "Alias for config."
},
"definition": {
"type": "object",
"description": "Alias for config."
},
"config_json": {
"type": "string",
"description": "Dayalogs survey theme/style config encoded as a JSON string."
}
},
"required": []
}Survey read
10 toolslist_surveys
List current surveys in the authenticated account. Archived surveys are excluded by default.
View input JSON schema
{
"type": "object",
"properties": {
"include_archived": {
"type": "boolean",
"description": "Include active and archived surveys."
},
"archived": {
"type": "boolean",
"description": "Return only archived surveys."
}
},
"required": []
}get_survey
Return one current survey definition by slug.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_definition
Return the canonical JSON definition for one current survey, with validation/import contract endpoints.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_fragment
Read one or up to 25 canonical question or block fragments without downloading the complete survey. Use id or ids, never both. survey_header may omit both. The response includes version_id and content_hash for safe follow-up edits.
question, block, survey_header, ending_target, ending_rule, endingsView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"kind": {
"type": "string",
"enum": [
"question",
"block",
"survey_header",
"ending_target",
"ending_rule",
"endings"
]
},
"id": {
"type": "string",
"description": "One fragment id. Mutually exclusive with ids."
},
"ids": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"maxItems": 25,
"description": "Fragment ids to read together. Mutually exclusive with id."
},
"include_literals": {
"type": "boolean",
"default": true
},
"locales": {
"type": "array",
"items": {
"type": "string"
},
"description": "Supported survey locales to include. Defaults to every supported locale."
}
},
"required": [
"slug",
"kind"
]
}list_survey_versions
List all persisted versions for a survey slug.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_version
Return a specific persisted survey version and its definition.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"version": {
"type": "integer",
"description": "Survey version number.",
"minimum": 1
}
},
"required": [
"slug",
"version"
]
}get_survey_stats
Return response, version and link stats for a survey. Default all-version quality summaries may refresh and replace stored scores, penalties, confidence values and aggregate snapshots when due. This is not universally read-only.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_quality
Return quality data for all survey versions or optionally for one concrete version. Default all-version quality summaries may refresh and replace stored scores, penalties, confidence values and aggregate snapshots when due; version-specific reads may remain non-mutating.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"version": {
"type": "integer",
"description": "Optional concrete survey version. Omit to aggregate all versions.",
"minimum": 1
}
},
"required": [
"slug"
]
}get_survey_cost_estimate
Return response unit price and maximum known cost estimate for a survey. If no hard cap exists, returns unbounded=true plus scenario costs.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_flow
Return a rendered flow summary plus explainable behavioural flow errors and warnings for one current survey by slug. Canonical fragments are omitted by default; use get_survey_fragment for focused reads or set include_fragments=true when the duplicated raw JSON is explicitly needed.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"include_fragments": {
"type": "boolean",
"default": false
}
},
"required": [
"slug"
]
}Survey edit
6 toolsimport_survey
Validate and import a Dayalogs survey definition with explicit intent. Use mode=create only for a new logical survey. Use mode=update only after reading the existing survey, and pass its stable survey_id plus current version_id as expected_version_id. A new version is blocked while an open review round has undecided parent comments; approve or reject each parent, or explicitly close an abandoned round, before retrying. Successful versioning marks approved comments applied in the new version and closes the superseded version rounds. Omitting intent returns guidance without mutating data. Importing edits the definition only; use get_preview_url during authoring and do not start collection unless the user explicitly asks. Replaces logical settings and closes superseded review rounds while preserving historical versions. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
create, updateView input JSON schema
{
"type": "object",
"properties": {
"survey": {
"type": "object",
"description": "Dayalogs survey definition object."
},
"definition": {
"type": "object",
"description": "Alias for survey."
},
"survey_json": {
"type": "string",
"description": "Dayalogs survey definition encoded as a JSON string."
},
"mode": {
"type": "string",
"enum": [
"create",
"update"
],
"description": "Explicit import intent. Use create for a new logical survey or update for a new version of an existing survey. Omit only to request non-mutating intent guidance."
},
"survey_id": {
"type": "integer",
"minimum": 1,
"description": "Stable logical survey id. Required when mode=update; obtain it from get_survey or list_surveys."
},
"expected_version_id": {
"type": "integer",
"minimum": 1,
"description": "Concrete current version_id observed before editing. Required when mode=update and used as an optimistic concurrency guard."
},
"validate": {
"type": "boolean",
"description": "Whether to validate before importing. Defaults to true."
}
},
"required": []
}update_survey_settings
Update safe top-level survey settings, including a complete survey-level privacy_notice, and create a validated new version. Read survey_authoring_help path survey-structure/privacy-notice before changing legal copy. expected_version_id is mandatory. On version_conflict, explain the intervening actor and changes to the user before reconciling; never retry by only replacing the expected id. Replaces logical settings, applies approved review decisions and closes superseded rounds, removing contribution access. Does not send invitations or start collection.
full, compactView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"response": {
"type": "string",
"enum": [
"full",
"compact"
],
"default": "full",
"description": "Compact returns mutation status, ids, version and hash without the full flow or localized maps."
},
"expected_version_id": {
"type": "integer",
"minimum": 1,
"description": "Concrete current version_id observed immediately before this mutation. Required as an optimistic concurrency guard."
},
"title": {
"type": "string",
"description": "Optional new internal/source title. Use literals if the source-locale survey.title literal should differ."
},
"source_locale": {
"type": "string",
"description": "Optional two-letter source locale."
},
"supported_locales": {
"type": "array",
"description": "Optional full supported locale list. Must include source_locale after validation.",
"items": {
"type": "string"
}
},
"interface_locales": {
"type": "object",
"description": "Optional mapping from content locale to respondent UI locale, for example {\"ru\":\"en\"}. Values: en, fr, de, nl, it, es, ca, pt, eu, gl.",
"additionalProperties": {
"type": "string"
}
},
"interface_literals": {
"type": [
"object",
"null"
],
"description": "Optional per-survey overrides for public respondent UI text, keyed by content locale and public survey.renderer.* translation key.",
"additionalProperties": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"settings": {
"type": [
"object",
"null"
],
"description": "Optional respondent runtime settings. Use {\"navigation\":{\"allow_back\":false}} to disable respondent back navigation, or {\"quality\":{\"enabled_challenges\":{\"honeypot\":true}}} to control quality scoring inputs.",
"additionalProperties": false,
"properties": {
"navigation": {
"type": "object",
"additionalProperties": false,
"properties": {
"allow_back": {
"type": "boolean",
"description": "Whether respondents can navigate back to previous pages. Defaults to true."
}
}
},
"quality": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled_challenges": {
"type": "object",
"description": "Optional per-survey quality challenge toggles. Disable individual checks without removing the quality layer entirely.",
"additionalProperties": false,
"properties": {
"time": {
"type": "boolean"
},
"paste_open_answers": {
"type": "boolean"
},
"focus_away": {
"type": "boolean"
},
"honeypot": {
"type": "boolean"
},
"client_signal": {
"type": "boolean"
},
"answer_patterns": {
"type": "boolean"
},
"repeated_ip": {
"type": "boolean"
},
"repeated_environment": {
"type": "boolean"
}
}
}
}
}
}
},
"intro": {
"type": "object",
"description": "Optional complete intro object. Partial intro patches are not merged; pass the complete intro shape."
},
"privacy_notice": {
"type": [
"object",
"null"
],
"description": "Optional complete survey-level legal/privacy notice. When present, respondents must accept it on the intro before starting; it also replaces the email question consent fallback. Pass null only to remove it explicitly. Read survey_authoring_help path survey-structure/privacy-notice before changing approved legal copy.",
"additionalProperties": false,
"required": [
"title",
"content"
],
"properties": {
"format": {
"type": "string",
"enum": [
"markdown"
],
"description": "Optional content format. Only markdown is supported and it is rendered and sanitized on the server."
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Optional client/legal policy version retained in the response acceptance snapshot."
},
"title": {
"type": "string",
"minLength": 1,
"description": "Required modal title. May use runtime variable placeholders; localized override key: privacy_notice.title."
},
"content": {
"type": "string",
"minLength": 1,
"description": "Required Markdown body. Supports paragraphs, ##/### headings, unordered lists, bold, emphasis and HTTPS links. Raw HTML is escaped and runtime variable values cannot inject Markdown. Localized override key: privacy_notice.content."
},
"link_label": {
"type": "string",
"minLength": 1,
"description": "Optional inline button label opening the notice. Defaults to title; localized override key: privacy_notice.link_label."
},
"accept_label": {
"type": "string",
"minLength": 1,
"description": "Optional text preceding the notice link beside the acceptance checkbox; localized override key: privacy_notice.accept_label."
}
}
},
"literals": {
"type": [
"object",
"null"
],
"description": "Optional locale-keyed literal map, or null to remove literals."
},
"partial_response_ttl_minutes": {
"type": [
"integer",
"null"
],
"description": "Optional inactivity timeout in minutes for resumable partial attempts, or null to reset to default.",
"minimum": 15
}
},
"required": [
"slug",
"expected_version_id"
]
}recalculate_survey_quality
Force a quality recalculation across all versions or optionally for one concrete version. Replaces stored quality scores, penalties, confidence values and aggregate snapshots.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"version": {
"type": "integer",
"description": "Optional concrete survey version. Omit to aggregate all versions.",
"minimum": 1
}
},
"required": [
"slug"
]
}patch_survey_fragment
Replace a survey fragment using the mandatory expected_version_id concurrency guard and optional if_content_hash returned by get_survey_fragment. On a conflict, reload and explain intervening changes before reconciling; never retry by only replacing the guard values. Successful versioning replaces the current definition, applies approved review decisions and closes superseded rounds, removing contribution access. Does not send invitations or start collection. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
full, compactView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"kind": {
"type": "string",
"description": "Fragment kind: survey_header, block, question, ending_target, ending_rule or endings. Target ids: quality_end, screened_end, over_quota_end. Whole endings uses fragment_id=endings."
},
"fragment_id": {
"type": "string"
},
"response": {
"type": "string",
"enum": [
"full",
"compact"
],
"default": "full",
"description": "Compact omits the full flow and localized maps; preserves mutation status, ids, version and hash."
},
"expected_version_id": {
"type": "integer",
"minimum": 1,
"description": "Concrete current version_id observed immediately before this mutation. Required as an optimistic concurrency guard."
},
"if_content_hash": {
"type": "string",
"description": "Optional content_hash returned by get_survey_fragment. A mismatch rejects the write."
},
"fragment": {
"type": "object"
},
"json": {
"type": "string",
"description": "Alternative to fragment: JSON object string for the replacement fragment."
}
},
"required": [
"slug",
"kind",
"fragment_id",
"expected_version_id"
]
}append_to_survey
Append or insert a new top-level block using the mandatory expected_version_id concurrency guard. Conflicts must be explained and reconciled with the user. Despite append-only content, versioning applies approved review decisions and closes superseded rounds, removing contribution access. Does not send invitations or start collection. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
start, endView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"expected_version_id": {
"type": "integer",
"minimum": 1,
"description": "Concrete current version_id observed immediately before this mutation. Required as an optimistic concurrency guard."
},
"block": {
"type": "object",
"description": "New top-level block object to insert at the survey root. The block may contain nested blocks and question references; pass new question definitions in questions."
},
"questions": {
"type": "array",
"description": "Optional new question definitions to add to the survey question catalog before inserting the block.",
"items": {
"type": "object"
}
},
"position": {
"type": "string",
"enum": [
"start",
"end"
],
"description": "Insert at the beginning or end of the top-level survey blocks. Defaults to end."
},
"after_block_id": {
"type": "string",
"description": "Optional existing top-level block id after which the new block should be inserted."
},
"before_block_id": {
"type": "string",
"description": "Optional existing top-level block id before which the new block should be inserted."
}
},
"required": [
"slug",
"expected_version_id",
"block"
]
}append_to_block
Append or insert a block item using the mandatory expected_version_id concurrency guard. Conflicts must be explained and reconciled with the user. Despite append-only content, versioning applies approved review decisions and closes superseded rounds, removing contribution access. Does not send invitations or start collection. When creating or editing questions, read survey_authoring_help path questions/special-responses/help.md. You must explicitly mark every intended special response with special.reason, preserving its authored code, label and optional alias. The author chooses combined NS/NC, separate reasons or custom alternatives. Never rely on code 98/99 or wording to establish meaning, and never reclassify existing answers automatically.
start, endView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"expected_version_id": {
"type": "integer",
"minimum": 1,
"description": "Concrete current version_id observed immediately before this mutation. Required as an optimistic concurrency guard."
},
"block_id": {
"type": "string",
"description": "Existing block id that will receive the new item."
},
"item": {
"type": "object",
"description": "Flow item to insert: a nested block object or {type:\"question\", question:\"q1\"}. Use block.presentation.mode=\"grouped\" when direct questions must share one screen."
},
"questions": {
"type": "array",
"description": "Optional new question definitions to add to the survey question catalog before inserting the item.",
"items": {
"type": "object"
}
},
"position": {
"type": "string",
"enum": [
"start",
"end"
],
"description": "Insert at the beginning or end of the target block items. Defaults to end."
},
"after_item_id": {
"type": "string",
"description": "Optional existing item id/question id after which the new item should be inserted."
},
"before_item_id": {
"type": "string",
"description": "Optional existing item id/question id before which the new item should be inserted."
}
},
"required": [
"slug",
"expected_version_id",
"block_id",
"item"
]
}Translations
4 toolsget_translation_source
Return source-locale literal keys and text for a survey, optionally with an existing target translation for one locale.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"target_locale": {
"type": "string",
"description": "Optional target locale to include existing target text in each returned entry."
},
"locale": {
"type": "string",
"description": "Alias for target_locale."
}
},
"required": [
"slug"
]
}list_survey_translations
Return translation status by locale, including missing counts and available target locales.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"include_entries": {
"type": "boolean",
"description": "Include source/target entries for each locale. Defaults to false."
},
"include_literals": {
"type": "boolean",
"description": "Alias for include_entries."
}
},
"required": [
"slug"
]
}validate_survey_translation
Validate a complete locale translation map without saving it.
replace, mergeView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"mode": {
"type": "string",
"enum": [
"replace",
"merge"
],
"default": "replace",
"description": "Replace requires a complete map. Merge changes only supplied keys, requires source_hash, and validates the resulting complete map."
},
"locale": {
"type": "string",
"description": "Two-letter target locale, for example es or en."
},
"target_locale": {
"type": "string",
"description": "Alias for locale."
},
"source_hash": {
"type": "string",
"description": "Optional source hash returned by get_translation_source. If present, Dayalogs rejects stale saves."
},
"translations": {
"type": "object",
"description": "Complete translation map keyed by literal key, for example {\"survey.title\":\"...\"}."
},
"literals": {
"type": "object",
"description": "Alias for translations."
},
"entries": {
"type": "array",
"description": "Alternative translation shape: array of {key,target} entries returned by get_translation_source.",
"items": {
"type": "object"
}
}
},
"required": [
"slug",
"locale"
]
}save_survey_translation
Save a complete locale translation map into the current survey without creating a new survey version.
replace, mergeView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"mode": {
"type": "string",
"enum": [
"replace",
"merge"
],
"default": "replace",
"description": "Replace requires a complete map. Merge changes only supplied keys, requires source_hash, and validates the resulting complete map."
},
"locale": {
"type": "string",
"description": "Two-letter target locale, for example es or en. This value is also used in the save URL."
},
"target_locale": {
"type": "string",
"description": "Alias for locale."
},
"source_hash": {
"type": "string",
"description": "Optional source hash returned by get_translation_source. If present, Dayalogs rejects stale saves."
},
"translations": {
"type": "object",
"description": "Complete translation map keyed by literal key, for example {\"survey.title\":\"...\"}."
},
"literals": {
"type": "object",
"description": "Alias for translations."
},
"entries": {
"type": "array",
"description": "Alternative translation shape: array of {key,target} entries returned by get_translation_source.",
"items": {
"type": "object"
}
}
},
"required": [
"slug",
"locale"
]
}Preview & design
5 toolsget_preview_url
Create and return review URLs for a current survey. During authoring, share review_url with the user so they can inspect the survey and leave anchored comments. Do not share respondent access links. With user-bound OAuth, creates or reuses a personal review round and persists participant access and its decision role. Does not send invitations or start respondent collection.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string"
},
"locale": {
"type": "string",
"description": "Optional locale, for example ca, es or en."
},
"ttl_minutes": {
"type": "integer",
"description": "Unidentified API review-entry lifetime between 15 and 10080 minutes.",
"minimum": 15,
"maximum": 10080
}
},
"required": [
"slug"
]
}get_survey_design
Return the respondent-facing design settings for a survey, including assigned style and logo metadata.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}update_survey_design
Assign a base style, ready custom style, or clear the explicit style for a survey. Overwrites or clears existing style and logo presentation settings.
left, center, rightleft, center, rightinherit, override, disabledinherit, override, disabledView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"style": {
"type": [
"string",
"object",
"null"
],
"description": "Style assignment: none/default, base:{key}, theme:{id}, or {type:\"base\", key:\"...\"} / {type:\"theme\", id:123}."
},
"style_selection": {
"type": [
"string",
"object",
"null"
],
"description": "Alias for style."
},
"base_key": {
"type": "string",
"description": "Assign a locked base style by key."
},
"style_base_key": {
"type": "string",
"description": "Alias for base_key."
},
"theme_id": {
"type": "integer",
"minimum": 1,
"description": "Assign a ready custom style by id."
},
"style_theme_id": {
"type": "integer",
"minimum": 1,
"description": "Alias for theme_id."
},
"clear_style": {
"type": "boolean",
"description": "Clear the explicit survey style and fall back to the default."
},
"logo_alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Survey-level logo alignment override."
},
"alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Alias for logo_alignment."
},
"clear_logo_alignment": {
"type": "boolean",
"description": "Clear the survey-level logo alignment override and inherit the account default."
},
"logo_mode": {
"type": "string",
"enum": [
"inherit",
"override",
"disabled"
],
"description": "Survey logo behavior: inherit the account/default logo, use the uploaded survey logo, or hide the logo."
},
"header_logo_mode": {
"type": "string",
"enum": [
"inherit",
"override",
"disabled"
],
"description": "Alias for logo_mode."
},
"disable_logo": {
"type": "boolean",
"description": "Hide the header logo on this survey."
},
"hide_logo": {
"type": "boolean",
"description": "Alias for disable_logo."
},
"inherit_logo": {
"type": "boolean",
"description": "Return to the account/default header logo."
},
"clear_logo_override": {
"type": "boolean",
"description": "Alias for inherit_logo."
}
},
"required": [
"slug"
]
}upload_survey_logo
Upload a survey-specific header logo override from base64 content and optional alignment. Replacement deletes the previous physical logo asset after saving the new reference.
left, center, rightleft, center, rightView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"content_base64": {
"type": "string",
"description": "Base64 image content. Data URLs are accepted."
},
"filename": {
"type": "string",
"description": "Original filename for metadata."
},
"mime_type": {
"type": "string",
"description": "image/png, image/jpeg or image/webp. Optional when content_base64 is a data URL."
},
"logo_alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Optional logo alignment to save with the upload."
},
"alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Alias for logo_alignment."
}
},
"required": [
"slug",
"content_base64"
]
}delete_survey_logo
Remove the survey-specific header logo override, falling back to account branding or Dayalogs default.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}Publishing
4 toolsgo_live_survey
Start response collection for the current survey version. This publishes real respondent access and requires confirm_publish=true after the user explicitly asks to start collection/go live. Without confirmation, the tool returns a preview URL and does not change collection state. With confirmation, blocking flow errors return flow_validation_failed and leave the current collection state unchanged.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"confirm_publish": {
"type": "boolean",
"description": "Must be true to start real response collection. Set it only after the user explicitly asks to start collection, publish, or go live."
}
},
"required": [
"slug"
]
}stop_survey_collection
Stop response collection for the current survey version. Existing links remain configured, but respondent entry shows a friendly unavailable page.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}archive_survey
Archive a logical survey and stop collection while retaining versions, responses, links, campaigns, reviews and history.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}restore_survey
Restore an archived logical survey. Collection remains stopped until it is explicitly started again.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}Quotas
5 toolslist_survey_quotas
List survey-level quotas plus read-only link and link set quota summaries and condition source metadata.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}create_survey_quota
Create a survey-level quota with label, limit, optional count, active flag and Dayalogs condition JSON.
View input JSON schema
{
"type": "object",
"properties": {
"quota_id": {
"type": "string",
"description": "Optional stable quota id. Defaults to a slugified label."
},
"id": {
"type": "string",
"description": "Alias for quota_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Quota display name. Required on create."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Quota threshold."
},
"count": {
"type": "integer",
"minimum": 0,
"description": "Current accepted count. Optional; defaults to 0 on create."
},
"active": {
"type": "boolean",
"description": "Whether the quota is active. Defaults to true on create."
},
"condition": {
"type": "object",
"description": "Dayalogs condition JSON. Use {question, op, value}, {var, op, value}, groups {all:[...]}, {any:[...]}, or {not:{...}}. Operators are normalized to canonical forms such as eq, not_eq, contains, gt, gte, lt, lte, answered and not_answered."
},
"if": {
"type": "object",
"description": "Alias for condition."
},
"condition_json": {
"type": "string",
"description": "Alternative to condition: JSON object string."
},
"clear_condition": {
"type": "boolean",
"description": "On update, remove the quota condition and turn it into a total survey quota."
}
},
"required": [
"slug",
"label",
"limit"
]
}update_survey_quota
Update a survey-level quota label, limit, count, active flag or condition.
View input JSON schema
{
"type": "object",
"properties": {
"quota_id": {
"type": "string",
"description": "Survey-level quota id."
},
"id": {
"type": "string",
"description": "Alias for quota_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Quota display name. Required on create."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Quota threshold."
},
"count": {
"type": "integer",
"minimum": 0,
"description": "Current accepted count. Optional; defaults to 0 on create."
},
"active": {
"type": "boolean",
"description": "Whether the quota is active. Defaults to true on create."
},
"condition": {
"type": "object",
"description": "Dayalogs condition JSON. Use {question, op, value}, {var, op, value}, groups {all:[...]}, {any:[...]}, or {not:{...}}. Operators are normalized to canonical forms such as eq, not_eq, contains, gt, gte, lt, lte, answered and not_answered."
},
"if": {
"type": "object",
"description": "Alias for condition."
},
"condition_json": {
"type": "string",
"description": "Alternative to condition: JSON object string."
},
"clear_condition": {
"type": "boolean",
"description": "On update, remove the quota condition and turn it into a total survey quota."
}
},
"required": [
"slug",
"quota_id"
]
}delete_survey_quota
Delete a survey-level quota. Link and link set quotas are managed through link and link set tools.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"quota_id": {
"type": "string",
"description": "Survey-level quota id."
},
"id": {
"type": "string",
"description": "Alias for quota_id."
}
},
"required": [
"slug",
"quota_id"
]
}set_survey_quota_version_inclusion
Include or exclude one survey version from effective quota progress without deleting responses or counters. Exclusion requires an explicit user confirmation and audit reason; without confirmation the tool returns a normal confirmation_required result and does not mutate quota state. Changes existing effective quota accounting; exclusion requires explicit confirmation and a reason.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"version": {
"type": "integer",
"minimum": 1,
"description": "Concrete survey version number."
},
"included": {
"type": "boolean",
"description": "false excludes this version contribution; true restores it."
},
"quota_id": {
"type": "string",
"description": "Optional quota id. Omit to apply to every survey-level quota."
},
"reason": {
"type": "string",
"description": "Audit reason. Required when excluding a version."
},
"confirm_exclusion": {
"type": "boolean",
"description": "Must be true when included=false, after the user explicitly confirms excluding this version from quota progress."
}
},
"required": [
"slug",
"version",
"included"
]
}Responses
4 toolslist_survey_responses
List metadata only for completed responses already included in a confirmed export. Unbilled rows are withheld; use export_survey_responses to preview their cost and obtain explicit confirmation before accessing response-level data.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"version": {
"type": [
"string",
"integer"
],
"description": "current, all or a specific version number. Defaults to current."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number. Defaults to 1."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Responses per page. Defaults to 25, maximum 100."
},
"submitted_from": {
"type": "string",
"description": "Optional ISO-8601 lower datetime bound."
},
"submitted_to": {
"type": "string",
"description": "Optional ISO-8601 upper datetime bound."
},
"ending_key": {
"type": "string",
"description": "Optional ending key filter."
},
"share_link_id": {
"type": "integer",
"description": "Optional share-link id filter."
}
},
"required": [
"slug"
]
}get_survey_response
Return one completed survey response, including variables, share-link metadata and individual answer rows, only after that response was included in a confirmed export. An unbilled response returns response_export_required with its current cost preview; use export_survey_responses and wait for explicit user confirmation.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"response_id": {
"type": "integer",
"minimum": 1,
"description": "Survey response id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for response_id."
}
},
"required": [
"slug",
"response_id"
]
}delete_survey_response
Delete one completed survey response from the current account. Use carefully; this mirrors the admin delete action.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"response_id": {
"type": "integer",
"minimum": 1,
"description": "Survey response id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for response_id."
}
},
"required": [
"slug",
"response_id"
]
}export_survey_responses
Preview and export survey responses in json, ndjson, csv, xlsx or sav. Confidence can use the named bands or an inclusive custom confidence_min/confidence_max range. JSON/NDJSON preserve each response URL-parameter snapshot; flat formats automatically add collision-safe columns for observed non-internal URL parameters. First call with preview=true, then tell the user the exact amount_cents that will be taken from the wallet and repeat the returned filters: versions, completed/partial selection, reached-question and confidence filters, screened-out inclusion, and format. Also report included, already billed and newly billable attempt counts. Only call with confirm_export=true and that exact confirmation_token after the user explicitly approves that cost and selection. Screened-out responses are excluded unless include_screened_out=true. A stale token returns a refreshed preview and requires renewed approval. Every included completed or partial attempt is billed once; finishing a previously exported partial does not bill it again.
json, ndjson, csv, xlsx, savcompleted, all, partialsall, trusted, review, risky, unscored, customcode, aliasView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"format": {
"type": "string",
"enum": [
"json",
"ndjson",
"csv",
"xlsx",
"sav"
],
"description": "Export format. Defaults to json."
},
"versions": {
"type": [
"string",
"integer",
"array"
],
"items": {
"type": "integer"
},
"description": "current, all, one version number, comma-separated version numbers, or an array of version numbers. Defaults to current."
},
"version": {
"type": [
"string",
"integer"
],
"description": "Alias for versions when selecting a single version/current/all."
},
"attempts": {
"type": "string",
"enum": [
"completed",
"all",
"partials"
],
"description": "Whether to export completed responses, partial attempts, or both. Defaults to completed."
},
"partial_min_completion_percent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Optional minimum completion percent when partial attempts are included."
},
"partial_reached_target": {
"type": "string",
"description": "Optional question code that a partial attempt must have reached or passed, including when logic skipped that exact question and continued later."
},
"confidence": {
"type": "string",
"enum": [
"all",
"trusted",
"review",
"risky",
"unscored",
"custom"
],
"description": "Completed-response confidence filter: all, trusted (80-100), review (40-79), risky (0-39), unscored, or custom. Partials have no confidence score."
},
"confidence_min": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Inclusive minimum Confidence score. Supplying a threshold with confidence omitted or all selects a custom range."
},
"confidence_max": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"description": "Inclusive maximum Confidence score. Supplying a threshold with confidence omitted or all selects a custom range."
},
"include_screened_out": {
"type": "boolean",
"description": "Include screened-out terminal responses. Defaults to false so they are not exported or billed accidentally."
},
"option_value_mode": {
"type": "string",
"enum": [
"code",
"alias"
],
"description": "Use option numeric codes or option aliases in tabular exports when aliases exist."
},
"preview": {
"type": "boolean",
"description": "Set true to calculate candidates, first-export cost and wallet balance without downloading or charging."
},
"confirm_export": {
"type": "boolean",
"description": "Set true only after explicit user confirmation of the current preview. Must be sent with that preview confirmation_token."
},
"confirmation_token": {
"type": "string",
"description": "Exact token returned by the approved preview. If candidates or options changed, the export returns a refreshed preview and requires renewed approval."
}
},
"required": [
"slug"
]
}Audiences
7 toolsget_audience_summary
Return account audience counts, top tags, saved segment summaries and recent imports.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}list_audience_contacts
Search and paginate contacts in the current account, optionally filtering by all provided tag slugs or names.
View input JSON schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Optional text search across name, email, phone, external id and UUID."
},
"query": {
"type": "string",
"description": "Alias for q."
},
"tags": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
},
"description": "Optional tag slugs/names. Multiple tags are combined with AND. Accepts an array or comma-separated string."
},
"tag_slugs": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
},
"description": "Alias for tags."
},
"page": {
"type": "integer",
"minimum": 1,
"description": "Page number. Defaults to 1."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Contacts per page. Defaults to 20, maximum 100."
}
},
"required": []
}get_audience_contact
Return one contact with tags, extra JSON, account-level data and survey-scoped data.
View input JSON schema
{
"type": "object",
"properties": {
"contact_id": {
"type": "integer",
"minimum": 1,
"description": "Audience contact id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for contact_id."
}
},
"required": [
"contact_id"
]
}create_audience_import
Create a JSON-first audience import session. The caller should transform Excel, CRM, Word or copied lists into normalized contact JSON before appending chunks.
View input JSON schema
{
"type": "object",
"properties": {
"label": {
"type": "string",
"description": "Human import name, for example \"Directors escoles juny 2026\"."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"tags": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
},
"description": "Optional import tags as array or comma-separated string. Dayalogs also adds an import-YYMMDD-HHMM tag automatically."
},
"tag_names": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
},
"description": "Alias for tags."
},
"data_survey_slug": {
"type": "string",
"description": "Optional survey slug. When set, each contact data object is stored as survey-scoped @contact.survey_data for that survey."
},
"survey_slug": {
"type": "string",
"description": "Alias for data_survey_slug."
},
"source_metadata": {
"type": "object",
"description": "Optional metadata about the upstream source, such as CRM name, file title or agent trace id."
},
"metadata": {
"type": "object",
"description": "Alias for source_metadata."
}
},
"required": [
"label"
]
}append_audience_import_contacts
Append normalized contact JSON to an open import inside the authenticated account. Matching contacts are updated immediately: incoming values can overwrite existing fields and structured-data keys. Uses chunk_id for idempotency. Does not send invitations or fetch an external CRM.
View input JSON schema
{
"type": "object",
"properties": {
"import_id": {
"type": "integer",
"minimum": 1,
"description": "Audience import id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for import_id."
},
"chunk_id": {
"type": "string",
"description": "Optional idempotency key. Re-sending the same chunk_id is a no-op."
},
"contacts": {
"type": "array",
"description": "Chunk of already-normalized Dayalogs contact JSON objects. Do not send raw Excel/CSV rows here.",
"items": {
"type": "object",
"description": "Normalized contact object. Canonical fields: external_id, email, phone, first_name, last_name, full_name, age, gender, tags, extra, data, survey_data.",
"properties": {
"external_id": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"full_name": {
"type": "string"
},
"age": {
"type": [
"integer",
"string"
]
},
"gender": {
"type": "string"
},
"tags": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
}
},
"extra": {
"type": "object",
"description": "Unmapped flat or structured metadata. Exposed under @contact.extra and merged into contact payload."
},
"data": {
"type": "object",
"description": "Structured account-level contact data, or survey-scoped data when the import session has data_survey_slug."
},
"survey_data": {
"type": "object",
"description": "Optional object keyed by survey slug, each value a JSON object."
}
}
}
},
"items": {
"type": "array",
"description": "Alias for contacts.",
"items": {
"type": "object",
"description": "Normalized contact object. Canonical fields: external_id, email, phone, first_name, last_name, full_name, age, gender, tags, extra, data, survey_data.",
"properties": {
"external_id": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"full_name": {
"type": "string"
},
"age": {
"type": [
"integer",
"string"
]
},
"gender": {
"type": "string"
},
"tags": {
"type": [
"array",
"string"
],
"items": {
"type": "string"
}
},
"extra": {
"type": "object",
"description": "Unmapped flat or structured metadata. Exposed under @contact.extra and merged into contact payload."
},
"data": {
"type": "object",
"description": "Structured account-level contact data, or survey-scoped data when the import session has data_survey_slug."
},
"survey_data": {
"type": "object",
"description": "Optional object keyed by survey slug, each value a JSON object."
}
}
}
},
"contacts_json": {
"type": "string",
"description": "Alternative to contacts: JSON string containing an array of normalized contact objects."
}
},
"required": [
"import_id"
]
}get_audience_import_status
Return import status, counters, processed chunks, warnings/errors and metadata for an audience import session.
View input JSON schema
{
"type": "object",
"properties": {
"import_id": {
"type": "integer",
"minimum": 1,
"description": "Audience import id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for import_id."
}
},
"required": [
"import_id"
]
}commit_audience_import
Finalize an open audience import session. Contacts are already persisted during chunk append; commit marks the import complete. Marks the import closed and prevents additional chunks. Does not send invitations.
View input JSON schema
{
"type": "object",
"properties": {
"import_id": {
"type": "integer",
"minimum": 1,
"description": "Audience import id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for import_id."
}
},
"required": [
"import_id"
]
}Tags
5 toolslist_tags
List global account tags and current contact assignment counts.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}suggest_tags
Autocomplete existing global account tags by name or slug.
View input JSON schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Text to search in tag name or slug."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"description": "Maximum suggestions. Defaults to 8."
}
},
"required": [
"q"
]
}create_tag
Create a global account tag that can be used by audiences now and other resource types later.
View input JSON schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Tag display name."
},
"slug": {
"type": "string",
"description": "Optional stable slug. Defaults to a slugified name on create."
}
},
"required": [
"name"
]
}update_tag
Update a global account tag name or slug. Overwrites the existing name or slug without retaining the prior value on this record.
View input JSON schema
{
"type": "object",
"properties": {
"tag_id": {
"type": "integer",
"minimum": 1,
"description": "Tag id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for tag_id."
},
"name": {
"type": "string",
"description": "Tag display name."
},
"slug": {
"type": "string",
"description": "Optional stable slug. Defaults to a slugified name on create."
}
},
"required": [
"tag_id"
]
}delete_tag
Delete a global account tag. If assigned to contacts, pass detach=true to remove assignments.
View input JSON schema
{
"type": "object",
"properties": {
"tag_id": {
"type": "integer",
"minimum": 1,
"description": "Tag id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for tag_id."
},
"detach": {
"type": "boolean",
"description": "When true, delete even if assigned to contacts, detaching those contact assignments."
}
},
"required": [
"tag_id"
]
}Segments
7 toolslist_audience_segments
List saved audience segments with normalized query criteria.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}count_audience_segment
Normalize an audience segment criteria JSON object and return the matching contact count plus a small sample.
View input JSON schema
{
"type": "object",
"properties": {
"criteria": {
"type": "object",
"description": "Segment query object using combinator and rules. Rule sources: tag, field, extra, data, survey_data. Canonical operators: exists, not_exists, eq, not_eq, contains, not_contains, starts_with, ends_with, gt, gte, lt, lte, count_eq, count_gt, count_gte, count_lt, count_lte."
},
"criteria_json": {
"type": "string",
"description": "Alternative to criteria: JSON string containing the segment query object."
},
"sample_limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Maximum sample contacts to return. Defaults to 5."
}
},
"required": []
}create_audience_segment
Create a saved audience segment from a normalized criteria JSON object and return the calculated contact count.
View input JSON schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Segment display name. Required on create."
},
"slug": {
"type": "string",
"description": "Optional stable slug. Defaults to a slugified name on create."
},
"description": {
"type": "string",
"description": "Optional internal description."
},
"criteria": {
"type": "object",
"description": "Segment query object using combinator and rules. Rule sources: tag, field, extra, data, survey_data. Canonical operators: exists, not_exists, eq, not_eq, contains, not_contains, starts_with, ends_with, gt, gte, lt, lte, count_eq, count_gt, count_gte, count_lt, count_lte."
},
"criteria_json": {
"type": "string",
"description": "Alternative to criteria: JSON string containing the segment query object."
},
"refresh_count": {
"type": "boolean",
"description": "On update, recalculate last_count even when criteria is unchanged."
}
},
"required": [
"name"
]
}update_audience_segment
Update a saved audience segment name, description, slug or criteria. When criteria changes, Dayalogs recalculates the count. Overwrites existing metadata and membership criteria; contacts are not deleted. Does not send invitations.
View input JSON schema
{
"type": "object",
"properties": {
"segment_id": {
"type": "integer",
"minimum": 1,
"description": "Audience segment id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for segment_id."
},
"name": {
"type": "string",
"description": "Segment display name. Required on create."
},
"slug": {
"type": "string",
"description": "Optional stable slug. Defaults to a slugified name on create."
},
"description": {
"type": "string",
"description": "Optional internal description."
},
"criteria": {
"type": "object",
"description": "Segment query object using combinator and rules. Rule sources: tag, field, extra, data, survey_data. Canonical operators: exists, not_exists, eq, not_eq, contains, not_contains, starts_with, ends_with, gt, gte, lt, lte, count_eq, count_gt, count_gte, count_lt, count_lte."
},
"criteria_json": {
"type": "string",
"description": "Alternative to criteria: JSON string containing the segment query object."
},
"refresh_count": {
"type": "boolean",
"description": "On update, recalculate last_count even when criteria is unchanged."
}
},
"required": [
"segment_id"
]
}delete_audience_segment
Delete a saved audience segment. Contacts are not deleted.
View input JSON schema
{
"type": "object",
"properties": {
"segment_id": {
"type": "integer",
"minimum": 1,
"description": "Audience segment id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for segment_id."
}
},
"required": [
"segment_id"
]
}get_audience_segment_json_paths
List detected JSON paths for contact extra, contact data, or survey-scoped contact data to help build segment rules.
extra, data, survey_dataView input JSON schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"extra",
"data",
"survey_data"
],
"description": "JSON source to inspect."
},
"survey_slug": {
"type": "string",
"description": "Required when source is survey_data."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "Maximum paths to return. Defaults to 250."
}
},
"required": [
"source"
]
}suggest_audience_segment_values
Suggest existing values for a segment rule field or JSON path. Returns requires_query=true instead of a huge list when too many values exist.
field, extra, data, survey_dataView input JSON schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"field",
"extra",
"data",
"survey_data"
],
"description": "Source to inspect for existing values."
},
"field": {
"type": "string",
"description": "Required when source is field. Example: email, full_name, age, gender."
},
"path": {
"type": "string",
"description": "Required for extra, data and survey_data sources."
},
"survey_slug": {
"type": "string",
"description": "Required when source is survey_data."
},
"q": {
"type": "string",
"description": "Optional autocomplete query."
},
"query": {
"type": "string",
"description": "Alias for q."
}
},
"required": [
"source"
]
}Links
13 toolslist_survey_links
List respondent access links for a survey, including URLs, status, progress state, quotas, variables, contact and link set metadata.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}create_survey_link
Create a real respondent access link for a survey. This is not a preview link; use get_preview_url for user review. Requires confirm_real_link=true after the user explicitly asks for a respondent link.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Display label. Optional on create; defaults to the contact display name or \"Single link\"."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"contact_id": {
"type": "integer",
"description": "Optional contact id. If present, Dayalogs creates a personalized link."
},
"email": {
"type": "string",
"description": "Optional email metadata for anonymous single links."
},
"tag_id": {
"type": "integer",
"description": "Optional source tag id for personalized single links."
},
"tag_slug": {
"type": "string",
"description": "Optional source tag slug for personalized single links."
},
"source_tag_id": {
"type": "integer",
"description": "Alias for tag_id."
},
"source_tag_slug": {
"type": "string",
"description": "Alias for tag_slug."
},
"single_response": {
"type": "boolean",
"description": "For personalized links, one response per link with server-side resume. Defaults to true for multi-link link sets and false for single-link link sets."
},
"cookie_protection": {
"type": "boolean",
"description": "Anonymous single-link soft duplicate guard. Ignored for personalized multi-link link sets."
},
"inactivity_timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 30,
"description": "Kiosk/shared-device mode: seconds of inactivity before the current attempt is saved as a partial and the survey restarts for the next respondent, with a visible countdown warning first. Use for tablets at counters or event kiosks. Minimum 30. Only applies to anonymous multi-response links without cookie_protection; ignored elsewhere. Null disables it."
},
"embedded_variables": {
"type": "object",
"description": "Server-side variables stored with response metadata and never exposed in the URL."
},
"variables": {
"type": "object",
"description": "Alias for embedded_variables."
},
"url_variables": {
"type": "object",
"description": "Static query parameters appended to generated URLs; visible and modifiable by respondents."
},
"url_params": {
"type": "object",
"description": "Alias for url_variables."
},
"quota": {
"type": [
"integer",
"null"
],
"description": "Quota threshold. For multi-link link sets, only applies when single_response is false."
},
"limit": {
"type": [
"integer",
"null"
],
"description": "Alias for quota."
},
"quota_count": {
"type": "integer",
"description": "Current accepted count. Usually edited after fieldwork starts."
},
"count": {
"type": "integer",
"description": "Alias for quota_count."
},
"clear_quota": {
"type": "boolean",
"description": "Remove the quota threshold where quotas are editable."
},
"open_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 activation datetime."
},
"open_date": {
"type": [
"string",
"null"
],
"description": "Alias for open_at."
},
"close_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 deactivation datetime."
},
"close_date": {
"type": [
"string",
"null"
],
"description": "Alias for close_at."
},
"confirm_real_link": {
"type": "boolean",
"description": "Must be true to create a real respondent access link. Use get_preview_url instead for user review links."
}
},
"required": [
"slug"
]
}update_survey_link
Update a single link label, active date window, or link-level quota when the quota is editable. Can overwrite date windows, quota and quota_count settings and restrict previously available respondent access. Does not send invitations.
View input JSON schema
{
"type": "object",
"properties": {
"link_id": {
"type": "integer",
"description": "Survey link id."
},
"id": {
"type": "integer",
"description": "Alias for link_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Display label. Optional on create; defaults to the contact display name or \"Single link\"."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"contact_id": {
"type": "integer",
"description": "Optional contact id. If present, Dayalogs creates a personalized link."
},
"email": {
"type": "string",
"description": "Optional email metadata for anonymous single links."
},
"tag_id": {
"type": "integer",
"description": "Optional source tag id for personalized single links."
},
"tag_slug": {
"type": "string",
"description": "Optional source tag slug for personalized single links."
},
"source_tag_id": {
"type": "integer",
"description": "Alias for tag_id."
},
"source_tag_slug": {
"type": "string",
"description": "Alias for tag_slug."
},
"single_response": {
"type": "boolean",
"description": "For personalized links, one response per link with server-side resume. Defaults to true for multi-link link sets and false for single-link link sets."
},
"cookie_protection": {
"type": "boolean",
"description": "Anonymous single-link soft duplicate guard. Ignored for personalized multi-link link sets."
},
"inactivity_timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 30,
"description": "Kiosk/shared-device mode: seconds of inactivity before the current attempt is saved as a partial and the survey restarts for the next respondent, with a visible countdown warning first. Use for tablets at counters or event kiosks. Minimum 30. Only applies to anonymous multi-response links without cookie_protection; ignored elsewhere. Null disables it."
},
"embedded_variables": {
"type": "object",
"description": "Server-side variables stored with response metadata and never exposed in the URL."
},
"variables": {
"type": "object",
"description": "Alias for embedded_variables."
},
"url_variables": {
"type": "object",
"description": "Static query parameters appended to generated URLs; visible and modifiable by respondents."
},
"url_params": {
"type": "object",
"description": "Alias for url_variables."
},
"quota": {
"type": [
"integer",
"null"
],
"description": "Quota threshold. For multi-link link sets, only applies when single_response is false."
},
"limit": {
"type": [
"integer",
"null"
],
"description": "Alias for quota."
},
"quota_count": {
"type": "integer",
"description": "Current accepted count. Usually edited after fieldwork starts."
},
"count": {
"type": "integer",
"description": "Alias for quota_count."
},
"clear_quota": {
"type": "boolean",
"description": "Remove the quota threshold where quotas are editable."
},
"open_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 activation datetime."
},
"open_date": {
"type": [
"string",
"null"
],
"description": "Alias for open_at."
},
"close_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 deactivation datetime."
},
"close_date": {
"type": [
"string",
"null"
],
"description": "Alias for close_at."
}
},
"required": [
"slug",
"link_id"
]
}delete_survey_link
Delete a link. Dayalogs hard-deletes unused links and soft-deletes links that already have responses, sessions or progress.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_id": {
"type": "integer",
"description": "Survey link id."
},
"id": {
"type": "integer",
"description": "Alias for link_id."
}
},
"required": [
"slug",
"link_id"
]
}activate_survey_link
Manually activate a respondent access link.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_id": {
"type": "integer",
"description": "Survey link id."
},
"id": {
"type": "integer",
"description": "Alias for link_id."
}
},
"required": [
"slug",
"link_id"
]
}deactivate_survey_link
Manually deactivate a respondent access link.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_id": {
"type": "integer",
"description": "Survey link id."
},
"id": {
"type": "integer",
"description": "Alias for link_id."
}
},
"required": [
"slug",
"link_id"
]
}list_survey_link_sets
List survey link sets with quota mode, source tag/segment and link counts.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}create_survey_link_set
Create a fresh multi-link link set from a tag, saved segment, or explicit contact_ids. Existing links are never reused.
tag, segment, contactsper_link, globalView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Link set display name. Required on create."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"source_type": {
"type": "string",
"enum": [
"tag",
"segment",
"contacts"
],
"description": "Create source. On create, Dayalogs can infer this from tag_id/tag_slug, segment_id/segment_slug or contact_ids."
},
"source": {
"type": "string",
"description": "Alias for source_type."
},
"tag_id": {
"type": "integer",
"description": "Source tag id."
},
"tag_slug": {
"type": "string",
"description": "Source tag slug."
},
"source_tag_id": {
"type": "integer",
"description": "Alias for tag_id."
},
"source_tag_slug": {
"type": "string",
"description": "Alias for tag_slug."
},
"segment_id": {
"type": "integer",
"description": "Source audience segment id."
},
"segment_slug": {
"type": "string",
"description": "Source audience segment slug."
},
"source_segment_id": {
"type": "integer",
"description": "Alias for segment_id."
},
"source_segment_slug": {
"type": "string",
"description": "Alias for segment_slug."
},
"contact_ids": {
"type": "array",
"description": "Explicit contact ids for source_type contacts.",
"items": {
"type": "integer"
}
},
"contacts": {
"type": "array",
"description": "Alias for contact_ids. Can be integers or objects with id/contact_id.",
"items": {
"type": [
"integer",
"object"
]
}
},
"quota_scope": {
"type": "string",
"enum": [
"per_link",
"global"
],
"description": "Quota mode for multi-link link sets. Defaults to per_link."
},
"quota_mode": {
"type": "string",
"description": "Alias for quota_scope."
},
"overwrite_calendar_overrides": {
"type": "boolean",
"description": "On update, apply date changes to links with custom date overrides too."
},
"overwrite_quota_overrides": {
"type": "boolean",
"description": "On update, apply per-link quota changes to links with custom quota overrides too."
},
"single_response": {
"type": "boolean",
"description": "For personalized links, one response per link with server-side resume. Defaults to true for multi-link link sets and false for single-link link sets."
},
"cookie_protection": {
"type": "boolean",
"description": "Anonymous single-link soft duplicate guard. Ignored for personalized multi-link link sets."
},
"inactivity_timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 30,
"description": "Kiosk/shared-device mode: seconds of inactivity before the current attempt is saved as a partial and the survey restarts for the next respondent, with a visible countdown warning first. Use for tablets at counters or event kiosks. Minimum 30. Only applies to anonymous multi-response links without cookie_protection; ignored elsewhere. Null disables it."
},
"embedded_variables": {
"type": "object",
"description": "Server-side variables stored with response metadata and never exposed in the URL."
},
"variables": {
"type": "object",
"description": "Alias for embedded_variables."
},
"url_variables": {
"type": "object",
"description": "Static query parameters appended to generated URLs; visible and modifiable by respondents."
},
"url_params": {
"type": "object",
"description": "Alias for url_variables."
},
"quota": {
"type": [
"integer",
"null"
],
"description": "Quota threshold. For multi-link link sets, only applies when single_response is false."
},
"limit": {
"type": [
"integer",
"null"
],
"description": "Alias for quota."
},
"quota_count": {
"type": "integer",
"description": "Current accepted count. Usually edited after fieldwork starts."
},
"count": {
"type": "integer",
"description": "Alias for quota_count."
},
"clear_quota": {
"type": "boolean",
"description": "Remove the quota threshold where quotas are editable."
},
"open_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 activation datetime."
},
"open_date": {
"type": [
"string",
"null"
],
"description": "Alias for open_at."
},
"close_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 deactivation datetime."
},
"close_date": {
"type": [
"string",
"null"
],
"description": "Alias for close_at."
}
},
"required": [
"slug",
"label"
]
}update_survey_link_set
Update a link set label, link date window, quota mode and bulk quota/calendar overrides where applicable.
tag, segment, contactsper_link, globalView input JSON schema
{
"type": "object",
"properties": {
"link_set_id": {
"type": "integer",
"description": "Survey link set id."
},
"id": {
"type": "integer",
"description": "Alias for link_set_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"label": {
"type": "string",
"description": "Link set display name. Required on create."
},
"name": {
"type": "string",
"description": "Alias for label."
},
"source_type": {
"type": "string",
"enum": [
"tag",
"segment",
"contacts"
],
"description": "Create source. On create, Dayalogs can infer this from tag_id/tag_slug, segment_id/segment_slug or contact_ids."
},
"source": {
"type": "string",
"description": "Alias for source_type."
},
"tag_id": {
"type": "integer",
"description": "Source tag id."
},
"tag_slug": {
"type": "string",
"description": "Source tag slug."
},
"source_tag_id": {
"type": "integer",
"description": "Alias for tag_id."
},
"source_tag_slug": {
"type": "string",
"description": "Alias for tag_slug."
},
"segment_id": {
"type": "integer",
"description": "Source audience segment id."
},
"segment_slug": {
"type": "string",
"description": "Source audience segment slug."
},
"source_segment_id": {
"type": "integer",
"description": "Alias for segment_id."
},
"source_segment_slug": {
"type": "string",
"description": "Alias for segment_slug."
},
"contact_ids": {
"type": "array",
"description": "Explicit contact ids for source_type contacts.",
"items": {
"type": "integer"
}
},
"contacts": {
"type": "array",
"description": "Alias for contact_ids. Can be integers or objects with id/contact_id.",
"items": {
"type": [
"integer",
"object"
]
}
},
"quota_scope": {
"type": "string",
"enum": [
"per_link",
"global"
],
"description": "Quota mode for multi-link link sets. Defaults to per_link."
},
"quota_mode": {
"type": "string",
"description": "Alias for quota_scope."
},
"overwrite_calendar_overrides": {
"type": "boolean",
"description": "On update, apply date changes to links with custom date overrides too."
},
"overwrite_quota_overrides": {
"type": "boolean",
"description": "On update, apply per-link quota changes to links with custom quota overrides too."
},
"single_response": {
"type": "boolean",
"description": "For personalized links, one response per link with server-side resume. Defaults to true for multi-link link sets and false for single-link link sets."
},
"cookie_protection": {
"type": "boolean",
"description": "Anonymous single-link soft duplicate guard. Ignored for personalized multi-link link sets."
},
"inactivity_timeout_seconds": {
"type": [
"integer",
"null"
],
"minimum": 30,
"description": "Kiosk/shared-device mode: seconds of inactivity before the current attempt is saved as a partial and the survey restarts for the next respondent, with a visible countdown warning first. Use for tablets at counters or event kiosks. Minimum 30. Only applies to anonymous multi-response links without cookie_protection; ignored elsewhere. Null disables it."
},
"embedded_variables": {
"type": "object",
"description": "Server-side variables stored with response metadata and never exposed in the URL."
},
"variables": {
"type": "object",
"description": "Alias for embedded_variables."
},
"url_variables": {
"type": "object",
"description": "Static query parameters appended to generated URLs; visible and modifiable by respondents."
},
"url_params": {
"type": "object",
"description": "Alias for url_variables."
},
"quota": {
"type": [
"integer",
"null"
],
"description": "Quota threshold. For multi-link link sets, only applies when single_response is false."
},
"limit": {
"type": [
"integer",
"null"
],
"description": "Alias for quota."
},
"quota_count": {
"type": "integer",
"description": "Current accepted count. Usually edited after fieldwork starts."
},
"count": {
"type": "integer",
"description": "Alias for quota_count."
},
"clear_quota": {
"type": "boolean",
"description": "Remove the quota threshold where quotas are editable."
},
"open_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 activation datetime."
},
"open_date": {
"type": [
"string",
"null"
],
"description": "Alias for open_at."
},
"close_at": {
"type": [
"string",
"null"
],
"description": "Optional ISO-8601 deactivation datetime."
},
"close_date": {
"type": [
"string",
"null"
],
"description": "Alias for close_at."
}
},
"required": [
"slug",
"link_set_id"
]
}delete_survey_link_set
Delete a link set. Dayalogs hard-deletes unused link sets and soft-deletes link sets with retained activity.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_set_id": {
"type": "integer",
"description": "Survey link set id."
},
"id": {
"type": "integer",
"description": "Alias for link_set_id."
}
},
"required": [
"slug",
"link_set_id"
]
}activate_survey_link_set
Manually activate a link set.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_set_id": {
"type": "integer",
"description": "Survey link set id."
},
"id": {
"type": "integer",
"description": "Alias for link_set_id."
}
},
"required": [
"slug",
"link_set_id"
]
}deactivate_survey_link_set
Manually deactivate a link set.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_set_id": {
"type": "integer",
"description": "Survey link set id."
},
"id": {
"type": "integer",
"description": "Alias for link_set_id."
}
},
"required": [
"slug",
"link_set_id"
]
}export_survey_link_set
Export links from a link set as structured JSON, CSV or XLSX content.
json, csv, xlsxView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"link_set_id": {
"type": "integer",
"description": "Survey link set id."
},
"id": {
"type": "integer",
"description": "Alias for link_set_id."
},
"format": {
"type": "string",
"enum": [
"json",
"csv",
"xlsx"
],
"description": "Export format. Defaults to json."
}
},
"required": [
"slug",
"link_set_id"
]
}Embeds
5 toolslist_survey_embeds
List website embed placements for a survey, including generated one-tag loader snippets, allowed origins, lifecycle settings and compatibility warnings.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}get_survey_embed_compatibility
Check whether the current survey version is suitable for responsive embedded viewports. Warnings are advisory and do not block creating an embed.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}create_survey_embed
Create a website embed placement. Optionally bind it to an anonymous reusable single-link link set so its fixed metadata and runtime availability rules are used; otherwise the survey default link is resolved or created transparently. Draft embeds can be prepared without confirmation. Activating a real public embed requires exact or wildcard-subdomain allowed origins and confirm_public_embed=true after explicit user approval. Returns a one-tag script snippet.
draft, active, revokedView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"maxLength": 160,
"description": "Human-readable placement name."
},
"share_link_id": {
"type": [
"integer",
"null"
],
"description": "Optional anonymous reusable single-link link set id for this survey. Fixed metadata, dates, quota and cookie protection remain effective at runtime. Null resolves or creates the survey default link."
},
"allowed_origins": {
"type": "array",
"description": "Exact HTTP(S) origins or wildcard subdomain origins such as https://*.example.com. Never use *.",
"items": {
"type": "string"
}
},
"origins": {
"type": "array",
"description": "Alias for allowed_origins.",
"items": {
"type": "string"
}
},
"settings": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"modal"
]
},
"trigger": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"immediate",
"delay",
"scroll",
"launcher",
"programmatic",
"custom_event"
]
},
"delay_ms": {
"type": "integer",
"minimum": 0,
"maximum": 3600000
},
"scroll_percent": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"event_name": {
"type": "string",
"maxLength": 120
},
"launcher_label": {
"type": "string",
"maxLength": 120
}
},
"required": [],
"additionalProperties": false
},
"frequency": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"always",
"session",
"once",
"cooldown"
]
},
"cooldown_days": {
"type": "integer",
"minimum": 1,
"maximum": 3650
}
},
"required": [],
"additionalProperties": false
},
"layout": {
"type": "object",
"properties": {
"desktop_width": {
"type": "integer",
"minimum": 320,
"maximum": 1200
},
"mobile_width": {
"type": "integer",
"minimum": 280,
"maximum": 600
},
"max_height": {
"type": "integer",
"minimum": 320,
"maximum": 1600
},
"drawer_side": {
"type": "string",
"enum": [
"left",
"right"
]
}
},
"required": [],
"additionalProperties": false
},
"appearance": {
"type": "object",
"properties": {
"border_width": {
"type": "integer",
"minimum": 0,
"maximum": 8
},
"border_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"border_radius": {
"type": "integer",
"minimum": 0,
"maximum": 40
},
"shadow": {
"type": "string",
"enum": [
"none",
"soft",
"strong"
]
},
"backdrop_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"backdrop_opacity": {
"type": "integer",
"minimum": 0,
"maximum": 90
}
},
"required": [],
"additionalProperties": false
},
"target_selector": {
"type": [
"string",
"null"
],
"maxLength": 240
},
"locale": {
"type": [
"string",
"null"
]
}
},
"required": [],
"additionalProperties": false
},
"active": {
"type": "boolean",
"description": "Create the placement active. At least one allowed origin is required."
},
"confirm_public_embed": {
"type": "boolean",
"description": "Set true only after the user explicitly approves activating this real public website embed."
},
"status": {
"type": "string",
"enum": [
"draft",
"active",
"revoked"
],
"description": "Update lifecycle status. Activating requires at least one allowed origin."
}
},
"required": [
"slug",
"name"
],
"additionalProperties": false
}update_survey_embed
Update an embed placement name, compatible share link, allowed origins, trigger, frequency, responsive layout, locale or status. A null share_link_id restores the compatible default link. Transitioning a draft embed to active requires allowed origins and confirm_public_embed=true after explicit user approval.
draft, active, revokedView input JSON schema
{
"type": "object",
"properties": {
"embed_id": {
"type": "integer",
"description": "Website embed placement id."
},
"id": {
"type": "integer",
"description": "Alias for embed_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"maxLength": 160,
"description": "Human-readable placement name."
},
"share_link_id": {
"type": [
"integer",
"null"
],
"description": "Optional anonymous reusable single-link link set id for this survey. Fixed metadata, dates, quota and cookie protection remain effective at runtime. Null resolves or creates the survey default link."
},
"allowed_origins": {
"type": "array",
"description": "Exact HTTP(S) origins or wildcard subdomain origins such as https://*.example.com. Never use *.",
"items": {
"type": "string"
}
},
"origins": {
"type": "array",
"description": "Alias for allowed_origins.",
"items": {
"type": "string"
}
},
"settings": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"modal"
]
},
"trigger": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"immediate",
"delay",
"scroll",
"launcher",
"programmatic",
"custom_event"
]
},
"delay_ms": {
"type": "integer",
"minimum": 0,
"maximum": 3600000
},
"scroll_percent": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"event_name": {
"type": "string",
"maxLength": 120
},
"launcher_label": {
"type": "string",
"maxLength": 120
}
},
"required": [],
"additionalProperties": false
},
"frequency": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"always",
"session",
"once",
"cooldown"
]
},
"cooldown_days": {
"type": "integer",
"minimum": 1,
"maximum": 3650
}
},
"required": [],
"additionalProperties": false
},
"layout": {
"type": "object",
"properties": {
"desktop_width": {
"type": "integer",
"minimum": 320,
"maximum": 1200
},
"mobile_width": {
"type": "integer",
"minimum": 280,
"maximum": 600
},
"max_height": {
"type": "integer",
"minimum": 320,
"maximum": 1600
},
"drawer_side": {
"type": "string",
"enum": [
"left",
"right"
]
}
},
"required": [],
"additionalProperties": false
},
"appearance": {
"type": "object",
"properties": {
"border_width": {
"type": "integer",
"minimum": 0,
"maximum": 8
},
"border_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"border_radius": {
"type": "integer",
"minimum": 0,
"maximum": 40
},
"shadow": {
"type": "string",
"enum": [
"none",
"soft",
"strong"
]
},
"backdrop_color": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"backdrop_opacity": {
"type": "integer",
"minimum": 0,
"maximum": 90
}
},
"required": [],
"additionalProperties": false
},
"target_selector": {
"type": [
"string",
"null"
],
"maxLength": 240
},
"locale": {
"type": [
"string",
"null"
]
}
},
"required": [],
"additionalProperties": false
},
"active": {
"type": "boolean",
"description": "Create the placement active. At least one allowed origin is required."
},
"confirm_public_embed": {
"type": "boolean",
"description": "Set true only after the user explicitly approves activating this real public website embed."
},
"status": {
"type": "string",
"enum": [
"draft",
"active",
"revoked"
],
"description": "Update lifecycle status. Activating requires at least one allowed origin."
}
},
"required": [
"slug",
"embed_id"
],
"additionalProperties": false
}delete_survey_embed
Revoke a website embed placement. Existing survey responses are retained, but the public embed identifier can no longer launch the survey.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"embed_id": {
"type": "integer",
"description": "Website embed placement id."
},
"id": {
"type": "integer",
"description": "Alias for embed_id."
}
},
"required": [
"slug",
"embed_id"
],
"additionalProperties": false
}Campaigns
13 toolslist_survey_campaigns
List email campaigns for a survey, optionally including archived campaigns.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"include_archived": {
"type": "boolean",
"description": "Include archived campaigns in the list."
},
"archived": {
"type": "boolean",
"description": "Return only archived campaigns."
}
},
"required": [
"slug"
]
}list_sender_identities
List every approved From identity available for campaign creation, including the fixed shared surveys@dayalogs.com identity and active identities on ready custom domains. Pass the selected key as sender_identity.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}get_survey_campaign
Return one survey email campaign, optionally including recipients and their link status.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"include_recipients": {
"type": "boolean",
"description": "Include recipients. Defaults to true."
}
},
"required": [
"slug",
"campaign_id"
]
}list_survey_campaign_events
List recent provider delivery events for one survey campaign, including delivery, bounce, complaint, reject and delay events.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"description": "Maximum recent events to return. Defaults to 100."
}
},
"required": [
"slug",
"campaign_id"
]
}create_survey_campaign
Create a saved email campaign draft for an existing multi-link LinkSet. This does not send email or queue recipients; campaigns consume LinkSets and do not create links.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"description": "Campaign display name."
},
"link_set_id": {
"type": "integer",
"description": "Existing multi-link link set id. Required on create."
},
"subject": {
"type": "string",
"description": "Email subject. Required on create. Supports campaign/contact/link placeholders."
},
"sender_identity": {
"type": "string",
"description": "Approved identity key returned by list_sender_identities: shared or custom:<id>. Defaults to shared. Free-form From addresses are not accepted."
},
"sender_name": {
"type": "string",
"description": "Display name for the shared identity. Custom identities use their approved display name."
},
"email_template": {
"type": "string",
"description": "Template selector: base:dayalogs-basic, base:dayalogs-plain or custom:<id>."
},
"template": {
"type": "string",
"description": "Alias for email_template."
},
"email_template_id": {
"type": "integer",
"description": "Ready custom email template id. Alias for custom:<id>."
},
"template_id": {
"type": "integer",
"description": "Alias for email_template_id."
},
"email_template_base_key": {
"type": "string",
"description": "Base template key. Alias for base:<key>."
},
"template_base_key": {
"type": "string",
"description": "Alias for email_template_base_key."
},
"body_html": {
"type": "string",
"description": "Campaign email body HTML. Required on create. Use {{ @link.url }} or Dayalogs will append a link."
},
"html": {
"type": "string",
"description": "Alias for body_html."
},
"body": {
"type": "string",
"description": "Alias for body_html."
},
"body_text": {
"type": "string",
"description": "Optional plain-text body override."
},
"text": {
"type": "string",
"description": "Alias for body_text."
},
"disclaimer_html": {
"type": "string",
"description": "Optional legal/disclaimer HTML. Falls back to account default."
},
"disclaimer": {
"type": "string",
"description": "Alias for disclaimer_html."
},
"disclaimer_text": {
"type": "string",
"description": "Optional plain-text disclaimer override."
},
"include_branding": {
"type": "boolean",
"description": "Whether the campaign includes account/survey branding."
},
"save_account_disclaimer": {
"type": "boolean",
"description": "Also save this disclaimer as the account default."
}
},
"required": [
"slug",
"link_set_id",
"subject",
"body_html"
]
}update_survey_campaign
Update a saved campaign draft without sending email. After real send activity, only the campaign name can be changed.
View input JSON schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"description": "Campaign display name."
},
"link_set_id": {
"type": "integer",
"description": "Existing multi-link link set id. Required on create."
},
"subject": {
"type": "string",
"description": "Email subject. Required on create. Supports campaign/contact/link placeholders."
},
"sender_identity": {
"type": "string",
"description": "Approved identity key returned by list_sender_identities: shared or custom:<id>. Defaults to shared. Free-form From addresses are not accepted."
},
"sender_name": {
"type": "string",
"description": "Display name for the shared identity. Custom identities use their approved display name."
},
"email_template": {
"type": "string",
"description": "Template selector: base:dayalogs-basic, base:dayalogs-plain or custom:<id>."
},
"template": {
"type": "string",
"description": "Alias for email_template."
},
"email_template_id": {
"type": "integer",
"description": "Ready custom email template id. Alias for custom:<id>."
},
"template_id": {
"type": "integer",
"description": "Alias for email_template_id."
},
"email_template_base_key": {
"type": "string",
"description": "Base template key. Alias for base:<key>."
},
"template_base_key": {
"type": "string",
"description": "Alias for email_template_base_key."
},
"body_html": {
"type": "string",
"description": "Campaign email body HTML. Required on create. Use {{ @link.url }} or Dayalogs will append a link."
},
"html": {
"type": "string",
"description": "Alias for body_html."
},
"body": {
"type": "string",
"description": "Alias for body_html."
},
"body_text": {
"type": "string",
"description": "Optional plain-text body override."
},
"text": {
"type": "string",
"description": "Alias for body_text."
},
"disclaimer_html": {
"type": "string",
"description": "Optional legal/disclaimer HTML. Falls back to account default."
},
"disclaimer": {
"type": "string",
"description": "Alias for disclaimer_html."
},
"disclaimer_text": {
"type": "string",
"description": "Optional plain-text disclaimer override."
},
"include_branding": {
"type": "boolean",
"description": "Whether the campaign includes account/survey branding."
},
"save_account_disclaimer": {
"type": "boolean",
"description": "Also save this disclaimer as the account default."
}
},
"required": [
"slug",
"campaign_id"
]
}clone_survey_campaign
Clone a survey email campaign as a new draft campaign.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Source campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"name": {
"type": "string",
"description": "Optional clone name. If omitted, Dayalogs creates a copy name."
}
},
"required": [
"slug",
"campaign_id"
]
}delete_survey_campaign
Delete an unsent campaign or archive it when it already has send activity.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
}
},
"required": [
"slug",
"campaign_id"
]
}archive_survey_campaign
Archive a survey email campaign so it no longer appears in the active campaign list. Archived state blocks subsequent test sends and queueing until restored. Does not send email or cancel already-queued deliveries.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
}
},
"required": [
"slug",
"campaign_id"
]
}restore_survey_campaign
Restore an archived survey email campaign.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
}
},
"required": [
"slug",
"campaign_id"
]
}preview_survey_campaign
Render campaign content without sending email or queueing recipients. Pass campaign_id for a saved draft, or draft fields plus link_set_id for a transient preview.
View input JSON schema
{
"type": "object",
"properties": {
"campaign_id": {
"type": "integer",
"description": "Optional saved campaign id. If present, draft fields are ignored."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"description": "Campaign display name."
},
"link_set_id": {
"type": "integer",
"description": "Existing multi-link link set id. Required on create."
},
"subject": {
"type": "string",
"description": "Email subject. Required on create. Supports campaign/contact/link placeholders."
},
"sender_identity": {
"type": "string",
"description": "Approved identity key returned by list_sender_identities: shared or custom:<id>. Defaults to shared. Free-form From addresses are not accepted."
},
"sender_name": {
"type": "string",
"description": "Display name for the shared identity. Custom identities use their approved display name."
},
"email_template": {
"type": "string",
"description": "Template selector: base:dayalogs-basic, base:dayalogs-plain or custom:<id>."
},
"template": {
"type": "string",
"description": "Alias for email_template."
},
"email_template_id": {
"type": "integer",
"description": "Ready custom email template id. Alias for custom:<id>."
},
"template_id": {
"type": "integer",
"description": "Alias for email_template_id."
},
"email_template_base_key": {
"type": "string",
"description": "Base template key. Alias for base:<key>."
},
"template_base_key": {
"type": "string",
"description": "Alias for email_template_base_key."
},
"body_html": {
"type": "string",
"description": "Campaign email body HTML. Required on create. Use {{ @link.url }} or Dayalogs will append a link."
},
"html": {
"type": "string",
"description": "Alias for body_html."
},
"body": {
"type": "string",
"description": "Alias for body_html."
},
"body_text": {
"type": "string",
"description": "Optional plain-text body override."
},
"text": {
"type": "string",
"description": "Alias for body_text."
},
"disclaimer_html": {
"type": "string",
"description": "Optional legal/disclaimer HTML. Falls back to account default."
},
"disclaimer": {
"type": "string",
"description": "Alias for disclaimer_html."
},
"disclaimer_text": {
"type": "string",
"description": "Optional plain-text disclaimer override."
},
"include_branding": {
"type": "boolean",
"description": "Whether the campaign includes account/survey branding."
},
"save_account_disclaimer": {
"type": "boolean",
"description": "Also save this disclaimer as the account default."
}
},
"required": [
"slug"
]
}send_survey_campaign_test
Recommended safety step before a real send: deliver one saved campaign only to explicit test addresses, using an isolated public-preview link and a complete temporary personalization clone of the first eligible LinkSet recipient. Sample contact values are rendered, but the real personalized URL/token is never included; this does not mutate the source contact/link or store responses, does not queue LinkSet recipients, and does not start the real send.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"test_emails": {
"type": [
"array",
"string"
],
"description": "Explicit test recipient emails as an array or comma/newline-separated string. LinkSet recipients are not queued.",
"items": {
"type": "string"
}
},
"emails": {
"type": [
"array",
"string"
],
"description": "Alias for test_emails."
},
"test_email": {
"type": "string",
"description": "Single test email alias."
},
"email": {
"type": "string",
"description": "Single test email alias."
}
},
"required": [
"slug",
"campaign_id"
]
}send_survey_campaign
Queue real campaign recipients. First preview and use send_survey_campaign_test, then call this only after the user explicitly requests the real send. scope=auto enforces warmup-first delivery; scope=failed retries only previous failures.
auto, warmup, remaining, failedView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"campaign_id": {
"type": "integer",
"description": "Survey campaign id."
},
"id": {
"type": "integer",
"description": "Alias for campaign_id."
},
"scope": {
"type": "string",
"enum": [
"auto",
"warmup",
"remaining",
"failed"
],
"description": "Real-recipient queue scope. Defaults to auto, which starts with the warmup batch and continues with remaining recipients on a later call. failed retries only previous failures."
}
},
"required": [
"slug",
"campaign_id"
]
}Reviews
12 toolslist_my_review_links
List active survey preview-review rounds where the authorized MCP user is a reviewer, including each personal review URL.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}list_review_rounds
List preview-review rounds for one survey.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
}
},
"required": [
"slug"
]
}create_review_round
Create a preview-review round with participants. Choose review_locale for the reviewer UI and invitations; it defaults to English and is independent from the survey content locale. This returns personal review URLs but does not send emails.
collaborative, privateca, es, enmanual, all_reviewed, date, date_or_allView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"name": {
"type": "string",
"description": "Review round name."
},
"description": {
"type": "string",
"description": "Optional reviewer-facing/internal description."
},
"visibility": {
"type": "string",
"enum": [
"collaborative",
"private"
],
"description": "collaborative lets reviewers see each other comments; private limits visibility."
},
"sender_identity": {
"type": "string",
"description": "Explicit sender key from list_review_rounds.branding_options.senders (shared or custom:id). Defaults to the shared review sender; custom identities require the sender-domain entitlement."
},
"review_hostname": {
"type": [
"string",
"null"
],
"description": "Explicit active hostname from list_review_rounds.branding_options.hostnames. Null uses Dayalogs. Independent from the sender domain."
},
"review_locale": {
"type": "string",
"enum": [
"ca",
"es",
"en"
],
"default": "en",
"description": "Reviewer UI and invitation-email language for the whole round. Defaults to en and is independent from the survey content locale."
},
"close_mode": {
"type": "string",
"enum": [
"manual",
"all_reviewed",
"date",
"date_or_all"
],
"description": "How the round should close."
},
"closes_at": {
"type": "string",
"description": "ISO-8601 date/time required when close_mode is date or date_or_all."
},
"participants": {
"type": "array",
"description": "Review participants. Invitations are not emailed by this tool; use send_review_invitation only after the user authorizes emailing each recipient.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Full reviewer name. Alternative to first_name/last_name."
},
"first_name": {
"type": "string",
"description": "Reviewer first name."
},
"last_name": {
"type": "string",
"description": "Reviewer last name."
},
"email": {
"type": "string",
"description": "Reviewer email."
},
"role": {
"type": "string",
"enum": [
"comment",
"decision"
],
"description": "Reviewer role. Defaults to comment."
}
},
"required": [
"email"
]
}
}
},
"required": [
"slug",
"name",
"participants"
]
}get_review_round
Get one preview-review round, including participants and comments.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
}
},
"required": [
"slug",
"round_id"
]
}update_review_round
Update editable preview-review round metadata such as name, description, visibility, review language and close rules. review_locale controls reviewer UI and invitation language, not survey content. Can overwrite visibility, deadlines and close_mode, restricting contribution access or causing automatic closure. Does not send invitations.
collaborative, privateca, es, enmanual, all_reviewed, date, date_or_allView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
},
"name": {
"type": "string",
"description": "Optional new review round name."
},
"description": {
"type": [
"string",
"null"
],
"description": "Optional reviewer-facing/internal description."
},
"visibility": {
"type": "string",
"enum": [
"collaborative",
"private"
],
"description": "collaborative lets reviewers see each other comments; private limits visibility."
},
"sender_identity": {
"type": "string",
"description": "Explicit sender key from list_review_rounds.branding_options.senders (shared or custom:id). Defaults to the shared review sender; custom identities require the sender-domain entitlement."
},
"review_hostname": {
"type": [
"string",
"null"
],
"description": "Explicit active hostname from list_review_rounds.branding_options.hostnames. Null uses Dayalogs. Independent from the sender domain."
},
"review_locale": {
"type": "string",
"enum": [
"ca",
"es",
"en"
],
"description": "Reviewer UI and invitation-email language for the whole round. Independent from the survey content locale."
},
"close_mode": {
"type": "string",
"enum": [
"manual",
"all_reviewed",
"date",
"date_or_all"
],
"description": "How the round should close."
},
"closes_at": {
"type": [
"string",
"null"
],
"description": "ISO-8601 date/time required when close_mode is date or date_or_all."
}
},
"required": [
"slug",
"round_id"
]
}list_review_comments
List structured comments and replies for one preview-review round.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
}
},
"required": [
"slug",
"round_id"
]
}add_review_participant
Add a participant to an open preview-review round. This returns the personal review URL but does not send an email.
comment, decisionView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
},
"name": {
"type": "string",
"description": "Full reviewer name. Alternative to first_name/last_name."
},
"first_name": {
"type": "string",
"description": "Reviewer first name."
},
"last_name": {
"type": "string",
"description": "Reviewer last name."
},
"email": {
"type": "string",
"description": "Reviewer email."
},
"role": {
"type": "string",
"enum": [
"comment",
"decision"
],
"description": "comment can comment/reply; decision can also decide comments in supported review UIs."
}
},
"required": [
"slug",
"round_id",
"email"
]
}create_review_comment
Create a comment or reply in a preview-review round. User-authorized OAuth tokens infer the author from the logged-in user; organization API keys must pass an author object. A reply to an approved or rejected parent reopens it and clears its decision note, deciding actor and decision timestamp. Does not send invitations or apply survey changes.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
},
"body": {
"type": "string",
"description": "Comment body text."
},
"text": {
"type": "string",
"description": "Alias for body."
},
"kind": {
"type": "string",
"description": "Target kind such as survey, block, question, option or ending."
},
"target_kind": {
"type": "string",
"description": "Alias for kind."
},
"target_id": {
"type": "string",
"description": "Target fragment/question/item id."
},
"element_id": {
"type": "string",
"description": "Alias for target_id."
},
"label": {
"type": "string",
"description": "Human-readable target label."
},
"target_label": {
"type": "string",
"description": "Alias for label."
},
"parent_id": {
"type": "integer",
"minimum": 1,
"description": "Optional parent comment id to create a reply."
},
"author": {
"type": "object",
"description": "Optional author object for organization API keys without user context. Ignored for user-authorized OAuth tokens.",
"properties": {
"name": {
"type": "string",
"description": "Full reviewer name. Alternative to first_name/last_name."
},
"first_name": {
"type": "string",
"description": "Reviewer first name."
},
"last_name": {
"type": "string",
"description": "Reviewer last name."
},
"email": {
"type": "string",
"description": "Reviewer email."
},
"role": {
"type": "string",
"enum": [
"comment",
"decision"
],
"description": "Reviewer role. Defaults to comment."
}
},
"required": [
"email"
]
},
"participant": {
"type": "object",
"description": "Alias for author.",
"properties": {
"name": {
"type": "string",
"description": "Full reviewer name. Alternative to first_name/last_name."
},
"first_name": {
"type": "string",
"description": "Reviewer first name."
},
"last_name": {
"type": "string",
"description": "Reviewer last name."
},
"email": {
"type": "string",
"description": "Reviewer email."
},
"role": {
"type": "string",
"enum": [
"comment",
"decision"
],
"description": "Reviewer role. Defaults to comment."
}
},
"required": [
"email"
]
}
},
"required": [
"slug",
"round_id"
]
}decide_review_comment
Approve or reject a review comment, replacing its prior decision and affecting discussion state visible to round participants, including external reviewers. Applied status is assigned automatically when an approved comment is materialized in a new survey version. Do not decide comments unless the user has explicitly approved each individual decision; requires confirm_decision=true after that approval. This is MCP-only and requires a user-bound token with reviews:decide; organization API keys cannot decide. Does not send invitations or edit the survey itself.
approved, rejectedapproved, rejectedView input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"comment_id": {
"type": "integer",
"minimum": 1,
"description": "Review comment id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for comment_id."
},
"status": {
"type": "string",
"enum": [
"approved",
"rejected"
],
"description": "Decision status to set on the comment."
},
"decision": {
"type": "string",
"enum": [
"approved",
"rejected"
],
"description": "Alias for status."
},
"decision_note": {
"type": "string",
"description": "Optional decision note."
},
"note": {
"type": "string",
"description": "Alias for decision_note."
},
"confirm_decision": {
"type": "boolean",
"description": "Must be true only after the user explicitly approves this specific review comment decision. Without it, the tool returns confirmation guidance and does not mutate the comment."
}
},
"required": [
"slug",
"comment_id",
"status"
]
}send_review_invitation
Send the review invitation email for one existing review participant.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"participant_id": {
"type": "integer",
"minimum": 1,
"description": "Review participant id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for participant_id."
}
},
"required": [
"slug",
"participant_id"
]
}close_review_round
Close a preview-review round, ending the ability of participants to add comments or decisions through personal review access, including external reviewers. Existing comments and access remain as read-only history. Does not send invitation email.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
}
},
"required": [
"slug",
"round_id"
]
}export_review_comments
Export one preview-review round as structured JSON with participants, comments and target positions.
View input JSON schema
{
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Survey slug."
},
"round_id": {
"type": "integer",
"minimum": 1,
"description": "Review round id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for round_id."
}
},
"required": [
"slug",
"round_id"
]
}Branding & styles
11 toolsget_account_branding
Return account-level default respondent-facing branding, including logo and alignment.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}update_account_branding
Update account-level default branding settings such as logo alignment. Overwrites existing account branding configuration.
left, center, rightleft, center, rightView input JSON schema
{
"type": "object",
"properties": {
"logo_alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Account default logo alignment."
},
"alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Alias for logo_alignment."
}
},
"required": []
}upload_account_logo
Upload the account default header logo from base64 content and optional alignment. Replacement deletes the previous physical logo asset after saving the new reference.
left, center, rightleft, center, rightView input JSON schema
{
"type": "object",
"properties": {
"content_base64": {
"type": "string",
"description": "Base64 image content. Data URLs are accepted."
},
"filename": {
"type": "string",
"description": "Original filename for metadata."
},
"mime_type": {
"type": "string",
"description": "image/png, image/jpeg or image/webp. Optional when content_base64 is a data URL."
},
"logo_alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Optional logo alignment to save with the upload."
},
"alignment": {
"type": "string",
"enum": [
"left",
"center",
"right"
],
"description": "Alias for logo_alignment."
}
},
"required": [
"content_base64"
]
}delete_account_logo
Remove the account default header logo.
View input JSON schema
{
"type": "object",
"properties": {},
"required": []
}list_styles
List base and custom styles available in the authenticated account.
View input JSON schema
{
"type": "object",
"properties": {
"include_css": {
"type": "boolean",
"description": "Include full CSS in the response. Defaults to false."
}
},
"required": []
}get_style
Return one custom style by id, optionally including generated CSS.
View input JSON schema
{
"type": "object",
"properties": {
"style_id": {
"type": "integer",
"minimum": 1,
"description": "Custom style id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for style_id."
},
"include_css": {
"type": "boolean",
"description": "Include full CSS. Defaults to true for get_style."
}
},
"required": [
"style_id"
]
}create_style
Create a custom respondent-facing style from a style config, CSS or generator answers.
draft, readyView input JSON schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Style name."
},
"slug": {
"type": "string",
"description": "Optional style slug for update."
},
"status": {
"type": "string",
"enum": [
"draft",
"ready"
],
"description": "Style status. Ready styles can be assigned to surveys."
},
"base_key": {
"type": "string",
"description": "Base style key used by generated configs."
},
"css": {
"type": "string",
"description": "Scoped CSS using only allowed Dayalogs survey selectors."
},
"extra_css": {
"type": "string",
"description": "Validated CSS appended after generated CSS; retained across config regeneration. Empty string removes the extra layer."
},
"config": {
"type": "object",
"description": "Dayalogs style-config JSON object."
},
"theme": {
"type": "object",
"description": "Alias for config."
},
"definition": {
"type": "object",
"description": "Alias for config."
},
"config_json": {
"type": "string",
"description": "Style config encoded as JSON."
},
"answers": {
"type": "object",
"description": "Generator answer object for quick style generation."
}
},
"required": []
}import_style
Import and persist a validated style config or scoped CSS as a custom draft style.
draft, readyView input JSON schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Style name."
},
"slug": {
"type": "string",
"description": "Optional style slug for update."
},
"status": {
"type": "string",
"enum": [
"draft",
"ready"
],
"description": "Style status. Ready styles can be assigned to surveys."
},
"base_key": {
"type": "string",
"description": "Base style key used by generated configs."
},
"css": {
"type": "string",
"description": "Scoped CSS using only allowed Dayalogs survey selectors."
},
"extra_css": {
"type": "string",
"description": "Validated CSS appended after generated CSS; retained across config regeneration. Empty string removes the extra layer."
},
"config": {
"type": "object",
"description": "Dayalogs style-config JSON object."
},
"theme": {
"type": "object",
"description": "Alias for config."
},
"definition": {
"type": "object",
"description": "Alias for config."
},
"config_json": {
"type": "string",
"description": "Style config encoded as JSON."
},
"answers": {
"type": "object",
"description": "Generator answer object for quick style generation."
}
},
"required": []
}clone_base_style
Clone a locked base style into an editable custom style.
draft, readyView input JSON schema
{
"type": "object",
"properties": {
"base_key": {
"type": "string",
"description": "Locked base style key to clone."
},
"name": {
"type": "string",
"description": "Optional new custom style name."
},
"status": {
"type": "string",
"enum": [
"draft",
"ready"
],
"description": "Optional initial status. Defaults to draft."
}
},
"required": [
"base_key"
]
}update_style
Update custom style metadata, status, config or scoped CSS. Overwrites previous custom style content and configuration; locked base styles remain protected.
draft, readyView input JSON schema
{
"type": "object",
"properties": {
"style_id": {
"type": "integer",
"minimum": 1,
"description": "Custom style id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for style_id."
},
"name": {
"type": "string",
"description": "Style name."
},
"slug": {
"type": "string",
"description": "Optional style slug for update."
},
"status": {
"type": "string",
"enum": [
"draft",
"ready"
],
"description": "Style status. Ready styles can be assigned to surveys."
},
"base_key": {
"type": "string",
"description": "Base style key used by generated configs."
},
"css": {
"type": "string",
"description": "Scoped CSS using only allowed Dayalogs survey selectors."
},
"extra_css": {
"type": "string",
"description": "Validated CSS appended after generated CSS; retained across config regeneration. Empty string removes the extra layer."
},
"config": {
"type": "object",
"description": "Dayalogs style-config JSON object."
},
"theme": {
"type": "object",
"description": "Alias for config."
},
"definition": {
"type": "object",
"description": "Alias for config."
},
"config_json": {
"type": "string",
"description": "Style config encoded as JSON."
},
"answers": {
"type": "object",
"description": "Generator answer object for quick style generation."
}
},
"required": [
"style_id"
]
}save_style_as
Duplicate an existing custom style under a new name and optional updated config, CSS or status.
draft, readyView input JSON schema
{
"type": "object",
"properties": {
"style_id": {
"type": "integer",
"minimum": 1,
"description": "Custom style id."
},
"id": {
"type": "integer",
"minimum": 1,
"description": "Alias for style_id."
},
"name": {
"type": "string",
"description": "Style name."
},
"slug": {
"type": "string",
"description": "Optional style slug for update."
},
"status": {
"type": "string",
"enum": [
"draft",
"ready"
],
"description": "Style status. Ready styles can be assigned to surveys."
},
"base_key": {
"type": "string",
"description": "Base style key used by generated configs."
},
"css": {
"type": "string",
"description": "Scoped CSS using only allowed Dayalogs survey selectors."
},
"extra_css": {
"type": "string",
"description": "Validated CSS appended after generated CSS; retained across config regeneration. Empty string removes the extra layer."
},
"config": {
"type": "object",
"description": "Dayalogs style-config JSON object."
},
"theme": {
"type": "object",
"description": "Alias for config."
},
"definition": {
"type": "object",
"description": "Alias for config."
},
"config_json": {
"type": "string",
"description": "Style config encoded as JSON."
},
"answers": {
"type": "object",
"description": "Generator answer object for quick style generation."
}
},
"required": [
"style_id"
]
}Audit
1 toolslist_audit_events
List the authenticated organization’s immutable business audit events. Optionally filter by document type and id.
View input JSON schema
{
"type": "object",
"properties": {
"document_type": {
"type": "string",
"description": "Optional audited document type, for example survey, campaign, link_set or style_theme."
},
"document_id": {
"type": "string",
"description": "Optional document id. Use together with document_type for one record history."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 250,
"description": "Maximum events to return."
}
},
"required": []
}