Server definition
- Hash
- sha256:b40e429595900c061b98b1333bfc5475a74217f1d843167045c9cb6a80cf44f7
- What it is
- What a remote MCP server returned when asked what it offers: 11 tools
The blob, as servednamed by its sha256
{
"instructions": "Help users complete signing tasks in a natural conversation. Resolve document, template and contact names with the find tools; reuse returned IDs across turns instead of asking the user for technical identifiers. Ask a concise question only when a required detail is missing or matches are ambiguous. An explicit request to send, remind or delete authorizes that specific action and recipient; do not ask for the same confirmation again. Explain outcomes in plain language, including retained documents after failures, without dumping IDs or base64 into the conversation. Use assinafy_find_documents action list to find a document and get to inspect its status, assignment, signers and artifacts. For a new PDF, assinafy_request_signatures action from_pdf handles upload and email invitations. If the user wants to prepare without sending, use assinafy_prepare_document action upload or rename; later use request_signatures action from_document with confirmed signer IDs from assinafy_find_signers or assinafy_save_signer. Never upload again when a document ID is already available, and inspect for an existing assignment before requesting signatures. For saved templates, assinafy_find_templates exposes roles and page placements. Use assinafy_check_fields to match labels or field names to placement field_id, then validate values and check every success result. Fill editor_fields with field_id/string-value pairs and each role with a known signer or authorized name/email. Use request_signatures action from_template; template authoring is done in Assinafy. For follow-up, inspect the current document and pending signer first. assinafy_follow_up_assignment action resend sends one authorized reminder; set_expiration changes its expiry. Invitations can spend document allowance and notification credits; never repeat a send because progress is unchanged. Use find_documents actions activities and notifications for delivery troubleshooting. Keep the document ID after a partial failure and inspect its assignment before retrying any write. A 100% signing summary may still be certificating: use bounded status checks and download the certificated artifact only when ready. People complete their own signatures in Assinafy. Authenticate through Assinafy OAuth2 browser consent when a workspace tool requires it. Never request API keys or tokens in tool arguments. The connection chooses the workspace. Reconnect or repeat consent for missing permissions; never work around OAuth with direct credentials.",
"tools": [
{
"description": "Prepare template values or collect field placements. list finds reusable definitions; get inspects one field; validate checks values without creating a document. Match definitions to template placement field_id, ask about ambiguous names, and check each validation result's success before requesting signatures.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "List the field definitions of a workspace.\n\nWhen `include_standard` is enabled, records of type `signature`, `initial` and `signatureDate` are also returned.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"list"
],
"type": "string"
},
"include_inactive": {
"description": "Include inactive field definitions.",
"type": "boolean"
},
"include_standard": {
"description": "Include standard field types (signature, initial, signatureDate).",
"type": "boolean"
}
},
"required": [
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Retrieve a single field definition.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"get"
],
"type": "string"
},
"field_id": {
"description": "The field ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"field_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Validate one or more input values against existing field definitions without creating a document or requesting signatures. Supply field/value pairs in values; the server sends the documented JSON array.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"validate"
],
"type": "string"
},
"values": {
"description": "Field/value pairs to validate; sent to Assinafy as the JSON request array.",
"items": {
"additionalProperties": false,
"properties": {
"field_id": {
"description": "The field definition ID.",
"type": "string"
},
"value": {
"description": "The input value to validate."
}
},
"required": [
"field_id",
"value"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"values",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"list",
"get",
"validate"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_check_fields",
"outputSchema": null
},
{
"description": "Delete a document only when the user's instruction explicitly authorizes deletion. Inspect its current state first; Assinafy enforces which documents may be deleted.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"document_id": {
"description": "unique document ID to delete",
"type": "string"
}
},
"required": [
"document_id"
],
"type": "object"
},
"name": "assinafy_delete_document",
"outputSchema": null
},
{
"description": "Retrieve bytes only when needed. artifact downloads original (default), certificated, certificate-page, pades or bundle; wait for certificated status and artifact availability before downloading the signed PDF. page downloads a preview using a page_id returned by find_documents. Results contain base64 bytes.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "Download a document artifact as base64.",
"properties": {
"action": {
"enum": [
"artifact"
],
"type": "string"
},
"artifact": {
"description": "original (default), certificated, certificate-page, pades, or bundle",
"type": "string"
},
"document_id": {
"description": "unique document ID",
"type": "string"
}
},
"required": [
"document_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Download the rendered image of a specific document page.",
"properties": {
"action": {
"enum": [
"page"
],
"type": "string"
},
"document_id": {
"description": "Document ID.",
"minLength": 1,
"type": "string"
},
"page_id": {
"description": "The page ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"document_id",
"page_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"artifact",
"page"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_download_document",
"outputSchema": null
},
{
"description": "Find a document or check signing progress. Use list to search; get to inspect status, assignment, signer IDs and artifacts; activities for the event timeline; notifications for WhatsApp delivery history. Read before retrying a send or following up. 100% signatures does not mean certification is finished.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "Search workspace documents with pagination and filters.",
"properties": {
"account_id": {
"description": "account ID; uses request routing if omitted",
"type": "string"
},
"action": {
"enum": [
"list"
],
"type": "string"
},
"page": {
"description": "page number (1-based)",
"type": "integer"
},
"per_page": {
"description": "number of results per page (max 100)",
"type": "integer"
},
"search": {
"description": "partial match on document name or signer",
"type": "string"
},
"sort": {
"description": "name or updated_at; prefix with - for descending",
"type": "string"
},
"status": {
"description": "document status filter",
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Inspect one known document, its assignment, signers and artifacts.",
"properties": {
"action": {
"enum": [
"get"
],
"type": "string"
},
"document_id": {
"description": "unique document ID",
"type": "string"
}
},
"required": [
"document_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "List the activities recorded for a document. Each entry carries an event-specific `payload` snapshot (keys vary per event) and the request `origin` (`ip`, `user-agent`).",
"properties": {
"action": {
"enum": [
"activities"
],
"type": "string"
},
"document_id": {
"description": "Document ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"document_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "List all WhatsApp notification messages sent for an assignment. The response includes the rendered template text split into `header`, `body` and `buttons` — exactly what the signer would see. In sandbox/stage, WhatsApp messages are simulated (no real delivery) and button URLs include access/verification codes you can use to simulate the signing flow. Treat returned signing links and verification codes as sensitive; never use them to sign for another person.",
"properties": {
"action": {
"enum": [
"notifications"
],
"type": "string"
},
"assignment_id": {
"description": "The assignment ID.",
"minLength": 1,
"type": "string"
},
"document_id": {
"description": "Document ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"document_id",
"assignment_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"list",
"get",
"activities",
"notifications"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_find_documents",
"outputSchema": null
},
{
"description": "Resolve a recipient to a workspace signer ID. list searches the directory; get inspects a known signer. Check exact contact details and ask about ambiguous matches before sending invitations.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "List the signers of a workspace.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"list"
],
"type": "string"
},
"page": {
"description": "Page number.",
"minimum": 1,
"type": "integer"
},
"per_page": {
"description": "Records per page (max 100).",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"search": {
"description": "Filter by full_name or email.",
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Retrieve a signer's information.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"get"
],
"type": "string"
},
"signer_id": {
"description": "The signer ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"signer_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"list",
"get"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_find_signers",
"outputSchema": null
},
{
"description": "Discover saved templates before requesting signatures. list returns roles, pages, field_id and placement labels; get inspects one template where the compatibility endpoint is supported. Match field names with check_fields. Template authoring stays in Assinafy.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "List saved templates with roles and field placements.",
"properties": {
"account_id": {
"description": "account ID; uses default if omitted",
"type": "string"
},
"action": {
"enum": [
"list"
],
"type": "string"
},
"page": {
"description": "page number (1-based)",
"type": "integer"
},
"per_page": {
"description": "results per page",
"type": "integer"
},
"search": {
"description": "filter templates by name",
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Get one template; this compatibility route is absent from the public API specification.",
"properties": {
"account_id": {
"description": "account ID; uses default if omitted",
"type": "string"
},
"action": {
"enum": [
"get"
],
"type": "string"
},
"template_id": {
"description": "unique template ID",
"type": "string"
}
},
"required": [
"template_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"list",
"get"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_find_templates",
"outputSchema": null
},
{
"description": "Follow up on an existing assignment after checking find_documents. resend sends a reminder to one authorized pending signer and may consume notification credits. set_expiration changes the expiry using an explicit RFC 3339 timestamp. Use returned document, assignment and signer IDs; never repeat a reminder just because progress is unchanged.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "Resend the invitation to a specific signer; requires authorization for the reminder.",
"properties": {
"action": {
"enum": [
"resend"
],
"type": "string"
},
"assignment_id": {
"description": "unique assignment ID",
"type": "string"
},
"document_id": {
"description": "unique document ID",
"type": "string"
},
"signer_id": {
"description": "unique signer ID to notify",
"type": "string"
}
},
"required": [
"document_id",
"assignment_id",
"signer_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Change the expiration of an existing assignment.",
"properties": {
"action": {
"enum": [
"set_expiration"
],
"type": "string"
},
"assignment_id": {
"description": "unique assignment ID",
"type": "string"
},
"document_id": {
"description": "unique document ID",
"type": "string"
},
"expires_at": {
"description": "new expiry timestamp in RFC 3339 format",
"type": "string"
}
},
"required": [
"document_id",
"assignment_id",
"expires_at",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"resend",
"set_expiration"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_follow_up_assignment",
"outputSchema": null
},
{
"description": "Prepare a PDF before requesting signatures. upload accepts PDF bytes and returns a document ID without invitations. rename changes a document's name before an assignment exists. Continue with find_documents and request_signatures action from_document.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "Upload a PDF without sending invitations. Keep its document ID.",
"properties": {
"account_id": {
"description": "authorized workspace; discovered through OAuth when omitted",
"type": "string"
},
"action": {
"enum": [
"upload"
],
"type": "string"
},
"file_base64": {
"description": "base64 PDF bytes, at most 25 MiB decoded",
"type": "string"
},
"file_name": {
"description": "PDF filename including .pdf",
"type": "string"
}
},
"required": [
"file_name",
"file_base64",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Update a document's name. Only allowed before any assignment is created (i.e. while the document is in `uploaded` or `metadata_ready` status and has no signers yet); once the signature process has started or the document is certificated, the name is locked. The name is normalized: diacritics are removed and unsupported characters are replaced with dashes.",
"properties": {
"action": {
"enum": [
"rename"
],
"type": "string"
},
"document_id": {
"description": "Document ID.",
"minLength": 1,
"type": "string"
},
"name": {
"maxLength": 255,
"minLength": 1,
"type": "string"
}
},
"required": [
"name",
"document_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"upload",
"rename"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_prepare_document",
"outputSchema": null
},
{
"description": "Send a document for signature using exactly one source. from_pdf uploads new PDF bytes, waits for processing and creates or reuses email signers. from_document uses an existing document_id and signer IDs; inspect the document first and do not repeat an existing assignment. from_template generates a document and assignment from a saved template; discover roles and field IDs first. These actions send invitations and can consume credits: use recipients authorized by the user. After a partial failure, inspect the retained document ID and continue from_document instead of uploading again.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "New PDF: provide file_name, file_base64 and signers by full_name/email. Creates a virtual assignment with Email verification and notification.",
"properties": {
"account_id": {
"description": "account ID; uses the request or server default if omitted",
"type": "string"
},
"action": {
"enum": [
"from_pdf"
],
"type": "string"
},
"expires_at": {
"description": "assignment expiry timestamp in RFC 3339 format",
"type": "string"
},
"file_base64": {
"description": "base64-encoded PDF bytes (max 25 MB decoded)",
"type": "string"
},
"file_name": {
"description": "PDF filename including the .pdf extension",
"type": "string"
},
"max_wait_secs": {
"description": "maximum seconds to wait for PDF processing (default 30; max 600)",
"type": "integer"
},
"message": {
"description": "invitation message shown to signers",
"type": "string"
},
"poll_secs": {
"description": "polling interval in seconds (default 2; cannot exceed max_wait_secs)",
"type": "integer"
},
"signers": {
"description": "one or more signers to create or reuse and request signatures from",
"items": {
"additionalProperties": false,
"properties": {
"email": {
"description": "signer's email address; existing exact matches are reused",
"type": "string"
},
"full_name": {
"description": "signer's full name",
"type": "string"
}
},
"required": [
"full_name",
"email"
],
"type": "object"
},
"type": [
"null",
"array"
]
}
},
"required": [
"file_name",
"file_base64",
"signers",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"method": {
"const": "collect"
}
},
"required": [
"method"
]
},
"then": {
"properties": {
"entries": {
"minItems": 1
}
},
"required": [
"entries"
]
}
}
],
"description": "Request signatures on a document. Use `method: virtual` to sign without input fields, or `method: collect` to place input fields on specific pages.\n\nFor **virtual**, the document may be in `uploaded`, `metadata_processing` or `metadata_ready`; it is promoted to `pending_signature` automatically once metadata processing completes. For **collect**, the document must be in `metadata_ready` (fields reference specific pages).\n\n`step` controls signing order: signers sharing a step sign in parallel, and the next step is notified only after the previous step completes. If supplied, every signer must supply it and values must be contiguous starting at 1. Obtain signer IDs from find_signers/save_signer and page IDs from find_documents action get. This sends signing invitations.",
"properties": {
"action": {
"enum": [
"from_document"
],
"type": "string"
},
"copy_receivers": {
"description": "Signer IDs that only receive a copy.",
"items": {
"type": "string"
},
"type": "array"
},
"document_id": {
"description": "Document ID.",
"minLength": 1,
"type": "string"
},
"entries": {
"description": "Required for `collect`: field placements per page.",
"items": {
"additionalProperties": false,
"properties": {
"fields": {
"items": {
"additionalProperties": false,
"properties": {
"display_settings": {
"additionalProperties": false,
"description": "A field placement rectangle on a document page. Geometry values are pixels in Assinafy's 150-DPI page image, measured from the upper-left corner. Clients must keep the rectangle within the selected page's width and height; the API does not clamp out-of-bounds values.",
"properties": {
"backgroundColor": {
"description": "CSS-compatible background-color presentation metadata.",
"type": "string"
},
"fontFamily": {
"description": "Font-family presentation metadata.",
"type": "string"
},
"fontSize": {
"description": "Font size in the 150-DPI page-image coordinate system.",
"exclusiveMinimum": 0,
"format": "float",
"type": "number"
},
"height": {
"description": "Height of the placement rectangle, in page-image pixels.",
"exclusiveMinimum": 0,
"format": "float",
"type": "number"
},
"left": {
"description": "Horizontal distance from the page's left edge, in page-image pixels.",
"format": "float",
"minimum": 0,
"type": "number"
},
"top": {
"description": "Vertical distance from the page's top edge, in page-image pixels.",
"format": "float",
"minimum": 0,
"type": "number"
},
"width": {
"description": "Width of the placement rectangle, in page-image pixels.",
"exclusiveMinimum": 0,
"format": "float",
"type": "number"
}
},
"required": [
"left",
"top",
"width",
"height",
"fontSize"
],
"type": "object"
},
"field_id": {
"type": "string"
},
"signer_id": {
"type": "string"
}
},
"required": [
"signer_id",
"field_id",
"display_settings"
],
"type": "object"
},
"minItems": 1,
"type": "array"
},
"page_id": {
"type": "string"
}
},
"required": [
"page_id",
"fields"
],
"type": "object"
},
"type": "array"
},
"expires_at": {
"description": "ISO 8601; default is no expiration.",
"format": "date-time",
"type": "string"
},
"message": {
"description": "Text included in the invitation email.",
"type": "string"
},
"method": {
"default": "virtual",
"enum": [
"virtual",
"collect"
],
"type": "string"
},
"signers": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"type": "string"
},
"notification_methods": {
"description": "Channels used to notify the signer of the request. Any combination of `Email` and `Whatsapp` (WhatsApp incurs an additional cost and is available only on paid subscriptions). Omit to default to `{\"Email\"}`.",
"items": {
"enum": [
"Email",
"Whatsapp"
],
"type": "string"
},
"type": "array"
},
"step": {
"type": "integer"
},
"verification_method": {
"description": "How the signer's identity is verified before signing. `Email` (default) sends a one-time code to the signer's email; `Whatsapp` sends the code over WhatsApp — the verification itself is not billed, but it requires the WhatsApp notification channel, so the signer costs 0.45 credits (available only on paid subscriptions); `DigitalCertificate` has the signer sign with their own ICP-Brasil certificate (A1/A3) — it requires the Digital Certificate feature, the signer must have a CPF or CNPJ in `government_id`, must be alone in its signing step, and is charged 2 credits per signer. A CPF requires that person's certificate (an e-CPF, or an e-CNPJ naming them as legal representative); a CNPJ requires an e-CNPJ for that company, from any of its representatives. Omit to default to `Email`.",
"enum": [
"Email",
"Whatsapp",
"DigitalCertificate"
],
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"method",
"signers",
"document_id",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"description": "Saved template: provide template_id and one signer per role, by id or full_name/email. Use field_id/string-value pairs in editor_fields, after check_fields validation.",
"properties": {
"account_id": {
"description": "account ID; uses request routing if omitted",
"type": "string"
},
"action": {
"enum": [
"from_template"
],
"type": "string"
},
"editor_fields": {
"description": "template editor field values",
"items": {
"additionalProperties": false,
"properties": {
"field_id": {
"description": "template editor field ID",
"type": "string"
},
"value": {
"description": "value to bake into the generated document",
"type": "string"
}
},
"required": [
"field_id",
"value"
],
"type": "object"
},
"type": [
"null",
"array"
]
},
"expires_at": {
"description": "assignment expiry in RFC 3339 format",
"type": "string"
},
"message": {
"description": "signing invitation message",
"type": "string"
},
"name": {
"description": "custom document name",
"type": "string"
},
"signers": {
"description": "one signer per template role, each by ID or by name and email",
"items": {
"additionalProperties": false,
"properties": {
"email": {
"description": "signer's email address, required when id is omitted; existing exact matches are reused",
"type": "string"
},
"full_name": {
"description": "signer's full name; required when id is omitted",
"type": "string"
},
"id": {
"description": "existing signer ID; use instead of full_name and email",
"type": "string"
},
"notification_methods": {
"description": "at most one channel: Email or Whatsapp; inferred from verification_method when omitted",
"items": {
"type": "string"
},
"type": [
"null",
"array"
]
},
"role_id": {
"description": "template role ID",
"type": "string"
},
"step": {
"description": "signing order, contiguous from 1; all signers must set it if any does",
"type": [
"null",
"integer"
]
},
"verification_method": {
"description": "Email (default), Whatsapp, or DigitalCertificate",
"type": "string"
}
},
"required": [
"role_id"
],
"type": "object"
},
"type": [
"null",
"array"
]
},
"tags": {
"description": "tag names, merged with the template's defaults",
"items": {
"type": "string"
},
"type": [
"null",
"array"
]
},
"template_id": {
"description": "template ID",
"type": "string"
}
},
"required": [
"template_id",
"signers",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"from_pdf",
"from_document",
"from_template"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_request_signatures",
"outputSchema": null
},
{
"description": "create adds a workspace contact without sending invitations; find_signers first to avoid duplicates. update corrects a shared contact subject to Assinafy's verification restrictions. Changing an unverified channel invalidates old links; follow up only after the correction succeeds and the user has authorized a reminder.",
"inputSchema": {
"oneOf": [
{
"additionalProperties": false,
"description": "Create a signer in the workspace.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"create"
],
"type": "string"
},
"email": {
"format": "email",
"type": "string"
},
"full_name": {
"minLength": 1,
"type": "string"
},
"whatsapp_phone_number": {
"description": "E.164; normalized on save.",
"type": "string"
}
},
"required": [
"full_name",
"action"
],
"type": "object"
},
{
"additionalProperties": false,
"anyOf": [
{
"required": [
"full_name"
]
},
{
"required": [
"email"
]
},
{
"required": [
"whatsapp_phone_number"
]
},
{
"required": [
"government_id"
]
}
],
"description": "Update a signer's information.\n\n**Verification integrity:** `email` / `whatsapp_phone_number` cannot be changed while the signer has verified that channel on an in-flight (not yet certificated) document — the response is `400` naming the offending document(s). Already-certificated documents do not block updates. Changing a channel that has *unverified* in-flight requests rotates their access/verification codes (invalidating previously sent links/OTPs); use the resend endpoint to redeliver. `full_name` can always be updated.",
"properties": {
"account_id": {
"description": "Authorized workspace; discovered from OAuth when omitted.",
"minLength": 1,
"type": "string"
},
"action": {
"enum": [
"update"
],
"type": "string"
},
"email": {
"format": "email",
"type": "string"
},
"full_name": {
"minLength": 1,
"type": "string"
},
"government_id": {
"description": "Signer's CPF/CNPJ; digits only on save.",
"type": "string"
},
"signer_id": {
"description": "The signer ID.",
"minLength": 1,
"type": "string"
},
"whatsapp_phone_number": {
"description": "E.164; normalized on save.",
"type": "string"
}
},
"required": [
"signer_id",
"action"
],
"type": "object"
}
],
"properties": {
"action": {
"description": "Choose exactly one action; supply only its arguments.",
"enum": [
"create",
"update"
],
"type": "string"
}
},
"required": [
"action"
],
"type": "object"
},
"name": "assinafy_save_signer",
"outputSchema": null
},
{
"description": "Verify a signed document using its actual Assinafy SHA-1 signature hash. Public lookup; requires no workspace connection and sends no credential upstream.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"hash": {
"description": "SHA-1 signature hash of the signed document",
"type": "string"
}
},
"required": [
"hash"
],
"type": "object"
},
"name": "assinafy_verify_document",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:b40e429595900c061b98b1333bfc5475a74217f1d843167045c9cb6a80cf44f7 | sha256sum