Appearance
RFIs
Reference for the 13 CryptoComply MCP tools in the RFIs family.
Tools in this group
rfi_bulk_createrfi_bulk_request_optionsrfi_createrfi_follow_uprfi_listrfi_proposal_acceptrfi_proposal_accept_allrfi_proposal_listrfi_proposal_rejectrfi_remindrfi_resendrfi_retrieverfi_revoke
rfi_bulk_create
Read-only: no.
Send the same RFI to many profiles, each as its own RFI emailed to that profile's own address. It asks each profile for its own fields and documents only (see rfi_bulk_request_options), never a related party's, and copies no one; a profile with no email is that row's failure and the rest are still sent. Omit the declaration, reminder and link-lifetime arguments unless the user set them.
Previews first. Each id is processed individually; a row that fails does not stop the others. Answers with the per-row bulk envelope. Each sent row carries its rfi_id.
Parameters
organization_id(int, required) — Organization scope.profile_ids(list, required) — Profile ids (from profile_list) to send to.request_text(str, required) — Body of the request, shown to the client in the email.requested_fields(list[str | dict[str, typing.Any]] | None, optional) — Field keys the profile can be asked (seerfi_bulk_request_options; custom fields included), related-party section keys on an entity (ubo,control_person,compliance_officer,parent_entity,additional),walletsfor one blockchain address, or {'key', 'profile_id'} for a related party's.requested_documents(list[str | dict[str, typing.Any]] | None, optional) — Document type codes (e.g. 'PROOF_OF_ADDRESS', 'IDENTIFICATION'), or {'document_type', 'profile_id'} for a related party's.custom_questions(list[str] | None, optional) — Free-text questions, each a required answer on the form (max 500 chars each).acknowledgment(str | None, optional) — The declaration the contact must confirm before submitting. Omit it to ask the default declaration (information true, complete and not falsified); pass an empty string for none.first_reminder_days(int | None, optional) — Days after sending to remind an unanswered RFI automatically; null for none. Must be less than link_expiry_days minus expiry_reminder_days.expiry_reminder_days(int | None, optional) — Days before the link expires to warn an unanswered RFI; null for none. Must be less than link_expiry_days.link_expiry_days(int, optional) — Days the RFI's link stays open, on the first send and on every resend.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_bulk_request_options
Read-only: yes.
What a bulk RFI to these profiles can ask: the fields and documents every one of them can be asked, by section. Profiles of another type or group are offered different items, so only the shared ones are listed; left_out counts the rest.
Parameters
organization_id(int, required) — Organization scope.profile_ids(list, required) — Profile ids (from profile_list) to send to.
rfi_create
Read-only: no.
Send a Request-For-Information to a client: a public link is emailed asking for profile fields, documents, a wallet and/or answers, compiled into the form the client fills — exactly what is asked. Anything can be asked of a related party instead. When the client answers, documents are filed, wallets and new related parties are added and screened, and answers to questions go to a note, all at once; only answers to profile fields wait for approval. Call it directly: the dry run checks every name and its error says what is wrong. Omit the declaration, reminder and link-lifetime arguments unless the user set them.
Previews first. Confirming creates the RFI and sends the emails its preview names.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id (from profile_list).request_text(str, required) — Body of the request, shown to the client in the email.requested_fields(list[str | dict[str, typing.Any]] | None, optional) — Field keys the profile can be asked (seerfi_bulk_request_options; custom fields included), related-party section keys on an entity (ubo,control_person,compliance_officer,parent_entity,additional),walletsfor one blockchain address, or {'key', 'profile_id'} for a related party's.requested_documents(list[str | dict[str, typing.Any]] | None, optional) — Document type codes (e.g. 'PROOF_OF_ADDRESS', 'IDENTIFICATION'), or {'document_type', 'profile_id'} for a related party's.additional_recipients(list[str] | None, optional) — Emails copied (Cc) on the request, its reminders and resends.custom_questions(list[str] | None, optional) — Free-text questions, each a required answer on the form (max 500 chars each).acknowledgment(str | None, optional) — The declaration the contact must confirm before submitting. Omit it to ask the default declaration (information true, complete and not falsified); pass an empty string for none.first_reminder_days(int | None, optional) — Days after sending to remind an unanswered RFI automatically; null for none. Must be less than link_expiry_days minus expiry_reminder_days.expiry_reminder_days(int | None, optional) — Days before the link expires to warn an unanswered RFI; null for none. Must be less than link_expiry_days.link_expiry_days(int, optional) — Days the RFI's link stays open, on the first send and on every resend.send_email(bool, optional) — False creates the link without emailing anyone; the person sharesrfi_url.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_follow_up
Read-only: no.
Send a follow-up RFI: open a new request round for the same profile, linked to a prior RFI as its parent. Use after a client responded but more information is still needed.
Omit the declaration, reminder and link-lifetime arguments unless the user set them.
Previews first. Confirming creates the follow-up and sends the emails its preview names.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).request_text(str, required) — Body of the request, shown to the client in the email.requested_fields(list[str | dict[str, typing.Any]] | None, optional) — Field keys the profile can be asked (seerfi_bulk_request_options; custom fields included), related-party section keys on an entity (ubo,control_person,compliance_officer,parent_entity,additional),walletsfor one blockchain address, or {'key', 'profile_id'} for a related party's.requested_documents(list[str | dict[str, typing.Any]] | None, optional) — Document type codes (e.g. 'PROOF_OF_ADDRESS', 'IDENTIFICATION'), or {'document_type', 'profile_id'} for a related party's.additional_recipients(list[str] | None, optional) — Emails copied (Cc) on the request, its reminders and resends.custom_questions(list[str] | None, optional) — Free-text questions, each a required answer on the form (max 500 chars each).acknowledgment(str | None, optional) — The declaration the contact must confirm before submitting. Omit it to ask the default declaration (information true, complete and not falsified); pass an empty string for none.first_reminder_days(int | None, optional) — Days after sending to remind an unanswered RFI automatically; null for none. Must be less than link_expiry_days minus expiry_reminder_days.expiry_reminder_days(int | None, optional) — Days before the link expires to warn an unanswered RFI; null for none. Must be less than link_expiry_days.link_expiry_days(int, optional) — Days the RFI's link stays open, on the first send and on every resend.confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_list
Read-only: yes.
List Request-For-Information records, most recent first: one profile's, or the whole organization's when profile_id is omitted. Each row names its profile. Name a status by its status_label and what it asks by each requested[].label. delivery link_only: never emailed, so say its link was created, not sent. Use when the analyst wants to see what KYC info has been asked of a client.
Parameters
organization_id(int, required) — Organization scope.profile_id(int | None, optional) — Profile id (from profile_list). Omit for every profile.status(Optional, optional) — Filter by status.sent_after(datetime.datetime | None, optional) — Only include RFIs sent at or after this UTC timestamp.sent_before(datetime.datetime | None, optional) — Only include RFIs sent before this UTC timestamp.sort_by(Literal, optional) — '-' prefix = descending.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
rfi_proposal_accept
Read-only: no.
Accept one staged RFI item, writing the client's value to the field of the profile or related party it was asked of (on older RFIs it may instead create a related party or file a document; a QUESTION item only records the answer). A decision is final; the first one on a response moves the profile to Under Review, and a changed name or identity field rescreens whose field it is.
Previews first.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).proposal_id(int, required) — Staged item id (from rfi_proposal_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_proposal_accept_all
Read-only: no.
Accept every PENDING staged item on an RFI in one call, all or none: if one can't be applied, none is. Each has the effects of rfi_proposal_accept. Use after reviewing the items with rfi_proposal_list; reject any you don't want first, then accept the rest here.
Previews first.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_proposal_list
Read-only: yes.
List the staged items from an RFI's responses awaiting adjudication (the "limbo"). Only answers to profile fields wait here: each is a PENDING item that must be accepted (which applies it) or rejected. Everything else was applied on submission (parties created and screened, documents filed, wallets added, answers noted); the first page lists it under applied. Filter by status for PENDING work, ACCEPTED, or REJECTED.
Each row is {id, item_type, field_key, for_profile, for_profile_name, proposed_value, previous_value, status, rationale, decided_at, created_at}; other item_types than FIELD are from older RFIs. A FIELD with for_profile set was asked of that related party, and accepting it writes to the party, not to this profile. Compare proposed_value with the owner's live value via profile_retrieve, then adjudicate with rfi_proposal_accept / rfi_proposal_reject / rfi_proposal_accept_all.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).status(Optional, optional) — Filter by adjudication status. Omit for all.limit(int, optional) — Max results.offset(int, optional) — Results to skip.
rfi_proposal_reject
Read-only: no.
Reject one staged RFI item with a rationale — the client's submitted value is NOT applied to the profile; the item is kept as evidence. Use when the answer is wrong, incomplete, or a false match.
Previews first.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).proposal_id(int, required) — Staged item id (from rfi_proposal_list).rationale(str, optional) — Why the item is rejected (recorded on the audit trail).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_remind
Read-only: no.
Remind an RFI: re-send the existing link as a reminder. The link and expiry are unchanged (unlike resend), only a reminder email goes out. Rejected once the client responded, if the link was revoked or has expired, or if the RFI was created as a link only.
Previews first.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_resend
Read-only: no.
Resend an RFI: email a fresh link to its contact, copying its additional recipients. The new link stays open as many days as the first, the old link stops working, and the automatic reminders start over. Rejected once the client has responded, if the link was revoked (send a new RFI instead), or if the RFI was created as a link only (share that link).
Previews first. Confirming rotates the link and emails it.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).confirm_token(str | None, optional) — From this tool's preview; omit to get one.
rfi_retrieve
Read-only: yes.
Get full details of one RFI: request body, requested fields/documents, ad-hoc custom_questions, recipient(s), and the client's response payload (field answers + additional information) when present, with the new related parties and wallets it already added (applied_parties, applied_wallets).
Parameters
organization_id(int, required) — Organization scope.rfi_id(int, required) — RFI id (from rfi_list).profile_id(int | None, optional) — Profile id the RFI belongs to.
rfi_revoke
Read-only: no.
Revoke an RFI's public link: it stops working and the contact sees the request is no longer available. Use when it went to the wrong contact or is no longer needed. This can't be undone. To ask again, send a new RFI. The contact isn't told, and the profile's review status doesn't change. The reason stays internal. Rejected once the client has responded.
Previews first.
Parameters
organization_id(int, required) — Organization scope.profile_id(int, required) — Profile id the RFI belongs to.rfi_id(int, required) — RFI id (from rfi_list).reason(str, required) — Why the link is revoked, at least 10 characters.confirm_token(str | None, optional) — From this tool's preview; omit to get one.