Appearance
Intake
Reference for the 33 CryptoComply MCP tools in the Intake family.
Tools in this group
intake_form_apply_sourceintake_form_authoring_rulesintake_form_catalogintake_form_choice_listintake_form_createintake_form_draft_changesintake_form_draft_discardintake_form_draft_editintake_form_draft_previewintake_form_draft_retrieveintake_form_draft_updateintake_form_email_logo_updateintake_form_email_previewintake_form_email_retrieveintake_form_email_updateintake_form_invitation_linkintake_form_invitation_listintake_form_invitation_match_previewintake_form_invitation_remindintake_form_invitation_resendintake_form_invitation_revokeintake_form_invitation_sendintake_form_listintake_form_publishintake_form_retrieveintake_form_send_test_emailintake_form_settings_updateintake_form_style_retrieveintake_form_style_updateintake_form_submission_answersintake_form_submission_dismissintake_form_submission_listintake_form_submission_retrieve
intake_form_apply_source
Read-only: no.
Replace the form's whole draft with another existing form's published definition — the 'use another form as a template' override. Everything in the current draft is replaced, not merged: to bring over one page or section, read the source with intake_form_draft_retrieve and add it with intake_form_draft_edit instead. The source must be a different form of the SAME target (profile vs address) in the same org, and every field/section it uses must be offered by this form's group — otherwise it returns a /source_form_id error: the source's group exposes a field this form's group hides. Edit further with intake_form_draft_edit afterwards.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).source_form_id(int, required) — The form whose published definition to copy into this draft (same org, same target).expected_updated_at(datetime, required) — Theupdated_atfrom the latest intake_form_draft_retrieve, or from your last save of this draft. If someone saved the draft since, the edit is refused: read the draft again.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_authoring_rules
Read-only: yes.
The intake form authoring contract: definition shape, hard limits, condition rules and publish requirements. Served from the same constants the validator enforces, so it is always current — call it once before authoring instead of guessing. The theme keys live in intake_form_style_retrieve.
Parameters
organization_id(int, required) — Organization scope.
intake_form_catalog
Read-only: yes.
The fields a question may link to, grouped by profile section — every question's name must be one of these keys; keys are never invented. With form_id: what that form may ask — its group's layout filtered to visible, externally-requestable fields (org custom fields included), dual if its draft is. Without it (no form needs to exist yet): the whole registry, or one group's layout with group_id, for profile_type. If a field you need is missing, unhide it with group_sections_edit or add an org custom field with custom_field_create (inspect the raw layout via group_field_schema_retrieve).
Returns {version, profile_type, is_dual, sections, repeatable_sections, attachments, notes, group_selector, profile_type_selector}; what each part holds is in intake_form_authoring_rules (catalog_shape).
Pass dual=true for the union catalog (both branches, each field carrying offered_in) — on a form, to discover entity-branch fields before linking the selector. is_dual reports which was built.
Parameters
organization_id(int, required) — Organization scope.form_id(int | None, optional) — Intake form id (from intake_form_list). The form whose catalog to return; omit before a form exists.group_id(int | None, optional) — Group id (from group_list). Withoutform_id: narrow to its field layout; omit for the whole registry.profile_type(Literal, optional) — Withoutform_id: which branch to answer for; ignored whendualis true.dual(bool, optional) — Return both branches' fields in one union catalog. Default false: on a form, the catalog matches the saved draft's duality.
intake_form_choice_list
Read-only: yes.
For the intake form preview only: the options each choicesByUrl in a form's draft loads.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_create
Read-only: no.
Create an intake form. target chooses what submissions create: PROFILE (default) a profile with its related parties and wallets, BLOCKCHAIN_ADDRESS standalone addresses. target and form_type can't change later; the group and the profile-type and blockchain defaults can (intake_form_settings_update). profile_type, group_id and default_blockchain are fallbacks a submitter's answer overrides (intake_form_authoring_rules, form_defaults).
The draft starts blank, or pass source_form_id to clone a form of this organization, target included; a clone copies the source's published questions, not its unpublished edits. Nothing is public until the first publish.
Previews first.
Parameters
organization_id(int, required) — Organization scope.name(str, required) — Form name shown in the org's form list.form_type(Literal, optional) — OPEN (default): anyone with the link. INVITATION_ONLY: emailed single-use invitations.group_id(int | None, optional) — Group id (from group_list). The group whose field layout seeds the form and where submissions land by default. Omit to create the form with no fixed group: the form must then ask the profile-group question — add the group selector to the definition — before it can publish (see intake_form_authoring_rules.form_defaults).profile_type(Optional, optional) — Profile type submissions create. Omit for a dual form — the default: it opens by asking the submitter which kind they are, and their answer decides (see intake_form_authoring_rules.dual_forms). Pass individual or entity to pin the type.target(Literal, optional) — What submissions create: PROFILE (default) builds a profile + related parties + wallets; BLOCKCHAIN_ADDRESS builds standalone blockchain addresses (no profile). Immutable.source_form_id(int | None, optional) — Clone this same-org form's published definition into the new draft (the new form inherits its target).default_blockchain(Optional, optional) — Fallback blockchain code (e.g. BTC, ETH, SOL) applied to any submitted wallet row that carries no chain of its own, so wallets need no blockchain question when they should all land on this default. Omit for no default — every wallet question then asks the chain per row (a clone inherits its source's).slug(str | None, optional) — The public Link segment (letters, numbers, and hyphens), unique per platform. Links are case-insensitive. Omit to auto-generate an opaque one.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_draft_changes
Read-only: yes.
For the form changes view only: the draft beside the published definition, with the catalog that names their fields.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_draft_discard
Read-only: no.
Reset the form's draft to the last published definition, throwing away all draft changes (null draft if the form was never published).
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).expected_updated_at(datetime, required) — Theupdated_atof the draft the person agreed to throw away (from intake_form_draft_retrieve); a draft saved since is kept instead of discarded.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_draft_edit
Read-only: no.
Edit the form's draft by operations, sending only the change; whatever you don't name (an embedded logo, verbatim consent or legal HTML) is kept as it is. Prefer it to intake_form_draft_update once the form has content.
operations apply atomically: one invalid operation rejects the batch with an /operations/{index} pointer error. Read the draft with intake_form_draft_retrieve first for the page and element names, and pass its updated_at as expected_updated_at. The operation shapes are in intake_form_authoring_rules (draft_edit_operations).
Previews first. The draft stays private until published. There is no undo: intake_form_draft_discard returns the draft to the live version, dropping every unpublished edit, not just this one.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).operations(list, required) — Ordered edit operations (see the tool description); applied atomically.expected_updated_at(datetime, required) — Theupdated_atfrom the latest intake_form_draft_retrieve, or from your last save of this draft. If someone saved the draft since, the edit is refused: read the draft again.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_draft_preview
Read-only: yes.
Validate a candidate definition WITHOUT saving it — the same normalization and pointer errors a save would produce, with the stored draft untouched. Use it to check work in progress before intake_form_draft_update, or to preview a change you may abandon.
The full-legal-name publish requirement is not applied here; it gates saving and publishing, not previewing.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).draft_survey(dict, required) — The COMPLETE candidate definition to validate.
intake_form_draft_retrieve
Read-only: yes.
Read the form's editable draft definition plus the publish state.
Always call this before intake_form_draft_update — the returned updated_at is the optimistic-lock token the update requires, and edits must be applied on top of this exact definition (modify it, don't rebuild from memory). draft_is_valid: false means the stored draft no longer validates against the live catalog (e.g. a linked custom field was deleted); saving will surface pointer errors.
defaults reports the form's submission-level defaults {profile_type, blockchain, target, group} (group is {id, name} or null) — fallbacks a matching question overrides per submission. See intake_form_authoring_rules.form_defaults.
placeholders maps each question to the hint its empty answer box shows, with source field (the field's own) or form (this form's override).
survey_style is the form's theme with the house defaults filled in. A logo uploaded in the editor shows as 'data:image/embedded' — pass it back unchanged to keep the logo.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_draft_update
Read-only: no.
Replace the form's whole draft definition: send the complete document. For a form that already has content use intake_form_draft_edit, which keeps what you don't name; reproducing a long consent or the embedded logo here risks corrupting it. Read the draft with intake_form_draft_retrieve, change it, send it all back.
Previews first. The draft stays private until published. There is no undo: intake_form_draft_discard returns the draft to the live version, dropping every unpublished edit, not just this one. A failed validation answers pointer errors such as /pages/0/elements/2/name, in the preview as in the save.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).draft_survey(dict, required) — The complete survey to store as the draft (see intake_form_authoring_rules for the shape).expected_updated_at(datetime, required) — Theupdated_atfrom the latest intake_form_draft_retrieve, or from your last save of this draft. If someone saved the draft since, the edit is refused: read the draft again.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_email_logo_update
Read-only: no.
Use the form's own logo (the one set in the Builder) as the header logo of its emails. Hosts a copy where mail clients can load it and sets it in the form's shared email branding, so the invitation and its reminder both show it. Applies to every email sent from now on; other email settings are kept. To use a different image, the user uploads it in the editor's Email tab (Branding).
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).logo_width(int | None, optional) — Logo width in px (40-480); omit to keep the current width.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_email_preview
Read-only: yes.
Render one email the form sends to {subject, html, resolved, effective, email_types} with sample data, without saving — the same server-side render the recipient gets, shown to the person. Use it to check copy/branding before intake_form_email_update.
email_template_overrides is optional: omit it to preview what is currently saved, or pass a whole candidate blob to preview an unsaved edit. resolved is the explicit overrides only for the chosen email_type; effective is that config with the built-in defaults filled in.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).email_type(Literal, required) — Which email to render.email_template_overrides(dict[str, typing.Any] | None, optional) — Candidate override blob to preview. Omit to render the saved overrides.
intake_form_email_retrieve
Read-only: yes.
The form's saved invitation-email overrides and what each email type it sends resolves to. Read it before intake_form_email_update. resolved: the explicit overrides only (org default ← form override, branding included), empty where the type inherits. effective: that config with the built-in defaults filled in — the value each field actually uses. inherited: what each type would use with no form override (built-in ← org default) — what resetting a field returns it to. subjects: each subject as the recipient reads it; quote these to the user, never a raw template. Returns {form_id, form_type, email_types, email_template_overrides, resolved, effective, inherited, subjects}.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_email_update
Read-only: no.
Customize the form's invitation emails. Applies immediately to every email sent from now on — no publish cycle. Updated key by key: keys you send are set, keys you leave out are kept, and a key sent as null returns to the inherited value (BRANDING: null or ""). An email type sent as {} returns to the inherited wording entirely. Shape and caps: intake_form_authoring_rules (email_template). The preview renders each email it changes, before and after.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).email_template_overrides(dict, required) — Per-email-type changes, e.g. {"INVITATION_PRIVATE": {"heading": "Welcome ", "subject": null}, "BRANDING": {"accent_color": "#1a73e8"}}.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_invitation_link
Read-only: no.
Change the profile an invitation's form is prefilled from (INVITATION_ONLY forms that create profiles): profile_id is another of the recipient's matches (from intake_form_invitation_match_preview), or null for no prefill. Only until the invitee opens the link; refused once opened, answered or revoked, or when that profile already has an active invitation for the form. Both profiles' histories record the change.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).invitation_id(str, required) — Invitation id (from intake_form_invitation_list).profile_id(int | None, required) — Profile id (from profile_list). The match to prefill from, or null for no prefill.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_invitation_list
Read-only: yes.
List a form's invitations, who has been invited to it (INVITATION_ONLY forms), newest first. Each row carries its lifecycle status and status_label (Expired once an unanswered link lapses), is_expired, reminder count, the open/submit timestamps, submission_id once submitted, and profile_id, the profile its form is prefilled from; can_change_profile says intake_form_invitation_link may still change it (until the link is opened).
OPEN forms create no invitations (their link is shared), so this is empty for them.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).status(Optional, optional) — Filter by lifecycle status.email_contains(str | None, optional) — Case-insensitive substring match on email.sort_by(Literal, optional) — '-' prefix = descending.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
intake_form_invitation_match_preview
Read-only: yes.
Match recipients against the organization's profiles before inviting them to an INVITATION_ONLY form that creates profiles, sending nothing: the email exactly, the name in part. Each row has no match, one match or several, with each match's group, email and status, or why it is skipped (a repeated row, an address already invited, or one that already answered unless send_again). A lone match the email agrees on prefills the form by default; several, or one by name only, give none and needs_choice: choose one with link_profile_id, or null for no prefill. Recipients are {email, recipient_name?} or {profile_id}; add link_profile_id (one of the row's matches, or null for no prefill) or send_again: true to change a row. Pass the same recipients and the returned preview_hash to intake_form_invitation_send.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).recipients(list, required) — Recipients, as described above.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
intake_form_invitation_remind
Read-only: no.
Email a reminder for each given invitation (INVITATION_ONLY forms). Each reminder restarts that person's link for the form's invitation validity (invitation_ttl_days, capped at closes_at), so an expired invitation works again. The form's CC addresses get a copy. Only invitations that were sent or opened qualify; the call is all-or-nothing — if any id is pending, undelivered, answered, revoked or from another form, nothing is sent and pointer errors come back.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).invitation_ids(list, required) — Invitation ids (from intake_form_invitation_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_invitation_resend
Read-only: no.
Email one invitation again (INVITATION_ONLY forms) — e.g. the first send bounced or the person lost it. The link stays the same and its validity restarts (invitation_ttl_days, capped at closes_at), so it also revives an expired or undelivered invitation. The form's CC addresses get a copy. An answered or revoked invitation can't be resent.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).invitation_id(str, required) — Invitation id (from intake_form_invitation_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_invitation_revoke
Read-only: no.
Revoke one invitation (INVITATION_ONLY forms): its link stops working immediately. The person is not told — their link just says it is no longer valid — and the same address can be invited again later. An answered invitation can't be revoked; revoking a revoked one does nothing.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).invitation_id(str, required) — Invitation id (from intake_form_invitation_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_invitation_send
Read-only: no.
Invite people to fill in the form: email it to recipients. INVITATION_ONLY: each gets a single-use link valid for invitation_ttl_days (capped at closes_at); OPEN: the shared link. CC addresses get a copy; you are notified when all have gone out. Up to 1000 recipients.
On an INVITATION_ONLY form that creates profiles, run intake_form_invitation_match_preview first and pass the same recipients with its preview_hash: skipped rows get nothing, a needs_choice row needs link_profile_id, changed matches are refused. The invitee sees the profile's values filled in, ID numbers only as a masked hint and documents on file, both keepable; consents stay blank. Their answer creates no profile: it is held as a Duplicate Submission alert on that profile.
The form must be published, enabled and open. A malformed, repeated or already-invited address is a pointer error and nothing is sent. Returns sending (not yet delivered), skipped, prefilled, summary.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).recipients(list, required) — Recipients, e.g. [{"email": "a@b.com", "recipient_name": "Alice"}].preview_hash(str | None, optional) — From intake_form_invitation_match_preview, with the same recipients.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_list
Read-only: yes.
List the organization's intake forms (public KYC onboarding forms), newest first.
has_unpublished_changes: true means the draft differs from what the public link serves. published_at: null means the form was never published through the editor (a new form awaiting its first publish).
Parameters
organization_id(int, required) — Organization scope.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
intake_form_publish
Read-only: no.
Publish the form's draft: the public link starts serving this version immediately.
Previews first. The dry run checks the draft at publish strictness and lists what would refuse it, so problems surface before the user confirms; fix them before asking.
Once published, offer the user test_link to try the form (it creates nothing) and intake_form_send_test_email to check the email.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).expected_updated_at(datetime, required) — Theupdated_atof the draft the person reviewed (from intake_form_draft_retrieve); a draft saved since is rejected instead of published.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_retrieve
Read-only: yes.
One intake form's full settings and status — the read that pairs with intake_form_settings_update.
Returns {id, name, enabled, form_type, target, slug, public_link, test_link, closes_at, cc_emails, invitation_ttl_days, default_profile_type, default_blockchain, group, is_open, closed_reason, has_unpublished_changes, published_at, invitation_stats, submission_stats, created_at, updated_at} plus form_type_label, target_label, default_profile_type_label, default_blockchain_label and availability_label — describe the form with these labels, never the codes or booleans. public_link is the URL submitters open; it serves the published survey only while the form is accepting responses (availability_label says why not). test_link opens the form's current draft in the app to try it: a submission there only shows what it would create, and creates nothing. invitation_stats is null for OPEN forms — they have one shared link, not per-recipient invitations.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_send_test_email
Read-only: no.
Send one of the form's live emails to YOURSELF (the requesting user's address) to preview the real template and delivery: email_type, one the form sends (default: its invitation; a reminder goes to a test invitation). Because it is a test, only you receive it: the form's CC addresses are not copied; include_cc: true also sends it to them.
What the emailed link does depends on the form. INVITATION_ONLY: it is a test invitation, and submitting it creates nothing. OPEN: it is the form's real public link — filling it in creates a real profile, like any submission, and notifies the team; say so before the user fills it. To try either kind without creating anything, give the user test_link (returned here): it opens the draft in the app and shows what a submission would create. The form must be published, enabled and not past closes_at.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).include_cc(bool, optional) — Also send the test to the form's CC addresses.email_type(Optional, optional) — Which email to send; omit for the invitation.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_settings_update
Read-only: no.
Update a form's settings (the editor's Settings tab). Set any of name, enabled, slug, invitation_ttl_days, closes_at (+clear_closes_at), cc_emails, and the submission defaults group_id (+clear_group), default_profile_type, and default_blockchain (+clear_default_profile_type / clear_default_blockchain) — see each arg for its constraints. Omit a field to leave it unchanged; pass at least one.
target and form_type are immutable (fixed at creation, not editable here). Clearing a default requires the matching question at publish (see intake_form_authoring_rules.form_defaults); reassigning group_id requires the new group to offer every field the definition links (verified at publish).
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).name(str | None, optional) — Form name in the org's list.enabled(bool | None, optional) — Public on/off switch. Disabling closes the link without unpublishing.slug(str | None, optional) — The public link segment (letters, numbers, hyphens), unique per platform. Links are case-insensitive: changing only the capitalization keeps the old link working; any other change breaks it, including in emails already sent.invitation_ttl_days(int | None, optional) — Days an invitation stays valid (INVITATION_ONLY forms).cc_emails(list[str] | None, optional) — Addresses CC'd on every invitation/reminder (max 10).closes_at(datetime.datetime | None, optional) — Hard cutoff (UTC) after which the form stops accepting access.clear_closes_at(bool, optional) — True removes the existing closes_at deadline.default_profile_type(Optional, optional) — Fix the profile type submissions create. Clearing it requires the profile-type selector.clear_default_profile_type(bool, optional) — True removes the default profile type (form must then link the selector to publish).default_blockchain(Optional, optional) — Fallback chain (e.g. BTC, ETH, SOL) for wallet rows. Clearing it makes a blockchain question required.clear_default_blockchain(bool, optional) — True removes the default blockchain (wallet sections must then ask the chain).group_id(int | None, optional) — Group id (from group_list). Becomes the form's fixed landing group. The new group must offer every field the definition links (checked at publish).clear_group(bool, optional) — True removes the fixed group. Only valid when the definition links the group selector or the form is BLOCKCHAIN_ADDRESS-target; a profile form otherwise needs a group to land profiles.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_style_retrieve
Read-only: yes.
The form's current survey style (theme) plus the only reference for every style key — read it before intake_form_style_update to see the live theme and edit from it. When the user wants a custom theme, show them keys and font_families and ask for their hex colors rather than inventing them.
Returns {form_id, survey_style, effective, defaults, keys, properties, combinations, color_format, font_size_range, font_families, font_weights, notes}: survey_style is the form's stored theme (only the keys the author set), effective is that theme with the house defaults filled in for every unset key (what the public page actually renders), defaults is the house baseline, keys documents what each style key visually controls, properties is the granular per-key metadata (control type, group, default, range/choices, SurveyJS variables), and combinations lists the keys best set together (e.g. a header band with a light title).
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).
intake_form_style_update
Read-only: no.
Replace the form's survey style (theme). Applies to the live public page immediately — no publish cycle.
Read the current theme first with intake_form_style_retrieve (the reference for every key and font) and edit from it. When theming to the user's brand, ask the user for their hex colors rather than inventing them. Omitted keys fall back to defaults; unknown keys are rejected with pointer errors.
Previews first.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).survey_style(dict, required) — Style object (keys documented by intake_form_style_retrieve), e.g. {"button": {"background": "#1ab394"}}.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_submission_answers
Read-only: yes.
For the submission view only: the form a submission was answered on, its theme, and the answers with a link to each uploaded file.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).submission_id(int, required) — Submission id (from intake_form_submission_list).
intake_form_submission_dismiss
Read-only: no.
Previews first.
Dismiss a FAILED submission: mark it reviewed and closed — it will not be processed. Terminal; the submission leaves the form's failed count but its answers stay readable via intake_form_submission_retrieve. Only a failed submission can be dismissed (ready/processing are still in flight, success already created its records).
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).submission_id(int, required) — Submission id (from intake_form_submission_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
intake_form_submission_list
Read-only: yes.
List a form's submissions (the raw answer JSON is omitted), newest first. Each row carries its processing status and status_label (Dismissed: reviewed, won't be processed; Held: waiting on its Duplicate Submission alert, no profile yet), the primary_profile_id once a profile is created, the submitter's invitation_email for INVITATION_ONLY forms, and the timestamps.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).status(Optional, optional) — Filter by processing status: R ready, P processing, F failed, S success, D dismissed, H held.sort_by(Literal, optional) — '-' prefix = descending.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
intake_form_submission_retrieve
Read-only: yes.
Retrieve one submission's full detail: the parsed answers the submitter provided — field values including full_legal_name, related parties (each with their own fields), wallets, attachments, and notes. Use this to extract a submission's data; intake_form_submission_list carries only metadata.
A consent is a custom field like any other: its statements land in the created profile's custom_fields under the consent's key, each recording the copy shown and whether it was accepted.
Answers are parsed against the form's current published survey. A legacy submission (its keys predate the form's last publish) is NOT parsed — is_legacy: true, and raw_answers is returned so its data is never lost. raw_answers is also included for any submission that can't be parsed; parse_issues explains why. Set include_raw=true to always include the verbatim JSON.
Parameters
organization_id(int, required) — Organization scope.form_id(int, required) — Intake form id (from intake_form_list).submission_id(int, required) — Submission id (from intake_form_submission_list).include_raw(bool, optional) — Also return the verbatim submitted JSON asraw_answers.