Well
What this MCP does
Connects AI agents to business financial data such as invoices, transactions, accounts, cash forecasts, investments, companies, and contacts.
Tools
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['parent', 'parent_id', 'channel', 'value'], 'properties': {'value': {'type': 'object', 'properties': {'url': {'type': 'string', 'maxLength': 255, 'description': 'web_link channel: the URL'}, 'city': {'type': 'string', 'maxLength': 255, 'description': 'location channel: city'}, 'email': {'type': 'string', 'maxLength': 320, 'description': 'email channel: the address'}, 'label': {'type': 'string', 'description': "optional label (default 'work')"}, 'region': {'type': 'string', 'maxLength': 255}, 'country': {'type': 'string', 'maxLength': 2, 'description': 'location channel: 2-letter country code'}, 'platform': {'type': 'string', 'description': "web_link channel: platform (default 'website')"}, 'e164_number': {'type': 'string', 'maxLength': 255, 'description': 'phone channel: number (E.164)'}, 'postal_code': {'type': 'string', 'maxLength': 255}, 'address_line1': {'type': 'string', 'maxLength': 255}, 'address_line2': {'type': 'string', 'maxLength': 255}}, 'description': 'Channel value — fill the field(s) for the chosen channel'}, 'parent': {'enum': ['company', 'person'], 'type': 'string', 'description': 'Parent record type: company or person'}, 'channel': {'enum': ['email', 'phone', 'web_link', 'location'], 'type': 'string', 'description': 'Channel to add: email | phone | web_link | location'}, 'parent_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'UUID of the parent company or person'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'parent': {'type': 'string'}, 'channel': {'type': 'string'}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['account_id'], 'properties': {'ownership': {'enum': ['workspace', 'counterparty', 'unknown'], 'type': 'string', 'description': 'Whether the workspace owns the account: "workspace", "counterparty", or "unknown".'}, 'account_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the account to assign (required)'}, 'company_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': 'The company that owns the account, in the same workspace. `null` detaches it.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'ownership': {'type': 'string'}, 'account_id': {'type': 'string'}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'company_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['transaction_ids', 'owner_person_ids'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'transaction_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'minItems': 1, 'description': 'The missing-invoice transactions to assign, from well_list_missing_invoice_owners.'}, 'owner_person_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'description': "The workspace people who together own these transactions' missing invoices; an empty array clears the owners."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'owner_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many people own each of those transactions after the write.'}, 'refusal_reason': {'type': 'string', 'description': 'The WellError code when the write is refused — CLOSE_OWNER_PERIOD_FROZEN for a closed month, NOT_FOUND for a person outside the workspace or a transaction the workspace does not own.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'refusal_details': {'type': 'object', 'description': 'Structured facts a refusal code alone does not carry — for CLOSE_OWNER_PERIOD_FROZEN, the frozen `{ fiscalYear, fiscalPeriod }`. A NOT_FOUND names the offending id in `error` instead.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'transaction_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The distinct transactions whose owner set the write replaced.'}, 'owner_person_ids': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The explicit owner set written to every named transaction; empty when the owners were cleared.'}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many distinct transactions the write touched.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['claim_token'], 'properties': {'claim_token': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{43}$', 'description': "The drop's claim token, exactly as written: from the argument after /import-statement or from the user's message. Single-use, covers every statement in that drop, expires one hour after the drop."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'documents', 'failed'], 'properties': {'error': {'type': 'string'}, 'failed': {'type': 'array', 'items': {'type': 'object', 'required': ['draft_id', 'ordinal', 'filename', 'error'], 'properties': {'error': {'type': 'string'}, 'ordinal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'draft_id': {'type': 'string'}, 'filename': {'type': 'string'}}, 'additionalProperties': False}, 'default': [], 'description': 'Files that were claimed but did not ingest. Their bytes are gone; ask the user for exactly these by name.'}, 'drop_id': {'type': 'string', 'description': 'The drop this token belonged to. Safe to quote; the token is not.'}, 'success': {'type': 'boolean'}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['draft_id', 'ordinal', 'filename', 'document_id', 'content_sha256', 'byte_length', 'deduplicated'], 'properties': {'ordinal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "The file's 0-based index among the files Well accepted from the drop, in arrival order."}, 'draft_id': {'type': 'string'}, 'filename': {'type': 'string'}, 'byte_length': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'document_id': {'type': 'string', 'description': 'Poll well_get_statement_import_result with this id for the import outcome.'}, 'deduplicated': {'type': 'boolean', 'description': 'True when an identical document was already in the workspace, so nothing was imported twice.'}, 'content_sha256': {'type': 'string'}}, 'additionalProperties': False}, 'default': [], 'description': 'One entry per file that reached the import pipeline.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Company name (required)'}, 'description': {'type': 'string', 'maxLength': 250, 'minLength': 1, 'description': 'Brief company description'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'name': {'type': 'string'}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'company_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['registry_ref'], 'properties': {'registry_ref': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'The registry ref an earlier well_search_company_registry hit carried as its `id`.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'linked_to_existing_child', 'workspace_id', 'candidate'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'candidate': {'anyOf': [{'type': 'object', 'required': ['candidate_id', 'company_id', 'registered_name', 'trade_name', 'role', 'state', 'confidence_score', 'confirmable', 'confirmable_reason'], 'properties': {'role': {'anyOf': [{'enum': ['primary', 'sibling'], 'type': 'string'}, {'type': 'null'}]}, 'state': {'enum': ['pending', 'confirmed', 'dismissed', 'snoozed'], 'type': 'string'}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Null on a fresh candidate; a company row is resolved only once the workspace is created.'}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confirmable': {'type': 'boolean'}, 'candidate_id': {'type': 'string'}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence_score': {'type': 'number'}, 'confirmable_reason': {'anyOf': [{'enum': ['not_open', 'not_surfaceable', 'not_primary', 'already_confirmed', 'not_grounded'], 'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The minted candidate, projected as well_get_own_company shows a candidate; null when linked to an existing child.'}, 'workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The existing company workspace when linked_to_existing_child is true; null otherwise.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'linked_to_existing_child': {'type': 'boolean', 'description': 'True when the picked company already has a confirmed company workspace; its id is in workspace_id.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['candidate_id'], 'properties': {'candidate_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The candidate id returned by well_create_company_candidate.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company workspace's name, derived from the candidate."}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'workspace_id': {'type': 'string', 'description': "The created (or existing) company workspace's id."}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The public id of the company anchored as the workspace's own."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'already_anchored': {'type': 'boolean', 'description': 'True when this call did not mint a fresh workspace: the candidate had already minted its child (a converged replay) or resolved to a company already anchored on the caller. The same child is returned either way.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['invoice_id'], 'properties': {'invoice_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'file': {'type': 'object', 'required': ['name', 'size_bytes', 'signed_url', 'download_url', 'app_url', 'expires_at'], 'properties': {'name': {'type': 'string'}, 'app_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'expires_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'signed_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'size_bytes': {'type': 'number'}, 'download_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'invoice_id': {'type': 'string'}, 'document_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'reference_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['issuer', 'receiver', 'reference_number', 'issue_date', 'currency', 'line_items'], 'properties': {'issuer': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Legal/company name of the party.'}, 'domain': {'type': 'string', 'description': 'Company domain, e.g. acme.com.'}, 'tax_id': {'type': 'string', 'description': 'VAT / tax id, if present on the invoice.'}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'An existing company in the workspace, bound directly — ALWAYS send this when you already know the company (e.g. you found it with well_query_records). Without it the party is re-resolved from name/domain/tax_id, which can attach the invoice to a different company or mint a duplicate.'}, 'tax_id_type': {'type': 'string', 'minLength': 1, 'description': 'Tax-id type backing tax_id, e.g. SIREN, EIN, VAT. Defaults to VAT when omitted.'}}}, 'status': {'enum': ['draft', 'issued', 'paid', 'canceled'], 'type': 'string', 'description': 'The invoice\'s lifecycle status. Set it here when the user asked for one ("draft an invoice") — do NOT create and then call well_update_invoice to change it. Omitted, the status is derived from the document type.'}, 'totals': {'type': 'object', 'required': ['grand_total'], 'properties': {'tax_total': {'type': 'number'}, 'grand_total': {'type': 'number'}, 'items_total': {'type': 'number'}}}, 'currency': {'type': 'string', 'description': 'ISO 4217 (3 letters).'}, 'due_date': {'type': 'string', 'description': 'ISO 8601 YYYY-MM-DD.'}, 'receiver': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Legal/company name of the party.'}, 'domain': {'type': 'string', 'description': 'Company domain, e.g. acme.com.'}, 'tax_id': {'type': 'string', 'description': 'VAT / tax id, if present on the invoice.'}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'An existing company in the workspace, bound directly — ALWAYS send this when you already know the company (e.g. you found it with well_query_records). Without it the party is re-resolved from name/domain/tax_id, which can attach the invoice to a different company or mint a duplicate.'}, 'tax_id_type': {'type': 'string', 'minLength': 1, 'description': 'Tax-id type backing tax_id, e.g. SIREN, EIN, VAT. Defaults to VAT when omitted.'}}}, 'issue_date': {'type': 'string', 'description': 'ISO 8601 YYYY-MM-DD.'}, 'line_items': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'unit_price'], 'properties': {'name': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Line description.'}, 'currency': {'type': 'string', 'description': 'ISO 4217; defaults to the invoice currency.'}, 'quantity': {'type': 'number'}, 'tax_rate': {'type': 'number', 'description': 'Tax rate as a percentage 0-100.'}, 'unit_price': {'type': 'number', 'description': 'Unit price (number, not string).'}}}, 'minItems': 1}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'payment_means': {'type': 'array', 'items': {'type': 'object', 'properties': {'bic': {'type': 'string'}, 'iban': {'type': 'string'}, 'type': {'enum': ['iban', 'card', 'cash', 'check', 'other'], 'type': 'string'}, 'scheme': {'type': 'string', 'description': 'e.g. SEPA, SWIFT — only honoured if a known scheme.'}}}}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'reference_number': {'type': 'string', 'maxLength': 100, 'minLength': 1}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'invoice_id': {'type': 'string'}, 'document_id': {'type': 'string'}, 'payment_means': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'reference_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'invoice_item_count': {'type': 'number'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['first_name'], 'properties': {'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}, 'phone': {'type': 'string'}, 'job_title': {'type': 'string', 'maxLength': 100, 'description': 'Job title'}, 'last_name': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'description': 'Last name (optional)'}, 'first_name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'First name (required)'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'full_name': {'type': 'string'}, 'person_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'token': {'type': 'string'}, 'success': {'type': 'boolean'}, 'upload_url': {'type': 'string'}, 'document_id': {'type': 'string', 'description': 'The pre-allocated document id — poll well_get_statement_import_result with it.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'expires_in_seconds': {'type': 'number'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the company to delete (required)'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'company_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['invoice_id'], 'properties': {'invoice_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the invoice to delete'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'invoice_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['person_id'], 'properties': {'person_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the person to delete (required)'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'person_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['counterparty_company_ids'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'counterparty_company_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 200, 'minItems': 1, 'description': 'Counterparty companies to queue collection for, from well_list_missing_invoices.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'skipped': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id', 'reason'], 'properties': {'reason': {'enum': ['company_not_found_in_workspace', 'not_owned_by_current_user'], 'type': 'string'}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'enqueued': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id', 'task_id', 'task_title', 'provider', 'already_active'], 'properties': {'task_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'provider': {'anyOf': [{'type': 'object', 'required': ['id', 'name', 'slug', 'url', 'logo_url', 'countries', 'has_blueprint', 'has_portal_url'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'url': {'type': 'string'}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'countries': {'type': 'array', 'items': {'type': 'string'}}, 'has_blueprint': {'type': 'boolean'}, 'has_portal_url': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'task_title': {'type': 'string'}, 'already_active': {'type': 'boolean'}}, 'additionalProperties': False}}, 'skipped_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'enqueued_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows in enqueued — created or reused.'}, 'refusal_reason': {'type': 'string', 'description': 'The WellError code when the write is refused.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'already_active_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Of enqueued_count, how many reused an existing task rather than creating one.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'settings': {'type': 'object', 'required': ['country', 'base_currency', 'accounting_framework', 'fiscal_year_start_month', 'fiscal_year_start_month_source', 'fiscal_year_start_locked', 'first_fiscal_year_start_date', 'first_fiscal_year_start_source', 'coa_confirmed', 'coa_confirmed_source', 'field_provenance', 'incorporation_date', 'registered_name', 'trade_name', 'registered_value', 'domain', 'business_type', 'address', 'own_company_id', 'created_at', 'updated_at', 'tax_id'], 'properties': {'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tax_id': {'type': 'object', 'required': ['present', 'source', 'suggestion_available'], 'properties': {'source': {'anyOf': [{'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, {'type': 'null'}]}, 'present': {'type': 'boolean'}, 'suggestion_available': {'type': 'boolean'}}, 'additionalProperties': False}, 'address': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'created_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'updated_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'business_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'coa_confirmed': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'field_provenance': {'anyOf': [{'type': 'object', 'properties': {'tax_id': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'country': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'base_currency': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'incorporation_date': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'accounting_framework': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'fiscal_year_start_month': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'null'}]}, 'registered_value': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'incorporation_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'accounting_framework': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'coa_confirmed_source': {'anyOf': [{'type': 'string', 'const': 'user'}, {'type': 'null'}]}, 'fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'fiscal_year_start_locked': {'type': 'boolean'}, 'first_fiscal_year_start_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'first_fiscal_year_start_source': {'anyOf': [{'enum': ['derived', 'user'], 'type': 'string'}, {'type': 'null'}]}, 'fiscal_year_start_month_source': {'anyOf': [{'enum': ['derived', 'registry', 'user'], 'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'suggestions': {'type': 'object', 'properties': {'tax_id': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'country': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'base_currency': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'incorporation_date': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'accounting_framework': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'fiscal_year_start_month': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Name search across the full catalog (e.g. a specific bank). Omit for the curated, matched-first view.'}, 'kind': {'enum': ['bank', 'accounting', 'invoicing', 'upload_surface', 'storage'], 'type': 'string', 'description': 'Scope the card server-side. Three financial domains: "bank" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), "accounting", and "invoicing". Plus two scopes the server resolves from display categories rather than from a financial domain: "upload_surface", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and "storage", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max connectors to return (1-100, default 50).'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of connectors to skip, for paging (default 0).'}, 'country': {'enum': ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'], 'type': 'string', 'description': 'The company\'s country as an ISO 3166-1 alpha-2 code (e.g. "FR"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank step so the banks that fit the company appear first; take it from the workspace identity\'s country. Omit when the country is unknown, and the order is left unchanged.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'from_selection': {'type': 'boolean', 'const': True, 'description': "Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card in this conversation, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here: that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind`: those name a catalog to browse, and this names a set already decided. Returns an empty list when this conversation holds no pick for this workspace, or when no picked counterparty matched a connector."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'include_unsent_counts': {'type': 'boolean', 'const': True, 'description': "Add the top-level `unsent_document_counts`: every tool Well forwards this workspace's documents to, each with how many documents it has not received yet. That array is the whole answer — it holds every one of the workspace's outbound connections, whatever catalog page was requested, and the rows carry no count at all. Off by default, because it costs an extra read. The figure is the workspace's whole backlog, not a period's."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['install_all_url', 'install_all_omitted', 'success'], 'properties': {'error': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'The page size that was REQUESTED. The catalog may return fewer.'}, 'scope': {'enum': ['catalog', 'bank', 'accounting', 'invoicing', 'upload_surface', 'storage', 'picked_vendors'], 'type': 'string', 'description': "What this result is a list OF: the requested kind, the picked vendors' connectors, or the curated catalog when neither was asked for. The card words itself from this, so it never describes the rows as a domain that was not requested."}, 'total': {'type': 'number', 'description': 'Every connector matching the query, across all pages — NOT the length of `connectors`.'}, 'offset': {'type': 'number', 'description': 'How many catalog rows this page skipped.'}, 'success': {'type': 'boolean'}, 'row_count': {'type': 'number', 'description': 'How many rows this result puts ON THE CARD, prepended rows included. `0` on a `picked_vendors` scope means the pick has no connector behind it that can bring an invoice in: the card carries nothing to tick, so say so in half a sentence and move on. Not a paging cursor — `page_count` is.'}, 'connectors': {'type': 'array', 'items': {'type': 'object', 'required': ['service_id', 'name', 'category_id', 'status', 'direction', 'data_domains', 'invoice_source', 'reason', 'logo_url', 'popularity_score', 'is_matched', 'is_selected', 'match_score', 'is_connected', 'connection_status', 'workspace_connector_id', 'last_successful_sync_at', 'sync_in_progress', 'is_preselected', 'install_url', 'countries'], 'properties': {'name': {'type': 'string'}, 'reason': {'enum': ['catalog', 'picked_vendor'], 'type': 'string'}, 'status': {'type': 'string'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'countries': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'direction': {'type': 'string'}, 'is_matched': {'type': 'boolean'}, 'service_id': {'type': 'string'}, 'category_id': {'type': 'string'}, 'install_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'is_selected': {'type': 'boolean'}, 'match_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'data_domains': {'anyOf': [{'type': 'array', 'items': {'enum': ['bank', 'accounting', 'invoicing'], 'type': 'string'}}, {'type': 'null'}]}, 'is_connected': {'type': 'boolean'}, 'invoice_source': {'type': 'boolean'}, 'is_preselected': {'type': 'boolean'}, 'popularity_score': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'sync_in_progress': {'type': 'boolean'}, 'connection_status': {'anyOf': [{'enum': ['enabled', 'processing', 'error', 'need_reconnect', 'to_configure', 'disabled'], 'type': 'string'}, {'type': 'null'}]}, 'workspace_connector_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'last_successful_sync_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'page_count': {'type': 'number', 'description': "The catalog page's own length, and the ONLY safe paging cursor: advance by `offset + page_count`. `connectors` can be LONGER — on the first page of an unsearched browse the workspace's already-connected rows are prepended so they cannot be lost to the catalog's ordering — so paging by the array's length silently skips exactly that many catalog rows on every later request."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'install_all_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "One link that installs every installable connector in this result. Null when the result offers nothing to install, or when its scope names a set the reader has not chosen. When it is non-null it is the ONLY install link the answer offers — do not list the rows' own install_url beside it. When it is null, the rows' own install_url is the offer instead."}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'install_all_omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The service ids install_all_url could not carry, because one link names a bounded number of connectors. Offer these rows their own install_url instead of promising the batch link covers them.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'unsent_document_counts': {'type': 'array', 'items': {'type': 'object', 'required': ['service_id', 'name', 'workspace_connector_id', 'unsent_document_count', 'unsent_document_count_is_upper_bound'], 'properties': {'name': {'type': 'string'}, 'service_id': {'type': 'string'}, 'unsent_document_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'workspace_connector_id': {'type': 'string'}, 'unsent_document_count_is_upper_bound': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': "Every tool this workspace forwards documents to, each with the documents it has not received yet, biggest backlog first. Present only when `include_unsent_counts` was set. THIS IS THE ONLY PLACE THE BACKLOG IS REPORTED: it is not a page, it carries the workspace's whole set of outbound connections whether or not the requested catalog page holds their rows, and the catalog rows carry no count. An empty array means the workspace forwards to nothing; an absent field means nothing was measured. `unsent_document_count_is_upper_bound: true` means a document filter applies to that connection, so the count is a maximum and reads as `up to <n>`. Every count is read off Well's own forward record, so it measures what Well wrote down rather than what the tool confirmed. Name a tool by its `name`. An entry reading `0` is a tool that is up to date: say nothing about it."}, 'picked_vendors_filtered': {'type': 'number', 'description': "How many of the picked vendors' connectors were dropped for bringing no invoices in. Present on the `picked_vendors` scope only. Above zero means the card is SHORTER than the pick: say that those vendors' tools cannot deliver an invoice, rather than letting the gap read as a pick the user never made."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string', 'description': "The customer's public company UUID (the `company_id` field on a companies record)."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['customer', 'fields', 'unstorable_fields', 'success'], 'properties': {'error': {'type': 'string'}, 'hints': {'type': 'array', 'items': {'type': 'object', 'required': ['detected_gap'], 'properties': {'field': {'type': 'string'}, 'cta_link': {'type': 'string', 'format': 'uri'}, 'severity': {'enum': ['info', 'warn'], 'type': 'string'}, 'signal_id': {'type': 'string'}, 'detected_gap': {'type': 'string'}}, 'additionalProperties': False}}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['field'], 'properties': {'field': {'enum': ['legal_name', 'siren', 'billed_establishment', 'postal_address', 'vat_number', 'einvoicing_address', 'buyer_reference', 'customer_type', 'place_of_supply_country', 'supply_category', 'vat_rate', 'vat_point_basis'], 'type': 'string'}, 'score': {'type': 'number'}, 'value': {'type': 'string'}, 'country': {'type': 'string'}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label'], 'properties': {'note': {'type': 'string'}, 'label': {'type': 'string'}, 'score': {'type': 'number'}, 'value': {'type': 'string'}, 'country': {'type': 'string'}}, 'additionalProperties': False}}, 'provenance': {'enum': ['registry', 'derived', 'user', 'ai'], 'type': 'string'}, 'suggestions': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label'], 'properties': {'note': {'type': 'string'}, 'label': {'type': 'string'}, 'score': {'type': 'number'}, 'value': {'type': 'string'}, 'country': {'type': 'string'}}, 'additionalProperties': False}}, 'options_group': {'enum': ['countries', 'schemes', 'customer_types', 'supply_categories'], 'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'customer': {'anyOf': [{'type': 'object', 'required': ['company_id', 'name', 'subline', 'identified'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'subline': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'company_id': {'type': 'string'}, 'identified': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'error_reason': {'enum': ['no_workspace', 'read_failed'], 'type': 'string'}, 'customer_kind': {'enum': ['company', 'individual'], 'type': 'string'}, 'connectors_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'unstorable_fields': {'type': 'array', 'items': {'enum': ['legal_name', 'siren', 'billed_establishment', 'postal_address', 'vat_number', 'einvoicing_address', 'buyer_reference', 'customer_type', 'place_of_supply_country', 'supply_category', 'vat_rate', 'vat_point_basis'], 'type': 'string'}}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['colors', 'series', 'shape', 'fonts', 'success'], 'properties': {'error': {'type': 'string'}, 'fonts': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'hints': {'type': 'array', 'items': {'type': 'object', 'required': ['detected_gap', 'suggested_action', 'severity'], 'properties': {'severity': {'enum': ['warn', 'info'], 'type': 'string'}, 'detected_gap': {'type': 'string'}, 'suggested_action': {'type': 'string'}}, 'additionalProperties': False}}, 'shape': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'colors': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string'}}, 'series': {'type': 'array', 'items': {'type': 'string'}}, 'success': {'type': 'boolean'}, 'color_scheme': {'enum': ['dark', 'light'], 'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['root', 'id'], 'properties': {'id': {'type': 'string', 'description': "The entity's public UUID (the value of its *_id field, e.g. company_id)"}, 'root': {'type': 'string', 'description': 'Entity type, e.g. companies | people | invoices | transactions'}, 'depth': {'type': 'integer', 'maximum': 3, 'minimum': 1, 'description': 'Relation-nesting boundary 1-3 (default 1).'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['found', 'entity', 'success'], 'properties': {'depth': {'type': 'number'}, 'error': {'type': 'string'}, 'found': {'type': 'boolean'}, 'entity': {'anyOf': [{'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'columnMeta': {'type': 'object', 'description': "Per-column field meaning ({context, enrichment}) for documented columns — read this to interpret the entity's values.", 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'properties': {'context': {'type': 'string'}, 'enrichment': {'type': 'string'}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'fields_selected': {'type': 'number'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'min_degree': {'enum': [0, 1, 2, 5], 'type': 'number', 'description': 'Drop nodes with fewer than this many connections. Raise it to thin a dense workspace down to its hubs; 0 keeps every node.'}, 'company_cap': {'enum': [5, 10, 20, 30, 50], 'type': 'number', 'description': "Cap the number of company nodes drawn. Omit for the server's unbounded default."}, 'perspective': {'enum': ['all', 'contacts', 'money', 'accounting'], 'type': 'string', 'description': 'Which slice of the graph to draw. "all" is everything; "contacts" is people and companies; "money" is transactions and accounts; "accounting" is the ledger side. Defaults to the server\'s own default when omitted.'}, 'time_window': {'enum': ['30d', '90d', '1y', 'all'], 'type': 'string', 'description': "How far back to reach for the underlying records. Defaults to the server's own default when omitted."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'edge_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Connections between the shipped nodes.'}, 'node_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Nodes the server actually shipped, after every filter.'}, 'company_cap': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'The company cap the server applied, when one was.'}, 'failed_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Open work that cannot progress on its own: stuck tasks and errored connectors.'}, 'at_company_cap': {'type': 'boolean', 'description': 'True when the drawing holds as many company nodes as the cap allowed, so the workspace may hold companies it does not show. It is not a count of what was left out — the projection carries no dropped-row signal.'}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The workspace's own company node, when one is resolved."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'processing_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Open work that may still change the scene: queued or running tasks, plus connectors mid-sync.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspace_connector_id'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'workspace_connector_id': {'type': 'string', 'minLength': 1, 'description': "The connected Plaid provider's workspace_connector_id (from well_list_connectors)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'holdings': {'type': 'array', 'items': {'type': 'object', 'required': ['account_id', 'quantity', 'institution_price', 'institution_value', 'cost_basis', 'currency'], 'properties': {'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'quantity': {'type': 'number'}, 'security': {'type': 'object', 'required': ['name', 'ticker_symbol', 'type'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'ticker_symbol': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'account_id': {'type': 'string'}, 'cost_basis': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'institution_price': {'type': 'number'}, 'institution_value': {'type': 'number'}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['anchor', 'candidates', 'success'], 'properties': {'error': {'type': 'string'}, 'anchor': {'anyOf': [{'type': 'object', 'required': ['company_id', 'registered_name', 'trade_name'], 'properties': {'company_id': {'type': 'string'}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['candidate_id', 'company_id', 'registered_name', 'trade_name', 'role', 'state', 'confidence_score', 'domain', 'remote_logo_url', 'country', 'business_type', 'confirmable', 'confirmable_reason'], 'properties': {'role': {'anyOf': [{'enum': ['primary', 'sibling'], 'type': 'string'}, {'type': 'null'}]}, 'state': {'enum': ['pending', 'confirmed', 'dismissed', 'snoozed'], 'type': 'string'}, 'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's domain, a logo source and a display fallback."}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's country, for a light detail panel."}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confirmable': {'type': 'boolean', 'description': 'Whether well_create_company_workspace accepts this candidate now. False for a name-only detected candidate with no groundable identity, or one that has left the surfaced set.'}, 'candidate_id': {'type': 'string', 'description': "The candidate's id — pass to well_create_company_workspace to mint the company workspace from it."}, 'business_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's legal form (SAS, Inc, GmbH), when known."}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remote_logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A resolved logo url when one is known; null otherwise.'}, 'confidence_score': {'type': 'number'}, 'confirmable_reason': {'anyOf': [{'enum': ['not_open', 'not_surfaceable', 'not_primary', 'already_confirmed', 'not_grounded'], 'type': 'string'}, {'type': 'null'}], 'description': 'Why confirmable is false, null when true. not_grounded: no registry or tax identifier to mint from; ask the user to search the registry and pick the verified entry. not_open: no longer the surfaced candidate; re-read the own-company list before acting. Others: not_primary, already_confirmed, not_surfaceable.'}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'root': {'type': 'string', 'description': 'Entity root to inspect. Omit to list every available root (call well_get_schema() with no argument first). Includes the accounting graph (ledger_accounts, journals, journal_entries) alongside companies, invoices, transactions, accounts, and more.'}, 'depth': {'type': 'number', 'default': 1, 'maximum': 3, 'minimum': 0, 'description': 'Relationship depth: 0=scalars only, 1=direct relations (default), 2=nested, 3=level-3 graph'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'root': {'type': 'string'}, 'error': {'type': 'string'}, 'roots': {'type': 'array', 'items': {'type': 'string'}}, 'total': {'type': 'number'}, 'fields': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'type'], 'properties': {'path': {'type': 'string'}, 'type': {'type': 'string'}, 'context': {'type': 'string'}, 'enrichment': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'mark': {'type': 'boolean', 'description': "Advance this person's read cursor to the end of the window, so the next digest starts where this one ended. Pass true when you are about to report the digest to the person, false when you are only inspecting it."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'reason', 'boundary', 'since_at', 'since_at_label', 'time_zone', 'is_first_session', 'truncated', 'errors', 'records', 'skills_run', 'situation', 'skills', 'roster_readable', 'suggested_steps'], 'properties': {'error': {'type': 'string'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'count'], 'properties': {'count': {'type': 'number'}, 'label': {'type': 'string'}}, 'additionalProperties': False}}, 'reason': {'anyOf': [{'enum': ['no_request_context', 'no_person', 'no_workspace', 'digest_unreadable'], 'type': 'string'}, {'type': 'null'}]}, 'skills': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'description'], 'properties': {'id': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'The whole Well skill roster, the same entries well_search_skill returns. The step a click names is loaded from it with well_get_skill.'}, 'records': {'type': 'array', 'items': {'type': 'object', 'required': ['record_type', 'created', 'updated', 'deleted', 'sources'], 'properties': {'created': {'type': 'number'}, 'deleted': {'type': 'number'}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['provider_name', 'created'], 'properties': {'created': {'type': 'number'}, 'provider_name': {'type': 'string'}}, 'additionalProperties': False}}, 'updated': {'type': 'number'}, 'record_type': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'boundary': {'anyOf': [{'enum': ['watermark', 'previous_session', 'first_session'], 'type': 'string'}, {'type': 'null'}], 'description': "Where the window starts: the person's read cursor, their previous sign-in, or neither. Null on a refusal."}, 'since_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The instant the window starts from, set only when a previous sign-in bounded it.'}, 'situation': {'type': 'object', 'required': ['connectors', 'open_period', 'missing_invoices'], 'properties': {'connectors': {'anyOf': [{'type': 'object', 'required': ['connected', 'connected_count'], 'properties': {'connected': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'kinds', 'is_connected', 'connection_status', 'last_successful_sync_at'], 'properties': {'name': {'type': 'string'}, 'kinds': {'type': 'array', 'items': {'enum': ['bank', 'accounting', 'invoicing'], 'type': 'string'}, 'description': 'The data domains this tool serves (bank, accounting, invoicing), as the connect card classifies it.'}, 'is_connected': {'type': 'boolean'}, 'connection_status': {'anyOf': [{'enum': ['enabled', 'processing', 'error', 'need_reconnect', 'to_configure', 'disabled'], 'type': 'string'}, {'type': 'null'}]}, 'last_successful_sync_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': 'The tools this workspace has connected, read from its own connection rows. A row still waiting on its handshake, and one torn down, are not carried.'}, 'connected_count': {'type': 'number', 'description': 'Connected tools, which is the length of `connected`.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Null when the connector read refused, which is not a claim that nothing is connected.'}, 'open_period': {'anyOf': [{'type': 'object', 'required': ['calendar_year', 'calendar_month', 'label', 'is_complete', 'selectable'], 'properties': {'label': {'type': 'string'}, 'selectable': {'type': 'boolean'}, 'is_complete': {'type': 'boolean'}, 'calendar_year': {'type': 'number'}, 'calendar_month': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The month Well opens the close on. Null when no month is ready, or when the period read refused.'}, 'missing_invoices': {'anyOf': [{'type': 'object', 'required': ['row_count', 'hints'], 'properties': {'hints': {'type': 'array', 'items': {'type': 'string'}}, 'row_count': {'type': 'number', 'description': 'Counterparties with settled spend and no invoice, in the open period.'}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'Null when no month was open to read, or when the read refused. Not a claim that nothing is missing.'}}, 'description': 'Where the workspace stands now: its connected tools, its open month, and what that month still owes.', 'additionalProperties': False}, 'time_zone': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The IANA time zone the label was written in, from the workspace's settings."}, 'truncated': {'type': 'boolean', 'description': 'True when events sit past the read cap of 5000, so the counts cover part of the tail only.'}, 'skills_run': {'type': 'array', 'items': {'type': 'object', 'required': ['skill_slug', 'surface', 'count', 'last_run_at'], 'properties': {'count': {'type': 'number'}, 'surface': {'enum': ['web', 'mcp'], 'type': 'string'}, 'skill_slug': {'type': 'string'}, 'last_run_at': {'type': 'string'}}, 'additionalProperties': False}}, 'since_at_label': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The same instant written in the workspace\'s own time zone, such as "Tuesday 8 September at 09:50", ready to quote in the greeting.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'roster_readable': {'type': 'boolean', 'description': 'False when the roster could not be read at all, so `skills` is empty because nothing was readable rather than because the build ships no skill. Propose no next step on false: every slug would be invented and refused.'}, 'suggested_steps': {'type': 'array', 'items': {'type': 'object', 'required': ['skill', 'reason'], 'properties': {'skill': {'type': 'string', 'description': 'A skill id from `skills`.'}, 'reason': {'enum': ['open_gap', 'continuation', 'analysis'], 'type': 'string', 'description': "Why it ranks here: an open gap, the open month's continuation, or analysis."}}, 'additionalProperties': False}, 'description': "The five next steps Well ranked for this workspace, in card order, from its gaps, its open month and the skills already run. Hand these five to well_propose_next_steps in this order, never reordered or replaced. You write the sentence each one is offered as, in the language the person is using, from that skill's own quoted trigger utterances in `skills` and the figures this digest returned. Empty means nothing was offerable: draw no card and write no five of your own."}, 'is_first_session': {'type': 'boolean'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['skill'], 'properties': {'skill': {'type': 'string', 'pattern': '^[a-z0-9-]{1,64}$', 'description': 'The id of the skill to load, as well_search_skill lists it.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'reason', 'skill', 'bytes', 'document'], 'properties': {'bytes': {'type': 'number'}, 'error': {'type': 'string'}, 'skill': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['skill_unknown', 'catalog_unreadable', 'write_skill_in_app'], 'type': 'string'}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'document': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['document_id'], 'properties': {'document_id': {'type': 'string', 'description': 'The document_id well_create_statement_upload returned — pre-allocated at mint, before the upload lands.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'hint': {'type': 'string'}, 'error': {'type': 'string'}, 'graph': {'type': 'object', 'required': ['graph', 'category', 'contributingFileIds', 'silentFileIds'], 'properties': {'graph': {'type': 'object', 'required': ['nodes', 'edges', 'ownCompanyId'], 'properties': {'edges': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'source', 'target', 'kind'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['company_person', 'invoice_issuer', 'invoice_receiver', 'invoice_transaction', 'invoice_document', 'transaction_document', 'account_transaction', 'journal_entry_transaction', 'journal_entry_ledger_account', 'business_relation', 'workspace_connector_link', 'invoice_payment_means', 'transaction_payment_means', 'task_invoice', 'journal_journal_entry', 'provider_for', 'workspace_membership', 'company_note', 'person_note', 'note_note', 'same_entity'], 'type': 'string'}, 'source': {'type': 'string'}, 'target': {'type': 'string'}}, 'additionalProperties': False}}, 'nodes': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'type', 'label'], 'properties': {'id': {'type': 'string'}, 'type': {'enum': ['company', 'account', 'person', 'invoice', 'transaction', 'document', 'ledger_account', 'journal_entry', 'workspace_connector', 'payment_means', 'card', 'check', 'task', 'media', 'journal', 'blueprint_run', 'chat_conversation', 'connector', 'membership', 'memory', 'custom_column', 'field_rule', 'provider', 'note'], 'type': 'string'}, 'label': {'type': 'string'}}, 'additionalProperties': {}}}, 'ownCompanyId': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'category': {'anyOf': [{'enum': ['companies', 'banks', 'people', 'invoices', 'transactions', 'documents'], 'type': 'string'}, {'type': 'null'}]}, 'silentFileIds': {'type': 'array', 'items': {'type': 'string'}}, 'contributingFileIds': {'type': 'array', 'items': {'type': 'string'}}}, 'description': 'The frozen record graph for this import, taken from the same snapshot as `records`. Never present on "processing" or "not_found_yet". Like `records`, its counterparty fields are null (frozen before resolution runs) — see `records_url` for the live values.', 'additionalProperties': False}, 'phase': {'anyOf': [{'enum': ['queued', 'extracting', 'categorized', 'importing'], 'type': 'string'}, {'type': 'null'}]}, 'reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'status': {'enum': ['not_found_yet', 'processing', 'needs_account', 'imported', 'duplicate', 'skipped', 'failed'], 'type': 'string'}, 'records': {'type': 'array', 'items': {'type': 'object', 'required': ['root', 'id', 'date', 'label', 'amount', 'currency', 'counterparty', 'receiver', 'category', 'primaryBadge', 'secondaryBadge', 'openingBooked', 'closingBooked', 'balanceAtFrom', 'domain'], 'properties': {'id': {'type': 'string'}, 'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'root': {'enum': ['companies', 'people', 'invoices', 'documents', 'transactions', 'accounts', 'connectors', 'workspace_connectors', 'ledger_accounts', 'journals', 'journal_entries', 'tax_rates', 'invoice_transactions', 'memberships', 'payment_means', 'media', 'emails', 'phones', 'web_links', 'locations', 'categories', 'invoice_items', 'account_balances', 'exchange_rates', 'cards', 'checks', 'invoice_payment_means', 'workspaces', 'blueprint_runs', 'chat_conversations', 'tasks', 'billing_events'], 'type': 'string'}, 'label': {'type': 'string'}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'receiver': {'anyOf': [{'type': 'object', 'required': ['name', 'logo_url'], 'properties': {'name': {'type': 'string'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}]}, 'counterparty': {'anyOf': [{'type': 'object', 'required': ['name', 'logo_url'], 'properties': {'name': {'type': 'string'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}]}, 'primaryBadge': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'balanceAtFrom': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'closingBooked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'openingBooked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'secondaryBadge': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'description': 'Transactions this import minted as new rows — matched or ambiguous lines link an existing transaction and are excluded. Present only on a terminal "imported" result that carries a snapshot. The snapshot freezes at mint time, so `counterparty` is always null here — resolution runs asynchronously after import; open `records_url` for the live resolved value.'}, 'success': {'type': 'boolean'}, 'document_id': {'type': 'string'}, 'imported_at': {'type': 'string'}, 'records_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Login-gated deep link to the workspace's transactions table — opened on the first minted record when `records` is non-empty, otherwise the plain table."}, 'minted_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Lines minted as new transactions. Absent means the row predates count tracking — treat as unknown, never as 0.'}, 'review_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Lines skipped as an ambiguous cross-connector match, pending review. Absent means the row predates count tracking — treat as unknown, never as 0.'}, 'matched_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Lines linked to an existing cross-connector transaction. Absent means the row predates count tracking — treat as unknown, never as 0.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'already_present_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Lines an earlier import already carried — a partial-overlap re-export mints only the new lines, so the four counts cover the file's promotable lines. Absent means the row predates count tracking — treat as unknown, never as 0."}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'counterparties_pending': {'type': 'boolean', 'description': 'Whether any minted transaction still awaits its counterparty. True right after import while the from/to parties resolve in the background; absent when the result carries no minted transactions.'}, 'statement_extraction_id': {'type': 'string'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['worklist'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "`uncategorized_window` only: the day AFTER the window's last, exclusive."}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': "`uncategorized_window` only: the window's first day, inclusive."}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': '`counterparties_to_categorize` only: the calendar months to check, the same list the card takes. Every month must have ended.'}, 'worklist': {'enum': ['accounts_needing_company', 'uncategorized_window', 'unposted_transactions', 'invoice_sources_for_pick', 'counterparties_to_categorize'], 'type': 'string', 'description': "Which repair gate to check. Each one names its own required scope in this tool's description."}, 'fiscal_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "`unposted_transactions` only: the period's fiscal year."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': '`unposted_transactions` only: the fiscal period, 1-12 for a month; 13 is the adjustment period and resolves to no rows.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['worklist', 'card_tool', 'success'], 'properties': {'open': {'type': 'boolean', 'description': 'Whether the worklist still holds a row. Absent when `success` is false — an unknown gate, not a clear one.'}, 'count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "How many rows the gate still holds. Carried only by the kinds whose read counts the whole set (`invoice_sources_for_pick`, and `counterparties_to_categorize` where it equals the card's `uncategorized_count`); absent on the kinds answered one row at a time, and absent whenever `success` is false."}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'worklist': {'type': 'string', 'description': 'The gate that was checked, echoed back.'}, 'card_tool': {'type': 'string', 'description': "The tool that draws this worklist's repair card. Call it only when `open` is true."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['invites', 'target'], 'properties': {'notify': {'type': 'boolean', 'description': 'Send the invitation email now. Defaults to true. Pass false to create or reissue the pending membership WITHOUT emailing, when a later explicit step sends it — e.g. assigning an owner by a typed email, then sending the invite from the invite card. Applies to a workspace target only; a group invite always notifies.'}, 'target': {'oneOf': [{'type': 'object', 'required': ['kind'], 'properties': {'kind': {'type': 'string', 'const': 'workspace'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['kind', 'group_id'], 'properties': {'kind': {'type': 'string', 'const': 'group'}, 'group_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}, 'description': 'Invite into a workspace group the caller belongs to.', 'additionalProperties': False}], 'description': 'Where the invites land: this workspace, or a workspace group.'}, 'invites': {'type': 'array', 'items': {'type': 'object', 'required': ['email', 'role'], 'properties': {'role': {'enum': ['admin', 'member'], 'type': 'string', 'description': 'The role to grant on acceptance: admin or member.'}, 'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': "The teammate's email address."}}, 'additionalProperties': False}, 'maxItems': 20, 'minItems': 1, 'description': 'The people to invite, 1 to 20 per call.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results', 'success'], 'properties': {'error': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['email', 'status', 'invitation_email_sent'], 'properties': {'email': {'type': 'string'}, 'status': {'enum': ['sent', 'reissued', 'refused'], 'type': 'string'}, 'person_id': {'type': 'string', 'description': "The invitee's person id on a successful workspace invite (sent or reissued). Use it to assign the person as an owner right after inviting, with no second lookup. Absent on a refusal and on a group invite."}, 'refusal_reason': {'type': 'string', 'description': 'Present only when status is refused. Named reasons include ALREADY_WORKSPACE_MEMBER (the address already has access) and INSUFFICIENT_PERMISSIONS (the caller is not an owner or admin).'}, 'invitation_email_sent': {'type': 'boolean', 'description': 'False when the invite persisted but the email did not send — offer a resend.'}}, 'additionalProperties': False}, 'description': 'One result per invite, in the order they were sent.'}, 'success': {'type': 'boolean'}, 'workspace_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspace_connector_id', 'tool'], 'properties': {'args': {'type': 'object', 'description': 'Arguments object passed straight to the provider tool. Omit if the tool takes none.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'tool': {'type': 'string', 'minLength': 1, 'description': "The provider tool name to run (one of the connector's available_tools)."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'workspace_connector_id': {'type': 'string', 'minLength': 1, 'description': "The connected provider's workspace_connector_id (from well_list_connectors)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'tool': {'type': 'string'}, 'error': {'type': 'string'}, 'result': {}, 'success': {'type': 'boolean'}, 'error_code': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'months_back': {'type': 'integer', 'maximum': 24, 'minimum': 1, 'description': 'How many complete month ends to carry per account, oldest first. Omit for the current reading alone.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'base_currency', 'own_company_id', 'partial', 'unreadable_rows', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['account_id', 'account_name', 'account_type', 'account_subtype', 'ownership', 'company_id', 'company_name', 'account_currency', 'institution_name', 'masked_account_number', 'duplicate_of_account_id', 'balance', 'verification_rejected'], 'properties': {'balance': {'anyOf': [{'type': 'object', 'required': ['closing_booked', 'opening_booked', 'closing_value', 'opening_value', 'currency', 'balance_at_from', 'balance_at_to', 'is_reconstructed'], 'properties': {'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'balance_at_to': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'closing_value': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'opening_value': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'closing_booked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'opening_booked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'balance_at_from': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'is_reconstructed': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'ownership': {'type': 'string'}, 'account_id': {'type': 'string'}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'month_ends': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'reading'], 'properties': {'month': {'type': 'string'}, 'reading': {'anyOf': [{'type': 'object', 'required': ['closing_booked', 'opening_booked', 'closing_value', 'opening_value', 'currency', 'balance_at_from', 'balance_at_to', 'is_reconstructed'], 'properties': {'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'balance_at_to': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'closing_value': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'opening_value': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'closing_booked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'opening_booked': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'balance_at_from': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'is_reconstructed': {'type': 'boolean'}}, 'additionalProperties': False}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'account_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'account_type': {'type': 'string'}, 'company_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'account_subtype': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'account_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'institution_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'masked_account_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'verification_rejected': {'type': 'boolean'}, 'duplicate_of_account_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'error': {'type': 'string'}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'unreadable_rows': {'type': 'number'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Max accounts to return (default 200).'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'company_search': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Narrows the companies offered on the card by name, server-side. Use it when the workspace holds more companies than one page and the one the user means is not on it.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['records', 'success'], 'properties': {'error': {'type': 'string'}, 'records': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The company that IS the workspace; null when no anchor is set.'}, 'company_catalog': {'type': 'object', 'required': ['returned', 'total', 'truncated', 'failed'], 'properties': {'total': {'type': 'number'}, 'failed': {'type': 'boolean'}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}}, 'description': 'How many companies the card was given against how many the workspace holds. `truncated: true` means the one the user means may not be on the card — narrow with `company_search`.', 'additionalProperties': False}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'convention'], 'properties': {'to': {'type': 'string', 'description': 'EXCLUSIVE end of the window, ISO-8601 — the first instant after the last month you want.'}, 'from': {'type': 'string', 'description': 'Inclusive start of the window, ISO-8601 (e.g. 2026-06-01).'}, 'convention': {'enum': ['signed', 'magnitude'], 'type': 'string', 'description': 'Which sign means money leaving, as YOU elected it for the figure these exemptions apply to — the same election `well_render_burn` takes. This read does not elect its own: a share of positive rows cannot tell a business with revenue apart from two feeds pooled together, and guessing would either refuse ordinary workspaces or total two conventions as one. Pass "signed" when the window\'s rows are mostly negative for spend, "magnitude" when the feed stores outflows as positive numbers. A "magnitude" window is refused, because direction then lives in a field this read does not group on.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'groups', 'currency', 'total', 'unclassified_amount', 'unclassified_count', 'partial', 'unreadable_rows', 'window'], 'properties': {'error': {'type': 'string'}, 'total': {'type': 'number', 'description': 'The sum of groups[].amount, and nothing else.'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['category_key', 'label', 'amount', 'count'], 'properties': {'count': {'type': 'number'}, 'label': {'type': 'string'}, 'amount': {'type': 'number', 'description': "This category's outflow in the window, as a magnitude."}, 'category_key': {'type': 'string', 'description': 'The value an exemption is matched on, exactly as the rows store it.'}}, 'additionalProperties': False}}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean', 'description': 'True when the sum behind this card measured nothing. `groups` is then empty, so there is no list to choose from: say so and offer to try again.'}, 'success': {'type': 'boolean'}, 'currency': {'type': 'string', 'description': 'The one currency every row shares; empty only when the window held no row.'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'unreadable_rows': {'type': 'number', 'description': 'Rows in the window whose amount could not be read. They are in no figure here, including the unclassified one.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'unclassified_count': {'type': 'number'}, 'unclassified_amount': {'type': 'number', 'description': 'Outflow this list cannot offer as a choice: rows with no category, which no exemption ever matches, and rows whose category is outside the shared vocabulary, which cannot be named here.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['groups', 'excluded_not_owned', 'unsettled_ownership', 'unreadable_balances', 'unreadable_currency', 'folded_duplicates', 'partial', 'success'], 'properties': {'error': {'type': 'string'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['account_type', 'account_count', 'subtotals'], 'properties': {'subtotals': {'type': 'array', 'items': {'type': 'object', 'required': ['currency', 'amount'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': False}}, 'account_type': {'type': 'string'}, 'account_count': {'type': 'number'}}, 'additionalProperties': False}}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'folded_duplicates': {'type': 'number'}, 'excluded_not_owned': {'type': 'number'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'unreadable_balances': {'type': 'number'}, 'unreadable_currency': {'type': 'number'}, 'unsettled_ownership': {'type': 'number'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Name search across the full catalog (e.g. a specific bank). Omit for the curated, matched-first view.'}, 'kind': {'enum': ['bank', 'accounting', 'invoicing', 'upload_surface', 'storage'], 'type': 'string', 'description': 'Scope the card server-side. Three financial domains: "bank" (every bank and neobank, including the long tail of open-banking institutions, plus the platforms that hold an account like Qonto and Pennylane — never a payroll or billing tool that merely reports transactions), "accounting", and "invoicing". Plus two scopes the server resolves from display categories rather than from a financial domain: "upload_surface", the places invoices ARRIVE (mailboxes, messaging apps, file drives), and "storage", the drives Well FILES INTO (Google Drive, Dropbox, OneDrive). The last two are opposite directions on the same drives, so a workspace can hold both connections and each is offered on its own card. Use this for a connect-a-bank, a connect-where-invoices-arrive or a connect-where-Well-files step instead of filtering the default view yourself. Omit for every connectable connector.'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max connectors to return (1-100, default 50).'}, 'title': {'type': 'string', 'maxLength': 120, 'description': 'Heading for the connect card shown to the user, OVERRIDING the wording the card otherwise derives from the scope/kind. Use it to frame the step in its flow (e.g. "Connect your accounting tool for the close"). At most 120 characters. Omit to keep the default wording for the requested kind.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Number of connectors to skip, for paging (default 0).'}, 'country': {'enum': ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'], 'type': 'string', 'description': 'The company\'s country as an ISO 3166-1 alpha-2 code (e.g. "FR"). When set, the connectors that serve that country sort first, then the ones that serve its region, then the rest — the order only, no row is dropped. Use it on a connect-a-bank step so the banks that fit the company appear first; take it from the workspace identity\'s country. Omit when the country is unknown, and the order is left unchanged.'}, 'subtitle': {'type': 'string', 'maxLength': 240, 'description': "Supporting line under the connect card's heading, OVERRIDING the scope-derived subtitle. At most 240 characters. Omit to keep the default wording for the requested kind."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'from_selection': {'type': 'boolean', 'const': True, 'description': "Scope the card to the connectors behind the counterparties the user picked on the missing-invoices card in this conversation, each installable one pre-checked. Use it for the connect step that FOLLOWS a vendor pick. It returns those vendors' connectors and NOTHING else: a picked connector that brings no invoices in is dropped, and no accounting or invoicing tool the user did not pick is offered here: that offer is its own step, scoped with `kind`. Cannot be combined with `q` or `kind`: those name a catalog to browse, and this names a set already decided. Returns an empty list when this conversation holds no pick for this workspace, or when no picked counterparty matched a connector."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'include_unsent_counts': {'type': 'boolean', 'const': True, 'description': "Add the top-level `unsent_document_counts`: every tool Well forwards this workspace's documents to, each with how many documents it has not received yet. That array is the whole answer — it holds every one of the workspace's outbound connections, whatever catalog page was requested, and the rows carry no count at all. Off by default, because it costs an extra read. The figure is the workspace's whole backlog, not a period's."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['install_all_url', 'install_all_omitted', 'success'], 'properties': {'error': {'type': 'string'}, 'limit': {'type': 'number', 'description': 'The page size that was REQUESTED. The catalog may return fewer.'}, 'scope': {'enum': ['catalog', 'bank', 'accounting', 'invoicing', 'upload_surface', 'storage', 'picked_vendors'], 'type': 'string', 'description': "What this result is a list OF: the requested kind, the picked vendors' connectors, or the curated catalog when neither was asked for. The card words itself from this, so it never describes the rows as a domain that was not requested."}, 'total': {'type': 'number', 'description': 'Every connector matching the query, across all pages — NOT the length of `connectors`.'}, 'offset': {'type': 'number', 'description': 'How many catalog rows this page skipped.'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'row_count': {'type': 'number', 'description': 'How many rows this result puts ON THE CARD, prepended rows included. `0` on a `picked_vendors` scope means the pick has no connector behind it that can bring an invoice in: the card carries nothing to tick, so say so in half a sentence and move on. Not a paging cursor — `page_count` is.'}, 'connectors': {'type': 'array', 'items': {'type': 'object', 'required': ['service_id', 'name', 'category_id', 'status', 'direction', 'data_domains', 'invoice_source', 'reason', 'logo_url', 'popularity_score', 'is_matched', 'is_selected', 'match_score', 'is_connected', 'connection_status', 'workspace_connector_id', 'last_successful_sync_at', 'sync_in_progress', 'is_preselected', 'install_url', 'countries'], 'properties': {'name': {'type': 'string'}, 'reason': {'enum': ['catalog', 'picked_vendor'], 'type': 'string'}, 'status': {'type': 'string'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'countries': {'anyOf': [{'type': 'array', 'items': {'type': 'string'}}, {'type': 'null'}]}, 'direction': {'type': 'string'}, 'is_matched': {'type': 'boolean'}, 'service_id': {'type': 'string'}, 'category_id': {'type': 'string'}, 'install_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'is_selected': {'type': 'boolean'}, 'match_score': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'data_domains': {'anyOf': [{'type': 'array', 'items': {'enum': ['bank', 'accounting', 'invoicing'], 'type': 'string'}}, {'type': 'null'}]}, 'is_connected': {'type': 'boolean'}, 'invoice_source': {'type': 'boolean'}, 'is_preselected': {'type': 'boolean'}, 'popularity_score': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'sync_in_progress': {'type': 'boolean'}, 'connection_status': {'anyOf': [{'enum': ['enabled', 'processing', 'error', 'need_reconnect', 'to_configure', 'disabled'], 'type': 'string'}, {'type': 'null'}]}, 'workspace_connector_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'last_successful_sync_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'page_count': {'type': 'number', 'description': "The catalog page's own length, and the ONLY safe paging cursor: advance by `offset + page_count`. `connectors` can be LONGER — on the first page of an unsearched browse the workspace's already-connected rows are prepended so they cannot be lost to the catalog's ordering — so paging by the array's length silently skips exactly that many catalog rows on every later request."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'install_all_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "One link that installs every installable connector in this result. Null when the result offers nothing to install, or when its scope names a set the reader has not chosen. When it is non-null it is the ONLY install link the answer offers — do not list the rows' own install_url beside it. When it is null, the rows' own install_url is the offer instead."}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'install_all_omitted': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The service ids install_all_url could not carry, because one link names a bounded number of connectors. Offer these rows their own install_url instead of promising the batch link covers them.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'unsent_document_counts': {'type': 'array', 'items': {'type': 'object', 'required': ['service_id', 'name', 'workspace_connector_id', 'unsent_document_count', 'unsent_document_count_is_upper_bound'], 'properties': {'name': {'type': 'string'}, 'service_id': {'type': 'string'}, 'unsent_document_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'workspace_connector_id': {'type': 'string'}, 'unsent_document_count_is_upper_bound': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': "Every tool this workspace forwards documents to, each with the documents it has not received yet, biggest backlog first. Present only when `include_unsent_counts` was set. THIS IS THE ONLY PLACE THE BACKLOG IS REPORTED: it is not a page, it carries the workspace's whole set of outbound connections whether or not the requested catalog page holds their rows, and the catalog rows carry no count. An empty array means the workspace forwards to nothing; an absent field means nothing was measured. `unsent_document_count_is_upper_bound: true` means a document filter applies to that connection, so the count is a maximum and reads as `up to <n>`. Every count is read off Well's own forward record, so it measures what Well wrote down rather than what the tool confirmed. Name a tool by its `name`. An entry reading `0` is a tool that is up to date: say nothing about it."}, 'picked_vendors_filtered': {'type': 'number', 'description': "How many of the picked vendors' connectors were dropped for bringing no invoices in. Present on the `picked_vendors` scope only. Above zero means the card is SHORTER than the pick: say that those vendors' tools cannot deliver an invoice, rather than letting the gap read as a pick the user never made."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspace_connector_id'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'workspace_connector_id': {'type': 'string', 'minLength': 1, 'description': "The connected provider's workspace_connector_id (from well_list_connectors)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'tools': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}, 'description': {'type': 'string'}, 'inputSchema': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'additionalProperties': False}}, 'total': {'type': 'number'}, 'status': {'type': 'string'}, 'success': {'type': 'boolean'}, 'usage_notes': {'type': 'string'}, 'reconnect_url': {'type': 'string'}, 'connector_slug': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'cursor': {'type': 'string', 'description': 'The next page of the workspace-wide uncategorized sweep: pass back the `next_cursor` the previous call returned. Only that sweep pages, so this needs `uncategorized_only: true` and NO `periods`, because a period scope returns every month it covers in one call.'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': "The calendar months whose counterparties to list, 1-12. Each month costs one separate read of that month's spend. Duplicates are refused."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'uncategorized_only': {'type': 'boolean', 'const': True, 'description': "Keep only the counterparties that carry no industry category. WITH `periods`: the uncategorized counterparties OF those months. Use it whenever the question is which of a period's suppliers still need a category. WITHOUT `periods`: a WORKSPACE-WIDE sweep for every uncategorized counterparty, 50 rows per page plus the total, with a `next_cursor` for the page after this one."}, 'missing_ledger_only': {'type': 'boolean', 'const': True, 'description': 'A workspace-wide sweep for the counterparties that have a bank transaction and still need a ledger account (COA) default set for the direction their transactions take — the ledger-assignment worklist. It is its OWN scope: never pass it with `periods`, `uncategorized_only`, or `cursor`. Each row carries `needs_payable`/`needs_receivable` and the AP/AR defaults it holds now (a needed slot is empty), and rides in `ledger_rows` rather than `rows`.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'success'], 'properties': {'mode': {'enum': ['periods', 'uncategorized_only', 'missing_ledger_only'], 'type': 'string', 'description': 'Which SCOPE the call asked for; the row fields that are populated follow from it. `periods` whenever the call named months, whether or not it also filtered to the uncategorized ones. `missing_ledger_only` returns its rows in `ledger_rows`, not `rows`.'}, 'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id', 'name', 'domain', 'logo_url', 'calendar_year', 'calendar_month', 'period_label', 'tx_count', 'base_total_amount', 'categories', 'is_categorized', 'suggested_categories', 'suggested_retrieval'], 'properties': {'name': {'type': 'string'}, 'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's stored logo; null when enrichment has not landed one."}, 'tx_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'Transactions missing an invoice in the period. Null on the sweep.'}, 'categories': {'type': 'array', 'items': {'type': 'object', 'required': ['category_id', 'name'], 'properties': {'name': {'type': 'string'}, 'category_id': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'The industry categories this counterparty carries; empty when none.'}, 'company_id': {'type': 'string'}, 'period_label': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The month this row belongs to, e.g. "June 2026". Null on the sweep.'}, 'calendar_year': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'Null on the uncategorized sweep, which names no period.'}, 'calendar_month': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}], 'description': 'Null on the uncategorized sweep, which names no period.'}, 'is_categorized': {'type': 'boolean'}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': "Sum in base_currency of the period's transactions missing an invoice. Null on the sweep, and null when an FX rate was missing."}, 'suggested_retrieval': {'anyOf': [{'enum': ['agent', 'upload', 'connect'], 'type': 'string'}, {'type': 'null'}], 'description': "How the app currently offers to obtain this counterparty's invoices: agent (a browser agent runs the supplier portal), connect (connect the matched service and Well fetches them), upload (the user supplies the file). Derived from the PROVIDER match, NOT from the categories — the category does not select a retrieval path today. Null on the uncategorized sweep, which has no period to route."}, 'suggested_categories': {'type': 'array', 'items': {'type': 'object', 'required': ['category_id', 'name', 'confidence', 'rank', 'reasoning'], 'properties': {'name': {'type': 'string'}, 'rank': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "1 is the classifier's top proposal."}, 'reasoning': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The classifier's own account of this proposal, or null when the run stored none."}, 'confidence': {'type': 'number', 'description': "0..1, the classifier's own scale."}, 'category_id': {'type': 'string', 'description': 'The catalog id of the proposed label — pass it straight to `well_update_company` to accept it.'}}, 'additionalProperties': False}, 'description': "A stored classifier PROPOSAL is a candidate label, never a decision: `categories` is what this counterparty actually carries, and only a write makes a proposal true. Highest confidence first, at most three. Empty when the classifier has not run, abstained, or a human already resolved its proposal — an empty array is not evidence that no label fits. Present on both scopes. Report a proposal as a suggestion to the user, never as the counterparty's industry, and NOTE this is unrelated to `suggested_retrieval`, which is about fetching invoices."}}, 'additionalProperties': False}}, 'error': {'type': 'string'}, 'hints': {'type': 'array', 'items': {'type': 'string'}}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'row_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'ledger_rows': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'next_cursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The uncategorized sweep's next page: pass it back as `cursor`. Null when this page ends the sweep, absent on the periods scope, which pages nothing."}, 'total_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Counterparties MATCHING the call, before the row cap, so a capped sweep says what it left out. On the periods scope: the DISTINCT counterparties `rows` names, and a multi-month call lists one counterparty on one row per month, so row_count can exceed it. Under `uncategorized_only` it counts the uncategorized ones alone; the scope's whole population is `categorized_count` plus `uncategorized_count`. Under `missing_ledger_only` it is the worklist actually returned and equals `row_count`: that scope reads the first 500 counterparties needing a default, so a worklist that fills 500 is a FLOOR, not a complete count. Assign those and read the scope again for the rest."}, 'workspace_id': {'type': 'string'}, 'base_currency': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'periods_covered': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label'], 'properties': {'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'The months the result covers, oldest first.'}, 'categorized_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'COUNTERPARTIES of the scope that carry at least one category, counted over the whole scope, not over `rows`, and counted once however many months a counterparty appears in. Under `uncategorized_only` these are exactly the counterparties the result withheld, so a non-zero figure beside rows that are all uncategorized is the coverage, not a contradiction.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'uncategorized_only': {'type': 'boolean', 'description': 'Whether `rows` holds ONLY the counterparties that carry no category. True on the workspace-wide sweep and on a period scope the call filtered. When true, `categorized_count` counts counterparties the result did NOT list.'}, 'uncategorized_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "COUNTERPARTIES of the scope that carry none, counted the same way. This is the outstanding work; with `categorized_count` it is the scope's whole population."}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Max accounts to return; the chart is capped either way.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['accounts', 'success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'accounts': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'code': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'person_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 100, 'minItems': 1, 'description': 'Person ids to resolve with their membership state (the `provided` source).'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': "Fiscal year (the calendar year the workspace's fiscal year STARTED in). `from_assigned_gaps` only."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026. `from_assigned_gaps` only.'}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'Fiscal period, 1-12. `from_assigned_gaps` only, paired with `fiscal_year`. The adjustment period (13) is refused.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December. `from_assigned_gaps` only, paired with `calendar_year`.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'include_detected': {'type': 'boolean', 'description': 'Omit the detected same-domain teammates when false. Defaults to true.'}, 'from_assigned_gaps': {'type': 'boolean', 'description': "Resolve the candidates from the owners of the period's missing-invoice gaps, server-side, instead of `person_ids`. The detected teammates are omitted, and `include_detected` is treated as false."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['candidates', 'targets', 'roles', 'me_person_id', 'success'], 'properties': {'error': {'type': 'string'}, 'roles': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'hint'], 'properties': {'hint': {'type': 'string'}, 'label': {'type': 'string'}, 'value': {'enum': ['admin', 'member'], 'type': 'string'}}, 'additionalProperties': False}, 'description': 'The assignable roles, `admin` or `member`, each with a one-line hint.'}, 'success': {'type': 'boolean'}, 'targets': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'id', 'name', 'workspace_count'], 'properties': {'id': {'type': 'string'}, 'kind': {'enum': ['workspace', 'group'], 'type': 'string'}, 'name': {'type': 'string'}, 'workspace_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'How many workspaces a group holds; null for the workspace target.'}}, 'additionalProperties': False}, 'description': 'Where an invite can land: this workspace, plus any workspace group the caller belongs to.'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['person_id', 'name', 'email', 'avatar_url', 'state', 'source', 'invite_expires_at'], 'properties': {'name': {'type': 'string'}, 'email': {'type': 'string'}, 'state': {'enum': ['not_member', 'pending', 'active'], 'type': 'string', 'description': '`active` already has access; `pending` was invited and not yet accepted; `not_member` can be invited.'}, 'source': {'enum': ['detected', 'provided'], 'type': 'string', 'description': "`detected` shares the workspace owner's email domain; `provided` was named by the caller's person_ids."}, 'person_id': {'type': 'string'}, 'avatar_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'invite_expires_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'When a `pending` invite lapses; null on every other state.'}}, 'additionalProperties': False}}, 'me_person_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The caller's own person id, so the card never offers to invite them."}, 'workspace_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': 'Several calendar months in one call, 1-12. Each month costs one separate read, so name only the months you need. Duplicates are refused.'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': "Fiscal year (the calendar year the workspace's fiscal year STARTED in)."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'Fiscal period, 1-12. The adjustment period (13) is refused: it has no calendar month.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['transactions', 'success'], 'properties': {'error': {'type': 'string'}, 'sampled': {'type': 'boolean', 'description': "True always: each counterparty's rows are a bounded sample, so a counterparty whose every gap fell outside the sample is under-represented. Use it to assign owners, not to count a period's total gaps."}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'row_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transaction rows returned in `transactions` (a bounded sample per counterparty).'}, 'me_person_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The calling person, against which each row's `bucket` is computed; null when the token carries no person."}, 'transactions': {'type': 'array', 'items': {'type': 'object', 'required': ['transaction_id', 'date', 'description', 'counterparty', 'amount', 'currency', 'base_amount', 'owners', 'bucket', 'period'], 'properties': {'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The line's posting date (YYYY-MM-DD), or null when undated."}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'The line amount in `currency`, sign preserved (negative = money out); null when unknown.'}, 'bucket': {'enum': ['no_owner_set', 'assigned_to_me', 'assigned_to_others'], 'type': 'string', 'description': "This line's transaction owner set relative to the caller: no owner set, includes the caller, or includes only others."}, 'owners': {'type': 'array', 'items': {'type': 'object', 'required': ['person_id', 'name'], 'properties': {'name': {'type': 'string'}, 'person_id': {'type': 'string'}}, 'additionalProperties': False}, 'description': "The line's live transaction owner set, highest-precedence first. Empty means no owner set was found; it does not prove that no card rule or other legacy owner exists."}, 'period': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label'], 'properties': {'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'description': 'The month this line belongs to.', 'additionalProperties': False}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': "The same amount in `base_currency`, sign preserved; null when no rate covered the line's date."}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The bank's remittance text; may be null."}, 'counterparty': {'type': 'object', 'required': ['company_id', 'name', 'logo_url', 'mode', 'matched_connector_service_id'], 'properties': {'mode': {'anyOf': [{'enum': ['agent', 'connect', 'upload'], 'type': 'string'}, {'type': 'null'}], 'description': 'How the missing document can be collected, after the same downgrade rules the missing-invoices card applies; null when no route resolved. Word the retrieval affordance off this, never off a name.'}, 'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The matched provider's logo, when one was matched to this counterparty; else null."}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'matched_connector_service_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The connector standing for a `connect` route; null for a route with no matched connector.'}}, 'additionalProperties': False}, 'transaction_id': {'type': 'string', 'description': "Pass this to well_assign_missing_invoice_owners to set the line's owner set."}}, 'additionalProperties': False}, 'description': "The missing-invoice lines, with no owner set first, then the caller's own, then those owned only by others."}, 'base_currency': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'periods_covered': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label'], 'properties': {'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'The months the result covers, oldest first.'}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Total missing-invoice transactions the window holds across all counterparties, sampled or not.'}, 'no_owner_set_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Returned rows with no transaction owner set.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'assigned_to_me_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Returned rows whose transaction owner set includes the caller.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'transactions_omitted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Missing-invoice transactions the window holds beyond the returned sample (`transaction_count` − `row_count`).'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'assigned_to_others_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Returned rows whose transaction owner set includes only other people.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': 'Several calendar months in one call, 1-12. Each month costs one separate read, so name only the months you need. Duplicates are refused.'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': "Fiscal year (the calendar year the workspace's fiscal year STARTED in)."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'Fiscal period, 1-12. The adjustment period (13) is refused: it has no calendar month.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'company_id', 'name', 'logo_url', 'domain_resolution', 'months', 'tx_count', 'transactions', 'transactions_omitted', 'base_total_amount', 'mode', 'available_modes', 'suggested_action', 'matched_provider_name', 'matched_provider_url', 'matched_provider_has_blueprint', 'matched_connector_service_id'], 'properties': {'id': {'type': 'string', 'description': 'Stable row key: the counterparty company id, or the proof task id of a gap that resolved no company. One key per counterparty for the whole call, so it never repeats across the months the row covers.'}, 'mode': {'enum': ['agent', 'upload', 'connect'], 'type': 'string', 'description': "How the app's card offers to obtain the invoice: agent (a browser agent runs the supplier portal — the provider carries a blueprint OR a real portal URL the agent runs against), connect (connect matched_connector_service_id and Well fetches it), upload (the user supplies the file). Decided from the provider facts: connect wins when a connector matched, else agent when it can run, else upload."}, 'name': {'type': 'string'}, 'months': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label', 'tx_count', 'base_total_amount', 'proof_task_id', 'acquisition_status', 'refusal_reason'], 'properties': {'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transactions this counterparty is missing an invoice for in THIS month alone.'}, 'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'proof_task_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The close-proof task bound to this month's gap; null until one is minted."}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'refusal_reason': {'anyOf': [{'enum': ['noop_not_proof', 'noop_no_gap_match', 'noop_ambiguous_gaps', 'noop_task_unavailable', 'warn_bridge_error'], 'type': 'string'}, {'type': 'null'}], 'description': "Populated only when THIS month's acquisition_status is refused."}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': "This month's sum in `base_currency`; null when an FX rate was missing for any of its transactions."}, 'acquisition_status': {'enum': ['waiting', 'processing', 'mapped', 'refused'], 'type': 'string'}}, 'additionalProperties': False}, 'description': "The months of the call this counterparty is missing an invoice in, oldest first: one entry, or several when the same counterparty owes an invoice in more than one of them. The envelope's `periods_covered` names every month READ; this names the months THIS row covers."}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The counterparty's mark: the matched provider's stored logo, else the counterparty company's own stored logo — the one company enrichment resolved from that company's domain. Null when the row matched no provider and its company carries no stored logo. A null here does not mean the card draws initials: the widget is additionally offered a mark derived from the company's own host, which this field never carries."}, 'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transactions missing an invoice, summed across every month in `months`.'}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'transactions': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'date', 'description', 'category', 'category_key', 'amount', 'currency', 'base_amount'], 'properties': {'id': {'type': 'string'}, 'date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The day the transaction posts under (YYYY-MM-DD); null when it carries no date.'}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Signed amount in `currency` — negative when the money leaves the account.'}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Display label of THIS transaction's management category, not the group's. Null when uncategorized."}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'The same amount converted to `base_currency`, still signed. Sum the magnitudes of these to reach `base_total_amount`; null when no FX rate covered the date.'}, 'description': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The bank's remittance text — what distinguishes one line from the next. Null when the row carries none."}, 'category_key': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Stable taxonomy key of the same category — branch on this, never on the label. Null when off-catalog.'}}, 'additionalProperties': False}, 'description': "The row's own transactions, oldest month first, at most 25 for the WHOLE row: the same bounded sample the app's card lists under the counterparty. A row spanning months carries one sample across them, not one per month."}, 'available_modes': {'type': 'array', 'items': {'enum': ['agent', 'connect', 'upload'], 'type': 'string'}, 'description': 'Every collection method this counterparty offers, agent first and upload last — 2 or 3 entries, never one. `agent` and `upload` stand for every row; `connect` joins them only when the catalog holds a connector for the matched provider, which is exactly what a non-null matched_connector_service_id reports. `mode` names the ONE route the card suggests, this names all the routes the user may pick.'}, 'suggested_action': {'enum': ['connect_provider', 'chrome_extension_fetch', 'manual_upload'], 'type': 'string', 'description': "The backend's routing decision for the row. `chrome_extension_fetch` when the matched provider can run the browser agent (a blueprint or a real portal URL), `connect_provider` when a connector matched, else `manual_upload`. `mode` is the same decision in the card's vocabulary."}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum in base_currency across every month in `months`; null when an FX rate was missing for any transaction of any of them.'}, 'domain_resolution': {'enum': ['resolved', 'pending', 'none'], 'type': 'string', 'description': "The counterparty company's own domain-discovery state: 'resolved' when it already carries a domain (any source); 'pending' when a web-evidence resolve is durably enqueued and still open; 'none' when no domain is known and nothing is in flight."}, 'matched_provider_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'transactions_omitted': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "How many of the row's transactions the cap left out: `tx_count` minus the listed ones."}, 'matched_provider_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'matched_connector_service_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'matched_provider_has_blueprint': {'type': 'boolean'}}, 'additionalProperties': False}, 'description': "The card's rows, ONE per counterparty for the whole call, in the order the oldest month listed them, each naming the months it covers in `months`. A counterparty owing an invoice in several of the months read is one row, never one per month."}, 'error': {'type': 'string'}, 'hints': {'type': 'array', 'items': {'type': 'string'}}, 'months': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label', 'fiscal_year', 'fiscal_period', 'row_count', 'transaction_count', 'group_count', 'dropped_groups'], 'properties': {'row_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Counterparties THIS month is missing an invoice from. A counterparty owing an invoice in several months counts in each of them, so these do not sum to the envelope's `row_count`, which counts each counterparty once."}, 'fiscal_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'group_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'period_label': {'type': 'string'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'fiscal_period': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'dropped_groups': {'type': 'object', 'required': ['bank_internal', 'unknown', 'unnamed_company'], 'properties': {'unknown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS of spend with no resolved counterparty. One group per month that held any, NOT a count of transactions or of counterparties.'}, 'bank_internal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS of party-less bank operations — nothing to collect. One group per month that held any, NOT a count of operations: never quote this number as a quantity of bank operations.'}, 'unnamed_company': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS the card cannot render (no name or no key) — one per company, NOT a count of transactions.'}}, 'additionalProperties': False}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'Per-month totals, oldest first.'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'row_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Rows in `rows`, which is the DISTINCT counterparties the call found. Never the sum of the months' own `row_count`."}, 'fiscal_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'group_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Groups the reads returned before the card's projection."}, 'period_label': {'type': 'string', 'description': 'Human-readable label of the period, e.g. "June 2026". Present only when the call named one month.'}, 'workspace_id': {'type': 'string'}, 'base_currency': {'type': 'string'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'fiscal_period': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'dropped_groups': {'type': 'object', 'required': ['bank_internal', 'unknown', 'unnamed_company'], 'properties': {'unknown': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS of spend with no resolved counterparty. One group per month that held any, NOT a count of transactions or of counterparties.'}, 'bank_internal': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS of party-less bank operations — nothing to collect. One group per month that held any, NOT a count of operations: never quote this number as a quantity of bank operations.'}, 'unnamed_company': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'GROUPS the card cannot render (no name or no key) — one per company, NOT a count of transactions.'}}, 'additionalProperties': False}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'periods_covered': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label'], 'properties': {'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'The months the result covers, oldest first.'}, 'periods_requested': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many calendar months the call named.'}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Every transaction missing its invoice, across all groups and all months.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'One calendar year to return in full — all twelve of its months, December back to January, instead of the recent window. Use it to reach a year the recent window does not cover, in either direction; future months come back visible but never selectable. Accepted range: 2000-2100, also reported as `navigable_years`.'}, 'reply': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'One sentence, IN THE LANGUAGE THE USER IS WRITING IN, that the click sends into the conversation as their own message. Write what the PERSON would say about the months they pick, in their words, not an instruction to yourself. You write it BEFORE they click, so you cannot know what they will choose: put {picked} where the pick belongs and the card replaces it with the names they actually picked, one or several. In English it would read "Let\'s work on {picked}." Write the same shape in the user\'s language. {picked} is required: a sentence that names a pick itself names the one you guessed, so the card refuses it and sends its own English instead. At most 160 characters. Omitted sends an English sentence the card builds itself, which is wrong for any reader not writing in English.'}, 'title': {'type': 'string', 'maxLength': 120, 'description': 'Heading for the picker card shown to the user. At most 120 characters.'}, 'months': {'type': 'integer', 'default': 12, 'maximum': 24, 'minimum': 1, 'description': 'How many recent calendar months to return, ending with the current month. Each month holding activity costs one extra read for its invoice state. Ignored when `year` is given.'}, 'purpose': {'enum': ['close', 'collect', 'analysis'], 'type': 'string', 'description': 'Why the months are being listed, set by the calling skill\'s own flow — never inferred from this message. "close" is book closure: the card paints close readiness, and each month carries its per-day `close_days` and the counts behind its "why not ready" errands. "analysis" is reporting: the card offers only the months a canvas can report on, paints the categorization day axis, counts on the execution date the canvas aggregates measure on, and therefore omits the books-dated errand counts entirely rather than reporting them as 0 — set it ONLY when a reporting skill is already running its own period-pick step, not just because this message names one (a burn figure, a cost breakdown, "my report"). Naming a report is phrasing; it never sets this field on its own. Omit or "collect" for invoice retrieval (the default, and the right choice for a plain "what months do you have" question, even one that mentions why) — this paints the retrieval axis and skips the close-readiness fields.'}, 'subtitle': {'type': 'string', 'maxLength': 240, 'description': "Supporting line under the picker card's heading. At most 240 characters."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspace_id', 'fiscal_year_start_month', 'base_currency', 'periods', 'default_period', 'navigable_years', 'success'], 'properties': {'error': {'type': 'string'}, 'hints': {'type': 'array', 'items': {'type': 'object', 'required': ['detected_gap', 'suggested_action', 'severity'], 'properties': {'field': {'type': 'string'}, 'severity': {'enum': ['warn', 'info'], 'type': 'string'}, 'detected_gap': {'type': 'string'}, 'suggested_action': {'type': 'string'}}, 'additionalProperties': False}}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'fiscal_year', 'fiscal_period', 'label', 'is_complete', 'selectable', 'inspectable', 'analyzable', 'close_status', 'close_reason', 'transaction_count', 'bank_transaction_count', 'unposted_invoice_count', 'days'], 'properties': {'days': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'state'], 'properties': {'day': {'type': 'integer', 'maximum': 31, 'minimum': 1}, 'state': {'enum': ['has_invoices', 'missing_invoices', 'none'], 'type': 'string'}}, 'additionalProperties': False}, 'description': 'Days of the month carrying a retrieval state, ascending. A day absent from this list is "none"; the list is empty whenever invoice_state is "none", and is ALWAYS empty on a "analysis" call, which paints the categorization axis instead — so an empty list there carries no invoice claim.'}, 'label': {'type': 'string'}, 'analyzable': {'type': 'boolean', 'description': 'The month can be REPORTED ON — an average-burn, cost-structure or cash-bridge figure can be computed for it. True once the month has ENDED and while it stays inside the window the canvas endpoints serve. Read this one for an analysis pick.'}, 'close_days': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'state'], 'properties': {'day': {'type': 'integer', 'maximum': 31, 'minimum': 1}, 'state': {'enum': ['posted', 'progress', 'neutral'], 'type': 'string'}}, 'additionalProperties': False}, 'description': 'Days of the month carrying a non-neutral close-readiness state, ascending. Present ONLY for a "close" call; a day absent from it is "neutral" (nothing to close).'}, 'selectable': {'type': 'boolean', 'description': 'The month can be CLOSED. False while it is still running.'}, 'fiscal_year': {'type': 'number'}, 'inspectable': {'type': 'boolean', 'description': 'The month can be LOOKED INTO. A reader can open its transactions, missing invoices and days. True for every month that has begun, the month in progress included, whatever its close verdict and however little it holds. False only for a month that has not begun. Every selectable month is also inspectable.'}, 'is_complete': {'type': 'boolean'}, 'close_reason': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'close_status': {'anyOf': [{'enum': ['closeable', 'closed', 'not_ready', 'nothing_to_close'], 'type': 'string'}, {'type': 'null'}]}, 'analysis_days': {'type': 'array', 'items': {'type': 'object', 'required': ['day', 'state'], 'properties': {'day': {'type': 'integer', 'maximum': 31, 'minimum': 1}, 'state': {'enum': ['categorized', 'uncategorized', 'neutral'], 'type': 'string'}}, 'additionalProperties': False}, 'description': 'Days of the month and whether a breakdown can name what each one holds, ascending. Present ONLY for a "analysis" call. "uncategorized" means the day holds a transaction with no category — still counted in a burn total, but reported as uncategorised in a breakdown rather than under a named category; "categorized" means they all carry one; "neutral" means the day holds no transaction. Unlike the other two axes, a quiet day IS listed, as "neutral" — so a day absent from a non-empty list is one the read did not reach. An EMPTY list means the month was not measured at all, never that it holds nothing to categorize: check transaction_count, which is read separately, and treat a positive count beside an empty list as unmeasured. Calendar detail for the picker; quote the month\'s own counts in prose, not a day list.'}, 'calendar_year': {'type': 'number'}, 'fiscal_period': {'type': 'number'}, 'invoice_state': {'enum': ['has_invoices', 'missing_invoices', 'none'], 'type': 'string', 'description': 'The month\'s invoice-retrieval verdict. ABSENT on a month that has BEGUN and whose verdict nothing measured, which only a purpose counting on the execution date produces — its activity read and this books-dated errand disagree, so "none" there would be a claim nothing wrote. A month still ahead of today keeps "none" on every purpose, because it owes nothing on every basis. Read an absent one from a "close" or "collect" list.'}, 'calendar_month': {'type': 'number'}, 'transaction_count': {'type': 'number', 'description': 'How many transactions the month holds, dated on the basis this purpose measures on: "analysis" counts on execution, every other purpose on the books. A presence signal for the month, never the row count behind a reported figure.'}, 'missing_invoice_count': {'type': 'number', 'description': 'Counterparties owing a supplier invoice for the month; 0 when invoice_state is "none". Absent whenever invoice_state is, and for the same reason.'}, 'bank_transaction_count': {'type': 'number', 'description': 'The transaction_count subset delivered by a connector the workspace BANKS with, meaning its category is `banks` or its service id is on the bank-account list. An accounting platform and a payment processor deliver transactions too and are not counted. A transaction whose source connector is unknown, or since disconnected, is not counted either, so a 0 never licenses skipping a bank-connection step.'}, 'unposted_invoice_count': {'type': 'number', 'description': 'Invoices the month holds that have not posted to the ledger — NOT missing invoices.'}, 'uncategorized_transactions': {'type': 'number', 'description': 'Transactions in the month not yet categorized — the \'help categorize\' close errand. Dated on the books, so it is ABSENT on a "analysis" call rather than 0: that purpose counts on execution and never measures this errand. Absent too on a month the coverage read did not cover. An absent count is never "nothing left to categorize".'}, 'categorized_unposted_transactions': {'type': 'number', 'description': 'Categorized transactions not yet posted to the ledger — part of the \'review and book\' close errand. Dated on the books, and likewise ABSENT rather than 0 on a "analysis" call and on a month the coverage read did not cover.'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'default_period': {'anyOf': [{'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'number'}, 'calendar_month': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'navigable_years': {'type': 'object', 'required': ['earliest', 'latest'], 'properties': {'latest': {'type': 'number'}, 'earliest': {'type': 'number'}}, 'description': "The calendar years a `year` request is answered for. A picker's year steppers stop here.", 'additionalProperties': False}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'fiscal_year_start_month': {'type': 'number'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^(\\d{4})-(\\d{2})-01$', 'description': 'EXCLUSIVE end of the window: the first day of the month after the last one you want, YYYY-MM-01.'}, 'from': {'type': 'string', 'pattern': '^(\\d{4})-(\\d{2})-01$', 'description': 'Inclusive start of the window: the first day of a month, YYYY-MM-01.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['groups', 'totals', 'partial', 'unreadable_rows', 'window', 'success'], 'properties': {'error': {'type': 'string'}, 'groups': {'type': 'array', 'items': {'type': 'object', 'required': ['context_key', 'label', 'amounts', 'count'], 'properties': {'count': {'type': 'number'}, 'label': {'type': 'string'}, 'amounts': {'type': 'array', 'items': {'type': 'object', 'required': ['currency', 'amount'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': False}}, 'context_key': {'type': 'string'}}, 'additionalProperties': False}}, 'totals': {'type': 'array', 'items': {'type': 'object', 'required': ['currency', 'amount'], 'properties': {'amount': {'type': 'number'}, 'currency': {'type': 'string'}}, 'additionalProperties': False}}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean', 'description': 'True when the aggregate behind these figures was cut short. Every amount is then a FLOOR rather than a measurement.'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'unreadable_rows': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Invoices in the window whose net amount or currency could not be read. They are in no figure here, including the no-billing-context one. Null when the count could not be read.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['workspace_connector_id', 'service_id', 'name', 'proof_tier', 'transaction_count', 'earliest_transaction_date', 'latest_transaction_date', 'source_workspace', 'preselected'], 'properties': {'name': {'type': 'string'}, 'proof_tier': {'enum': ['canonical_id', 'name_country', 'no_match'], 'type': 'string'}, 'service_id': {'type': 'string'}, 'preselected': {'type': 'boolean'}, 'source_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'type': 'string'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}, 'additionalProperties': False}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'workspace_connector_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'latest_transaction_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'earliest_transaction_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'description': 'EXCLUSIVE end of the window, YYYY-MM-DD.'}, 'from': {'type': 'string', 'description': 'Inclusive start of the window, YYYY-MM-DD.'}, 'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Max rows to return (default 500).'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['records', 'window', 'success'], 'properties': {'error': {'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'records': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['fiscal_year', 'fiscal_period'], 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Max rows to return.'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'The fiscal year of the period to read.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'The fiscal period, 1-12 for a month; 13 is the adjustment period and resolves to no rows.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['records', 'in_flight_processing', 'scan_truncated', 'success'], 'properties': {'error': {'type': 'string'}, 'records': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number'}, 'scan_truncated': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'in_flight_processing': {'type': 'boolean'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['fiscal_year', 'fiscal_period'], 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'Max rows to return.'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'The fiscal year of the period to read.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'The fiscal period, 1-12 for a month; 13 is the adjustment period and resolves to no rows.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['records', 'success'], 'properties': {'error': {'type': 'string'}, 'records': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}, 'ledger_catalog': {'type': 'object', 'required': ['accounts', 'returned', 'truncated', 'failed'], 'properties': {'failed': {'type': 'boolean'}, 'accounts': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string'}, 'code': {'type': 'string'}, 'name': {'type': 'string'}}, 'additionalProperties': False}}, 'returned': {'type': 'number'}, 'truncated': {'type': 'boolean'}}, 'additionalProperties': False}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspaces', 'success'], 'properties': {'error': {'type': 'string'}, 'session': {'type': 'object', 'required': ['pinned_workspace_id', 'workspace_queue', 'selected_periods', 'selected_counterparties'], 'properties': {'workspace_queue': {'type': 'array', 'items': {'type': 'string'}}, 'selected_periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'pinned_workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'selected_counterparties': {'anyOf': [{'type': 'object', 'required': ['workspace_id', 'counterparties'], 'properties': {'workspace_id': {'type': 'string', 'description': 'The workspace the picked company ids belong to.'}, 'counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id', 'matched_connector_service_id'], 'properties': {'company_id': {'type': 'string'}, 'matched_connector_service_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The connector that can fetch this counterparty's invoices; null when none matched."}}, 'additionalProperties': False}}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The counterparties picked on the missing-invoices card; null until a pick is recorded.'}}, 'description': "What this conversation's card clicks recorded so far; null/empty fields when nothing was clicked yet.", 'additionalProperties': False}, 'success': {'type': 'boolean'}, 'workspaces': {'type': 'array', 'items': {'type': 'object', 'required': ['workspace_id', 'workspace_name', 'is_primary', 'own_company_id', 'lineage_parent_workspace_id', 'has_bank_transactions', 'identity'], 'properties': {'identity': {'type': 'object', 'required': ['registered_name', 'trade_name', 'registered_value', 'country', 'domain', 'base_currency', 'fiscal_year_start_month', 'fiscal_year_start_month_source', 'country_default_fiscal_year_start_month'], 'properties': {'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_value': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'fiscal_year_start_month_source': {'anyOf': [{'enum': ['derived', 'registry', 'user'], 'type': 'string'}, {'type': 'null'}], 'description': 'Where fiscal_year_start_month came from: "registry" from a company registry, "derived" from the country fallback, "user" from a human. Null when never set. Tells a confirmed fiscal year from one resting on a default.'}, 'country_default_fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': "The jurisdiction's default fiscal-year-start month for this country, or null when the country has no single confident default (non-null for France only today)."}}, 'additionalProperties': False}, 'is_primary': {'type': 'boolean'}, 'workspace_id': {'type': 'string'}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The public id of the company this workspace is anchored to, or null. A row that carries it is a company workspace, the one the close flow runs in; a row without it is a membership workspace.'}, 'workspace_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'has_bank_transactions': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Whether a connector the workspace BANKS with has delivered any transaction to it: a bank, a neobank, or a treasury or spend platform whose product is an account. An accounting platform and a payment processor deliver transactions too and do NOT count. A transaction whose source connector is unknown, whose install has since been disconnected, or whose catalog entry has been retired does not count either. Only true shows a bank has fed this workspace. false means no such transaction was found; null means the signal could not be read. An absent value is not a zero, and neither false nor null licenses skipping a bank-connection step.'}, 'lineage_parent_workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The workspace_id of the membership this workspace was created under, or null when it has no active lineage. Its parent's own row is the membership whose id this points at."}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': 'Several calendar months in one call, 1-12. Each month costs one separate read, so name only the months you need. Duplicates are refused.'}, 'fiscal_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': "Fiscal year (the calendar year the workspace's fiscal year STARTED in)."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'fiscal_period': {'type': 'integer', 'maximum': 13, 'minimum': 1, 'description': 'Fiscal period, 1-12. The adjustment period (13) is refused: it has no calendar month.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['vendors', 'upload_rows', 'connect_rows', 'success'], 'properties': {'mode': {'type': 'string', 'const': 'preview'}, 'error': {'type': 'string'}, 'hints': {'type': 'array', 'items': {'type': 'string'}}, 'counts': {'type': 'object', 'required': ['vendors', 'agents', 'agent_tx', 'upload', 'connect'], 'properties': {'agents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Portals Well holds a published flow for, one per distinct provider, the connector-covered ones included. It marks the shorter route and is NOT the link's own set: `collect_url` names every addressed vendor it can name by id, so it routinely carries portals this count leaves out."}, 'upload': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Counterparties whose invoice only a manual upload can obtain.'}, 'connect': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Counterparties whose suggested route is connecting a service.'}, 'vendors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Vendors the card lists — one per distinct portal, or per counterparty where none matched.'}, 'agent_tx': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transactions those agent runs would fetch.'}}, 'description': "The whole window's counts. `vendors` and `agents` count the distinct portals across it, so neither is the sum of the months' own. `upload` and `connect` add each month's counterparty rows, so a counterparty missing an invoice in two of the months read counts once per month.", 'additionalProperties': False}, 'months': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label', 'fiscal_year', 'fiscal_period', 'counts'], 'properties': {'counts': {'type': 'object', 'required': ['vendors', 'agents', 'agent_tx', 'upload', 'connect'], 'properties': {'agents': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Portals Well holds a published flow for, one per distinct provider, the connector-covered ones included. It marks the shorter route and is NOT the link's own set: `collect_url` names every addressed vendor it can name by id, so it routinely carries portals this count leaves out."}, 'upload': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Counterparties whose invoice only a manual upload can obtain.'}, 'connect': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Counterparties whose suggested route is connecting a service.'}, 'vendors': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Vendors the card lists — one per distinct portal, or per counterparty where none matched.'}, 'agent_tx': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transactions those agent runs would fetch.'}}, 'additionalProperties': False}, 'fiscal_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'period_label': {'type': 'string'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'fiscal_period': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'Per-month route counts, oldest first.'}, 'success': {'type': 'boolean'}, 'vendors': {'type': 'array', 'items': {'type': 'object', 'required': ['key', 'name', 'provider_id', 'domain', 'url', 'url_source', 'logo_url', 'counterparties', 'connect_routed_counterparties', 'tx_count', 'base_total_amount'], 'properties': {'key': {'type': 'string', 'description': 'Stable identity for this entry across a re-read: the portal when one matched, else the counterparty row. Two vendors sharing a display name have different keys, so key rows on this and never on `name`.'}, 'url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Where this vendor\'s invoices are, e.g. "https://www.dropbox.com/manage/billing". `url_source` says how close that address stands to the invoices. Null only when `url_source` is "none". An address is what makes a vendor offerable at all: a vendor carrying one is offered for the pick, and with a `provider_id` it is also named on `collect_url`, whatever its `url_source`. The address itself never travels, because the id is the only field the extension acts on.'}, 'name': {'type': 'string', 'description': "The vendor as the card names it: the matched provider's name, or the counterparty's own when none matched."}, 'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The vendor\'s own bare host, e.g. "aws.amazon.com" — the catalog provider\'s host, or the counterparty company\'s. It identifies the vendor and its mark; it is NOT `url` reduced, because `url` may point deeper into the portal.'}, 'logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The provider's logo as Well stores it. Null when the provider is unmatched or Well holds no stored mark for it, in which case the card still renders one from `domain`."}, 'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Transactions still missing an invoice, over every counterparty listed above.'}, 'url_source': {'enum': ['blueprint', 'enrichment', 'none'], 'type': 'string', 'description': 'Where `url` came from. "blueprint" — the provider\'s published flow, so it opens the billing page itself. "enrichment" — the catalog\'s entry address or the company\'s own domain, so it is the vendor\'s front door and the user still has to find the invoices on it. "none" — no address at all, and `url` is null. It says where the address came from and gates nothing: an "enrichment" vendor is offered, and carried on the link, exactly like a "blueprint" one.'}, 'provider_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The catalog id, and the only field that can put this vendor on `collect_url`. Necessary but NOT sufficient: the link also needs the vendor to carry a `url`, and the vendor has to fit the link's own ceiling. Null when no provider matched. A vendor off the link is still listed and is still offered for the pick, so report it as one the link cannot carry, never as one Well leaves out."}, 'counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'calendar_year', 'calendar_month', 'period_label', 'tx_count', 'base_total_amount', 'suggested_route'], 'properties': {'name': {'type': 'string'}, 'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'suggested_route': {'enum': ['agent', 'connect', 'upload'], 'type': 'string', 'description': '"agent" when the agent run is the suggested route. "connect" when a Well connector is suggested instead — the counterparty is ALSO in `connect_rows`. "upload" when Well holds neither a connector nor a published flow for it — the counterparty is ALSO in `upload_rows`.'}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum in base_currency; null when an FX rate was missing for any transaction in the sum.'}}, 'additionalProperties': False}, 'description': 'The counterparties this one vendor covers, each tagged with the month it belongs to and with the route the preview suggests for it.'}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum in base_currency; null when an FX rate was missing for any transaction in the sum.'}, 'connect_routed_counterparties': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many of `counterparties` the preview suggests connecting instead. They are counted in `tx_count` and `base_total_amount`, and they are ALSO in `connect_rows`, where they are counted as connect counterparties.'}}, 'additionalProperties': False}, 'description': 'EVERY vendor of the rows THIS CALL covers, whatever route its invoice would arrive by — one entry per supplier portal across the whole window, or per counterparty where no portal matched. The ROUTE never filters this list: a vendor Well has no published flow and no connector for is listed exactly like the rest. What the call covers can still be narrower than the period, and the envelope says so: when `scoped_to_selected_counterparties` is present these are the picked counterparties alone and `selection_scope` sizes the remainder, and a `hints` line names any group the projection could produce no vendor for.'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'collect_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The `/collect` entry that hands these vendors to the Well browser extension, naming each one by its `provider_id` and naming this workspace as the link's authorization scope. The page starts nothing until the reader is signed in to Well as a member of it. It carries every vendor that has an address, whatever that address's `url_source`, because what a vendor's invoices need once the page opens is the app's and the extension's decision rather than this read's. Null in three unrelated cases: no vendor of the window carries an address, none of the addressed vendors carries an id the link can address, or this read could not name the workspace the link authorizes. The hints name which one, and only the first is a verdict on the vendors. Opening it starts nothing on its own: the user acts on the page."}, 'fiscal_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'upload_rows': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'calendar_year', 'calendar_month', 'period_label', 'tx_count', 'base_total_amount'], 'properties': {'name': {'type': 'string'}, 'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum in base_currency; null when an FX rate was missing for any transaction in the sum.'}}, 'additionalProperties': False}, 'description': 'Counterparties whose invoice only a manual upload can obtain.'}, 'connect_rows': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'calendar_year', 'calendar_month', 'period_label', 'tx_count', 'base_total_amount', 'matched_provider_name'], 'properties': {'name': {'type': 'string'}, 'tx_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'base_total_amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum in base_currency; null when an FX rate was missing for any transaction in the sum.'}, 'matched_provider_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The service to connect, when the read matched one.'}}, 'additionalProperties': False}, 'description': 'Counterparties whose invoice arrives by connecting a service.'}, 'period_label': {'type': 'string', 'description': 'Human-readable label of the period, e.g. "June 2026". Present only when the call named one month.'}, 'workspace_id': {'type': 'string'}, 'base_currency': {'type': 'string'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'fiscal_period': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Present only when the call named exactly one month.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'periods_covered': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month', 'period_label'], 'properties': {'period_label': {'type': 'string', 'description': 'The month this row belongs to, e.g. "June 2026".'}, 'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'The months the result covers, oldest first.'}, 'selection_scope': {'type': 'object', 'required': ['row_count_before_filter', 'rows_dropped_by_filter'], 'properties': {'rows_dropped_by_filter': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many of those rows the pick left out — gaps the routes and the counts below do not cover.'}, 'row_count_before_filter': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Counterparty rows the months read hold in total, before the pick narrowed them. Includes the months the pick does not bound, which are reported in full.'}}, 'description': 'What the pick removed. Present with `scoped_to_selected_counterparties`, so the size of the truncation is readable beside the result.', 'additionalProperties': False}, 'nothing_launched': {'type': 'boolean', 'const': True, 'description': 'Always true — this tool never starts anything.'}, 'collect_url_omits': {'type': 'array', 'items': {'type': 'object', 'required': ['provider_id', 'provider_name'], 'properties': {'provider_id': {'type': 'string'}, 'provider_name': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'The portals `collect_url` does NOT name, because one link carries at most 25. Present only when the ceiling left some out. Report those vendors as outside the link — it starts nothing for them.'}, 'periods_requested': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'How many calendar months the call named.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'collect_url_unaddressable': {'type': 'array', 'items': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string'}}, 'additionalProperties': False}, 'description': 'The vendors `collect_url` does not name: the vendor carries no address at all, or it carries one but no catalog id the link can address. A missing published flow is NOT among the reasons, because the link takes an enrichment address exactly like a blueprint one. Present only when the window holds some. They are real gaps and they are listed in `vendors`; report them as vendors the link cannot carry, never as absent.'}, 'rows_dropped_by_ownership': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': "Counterparty rows this preview dropped because the current user owns none of their gaps — a fetch runs as the current user and can only collect the invoices of counterparties they own. Counted apart from `selection_scope.rows_dropped_by_filter` (the pick's own shortfall), and present only when it dropped at least one. The matching `hints` line names it."}, 'scoped_to_selected_counterparties': {'type': 'boolean', 'const': True, 'description': 'Present when a counterparty pick narrowed this preview: for the months the pick was made against, every route below covers only those companies. A month outside the pick is covered in full.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['steps'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['skill', 'prompt'], 'properties': {'skill': {'type': 'string', 'pattern': '^[a-z0-9-]{1,64}$', 'description': 'The id of the skill this step offers, as well_search_skill lists it.'}, 'prompt': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'One sentence the person can send as is, written from the skill\'s own quoted trigger utterances. Refused when it starts with "/", contains "<", or contains a line break.'}}, 'additionalProperties': False}, 'maxItems': 5, 'minItems': 5, 'description': 'Exactly 5 steps, in the order the card lists them.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'reason', 'steps', 'hint'], 'properties': {'hint': {'type': 'string'}, 'error': {'type': 'string'}, 'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['skill', 'prompt'], 'properties': {'skill': {'type': 'string'}, 'prompt': {'type': 'string'}}, 'additionalProperties': False}}, 'reason': {'anyOf': [{'enum': ['skill_unknown', 'skill_not_proposable', 'prompt_invalid', 'catalog_unreadable', 'unexpected'], 'type': 'string'}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['root'], 'properties': {'root': {'type': 'string', 'description': 'The entity type to query — any of the 33 read-only roots (companies, people, connectors, invoices, documents, transactions, accounts, payment_means, workspace_connectors, memberships, cards, checks, ledger_accounts, journals, journal_entries, tax_rates, exchange_rates, invoice_transactions, categories, account_balances, tasks, workspaces, invoice_payment_means, chat_conversations, blueprint_runs, workspace_connector_sync_logs, media, emails, phones, web_links, locations, invoice_items, billing_events). Call well_get_schema(root) first to discover fields.'}, 'limit': {'type': 'number', 'maximum': 500, 'minimum': 1, 'description': 'Max records to return (default 50, max 500)'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor for the next page. Omit for the first page, then pass nextCursor from the previous response.'}, 'fields': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'description': "EXTRA field paths to add to the root's display view, for values you need to reason about. Each path is an array whose first segment is the root's table name — use the paths well_get_schema(root) returns verbatim, which is the root name for every root except people (whose table is peoples); a path opening with any other segment is dropped. Additive only: they widen the payload you receive, and the root's own display projection (the columns the Well web app shows, and the ones a table drawn from this query carries) stays what it is no matter what you pass here. A scalar a composite renders comes back AS that composite — asking for grand_total gets you composite_total_amount_currency, with grand_total inside it — so read `columns` for what was actually materialized. Omit unless you need a value the display view does not carry."}, 'orderBy': {'type': 'object', 'required': ['field', 'direction'], 'properties': {'field': {'type': 'string', 'description': 'Field name to sort by'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort direction'}}, 'description': 'Sort results by a field. Example: { field: "grand_total", direction: "desc" }'}, 'allFields': {'type': 'boolean', 'description': 'If true, automatically fetches all scalar fields from schema. No need to specify fields.'}, 'partyScope': {'enum': ['purchase', 'sales', 'intra_self', 'unattributed'], 'type': 'string', 'description': 'Which side of an invoice the workspace itself occupies, resolved from its own company rather than a party name. `invoices` root only. "purchase" = the workspace owes it (payables); "sales" = the workspace is owed (receivables); "intra_self" = both parties are companies the workspace owns; "unattributed" = Well cannot place it on either side. The four partition every invoice, so report the "unattributed" count beside any payable total rather than dropping it — an unattributed invoice may still be owed. Prefer this over hand-writing an issuer/receiver filter.'}, 'whereClause': {'type': 'object', 'description': 'Hasura-style filter object. Operators: _eq, _neq, _gt, _gte, _lt, _lte, _like, _ilike, _in, _nin, _is_null. Example: { "status": { "_eq": "unpaid" } }', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit to query every authorized workspace at once; each row comes back tagged with the workspace it belongs to.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'totalCount', 'returned', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Query results'}, 'error': {'type': 'string'}, 'columns': {'type': 'array', 'items': {'type': 'string'}, 'description': "The materialized columns in display order, with each composite substituted in place of the source fields it consumed. A row object's key order does not preserve this — the flattener appends reconstructed composites last — so a UI that wants the web app's column order must read it from here."}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number', 'description': 'Number of rows returned'}, 'columnMeta': {'type': 'object', 'description': 'Per-column field meaning, keyed by the same column paths as the rows. `context` = what the field means; `enrichment` = how the value is sourced (e.g. Bank sync, AI extraction). Only documented columns appear. Read this to interpret the returned values.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'properties': {'context': {'type': 'string'}, 'enrichment': {'type': 'string'}}, 'additionalProperties': False}}, 'nextCursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Cursor for the next page. null means last page.'}, 'totalCount': {'type': 'number', 'description': 'Total matching records'}, 'records_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Login-gated deep link to the FULL web-app records table for this root (real DataTable: composites, inline editing, resize/pin), carrying this call's `whereClause` and `orderBy` so it opens on the same rows. Hand it to the user for everything past this page — it is the answer to 'show me all of them', not pagination. Null when no workspace is in context or no web page serves the root."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['parent', 'parent_id', 'channel', 'channel_id'], 'properties': {'parent': {'enum': ['company', 'person'], 'type': 'string', 'description': 'Parent record type: company or person'}, 'channel': {'enum': ['email', 'phone', 'web_link', 'location'], 'type': 'string', 'description': 'Channel to remove: email | phone | web_link | location'}, 'parent_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'UUID of the parent company or person'}, 'channel_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'UUID of the specific channel row to remove'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'parent': {'type': 'string'}, 'channel': {'type': 'string'}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'window', 'months_in_window', 'months_with_data', 'convention', 'convention_counts', 'transaction_count', 'unplaceable_count', 'excluded'], 'properties': {'amount': {'type': 'number', 'minimum': 0, 'description': 'Average monthly outflow as a POSITIVE magnitude. A negative value is refused.'}, 'change': {'type': 'number', 'description': "Signed percentage against `baseline.value`, drawn as the card's trend chip. Send it only alongside `baseline`, whose window and average your prose must name, and never derive the card's up/down sense from its sign — for a burn, down is good."}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}, 'description': 'Inclusive start and EXCLUSIVE end of the averaged window, YYYY-MM-DD.'}, 'baseline': {'type': 'object', 'required': ['value', 'period'], 'properties': {'value': {'type': 'number', 'description': "The baseline window's own average, as a POSITIVE magnitude. Zero is refused: a percentage against nothing is a division nobody can perform.", 'exclusiveMinimum': 0}, 'period': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}}}, 'description': 'The earlier window this figure is compared against, and its own average. Required for `change` to render, and never rendered itself: name it in prose, because a percentage whose baseline the reader cannot find anywhere is a number they cannot check.'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string', 'description': 'ISO-4217 code the amount is denominated in. Checked against the catalog, not its shape.'}, 'excluded': {'type': 'object', 'required': ['internal_transfers', 'exempt_categories', 'unreadable_rows'], 'properties': {'unreadable_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 100}, 'internal_transfers': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "The sum's `excluded_multi_leg`. `null` when the sum could not count it, never 0."}}, 'description': 'The three exclusion groups kept apart: structural, reader-chosen, and defective.'}, 'per_month': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string'}, 'amount': {'type': 'number'}}}, 'description': 'The series behind the average. A month with no outflow belongs in it as a zero.'}, 'convention': {'enum': ['signed', 'magnitude'], 'type': 'string', 'description': 'Which sign the feed uses for an outflow. "magnitude" is refused: it measures no outflow.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'months_in_window': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The divisor — every month in the window.', 'exclusiveMinimum': 0}, 'months_with_data': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'How many of those months carried any outflow.'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'positive': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'description': 'The row counts the convention was elected from, so a reader can check the election.'}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows in the window.'}, 'unplaceable_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "Rows with no leg on an owned account, neither inside nor outside the transfer rule: the sum's `excluded_no_owned_leg`. `null` when the sum could not count them, never 0."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'window', 'months_in_window', 'months_with_data', 'convention', 'convention_counts', 'transaction_count', 'unplaceable_count', 'excluded', 'computed_by', 'success'], 'properties': {'trend': {'enum': ['up', 'down', 'neutral'], 'type': 'string'}, 'amount': {'type': 'number'}, 'change': {'type': 'number'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'success': {'type': 'boolean'}, 'baseline': {'type': 'object', 'required': ['value', 'period'], 'properties': {'value': {'type': 'number'}, 'period': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'currency': {'type': 'string'}, 'excluded': {'type': 'object', 'required': ['internal_transfers', 'exempt_categories', 'unreadable_rows'], 'properties': {'unreadable_rows': {'type': 'number'}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string'}}, 'internal_transfers': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'per_month': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string'}, 'amount': {'type': 'number'}}, 'additionalProperties': False}}, 'convention': {'type': 'string'}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'months_in_window': {'type': 'number'}, 'months_with_data': {'type': 'number'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'number'}, 'positive': {'type': 'number'}}, 'additionalProperties': False}, 'transaction_count': {'type': 'number'}, 'unplaceable_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currency', 'period_start', 'period_end', 'opening', 'inflows', 'outflows', 'unexplained', 'closing', 'reconciles', 'partial'], 'properties': {'closing': {'type': 'object', 'required': ['amount', 'as_of'], 'properties': {'as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'amount': {'type': 'number'}}, 'additionalProperties': False}, 'inflows': {'type': 'number'}, 'opening': {'type': 'object', 'required': ['amount', 'as_of', 'derived'], 'properties': {'as_of': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'amount': {'type': 'number'}, 'derived': {'type': 'boolean'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'outflows': {'type': 'number'}, 'period_end': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'reconciles': {'type': 'boolean'}, 'unexplained': {'type': 'number'}, 'period_start': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currency', 'period_start', 'period_end', 'opening', 'inflows', 'outflows', 'unexplained', 'closing', 'reconciles', 'partial', 'steps', 'computed_by', 'success'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'value', 'kind'], 'properties': {'kind': {'enum': ['start', 'increase', 'decrease', 'total', 'unexplained'], 'type': 'string'}, 'label': {'type': 'string'}, 'value': {'type': 'number'}}, 'additionalProperties': False}}, 'closing': {'type': 'object', 'required': ['amount', 'as_of'], 'properties': {'as_of': {'type': 'string'}, 'amount': {'type': 'number'}}, 'additionalProperties': False}, 'inflows': {'type': 'number'}, 'opening': {'type': 'object', 'required': ['amount', 'as_of', 'derived'], 'properties': {'as_of': {'type': 'string'}, 'amount': {'type': 'number'}, 'derived': {'type': 'boolean'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'currency': {'type': 'string'}, 'outflows': {'type': 'number'}, 'period_end': {'type': 'string'}, 'reconciles': {'type': 'boolean'}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'unexplained': {'type': 'number'}, 'period_start': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['currency', 'as_of', 'actuals', 'anchor', 'burn', 'months_forward', 'projection', 'cash_scope', 'burn_policy', 'partial'], 'properties': {'burn': {'type': 'object', 'required': ['amount', 'currency', 'trailing_months', 'window'], 'properties': {'amount': {'type': 'number'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])-\\d{2}$'}}}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'trailing_months': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}, 'as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'anchor': {'type': 'object', 'required': ['month', 'amount', 'basis'], 'properties': {'basis': {'enum': ['closed_month_end', 'current_position'], 'type': 'string'}, 'month': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])$'}, 'amount': {'type': 'number'}}}, 'actuals': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])$'}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}}, 'maxItems': 24, 'minItems': 1}, 'partial': {'type': 'boolean'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'cash_scope': {'type': 'object', 'required': ['account_types', 'counted_unknown_ownership', 'anchor_missing_accounts', 'excluded'], 'properties': {'excluded': {'type': 'object', 'required': ['not_owned', 'out_of_scope_type', 'no_readable_balance', 'no_fx_rate'], 'properties': {'not_owned': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'no_fx_rate': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'out_of_scope_type': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'no_readable_balance': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'account_types': {'type': 'array', 'items': {'enum': ['deposit', 'credit', 'loan', 'investment', 'payroll', 'other'], 'type': 'string'}, 'minItems': 1}, 'anchor_missing_accounts': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'counted_unknown_ownership': {'type': 'boolean'}}}, 'projection': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])$'}, 'amount': {'type': 'number'}}}, 'maxItems': 12, 'minItems': 1}, 'burn_policy': {'type': 'object', 'required': ['convention', 'convention_counts', 'excluded', 'unplaceable_count'], 'properties': {'excluded': {'type': 'object', 'required': ['internal_transfers', 'exempt_categories', 'unreadable_rows'], 'properties': {'unreadable_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200}, 'maxItems': 100}, 'internal_transfers': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}}}, 'convention': {'enum': ['signed', 'magnitude'], 'type': 'string'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'positive': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'unplaceable_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}]}}}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'months_forward': {'type': 'integer', 'maximum': 12, 'exclusiveMinimum': 0}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['entries', 'currency', 'as_of', 'anchor', 'burn', 'months_forward', 'cash_scope', 'burn_policy', 'partial', 'computed_by', 'success'], 'properties': {'burn': {'type': 'object', 'required': ['amount', 'currency', 'trailing_months', 'window'], 'properties': {'amount': {'type': 'number'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'currency': {'type': 'string'}, 'trailing_months': {'type': 'number'}}, 'additionalProperties': False}, 'as_of': {'type': 'string'}, 'anchor': {'type': 'object', 'required': ['month', 'amount', 'basis'], 'properties': {'basis': {'enum': ['closed_month_end', 'current_position'], 'type': 'string'}, 'month': {'type': 'string'}, 'amount': {'type': 'number'}}, 'additionalProperties': False}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'actuals', 'projection'], 'properties': {'month': {'type': 'string'}, 'actuals': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'projection': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'currency': {'type': 'string'}, 'cash_scope': {'type': 'object', 'required': ['account_types', 'counted_unknown_ownership', 'anchor_missing_accounts', 'excluded'], 'properties': {'excluded': {'type': 'object', 'required': ['not_owned', 'out_of_scope_type', 'no_readable_balance', 'no_fx_rate'], 'properties': {'not_owned': {'type': 'number'}, 'no_fx_rate': {'type': 'number'}, 'out_of_scope_type': {'type': 'number'}, 'no_readable_balance': {'type': 'number'}}, 'additionalProperties': False}, 'account_types': {'type': 'array', 'items': {'type': 'string'}}, 'anchor_missing_accounts': {'type': 'number'}, 'counted_unknown_ownership': {'type': 'boolean'}}, 'additionalProperties': False}, 'burn_policy': {'type': 'object', 'required': ['convention', 'convention_counts', 'excluded', 'unplaceable_count'], 'properties': {'excluded': {'type': 'object', 'required': ['internal_transfers', 'exempt_categories', 'unreadable_rows'], 'properties': {'unreadable_rows': {'type': 'number'}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string'}}, 'internal_transfers': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'convention': {'type': 'string'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'number'}, 'positive': {'type': 'number'}}, 'additionalProperties': False}, 'unplaceable_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'months_forward': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'as_of', 'accounts', 'scope', 'excluded', 'partial'], 'properties': {'as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'scope': {'type': 'object', 'required': ['account_types', 'counted_unknown_ownership'], 'properties': {'account_types': {'type': 'array', 'items': {'enum': ['deposit', 'credit', 'loan', 'investment', 'payroll', 'other'], 'type': 'string'}, 'minItems': 1}, 'counted_unknown_ownership': {'type': 'boolean'}}}, 'amount': {'type': 'number'}, 'partial': {'type': 'boolean'}, 'accounts': {'type': 'array', 'items': {'type': 'object', 'required': ['account_id', 'account_name', 'institution_name', 'masked_account_number', 'native_amount', 'native_currency', 'converted_amount', 'fx_rate'], 'properties': {'fx_rate': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'account_id': {'type': 'string', 'minLength': 1}, 'account_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'native_amount': {'type': 'number'}, 'native_currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'converted_amount': {'type': 'number'}, 'institution_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'masked_account_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}}}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'excluded': {'type': 'object', 'required': ['not_owned', 'out_of_scope_type', 'no_readable_balance', 'no_fx_rate'], 'properties': {'not_owned': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'no_fx_rate': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'out_of_scope_type': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'no_readable_balance': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'balance_history': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string', 'pattern': '^\\d{4}-(0[1-9]|1[0-2])$'}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}}}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'as_of', 'accounts', 'scope', 'excluded', 'partial', 'computed_by', 'success'], 'properties': {'as_of': {'type': 'string'}, 'scope': {'type': 'object', 'required': ['account_types', 'counted_unknown_ownership'], 'properties': {'account_types': {'type': 'array', 'items': {'type': 'string'}}, 'counted_unknown_ownership': {'type': 'boolean'}}, 'additionalProperties': False}, 'amount': {'type': 'number'}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'accounts': {'type': 'array', 'items': {'type': 'object', 'required': ['account_id', 'account_name', 'institution_name', 'masked_account_number', 'native_amount', 'native_currency', 'converted_amount', 'fx_rate'], 'properties': {'fx_rate': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'account_id': {'type': 'string', 'minLength': 1}, 'account_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'native_amount': {'type': 'number'}, 'native_currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'converted_amount': {'type': 'number'}, 'institution_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'masked_account_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'currency': {'type': 'string'}, 'excluded': {'type': 'object', 'required': ['not_owned', 'out_of_scope_type', 'no_readable_balance', 'no_fx_rate'], 'properties': {'not_owned': {'type': 'number'}, 'no_fx_rate': {'type': 'number'}, 'out_of_scope_type': {'type': 'number'}, 'no_readable_balance': {'type': 'number'}}, 'additionalProperties': False}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'balance_history': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string'}, 'amount': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['entries', 'currency', 'period_start', 'period_end', 'rung', 'label_provenance', 'coverage', 'convention', 'convention_counts', 'excluded'], 'properties': {'rung': {'enum': ['ledger_account', 'category_key', 'category_normalized', 'transaction_type', 'uncategorised'], 'type': 'string', 'description': 'Which grouping produced these categories.'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['category', 'amount'], 'properties': {'amount': {'type': 'number', 'minimum': 0, 'description': "The slice's outflow, as a POSITIVE magnitude in `currency`."}, 'category': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': "The slice's label, exactly as the reader should see it."}, 'is_other': {'type': 'boolean', 'description': 'True on the single rolled-up slice. A flag rather than a reserved label, so the rollup is a fact on the data instead of a string the server has to recognise.'}, 'category_key': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'The category-catalog key this slice groups. Allowed only when `rung` is "category_key", and never on the rolled-up slice. It is the value `well_sum_transactions` accepts in `exempt_categories`, so a later exclusion names this rather than the label.'}}, 'additionalProperties': False}, 'maxItems': 5, 'description': 'The slices, largest first, with the rolled-up `Other` last when there is one.'}, 'coverage': {'type': 'object', 'required': ['labelled_rows', 'outflow_rows'], 'properties': {'outflow_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Every outflow row the month held.'}, 'labelled_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Outflow rows the elected grouping could label.'}}, 'description': 'The evidence the rung was elected on, so a reader can check the election rather than take it.', 'additionalProperties': False}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string', 'description': 'ISO-4217 code every amount is denominated in. Checked against the catalog, not its shape.'}, 'excluded': {'type': 'object', 'required': ['internal_transfers', 'no_owned_leg', 'no_asset_movement', 'unreadable_rows'], 'properties': {'no_owned_leg': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "The sum's `excluded_no_owned_leg`. `null` when it could not be counted, never 0."}, 'unreadable_rows': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Rows dropped for an amount or a currency that could not be read.'}, 'no_asset_movement': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "The sum's `excluded_zero_leg`: rows the transfer rule dropped for carrying no owned ASSET leg. This is where card spend sits, because a card charge moves a liability and belongs to the later repayment. It is the widest of the three and CONTAINS `no_owned_leg`, so never add the two together. `null` when it could not be counted, never 0."}, 'internal_transfers': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': "The sum's `excluded_multi_leg`. `null` when it could not be counted, never 0."}}, 'description': 'The four exclusion groups kept apart: the transfers the rule removed, the rows with no owned asset leg (card spend), the subset of those attributable to no account at all, and the rows dropped as unreadable. Merging them hides the difference between a rule and a defect.', 'additionalProperties': False}, 'convention': {'enum': ['signed', 'magnitude'], 'type': 'string', 'description': 'Which sign the feed uses for an outflow. "magnitude" is refused: it measures no outflow.'}, 'period_end': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'INCLUSIVE last day of that same month.'}, 'period_start': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'INCLUSIVE first day of the month covered.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'label_provenance': {'enum': ['curated', 'machine', 'mixed', 'unlabelled'], 'type': 'string', 'description': 'Whether a person set or confirmed the labels the reader can see.'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, 'positive': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}}, 'description': 'The row counts the convention was elected from.', 'additionalProperties': False}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['entries', 'currency', 'period_start', 'period_end', 'rung', 'label_provenance', 'coverage', 'convention', 'convention_counts', 'excluded', 'computed_by', 'success'], 'properties': {'rung': {'type': 'string'}, 'entries': {'type': 'array', 'items': {'type': 'object', 'required': ['category', 'amount', 'pct'], 'properties': {'pct': {'type': 'number'}, 'amount': {'type': 'number'}, 'category': {'type': 'string'}, 'is_other': {'type': 'boolean'}, 'category_key': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'coverage': {'type': 'object', 'required': ['labelled_rows', 'outflow_rows'], 'properties': {'outflow_rows': {'type': 'number'}, 'labelled_rows': {'type': 'number'}}, 'additionalProperties': False}, 'currency': {'type': 'string'}, 'excluded': {'type': 'object', 'required': ['internal_transfers', 'no_owned_leg', 'no_asset_movement', 'unreadable_rows'], 'properties': {'no_owned_leg': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'unreadable_rows': {'type': 'number'}, 'no_asset_movement': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'internal_transfers': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'convention': {'type': 'string'}, 'period_end': {'type': 'string'}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'period_start': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'label_provenance': {'type': 'string'}, 'convention_counts': {'type': 'object', 'required': ['negative', 'positive'], 'properties': {'negative': {'type': 'number'}, 'positive': {'type': 'number'}}, 'additionalProperties': False}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'window', 'months_in_window', 'months_with_revenue', 'recurring_contexts', 'invoice_count', 'unattributed_count', 'unclassified_count', 'excluded'], 'properties': {'amount': {'type': 'number', 'minimum': 0, 'description': 'Recurring revenue per month, net of tax and credit notes. A negative net is refused, never flipped.'}, 'change': {'type': 'number', 'description': "Signed percentage against `baseline.value`, drawn as the card's trend chip. Send it only alongside `baseline`."}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}, 'description': 'Inclusive start and EXCLUSIVE end of the averaged window, YYYY-MM-DD.'}, 'baseline': {'type': 'object', 'required': ['value', 'period'], 'properties': {'value': {'type': 'number', 'description': "The baseline window's own average. Zero is refused: a percentage against nothing is a division nobody can perform.", 'exclusiveMinimum': 0}, 'period': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}}}, 'description': 'The earlier window this figure is compared against. Required for `change` to render, and never rendered itself: name it in prose.'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string', 'description': 'ISO-4217 code the amount is denominated in.'}, 'excluded': {'type': 'object', 'required': ['one_off', 'credit_notes', 'unreadable_rows'], 'properties': {'one_off': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Issued invoices under a context the reader did not count.'}, 'credit_notes': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Credit notes netted into the figure.'}, 'unreadable_rows': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Invoices with no readable net amount or currency. Null when unmeasured.'}}, 'description': "The three exclusion groups kept apart: the reader's choice, the structural netting, and the defective rows."}, 'per_month': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string'}, 'amount': {'type': 'number'}}}, 'description': 'The series behind the average. A month with no recurring revenue belongs in it as a zero.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'invoice_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Issued invoices in the window.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'months_in_window': {'type': 'integer', 'maximum': 9007199254740991, 'description': 'The divisor — every month in the window.', 'exclusiveMinimum': 0}, 'recurring_contexts': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'maxItems': 100, 'minItems': 1, 'description': 'The billing contexts the reader confirmed as recurring, as recorded keys; "unclassified" stands for the invoices with no billing context. At least one: an MRR counting nothing as recurring is a policy nobody stated, not a zero.'}, 'unattributed_count': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0}, {'type': 'null'}], 'description': 'Invoices Well could place on neither side: a set separate from `invoice_count`, which may be larger. Null when unmeasured.'}, 'unclassified_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Invoices carrying no billing context. In the figure only when `recurring_contexts` holds "unclassified".'}, 'months_with_revenue': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'How many of those months carried any recurring revenue.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['amount', 'currency', 'window', 'months_in_window', 'months_with_revenue', 'recurring_contexts', 'invoice_count', 'unattributed_count', 'unclassified_count', 'excluded', 'computed_by', 'success'], 'properties': {'trend': {'enum': ['up', 'down', 'neutral'], 'type': 'string'}, 'amount': {'type': 'number'}, 'change': {'type': 'number'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'success': {'type': 'boolean'}, 'baseline': {'type': 'object', 'required': ['value', 'period'], 'properties': {'value': {'type': 'number'}, 'period': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'currency': {'type': 'string'}, 'excluded': {'type': 'object', 'required': ['one_off', 'credit_notes', 'unreadable_rows'], 'properties': {'one_off': {'type': 'number'}, 'credit_notes': {'type': 'number'}, 'unreadable_rows': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'per_month': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'amount'], 'properties': {'month': {'type': 'string'}, 'amount': {'type': 'number'}}, 'additionalProperties': False}}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'invoice_count': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'months_in_window': {'type': 'number'}, 'recurring_contexts': {'type': 'array', 'items': {'type': 'string'}}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'unattributed_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'unclassified_count': {'type': 'number'}, 'months_with_revenue': {'type': 'number'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['months', 'status', 'cash', 'avg_burn', 'as_of', 'partial'], 'properties': {'cash': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}}}, {'type': 'null'}]}, 'as_of': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'months': {'type': 'number', 'maximum': 36, 'minimum': 0}, 'status': {'enum': ['ok', 'capped', 'infinite', 'insufficient_data'], 'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, 'from': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}}, 'description': 'Inclusive start and EXCLUSIVE end of the months the burn averaged, YYYY-MM-DD.', 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'avg_burn': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency', 'trailing_months'], 'properties': {'amount': {'type': 'number'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'trailing_months': {'type': 'integer', 'maximum': 9007199254740991, 'exclusiveMinimum': 0}}}, {'type': 'null'}]}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['months', 'status', 'cash', 'avg_burn', 'as_of', 'partial', 'computed_by', 'success'], 'properties': {'cash': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency'], 'properties': {'amount': {'type': 'number'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'as_of': {'type': 'string'}, 'months': {'type': 'number'}, 'status': {'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'avg_burn': {'anyOf': [{'type': 'object', 'required': ['amount', 'currency', 'trailing_months'], 'properties': {'amount': {'type': 'number'}, 'currency': {'enum': ['USD', 'EUR', 'GBP', 'JPY', 'CHF', 'CAD', 'AUD', 'NZD', 'SEK', 'NOK', 'DKK', 'PLN', 'CZK', 'HUF', 'RON', 'BGN', 'HRK', 'ISK', 'ALL', 'BAM', 'BYN', 'MDL', 'MKD', 'RSD', 'FOK', 'GGP', 'GIP', 'IMP', 'JEP', 'CNY', 'CNH', 'KRW', 'SGD', 'HKD', 'TWD', 'THB', 'MYR', 'IDR', 'PHP', 'VND', 'INR', 'PKR', 'LKR', 'BDT', 'BND', 'BTN', 'KHR', 'LAK', 'MMK', 'MNT', 'MOP', 'MVR', 'NPR', 'KID', 'AED', 'SAR', 'QAR', 'KWD', 'BHD', 'OMR', 'JOD', 'ILS', 'EGP', 'ZAR', 'NGN', 'KES', 'GHS', 'MAD', 'TND', 'DZD', 'CVE', 'GMD', 'GNF', 'LRD', 'MGA', 'MRU', 'SHP', 'SLE', 'SLL', 'SSP', 'STN', 'YER', 'MXN', 'BRL', 'ARS', 'CLP', 'COP', 'PEN', 'UYU', 'VES', 'GTQ', 'HNL', 'NIO', 'CRC', 'PAB', 'DOP', 'JMD', 'TTD', 'BBD', 'XCD', 'ANG', 'AWG', 'BMD', 'BOB', 'BSD', 'BZD', 'CUP', 'GYD', 'HTG', 'KYD', 'PYG', 'SRD', 'XCG', 'FKP', 'FJD', 'PGK', 'SBD', 'TOP', 'TVD', 'VUV', 'WST', 'RUB', 'TRY', 'UAH', 'KZT', 'UZS', 'AZN', 'GEL', 'AMD', 'KGS', 'TJS', 'TMT', 'AFN', 'IRR', 'IQD', 'SYP', 'LBP', 'LYD', 'SDG', 'ETB', 'UGX', 'TZS', 'MWK', 'ZMW', 'BWP', 'SZL', 'LSL', 'NAD', 'MUR', 'SCR', 'KMF', 'DJF', 'ERN', 'SOS', 'AOA', 'MZN', 'ZWL', 'ZWG', 'BIF', 'RWF', 'CDF', 'XAF', 'XOF', 'XPF'], 'type': 'string'}, 'trailing_months': {'type': 'number'}}, 'additionalProperties': False}, {'type': 'null'}]}, 'computed_by': {'type': 'string', 'const': 'caller'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'enqueued', 'skipped'], 'properties': {'error': {'type': 'string'}, 'skipped': {'type': 'array', 'items': {'type': 'object', 'required': ['source_id', 'source_kind', 'reason'], 'properties': {'reason': {'type': 'string'}, 'source_id': {'type': 'string'}, 'source_kind': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'enqueued': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['task_ids', 'action'], 'properties': {'action': {'enum': ['approve', 'reject'], 'type': 'string'}, 'task_ids': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 100, 'minItems': 1, 'description': "The review tasks' task_id values."}, 'selection': {'type': 'object', 'required': ['target_type', 'target_id', 'allocated_amount'], 'properties': {'target_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'target_type': {'type': 'string', 'const': 'transaction'}, 'allocated_amount': {'type': 'number', 'description': 'The invoice-currency amount this settlement covers.', 'exclusiveMinimum': 0}}, 'description': 'For an unresolved reconciliation review task: the transaction the reviewer picked to settle the invoice. Applies to exactly one task; required on approve, rejected elsewhere.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['task_id', 'error'], 'properties': {'error': {'type': 'string'}, 'task_id': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'resolved': {'type': 'array', 'items': {'type': 'object', 'required': ['task_id', 'action', 'success'], 'properties': {'action': {'type': 'string'}, 'success': {'type': 'boolean'}, 'task_id': {'type': 'string'}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['task_id', 'bank_ledger_account_id', 'category_ledger_account_id'], 'properties': {'task_id': {'type': 'string', 'minLength': 1, 'description': "The gap review task's task_id."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'bank_ledger_account_id': {'type': 'string', 'minLength': 1, 'description': 'ledger_account_id of the bank/cash account.'}, 'category_ledger_account_id': {'type': 'string', 'minLength': 1, 'description': 'ledger_account_id of the category account.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'task_id': {'type': 'string'}, 'external_id': {'type': 'string'}, 'already_posted': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['source_workspace_connector_ids'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'source_workspace_connector_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'minItems': 1, 'description': 'The workspace_connector_id of each parent connector to bring across, copied from well_list_retargetable_connectors or well_show_retargetable_connectors.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'created_workspace_connector_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'description': 'The connector rows created on this workspace, one per newly retargeted source.'}, 'already_retargeted_workspace_connector_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'description': 'Source ids that had already been retargeted — an expected replay, not an error.'}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['bank_workspace_connector_id', 'register_workspace_connector_id'], 'properties': {'since_date': {'type': 'string', 'description': 'Only diff bank transactions on/after this date (YYYY-MM-DD).'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'bank_workspace_connector_id': {'type': 'string', 'minLength': 1, 'description': "The bank connector's workspace_connector_id (e.g. Plaid)."}, 'register_workspace_connector_id': {'type': 'string', 'minLength': 1, 'description': "The accounting connector's workspace_connector_id (e.g. QuickBooks)."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'enabled': {'type': 'boolean'}, 'matched': {'type': 'number'}, 'success': {'type': 'boolean'}, 'gaps_proposed': {'type': 'number'}, 'already_linked': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'raised_for_review': {'type': 'number'}, 'missing_in_register': {'type': 'number'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'contended_in_register': {'type': 'number'}, 'gaps_already_proposed': {'type': 'number'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'missing_in_register_ids': {'type': 'array', 'items': {'type': 'string'}}, 'unexplained_in_register': {'type': 'number'}, 'contended_in_register_ids': {'type': 'array', 'items': {'type': 'string'}}, 'unexplained_in_register_ids': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['q'], 'properties': {'q': {'type': 'string', 'maxLength': 200, 'minLength': 2, 'description': 'The company name to search for. At least 2 characters.'}, 'country': {'enum': ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'], 'type': 'string', 'description': 'Scope the search to this jurisdiction. Omit to search across registries.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['hits', 'degraded', 'success'], 'properties': {'hits': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'id', 'attributes'], 'properties': {'id': {'type': 'string'}, 'type': {'type': 'string', 'const': 'company-registry-hit'}, 'attributes': {'type': 'object', 'required': ['provider', 'legal_name', 'trade_name', 'siren', 'siret', 'vat_number', 'vat_number_derived', 'unverified_vat_number', 'registry_number', 'legal_form', 'business_type', 'country', 'fiscal_year_start_month', 'address_text', 'source_url', 'website'], 'properties': {'siren': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'siret': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'country': {'anyOf': [{'enum': ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'], 'type': 'string'}, {'type': 'null'}]}, 'website': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'provider': {'enum': ['RECHERCHE_ENTREPRISES', 'PAPPERS', 'OPENCORPORATES', 'EXA', 'EXA_ANSWER'], 'type': 'string'}, 'legal_form': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'legal_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'source_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vat_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'address_text': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'business_type': {'anyOf': [{'enum': ['Inc', 'Corp', 'LLC', 'LLP', 'LP', 'LLLP', 'PC', 'PLLC', 'PLC', 'Co', 'Ltd', 'DBA', 'Partnership', 'Sole_Proprietorship', 'C-Corp', 'S-Corp', 'B-Corp', 'PBC', 'CIC', 'CIO', 'IPS', 'EEIG', 'Sole_Trader', 'Unlimited', 'REIT', 'GmbH', 'AG', 'UG', 'OHG', 'GbR', 'PartG', 'eG', 'KGaA', 'GmbH_Co_KG', 'Einzelunternehmen', 'PartGmbB', 'SARL', 'SA', 'SAS', 'SASU', 'EURL', 'SNC', 'SCS', 'SCA', 'SEP', 'GIE', 'GEIE', 'SCOP', 'Auto_Entrepreneur', 'EI', 'EIRL', 'SpA', 'SRL', 'SNC_IT', 'SAS_IT', 'SAPA', 'SC', 'Ditta_Individuale', 'STP', 'Startup_Innovativa', 'SL', 'SC_ES', 'Scom', 'SCom_A', 'SCOOP', 'AIE', 'UTE', 'Empresario_Individual', 'CB', 'SAT', 'BV', 'NV', 'VOF', 'CV', 'Maatschap', 'VvE', 'Stichting', 'Vereniging', 'Coöperatie', 'EESV', 'Eenmanszaak', 'SPRL', 'SRL_BE', 'SCRL', 'Entreprise_Individuelle', 'ASBL', 'Sàrl', 'Kollektivgesellschaft', 'Kommanditgesellschaft', 'Einzelfirma', 'Genossenschaft', 'Verein', 'Stiftung', 'Kommanditaktiengesellschaft', 'OG', 'Gen', 'Stille_Gesellschaft', 'EWIV', 'Ltée', 'ULC', 'Cooperative_CA', 'NPO', 'Pty_Ltd', 'Trust', 'Co-operative', 'Incorporated_Association', 'CCIV', 'AMIT', 'KK', 'GK', 'YK', 'Gomei', 'Goshi', 'TMK', 'Cooperative_JP', 'Pvt_Ltd', 'HUF', 'Section_8', 'Producer_Company', 'OPC', 'Cooperative_IN', 'Trust_IN', 'Society', 'JSC', 'WFOE', 'JV', 'Rep_Office', 'FIE', 'Cooperative_CN', 'Ltda', 'Eireli', 'MEI', 'LTDA_ME', 'EPP', 'Cooperativa', 'SCP', 'Empresario_Individual_BR', 'SC_MX', 'SCS_MX', 'SCA_MX', 'SAPI', 'SAS_MX', 'Persona_Fisica', 'SOFOM', 'Pte_Ltd', 'Branch', 'Society_SG', 'Cooperative_SG', 'Branch_HK', 'Rep_Office_HK', 'Trust_HK', 'Cooperative_HK', 'Co_Ltd', 'Branch_KR', 'Rep_Office_KR', 'OAO', 'ZAO', 'OOO', 'PAO', 'AO', 'IP', 'GP_RU', 'Production_Cooperative', 'CC', 'NPO_ZA', 'NPC', 'PJSC', 'PJSCC', 'Branch_AE', 'Rep_Office_AE', 'Civil_Company', 'Free_Zone', 'JSC_SA', 'GP_SA', 'LPS', 'Branch_SA', 'Professional_Company', 'Other', 'Unknown', 'Corporation', 'Company', 'Enterprise', 'Firm', 'Business'], 'type': 'string'}, {'type': 'null'}]}, 'registry_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'vat_number_derived': {'type': 'boolean'}, 'unverified_vat_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fiscal_year_start_month': {'anyOf': [{'type': 'integer', 'maximum': 12, 'minimum': 1}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'degraded': {'type': 'boolean', 'description': 'True when a registry provider was unreachable and the hits are partial; the search still returned what it could.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'topK': {'type': 'integer', 'default': 10, 'maximum': 25, 'minimum': 1}, 'query': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': "Focused search query over the workspace's recorded notes and context."}, 'category': {'type': 'string'}, 'entityId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'entityType': {'enum': ['note'], 'type': 'string'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'occurredAfter': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'occurredBefore': {'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['results', 'total_returned', 'success'], 'properties': {'error': {'type': 'string'}, 'results': {'type': 'array', 'items': {'type': 'object', 'required': ['note_id', 'title', 'snippets', 'source_url', 'occurred_at'], 'properties': {'title': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'note_id': {'type': 'string'}, 'snippets': {'type': 'array', 'items': {'type': 'object', 'required': ['passage'], 'properties': {'passage': {'type': 'string'}}, 'additionalProperties': False}}, 'source_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'occurred_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'total_returned': {'type': 'number'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'query': {'type': 'string', 'pattern': '^[^\\n\\r]*$', 'maxLength': 200, 'description': 'What the user wants to do, in their own terms. The whole roster is returned either way.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'reason', 'skills'], 'properties': {'error': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['skill_unknown', 'catalog_unreadable', 'write_skill_in_app'], 'type': 'string'}, {'type': 'null'}]}, 'skills': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'description'], 'properties': {'id': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['company_id', 'category'], 'properties': {'category': {'enum': ['Subscription & product revenue', 'Services & implementation revenue', 'Grants & subsidies (non-repayable)', 'Research tax credit (CIR/CICE)', 'Other operating income & cashback', 'Employee salaries (net)', 'Employer social charges', 'Wage withholding remittance (PAS)', 'Employee benefits & insurance', 'Recruiting & hiring fees', 'Engineering / product contractors', 'Operations / GTM / other contractors', 'Legal & corporate-secretarial fees', 'Accounting, finance & advisory fees', 'Other professional & consulting fees', 'AI model / inference (cost of revenue)', 'Hosting, infrastructure & data (cost of revenue)', 'Developer & engineering software', 'Business & productivity software', 'Hardware & equipment', 'Advertising & paid media', 'Sales / marketing tools & lead-gen', 'AI creative & content production', 'Office rent & coworking', 'Office supplies & general operations', 'Travel & transport', 'Meals & entertainment', 'Team events & offsites', 'Bank, FX & payment-processing fees', 'Business insurance', 'Corporate income tax', 'Local & business taxes', 'Other operating expense (residual)', 'VAT receivable (input / refund)', 'VAT payable (output)', 'Treasury placement (out)', 'Treasury redemption (in)', 'Investment & interest income', 'Equity proceeds & raise costs', 'Loan drawdowns & repayments', 'Repayable public advances', 'Realised FX gain / loss', 'Inter-account transfer (same entity)', 'Inter-company transfer (own entities)', 'FX conversion principal', 'Uncategorised / suspense'], 'type': 'string', 'description': 'The category label spend at this counterparty defaults to. Must be one of the labels in this list.'}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The counterparty to declare a default for, from well_list_counterparties.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'category': {'type': 'string', 'description': "The label the counterparty's default now carries."}, 'company_id': {'type': 'string'}, 'company_name': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of a company already in this workspace to anchor as its own company.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'own_company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['transaction_id', 'category'], 'properties': {'category': {'enum': ['Subscription & product revenue', 'Services & implementation revenue', 'Grants & subsidies (non-repayable)', 'Research tax credit (CIR/CICE)', 'Other operating income & cashback', 'Employee salaries (net)', 'Employer social charges', 'Wage withholding remittance (PAS)', 'Employee benefits & insurance', 'Recruiting & hiring fees', 'Engineering / product contractors', 'Operations / GTM / other contractors', 'Legal & corporate-secretarial fees', 'Accounting, finance & advisory fees', 'Other professional & consulting fees', 'AI model / inference (cost of revenue)', 'Hosting, infrastructure & data (cost of revenue)', 'Developer & engineering software', 'Business & productivity software', 'Hardware & equipment', 'Advertising & paid media', 'Sales / marketing tools & lead-gen', 'AI creative & content production', 'Office rent & coworking', 'Office supplies & general operations', 'Travel & transport', 'Meals & entertainment', 'Team events & offsites', 'Bank, FX & payment-processing fees', 'Business insurance', 'Corporate income tax', 'Local & business taxes', 'Other operating expense (residual)', 'VAT receivable (input / refund)', 'VAT payable (output)', 'Treasury placement (out)', 'Treasury redemption (in)', 'Investment & interest income', 'Equity proceeds & raise costs', 'Loan drawdowns & repayments', 'Repayable public advances', 'Realised FX gain / loss', 'Inter-account transfer (same entity)', 'Inter-company transfer (own entities)', 'FX conversion principal', 'Uncategorised / suspense'], 'type': 'string', 'description': 'The category label to store. Must be one of the labels in this list.'}, 'decision': {'enum': ['accepted_classifier_suggestion', 'user_choice'], 'type': 'string', 'description': 'How the user arrived at the label. Omit for a user choice. See the description before sending accepted_classifier_suggestion.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'transaction_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The transaction to categorize, from well_list_uncategorized_window.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'category': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The label stored on the row after the write.'}, 'transaction_id': {'type': 'string'}, 'category_source': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Provenance the server settled on: "classifier" when it accepted the affirmation claim, "user" when the caller picked the label or the claim was downgraded.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'category_confidence': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The classifier's score, preserved only on an accepted affirmation. Null on a user choice."}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['transaction_id', 'ledger_account_id'], 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'transaction_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The transaction to attach, from well_list_unposted_transactions.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'ledger_account_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': 'The ledger account to attach. `null` DETACHES the account currently on the row.'}, 'no_invoice_expected': {'type': 'boolean', 'const': True, 'description': 'Assert no supplier invoice is coming, and post the entry to the attached account in the same call. Only for a row whose `expects_supplier_invoice` is false.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'posted': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'transaction_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'posting_outcome': {'type': 'string'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'title': {'type': 'string', 'maxLength': 120, 'description': 'Heading for the accounting-setup card, OVERRIDING the default wording. Use it to frame the step in its flow (e.g. "Confirm your accounting settings for the close"). At most 120 characters. Omit for the default wording.'}, 'required': {'type': 'array', 'items': {'enum': ['country', 'incorporation_date', 'tax_id', 'fiscal_year_start_month', 'base_currency', 'accounting_framework'], 'type': 'string'}, 'minItems': 1, 'description': 'The card fields the user MUST fill before Confirm is enabled, as an exact list from ["country","incorporation_date","tax_id","fiscal_year_start_month","base_currency","accounting_framework"]. Omit to gate on the default set ["fiscal_year_start_month","base_currency"]; widen it when a step needs more (never narrow below the default).'}, 'subtitle': {'type': 'string', 'maxLength': 240, 'description': "Supporting line under the card's heading. At most 240 characters. Omit for the default."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'required': {'type': 'array', 'items': {'enum': ['country', 'incorporation_date', 'tax_id', 'fiscal_year_start_month', 'base_currency', 'accounting_framework'], 'type': 'string'}}, 'settings': {'type': 'object', 'required': ['country', 'base_currency', 'accounting_framework', 'fiscal_year_start_month', 'fiscal_year_start_month_source', 'fiscal_year_start_locked', 'first_fiscal_year_start_date', 'first_fiscal_year_start_source', 'coa_confirmed', 'coa_confirmed_source', 'field_provenance', 'incorporation_date', 'registered_name', 'trade_name', 'registered_value', 'domain', 'business_type', 'address', 'own_company_id', 'created_at', 'updated_at', 'tax_id'], 'properties': {'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tax_id': {'type': 'object', 'required': ['present', 'source', 'suggestion_available'], 'properties': {'source': {'anyOf': [{'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, {'type': 'null'}]}, 'present': {'type': 'boolean'}, 'suggestion_available': {'type': 'boolean'}}, 'additionalProperties': False}, 'address': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'created_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'updated_at': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'business_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'coa_confirmed': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'field_provenance': {'anyOf': [{'type': 'object', 'properties': {'tax_id': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'country': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'base_currency': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'incorporation_date': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'accounting_framework': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}, 'fiscal_year_start_month': {'type': 'object', 'required': ['source', 'confidence', 'reason', 'recorded_at'], 'properties': {'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'recorded_at': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, {'type': 'null'}]}, 'registered_value': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'incorporation_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'accounting_framework': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'coa_confirmed_source': {'anyOf': [{'type': 'string', 'const': 'user'}, {'type': 'null'}]}, 'fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'fiscal_year_start_locked': {'type': 'boolean'}, 'first_fiscal_year_start_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'first_fiscal_year_start_source': {'anyOf': [{'enum': ['derived', 'user'], 'type': 'string'}, {'type': 'null'}]}, 'fiscal_year_start_month_source': {'anyOf': [{'enum': ['derived', 'registry', 'user'], 'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'suggestions': {'type': 'object', 'properties': {'tax_id': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'country': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'base_currency': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'incorporation_date': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'accounting_framework': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'fiscal_year_start_month': {'type': 'array', 'items': {'type': 'object', 'required': ['value', 'label', 'source', 'reason', 'confidence', 'country'], 'properties': {'label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'value': {'type': 'string'}, 'reason': {'anyOf': [{'enum': ['registry_match', 'email_domain', 'country_default', 'invoice_header', 'agent_setup'], 'type': 'string'}, {'type': 'null'}]}, 'source': {'enum': ['ai', 'registry', 'derived', 'user'], 'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confidence': {'anyOf': [{'type': 'number', 'maximum': 1, 'minimum': 0}, {'type': 'null'}]}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}}, 'additionalProperties': False}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['anchor', 'candidates', 'success'], 'properties': {'error': {'type': 'string'}, 'anchor': {'anyOf': [{'type': 'object', 'required': ['company_id', 'registered_name', 'trade_name'], 'properties': {'company_id': {'type': 'string'}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['candidate_id', 'company_id', 'registered_name', 'trade_name', 'role', 'state', 'confidence_score', 'domain', 'remote_logo_url', 'country', 'business_type', 'confirmable', 'confirmable_reason'], 'properties': {'role': {'anyOf': [{'enum': ['primary', 'sibling'], 'type': 'string'}, {'type': 'null'}]}, 'state': {'enum': ['pending', 'confirmed', 'dismissed', 'snoozed'], 'type': 'string'}, 'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's domain, a logo source and a display fallback."}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's country, for a light detail panel."}, 'company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'confirmable': {'type': 'boolean', 'description': 'Whether well_create_company_workspace accepts this candidate now. False for a name-only detected candidate with no groundable identity, or one that has left the surfaced set.'}, 'candidate_id': {'type': 'string', 'description': "The candidate's id — pass to well_create_company_workspace to mint the company workspace from it."}, 'business_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The company's legal form (SAS, Inc, GmbH), when known."}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'remote_logo_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'A resolved logo url when one is known; null otherwise.'}, 'confidence_score': {'type': 'number'}, 'confirmable_reason': {'anyOf': [{'enum': ['not_open', 'not_surfaceable', 'not_primary', 'already_confirmed', 'not_grounded'], 'type': 'string'}, {'type': 'null'}], 'description': 'Why confirmable is false, null when true. not_grounded: no registry or tax identifier to mint from; ask the user to search the registry and pick the verified entry. not_open: no longer the surfaced candidate; re-read the own-company list before acting. Others: not_primary, already_confirmed, not_surfaceable.'}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['root'], 'properties': {'root': {'type': 'string', 'description': 'The entity type to query — any of the 33 read-only roots (companies, people, connectors, invoices, documents, transactions, accounts, payment_means, workspace_connectors, memberships, cards, checks, ledger_accounts, journals, journal_entries, tax_rates, exchange_rates, invoice_transactions, categories, account_balances, tasks, workspaces, invoice_payment_means, chat_conversations, blueprint_runs, workspace_connector_sync_logs, media, emails, phones, web_links, locations, invoice_items, billing_events). Call well_get_schema(root) first to discover fields.'}, 'limit': {'type': 'number', 'maximum': 500, 'minimum': 1, 'description': 'Max records to return (default 50, max 500)'}, 'cursor': {'type': 'string', 'description': 'Opaque cursor for the next page. Omit for the first page, then pass nextCursor from the previous response.'}, 'fields': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}}, 'description': "EXTRA field paths to add to the root's display view, for values you need to reason about. Each path is an array whose first segment is the root's table name — use the paths well_get_schema(root) returns verbatim, which is the root name for every root except people (whose table is peoples); a path opening with any other segment is dropped. Additive only: they widen the payload you receive, and the root's own display projection (the columns the Well web app shows, and the ones a table drawn from this query carries) stays what it is no matter what you pass here. A scalar a composite renders comes back AS that composite — asking for grand_total gets you composite_total_amount_currency, with grand_total inside it — so read `columns` for what was actually materialized. Omit unless you need a value the display view does not carry."}, 'orderBy': {'type': 'object', 'required': ['field', 'direction'], 'properties': {'field': {'type': 'string', 'description': 'Field name to sort by'}, 'direction': {'enum': ['asc', 'desc'], 'type': 'string', 'description': 'Sort direction'}}, 'description': 'Sort results by a field. Example: { field: "grand_total", direction: "desc" }'}, 'allFields': {'type': 'boolean', 'description': 'If true, automatically fetches all scalar fields from schema. No need to specify fields.'}, 'partyScope': {'enum': ['purchase', 'sales', 'intra_self', 'unattributed'], 'type': 'string', 'description': 'Which side of an invoice the workspace itself occupies, resolved from its own company rather than a party name. `invoices` root only. "purchase" = the workspace owes it (payables); "sales" = the workspace is owed (receivables); "intra_self" = both parties are companies the workspace owns; "unattributed" = Well cannot place it on either side. The four partition every invoice, so report the "unattributed" count beside any payable total rather than dropping it — an unattributed invoice may still be owed. Prefer this over hand-writing an issuer/receiver filter.'}, 'whereClause': {'type': 'object', 'description': 'Hasura-style filter object. Operators: _eq, _neq, _gt, _gte, _lt, _lte, _like, _ilike, _in, _nin, _is_null. Example: { "status": { "_eq": "unpaid" } }', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit to query every authorized workspace at once; each row comes back tagged with the workspace it belongs to.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'totalCount', 'returned', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Query results'}, 'error': {'type': 'string'}, 'columns': {'type': 'array', 'items': {'type': 'string'}, 'description': "The materialized columns in display order, with each composite substituted in place of the source fields it consumed. A row object's key order does not preserve this — the flattener appends reconstructed composites last — so a UI that wants the web app's column order must read it from here."}, 'success': {'type': 'boolean'}, 'returned': {'type': 'number', 'description': 'Number of rows returned'}, 'columnMeta': {'type': 'object', 'description': 'Per-column field meaning, keyed by the same column paths as the rows. `context` = what the field means; `enrichment` = how the value is sourced (e.g. Bank sync, AI extraction). Only documented columns appear. Read this to interpret the returned values.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'object', 'properties': {'context': {'type': 'string'}, 'enrichment': {'type': 'string'}}, 'additionalProperties': False}}, 'nextCursor': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Cursor for the next page. null means last page.'}, 'totalCount': {'type': 'number', 'description': 'Total matching records'}, 'records_url': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "Login-gated deep link to the FULL web-app records table for this root (real DataTable: composites, inline editing, resize/pin), carrying this call's `whereClause` and `orderBy` so it opens on the same rows. Hand it to the user for everything past this page — it is the answer to 'show me all of them', not pagination. Null when no workspace is in context or no web page serves the root."}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'title': {'type': 'string', 'maxLength': 120, 'description': 'Heading for the connector-retarget card, OVERRIDING the default wording. Use it to frame the step in its flow (e.g. "Bring your bank across for the close"). At most 120 characters. Omit for the default wording.'}, 'subtitle': {'type': 'string', 'maxLength': 240, 'description': "Supporting line under the card's heading. At most 240 characters. Omit for the default."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'candidates': {'type': 'array', 'items': {'type': 'object', 'required': ['workspace_connector_id', 'service_id', 'name', 'proof_tier', 'transaction_count', 'earliest_transaction_date', 'latest_transaction_date', 'source_workspace', 'preselected'], 'properties': {'name': {'type': 'string'}, 'proof_tier': {'enum': ['canonical_id', 'name_country', 'no_match'], 'type': 'string'}, 'service_id': {'type': 'string'}, 'preselected': {'type': 'boolean'}, 'source_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'type': 'string'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}}, 'additionalProperties': False}, 'transaction_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'workspace_connector_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'latest_transaction_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'earliest_transaction_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'reply': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'One sentence, IN THE LANGUAGE THE USER IS WRITING IN, that the click sends into the conversation as their own message. Write what the PERSON would say about the workspace they pick, in their words, not an instruction to yourself. You write it BEFORE they click, so you cannot know what they will choose: put {picked} where the pick belongs and the card replaces it with the names they actually picked, one or several. In English it would read "Let\'s work on {picked}." Write the same shape in the user\'s language. {picked} is required: a sentence that names a pick itself names the one you guessed, so the card refuses it and sends its own English instead. At most 160 characters. Omitted sends an English sentence the card builds itself, which is wrong for any reader not writing in English.'}, 'title': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'Heading for the picker card, framing the step in its flow (e.g. "Which company are we closing?"). At most 120 characters. Omit to keep the default wording; an empty string is rejected rather than rendered as a blank heading.'}, 'subtitle': {'type': 'string', 'maxLength': 240, 'minLength': 1, 'description': "Supporting line under the picker card's heading. At most 240 characters. Omit to keep the default wording; an empty string is rejected rather than rendered blank."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Optional: this tool describes the token itself rather than one workspace's data, so omitting it returns the same answer."}, 'workspace_ids': {'type': 'array', 'items': {'type': 'string'}, 'minItems': 1, 'description': 'Scope the tiles to this subset of the authorized workspaces, e.g. the company workspaces under one membership. Every id must be one this token authorizes; an id outside the grant refuses the call. Omit to draw every authorized workspace.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['workspaces', 'success'], 'properties': {'error': {'type': 'string'}, 'session': {'type': 'object', 'required': ['pinned_workspace_id', 'workspace_queue', 'selected_periods', 'selected_counterparties'], 'properties': {'workspace_queue': {'type': 'array', 'items': {'type': 'string'}}, 'selected_periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}}, 'pinned_workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'selected_counterparties': {'anyOf': [{'type': 'object', 'required': ['workspace_id', 'counterparties'], 'properties': {'workspace_id': {'type': 'string', 'description': 'The workspace the picked company ids belong to.'}, 'counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id', 'matched_connector_service_id'], 'properties': {'company_id': {'type': 'string'}, 'matched_connector_service_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The connector that can fetch this counterparty's invoices; null when none matched."}}, 'additionalProperties': False}}}, 'additionalProperties': False}, {'type': 'null'}], 'description': 'The counterparties picked on the missing-invoices card; null until a pick is recorded.'}}, 'description': "What this conversation's card clicks recorded so far; null/empty fields when nothing was clicked yet.", 'additionalProperties': False}, 'success': {'type': 'boolean'}, 'next_step': {'type': 'string', 'description': 'What to do with the card this result renders. Added by the dispatcher when the card asks for a click.'}, 'workspaces': {'type': 'array', 'items': {'type': 'object', 'required': ['workspace_id', 'workspace_name', 'is_primary', 'own_company_id', 'lineage_parent_workspace_id', 'has_bank_transactions', 'identity'], 'properties': {'identity': {'type': 'object', 'required': ['registered_name', 'trade_name', 'registered_value', 'country', 'domain', 'base_currency', 'fiscal_year_start_month', 'fiscal_year_start_month_source', 'country_default_fiscal_year_start_month'], 'properties': {'domain': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'trade_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'registered_value': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'fiscal_year_start_month_source': {'anyOf': [{'enum': ['derived', 'registry', 'user'], 'type': 'string'}, {'type': 'null'}], 'description': 'Where fiscal_year_start_month came from: "registry" from a company registry, "derived" from the country fallback, "user" from a human. Null when never set. Tells a confirmed fiscal year from one resting on a default.'}, 'country_default_fiscal_year_start_month': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': "The jurisdiction's default fiscal-year-start month for this country, or null when the country has no single confident default (non-null for France only today)."}}, 'additionalProperties': False}, 'is_primary': {'type': 'boolean'}, 'workspace_id': {'type': 'string'}, 'own_company_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The public id of the company this workspace is anchored to, or null. A row that carries it is a company workspace, the one the close flow runs in; a row without it is a membership workspace.'}, 'workspace_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'has_bank_transactions': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}], 'description': 'Whether a connector the workspace BANKS with has delivered any transaction to it: a bank, a neobank, or a treasury or spend platform whose product is an account. An accounting platform and a payment processor deliver transactions too and do NOT count. A transaction whose source connector is unknown, whose install has since been disconnected, or whose catalog entry has been retired does not count either. Only true shows a bank has fed this workspace. false means no such transaction was found; null means the signal could not be read. An absent value is not a zero, and neither false nor null licenses skipping a bank-connection step.'}, 'lineage_parent_workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': "The workspace_id of the membership this workspace was created under, or null when it has no active lineage. Its parent's own row is the membership whose id this points at."}}, 'additionalProperties': False}}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'party_scope'], 'properties': {'to': {'type': 'string', 'pattern': '^(\\d{4})-(\\d{2})-01$', 'description': 'EXCLUSIVE end of the window: the first day of the month after the last one you want, YYYY-MM-01.'}, 'from': {'type': 'string', 'pattern': '^(\\d{4})-(\\d{2})-01$', 'description': 'Inclusive start of the window: the first day of a month, YYYY-MM-01.'}, 'party_scope': {'enum': ['purchase', 'sales', 'intra_self', 'unattributed'], 'type': 'string', 'description': 'Which side of the invoice the workspace occupies: `sales` for what it issued, `purchase` for what it received. Required; see the description.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'window', 'unattributed_count', 'unclassified_count', 'corrected_or_consolidated_count', 'excluded_malformed', 'partial', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'currency', 'billing_context', 'sum', 'count', 'credit_note_sum', 'credit_note_count'], 'properties': {'sum': {'type': 'number'}, 'count': {'type': 'number'}, 'month': {'type': 'string'}, 'currency': {'type': 'string'}, 'billing_context': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'credit_note_sum': {'type': 'number'}, 'credit_note_count': {'type': 'number'}}, 'additionalProperties': False}}, 'error': {'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'excluded_malformed': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'unattributed_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'unclassified_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'corrected_or_consolidated_count': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['from', 'to', 'scope'], 'properties': {'to': {'type': 'string', 'description': 'EXCLUSIVE end of the window, ISO-8601 — the first instant after the last month you want.'}, 'axes': {'type': 'array', 'items': {'enum': ['month', 'currency', 'category', 'ledger_account', 'category_label', 'transaction_type'], 'type': 'string'}, 'maxItems': 6, 'description': 'Group the sums by these, IN ADDITION to currency. Omit for one row per currency over the whole window.'}, 'from': {'type': 'string', 'description': 'Inclusive start of the window, ISO-8601 (e.g. 2026-06-01).'}, 'scope': {'enum': ['own', 'own_and_adopted'], 'type': 'string', 'description': "Which rows are this workspace's: `own` for a sum reconciled against its own balances, `own_and_adopted` for a burn. Required; see the description."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 100, 'description': 'Category keys that do not count. An uncategorized row is never matched by one.'}, 'exclude_internal_transfers': {'type': 'boolean', 'description': 'Keeps rows with exactly one leg on an owned account; two-leg transfers AND zero-leg rows (card purchases) both drop. See the description.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['rows', 'window', 'excluded_malformed', 'excluded_zero_leg', 'excluded_multi_leg', 'excluded_no_owned_leg', 'partial', 'rows_truncated', 'success'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['month', 'currency', 'category_key', 'ledger_account', 'category_label', 'transaction_type', 'sum_negative', 'sum_positive', 'count_negative', 'count_positive'], 'properties': {'month': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'category_key': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'sum_negative': {'type': 'number'}, 'sum_positive': {'type': 'number'}, 'category_label': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'count_negative': {'type': 'number'}, 'count_positive': {'type': 'number'}, 'ledger_account': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'transaction_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}}, 'error': {'type': 'string'}, 'window': {'type': 'object', 'required': ['from', 'to'], 'properties': {'to': {'type': 'string'}, 'from': {'type': 'string'}}, 'additionalProperties': False}, 'partial': {'type': 'boolean'}, 'success': {'type': 'boolean'}, 'rows_truncated': {'type': 'boolean'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'excluded_zero_leg': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'excluded_malformed': {'type': 'number'}, 'excluded_multi_leg': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'excluded_no_owned_leg': {'anyOf': [{'type': 'number'}, {'type': 'null'}]}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'ack': {'enum': ['connectors', 'bank', 'categorize', 'assign', 'deploy', 'company_pick', 'accounting_settings', 'retarget', 'invite'], 'type': 'string', 'description': 'Acknowledge a flow step: "connectors" for the connect-tools step, "bank" for the bank step, "categorize" for the counterparty-categorization step, "assign" for the assign-owners step, "deploy" for the collect-agents step, "retarget" for the connector-retarget (data-migration) card, "company_pick" for the company-candidates card, "invite" for the invite-members card. "retarget" is the retarget card\'s own ack: the card sends it on its Confirm with ack_outcome "done", or on its Keep for later with "keep_for_later", so you do not send it yourself. The acknowledgement is scoped to the workspace this call is dispatched to, and a switch to another workspace clears it. An acknowledgement sent for a workspace this conversation has switched away from is refused, and the pinned workspace\'s own acknowledgement of that step stands.'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': "The months the user VALIDATED on the period card, stored as this conversation's selected_periods. Later period-scoped reads default to them when called without a period. This field is the user's month selection alone: to bound a counterparty pick, send counterparty_periods instead."}, 'next_step': {'type': 'object', 'required': ['skill', 'prompt'], 'properties': {'skill': {'type': 'string', 'pattern': '^[a-z0-9-]{1,64}$', 'description': 'The slug of the skill the picked line offers, exactly as the card listed it.'}, 'prompt': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'The sentence the card listed beside the skill, copied as written.'}}, 'description': "The next step the user picked on the well_propose_next_steps card, as the pair that card listed: the skill's slug and the sentence beside it. Both travel, because the sentence is what the model reads as the user's own message and the slug is what it loads. The pick is scoped to the workspace this call is dispatched to, and a switch to another workspace clears it.", 'additionalProperties': False}, 'ack_outcome': {'enum': ['done', 'keep_for_later'], 'type': 'string', 'description': 'What the click said about the step: "done" when the user carried it out, "keep_for_later" when they set it aside on purpose. REQUIRED with ack "categorize" and "deploy" and "retarget" and "company_pick" and "invite", whose cards end on two buttons that mean different things, and refused with every other step, whose card confirms and nothing else.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'workspace_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 20, 'minItems': 1, 'description': "Ordered workspace selection, and the ONLY field that moves the pin: the FIRST entry becomes this conversation's pin, and the rest REPLACE the workspace_queue, so a one-entry list empties a queue that still holds workspaces. Every entry must be authorized for this connection, or the whole call is refused. Never send it to name the workspace of a periods, counterparties or ack call: the universal workspace_id already targets those, while a re-pin to the id this conversation already holds writes nothing and clears the queue."}, 'counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "The counterparty company's id, as listed by well_list_counterparties or well_list_missing_invoices."}, 'matched_connector_service_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': "The matched provider's connector service id, copied from the row's matched_connector_service_id. Omit or pass null when the row matched no provider; never substitute the provider's name."}}, 'additionalProperties': False}, 'maxItems': 200, 'minItems': 1, 'description': "The counterparties the user selected, stored as this conversation's selected_counterparties and scoped to the workspace this call is dispatched to. At most 200, and a longer list is refused, so a select-all keeps to that bound. Copy the ids off the row: company_id, plus matched_connector_service_id when the row carries one. Send the card's months as counterparty_periods in the same call, so the pick applies to those months only; with none named, the months this conversation already holds bound it. The conversation holds ONE selection, so this REPLACES the previous one, but only when the call names the pinned workspace: a selection sent for a workspace this conversation has switched away from is refused, and the pinned workspace's selection stands."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'maxItems': 100, 'description': "The categories the user marked as NOT burn, stored as this conversation's selected_exemptions and scoped to the workspace this call is dispatched to. Copy each category_key off the row well_list_burn_exemptions returned; never send a label. An EMPTY list is a real answer, since it records that the user exempted nothing, so send it when they clicked Continue with nothing ticked, and omit the field entirely when they have not answered. At most 100, the same bound well_sum_transactions accepts, so a recorded answer is always one the sum can run. The conversation holds ONE set, so this REPLACES the previous one; unlike a counterparty pick it survives a change of months, because a category is or is not burn for the business whatever window is read next."}, 'recurring_contexts': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'maxItems': 100, 'description': "The billing contexts the user counts as recurring revenue, stored as this conversation's selected_recurring_contexts and scoped to the workspace this call is dispatched to. Copy each context_key off the row well_list_recurring_contexts returned; never send a label. An EMPTY list is a real answer, since it records that the user counts nothing as recurring, so send it when they clicked Continue with nothing ticked, and omit the field entirely when they have not answered. At most 100, the same bound well_render_mrr accepts. The conversation holds ONE set, so this REPLACES the previous one, and like the exemptions it survives a change of months."}, 'counterparty_periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1, 'description': "The months the counterparties card listed, which bound the pick sent as counterparties in the same call. Send it only with counterparties; it never becomes this conversation's selected months, so it cannot overwrite what the user validated on the period card. With none named, the months this conversation already holds bound the pick."}, 'counted_account_types': {'type': 'array', 'items': {'enum': ['deposit', 'credit', 'loan', 'investment', 'payroll', 'other'], 'type': 'string'}, 'description': "The account types the user ticked as cash, stored as this conversation's selected_cash_scope and scoped to the workspace this call is dispatched to. Copy each account_type off the group well_list_cash_scope returned; never send a label. An EMPTY list is a real answer, since it records that the user counts nothing as cash, which ends the run rather than reporting a zero, so send it when they clicked Continue with nothing ticked, and omit the field entirely when they have not answered. The conversation holds ONE set, so this REPLACES the previous one, and like the exemptions it survives a change of months: a credit card is or is not cash for the business whatever window is read next."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success', 'resumed', 'pickup'], 'properties': {'error': {'type': 'string'}, 'pickup': {'enum': ['resumed', 'held_then_resumed', 'unwaited', 'exhausted', 'stale'], 'type': 'string', 'description': 'What became of this write: "resumed" (a model wait took it), "held_then_resumed" (no wait yet, so the call was held until one consumed it), "unwaited" (nothing ever consumed it), "exhausted" (the model gave up on the card and ended the turn), "stale" (the flow already answered this card and moved past it — the value is recorded as a late edit). A card prefills a reply on "unwaited" and "exhausted" only.'}, 'changed': {'type': 'array', 'items': {'enum': ['workspace', 'periods', 'counterparties', 'exemptions', 'recurring_contexts', 'cash_scope', 'next_step', 'connectors_ack', 'bank_ack', 'categorize_ack', 'assign_ack', 'deploy_ack', 'company_pick', 'accounting_settings_ack', 'retarget_ack', 'invite_ack'], 'type': 'string'}, 'description': "Which fields of this conversation's context this call wrote."}, 'resumed': {'type': 'boolean', 'description': 'True when the model\'s own turn carries this write on — the derived half of `pickup` ("resumed" or "held_then_resumed"). A card that reads true must not prefill a reply; the conversation continues on its own.'}, 'success': {'type': 'boolean'}, 'warning': {'type': 'string', 'description': 'Present when this call opened a fresh lane because no conversation_id reached it: the write landed, and only a later call that passes the echoed conversation_id back can read it.'}, 'acknowledged': {'enum': ['connectors', 'bank', 'categorize', 'assign', 'deploy', 'company_pick', 'accounting_settings', 'retarget', 'invite'], 'type': 'string'}, 'workspace_id': {'type': 'string'}, 'workspace_name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'workspace_queue': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The workspaces queued after the pinned one, in order.'}, 'selected_periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 2100, 'minimum': 2000, 'description': 'Calendar year, e.g. 2026.'}, 'calendar_month': {'type': 'integer', 'maximum': 12, 'minimum': 1, 'description': 'Calendar month, 1 = January … 12 = December.'}}, 'additionalProperties': False}}, 'selected_next_step': {'type': 'object', 'required': ['skill', 'prompt'], 'properties': {'skill': {'type': 'string', 'pattern': '^[a-z0-9-]{1,64}$', 'description': 'The slug of the skill the picked line offers, exactly as the card listed it.'}, 'prompt': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'The sentence the card listed beside the skill, copied as written.'}}, 'description': 'The next step this call recorded, echoed back as the card sent it.', 'additionalProperties': False}, 'selected_cash_scope': {'type': 'array', 'items': {'type': 'string'}}, 'selected_exemptions': {'type': 'array', 'items': {'type': 'string'}}, 'acknowledged_outcome': {'enum': ['done', 'keep_for_later'], 'type': 'string', 'description': 'The answer the acknowledging click carried, echoed back on a step whose card offers two.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'selected_counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "The counterparty company's id, as listed by well_list_counterparties or well_list_missing_invoices."}, 'matched_connector_service_id': {'anyOf': [{'type': 'string', 'minLength': 1}, {'type': 'null'}], 'description': "The matched provider's connector service id, copied from the row's matched_connector_service_id. Omit or pass null when the row matched no provider; never substitute the provider's name."}}, 'additionalProperties': False}}, 'selected_recurring_contexts': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['company_id'], 'properties': {'name': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Company name'}, 'domain': {'anyOf': [{'type': 'string', 'maxLength': 500}, {'type': 'null'}], 'description': 'Primary website domain (e.g. acme.com)'}, 'locale': {'anyOf': [{'enum': ['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu'], 'type': 'string'}, {'type': 'null'}], 'description': 'Preferred language as an ISO 639-1 two-letter code (e.g. en, fr, de). Pass null to clear.'}, 'decision': {'enum': ['accepted_suggestion', 'explicit'], 'type': 'string', 'description': 'How the user arrived at `category_ids`. Omit it: a request the user typed is an explicit choice, and accepted_suggestion belongs to the categorization card. See the description.'}, 'company_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the company to update (required)'}, 'trade_name': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'description': 'Trading name / DBA'}, 'description': {'anyOf': [{'type': 'string', 'maxLength': 250}, {'type': 'null'}], 'description': 'Brief company description; pass null to clear'}, 'tax_id_type': {'anyOf': [{'type': 'string', 'maxLength': 50}, {'type': 'null'}], 'description': 'Tax identifier type (VAT, SIRET, EIN, ...)'}, 'category_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 20, 'description': 'The COMPLETE set of company-category ids this company should carry. Replaces the current set; [] clears it; omit to leave categories unchanged.'}, 'tax_id_value': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'description': 'Tax identifier value (VAT, SIRET, EIN, ...)'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'business_type': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'description': 'Business type / legal form'}, 'registry_name': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'description': 'Registry name'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'registered_name': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'description': 'Official registered legal name'}, 'registered_value': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'description': 'Registry identifier value'}, 'registry_country': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{2}$', 'maxLength': 2, 'minLength': 2}, {'type': 'null'}], 'description': 'ISO 3166-1 alpha-2 country code of the registry (e.g. FR, US)'}, 'ledger_default_source': {'enum': ['human_override'], 'type': 'string', 'description': 'How the AP/AR pick was made. The only value this write accepts is `human_override`: the person chose the account from the chart of accounts. Optional, and it defaults to `human_override`, so a plain assign needs it not at all.'}, 'account_payable_default_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': "The counterparty's default account-payable ledger account (a vendor payable, FR PCG 401). Set it for a counterparty you pay. Omit to leave it; null clears it. Read the ids with `well_list_ledger_accounts`."}, 'account_receivable_default_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': "The counterparty's default account-receivable ledger account (a customer receivable, FR PCG 411). Set it for a counterparty that pays you. Omit to leave it; null clears it. Must differ from the payable default."}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'name': {'type': 'string'}, 'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'decision': {'enum': ['accepted_suggestion', 'explicit'], 'type': 'string'}, 'company_id': {'type': 'string'}, 'category_count': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['invoice_id'], 'properties': {'terms': {'anyOf': [{'type': 'string', 'maxLength': 300}, {'type': 'null'}], 'description': 'Payment terms text; pass null to clear'}, 'status': {'enum': ['draft', 'issued', 'paid', 'canceled'], 'type': 'string', 'description': 'Invoice lifecycle status'}, 'due_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Payment due date (ISO 8601); pass null to clear'}, 'tax_total': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Total tax amount; pass null to clear'}, 'invoice_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the invoice to update'}, 'issue_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'Issue date (ISO 8601, e.g. 2026-04-27); pass null to clear'}, 'description': {'anyOf': [{'type': 'string', 'maxLength': 255}, {'type': 'null'}], 'description': 'Free-form description; pass null to clear'}, 'grand_total': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Total invoice amount including tax; pass null to clear'}, 'items_total': {'anyOf': [{'type': 'number'}, {'type': 'null'}], 'description': 'Sum of line items before tax; pass null to clear'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'local_currency': {'anyOf': [{'type': 'string', 'pattern': '^[A-Z]{3}$', 'maxLength': 3, 'minLength': 3}, {'type': 'null'}], 'description': 'ISO 4217 three-letter currency code (e.g. EUR, USD); pass null to clear'}, 'payment_status': {'enum': ['unpaid', 'partial', 'paid', 'overpaid'], 'type': 'string', 'description': 'User-driven payment_status override — requires override_version (CAS)'}, 'billing_context': {'anyOf': [{'enum': ['subscription', 'recurring', 'periodic', 'installment', 'retainer', 'usage_based', 'consumption', 'metered', 'volume_based', 'overage', 'project', 'milestone', 'hourly', 'fixed_price', 'time_materials', 'one_time', 'event_based', 'commission', 'bonus', 'reimbursement', 'maintenance', 'support', 'consulting', 'training', 'professional_services', 'contract', 'license', 'rental', 'lease', 'franchise', 'adjustment', 'refund', 'credit', 'penalty', 'discount', 'deposit', 'advance_payment', 'escrow', 'insurance', 'tax', 'promotional', 'trial', 'freemium', 'setup', 'activation', 'other', 'mixed', 'unknown'], 'type': 'string'}, {'type': 'null'}], 'description': 'Billing context / business model; pass null to clear'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'override_version': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Required when payment_status is present — current override_version for CAS'}, 'reference_number': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'description': 'Invoice reference number (e.g. INV-2026-001); pass null to clear'}, 'issuer_company_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': 'Issuer company UUID. Omit = no change, null = clear, uuid = set.'}, 'document_type_code': {'anyOf': [{'enum': ['220', '221', '222', '230', '231', '232', '235', '236', '270', '271', '310', '311', '312', '315', '320', '322', '325', '326', '327', '328', '329', '380', '381', '383', '384', '385', '386', '387', '388', '389', '390', '391', '392', '393', '394', '395', '396', '397', '440', '441', '446', '447', '450', '451', '452', '456', '460', '550', '551', '552', '610', '611', '612', '615', '617', '618', '619', '622', '623', '700', '701', '702', '705', '740', '741', '743', '770', '775', '805', '810', '815', '820', '825', '830', '835', '840', '845', '850', '999'], 'type': 'string'}, {'type': 'null'}], 'description': 'UN/CEFACT 1001 document type code (e.g. 380 for commercial invoice); pass null to clear'}, 'receiver_company_id': {'anyOf': [{'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, {'type': 'null'}], 'description': 'Receiver company UUID. Omit = no change, null = clear, uuid = set.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'invoice_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'reference_number': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['person_id'], 'properties': {'job_title': {'anyOf': [{'type': 'string', 'maxLength': 100}, {'type': 'null'}], 'description': 'Job title; pass null to clear'}, 'last_name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'Last name'}, 'person_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The UUID of the person to update (required)'}, 'first_name': {'type': 'string', 'maxLength': 100, 'minLength': 1, 'description': 'First name'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'full_name': {'type': 'string'}, 'person_id': {'type': 'string'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['filename', 'mime_type', 'content_base64'], 'properties': {'filename': {'type': 'string', 'minLength': 1, 'description': "The file's name WITH its extension, e.g. `invoice-2026-03.pdf`. The extension resolves the content type when `mime_type` is generic."}, 'mime_type': {'type': 'string', 'minLength': 1, 'description': "The file's content type, e.g. `application/pdf`. Send `application/octet-stream` when unknown and the extension decides."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'content_base64': {'type': 'string', 'minLength': 1, 'description': "The file's bytes, base64, with no data-URI prefix."}, 'source_task_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The task this document answers.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'source_transaction_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The bank transaction this document is the proof for.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'outcome': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'filename': {'type': 'string'}, 'max_bytes': {'type': 'number'}, 'mime_type': {'type': 'string'}, 'error_code': {'type': 'string'}, 'size_bytes': {'type': 'number'}, 'document_id': {'type': 'string'}, 'actual_bytes': {'type': 'number'}, 'deduplicated': {'type': 'boolean'}, 'source_task_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'source_transaction_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['filename', 'content_base64'], 'properties': {'sha256': {'type': 'string', 'pattern': '^[0-9a-fA-F]{64}$', 'description': "The source file's SHA-256 (hex). When sent, a mismatch with the decoded bytes rejects the upload."}, 'filename': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'The statement\'s file name, e.g. "statement.csv". Only its extension selects the format.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'content_base64': {'type': 'string', 'minLength': 1, 'description': "The file's bytes, base64-encoded (RFC 4648; whitespace tolerated). Decoded cap: 5 MiB."}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'byte_length': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'document_id': {'type': 'string', 'description': 'Poll well_get_statement_import_result with this id for the import outcome.'}, 'deduplicated': {'type': 'boolean', 'description': 'True when an identical document was already in the workspace — nothing was imported twice.'}, 'content_sha256': {'type': 'string', 'description': 'SHA-256 (hex) of the payload the server received — compare against your source to verify fidelity.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['filename', 'content_text'], 'properties': {'filename': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'The statement\'s file name, e.g. "statement.csv". Only its extension selects the format.'}, 'content_text': {'type': 'string', 'minLength': 1, 'description': "The file's full text content, verbatim. UTF-8 encoded on the wire; capped at 1 MiB decoded."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'success': {'type': 'boolean'}, 'byte_length': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'document_id': {'type': 'string', 'description': 'Poll well_get_statement_import_result with this id for the import outcome.'}, 'deduplicated': {'type': 'boolean', 'description': 'True when an identical document was already in the workspace — nothing was imported twice.'}, 'content_sha256': {'type': 'string', 'description': 'SHA-256 (hex) of the payload the server received — compare against your source to verify fidelity.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'country': {'type': 'string', 'maxLength': 2, 'minLength': 2, 'description': 'ISO 3166-1 alpha-2 country code.'}, 'tax_id_type': {'type': 'string', 'description': "The tax id's type (SIREN, VAT, EIN, …). Provide it together with tax_id_value."}, 'tax_id_value': {'type': 'string', 'maxLength': 50, 'minLength': 1, 'description': "The company's tax id value. Provide it together with tax_id_type; one without the other is refused."}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.'}, 'base_currency': {'type': 'string', 'maxLength': 3, 'minLength': 3, 'description': 'ISO 4217 currency code.'}, 'coa_confirmed': {'type': 'boolean', 'description': 'Whether the chart of accounts has been confirmed.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}, 'idempotency_key': {'type': 'string', 'maxLength': 255, 'minLength': 1, 'description': 'Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.'}, 'incorporation_date': {'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, {'type': 'null'}], 'description': "The company's incorporation / registration date as YYYY-MM-DD, or null to clear it."}, 'accounting_framework': {'enum': ['PCG', 'IFRS', 'US_GAAP', 'SKR'], 'type': 'string', 'description': 'The accounting framework the books follow.'}, 'fiscal_year_start_month': {'anyOf': [{'type': 'integer', 'maximum': 12, 'minimum': 1}, {'type': 'null'}], 'description': 'Calendar month (1-12) the fiscal year starts on, or null to clear it.'}, 'first_fiscal_year_start_date': {'anyOf': [{'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$'}, {'type': 'null'}], 'description': 'First fiscal year start date as YYYY-MM-DD, or null to clear it.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'error': {'type': 'string'}, 'country': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'success': {'type': 'boolean'}, 'tax_id_type': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'tax_id_value': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'base_currency': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'coa_confirmed': {'anyOf': [{'type': 'boolean'}, {'type': 'null'}]}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'incorporation_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'accounting_framework': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}, 'fiscal_year_start_month': {'anyOf': [{'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, {'type': 'null'}]}, 'first_fiscal_year_start_date': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}}, 'additionalProperties': False}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['kind'], 'properties': {'kind': {'enum': ['workspace', 'periods', 'counterparties', 'exemptions', 'recurring_contexts', 'cash_scope', 'connect_ack', 'bank_ack', 'categorize_ack', 'deploy_ack', 'assign_ack', 'accounting_settings_ack', 'next_step', 'company_pick', 'retarget_ack', 'invite_ack'], 'type': 'string', 'description': 'Which card click to wait for: "workspace" (the workspace picker\'s Use), "periods" (the month picker\'s Validate), "counterparties" (the missing-invoices card\'s Continue), "exemptions" (the burn-exemption card\'s Continue), "recurring_contexts" (the recurring-contexts card\'s Continue), "cash_scope" (the cash-scope card\'s Continue), "accounting_settings_ack" (the accounting-settings card\'s Confirm), "connect_ack" / "bank_ack" (the connect card\'s Continue), "categorize_ack" (the categorize card\'s Continue or Keep for later), "assign_ack" (the owner-assignment card\'s Continue), "deploy_ack" (the collect-agents card\'s Deploy, Continue or Keep for later), "company_pick" (the company-candidates card\'s Use this company or Keep for later), "invite_ack" (the invite-members card\'s Send or Keep for later), "retarget_ack" (the connector-retarget card\'s Confirm or Keep for later), "next_step" (a row click on the next-steps card).'}, 'timeout_s': {'type': 'number', 'description': 'How long to wait, in seconds. Default 60, clamped to 5-60.'}, 'workspace_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Target workspace. This read reports one workspace's own data. Omit it and the token's primary workspace answers, which may not be the one you mean; the result names the workspace that did."}, 'waiting_notice': {'type': 'string', 'maxLength': 120, 'minLength': 1, 'description': 'One short line the person reads while this call holds the turn open, IN THE LANGUAGE THEY ARE WRITING IN. Say what you are waiting for them to do on the card, in your own words, not what the server is doing: they are the one holding the flow. Omitted falls back to an English line, which a reader working in another language may not read, so write it whenever you know their language.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['success'], 'properties': {'hint': {'type': 'string'}, 'kind': {'enum': ['workspace', 'periods', 'counterparties', 'exemptions', 'recurring_contexts', 'cash_scope', 'connect_ack', 'bank_ack', 'categorize_ack', 'deploy_ack', 'assign_ack', 'accounting_settings_ack', 'next_step', 'company_pick', 'retarget_ack', 'invite_ack'], 'type': 'string'}, 'error': {'type': 'string'}, 'status': {'enum': ['selected', 'no_selection_yet'], 'type': 'string'}, 'success': {'type': 'boolean'}, 'selection': {'type': 'object', 'properties': {'outcome': {'enum': ['done', 'keep_for_later'], 'type': 'string', 'description': 'What the acknowledging click said about the step: "done" when the user carried it out, "keep_for_later" when they set it aside on purpose. Both end the step and continue the flow. Absent on a card whose one action confirms and nothing else.'}, 'periods': {'type': 'array', 'items': {'type': 'object', 'required': ['calendar_year', 'calendar_month'], 'properties': {'calendar_year': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}, 'calendar_month': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991}}, 'additionalProperties': False}, 'description': 'The picked months on kind "periods"; the months the picked counterparties were listed for on kind "counterparties" — empty when the pick names none and so applies to every month read.'}, 'next_step': {'type': 'object', 'required': ['skill', 'prompt'], 'properties': {'skill': {'type': 'string', 'description': 'The slug of the skill the picked row offers.'}, 'prompt': {'type': 'string', 'description': "The sentence the picked row carried, to be treated as the user's own message."}}, 'description': 'The row the user picked on kind "next_step".', 'additionalProperties': False}, 'acknowledged': {'type': 'boolean', 'const': True}, 'workspace_id': {'anyOf': [{'type': 'string'}, {'type': 'null'}], 'description': 'The pinned workspace on kind "workspace"; the workspace the picked counterparties belong to; the workspace the acknowledgement was made in.'}, 'counterparties': {'type': 'array', 'items': {'type': 'object', 'required': ['company_id'], 'properties': {'company_id': {'type': 'string'}, 'matched_connector_service_id': {'type': 'string', 'description': "The matched provider's connector service id; absent when the picked row matched no provider."}}, 'additionalProperties': False}}, 'workspace_queue': {'type': 'array', 'items': {'type': 'string'}}, 'exempt_categories': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The category keys the user marked as NOT burn on kind "exemptions". An EMPTY array is the answer "nothing is exempt", not an absent one — status "selected" is what says the user answered.'}, 'recurring_contexts': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The billing context keys the user counts as recurring on kind "recurring_contexts". An EMPTY array is the answer "nothing is recurring", not an absent one.'}, 'counted_account_types': {'type': 'array', 'items': {'type': 'string'}, 'description': 'The account types the user counts as cash on kind "cash_scope". An EMPTY array is the answer "nothing counts as cash", not an absent one — it ends the run rather than reporting a zero total.'}}, 'description': 'The value the click wrote. Present only when status is "selected".', 'additionalProperties': False}, 'already_set': {'type': 'boolean', 'description': 'True when the click had already been recorded since the card was drawn, before this call started — no wait happened.'}, 'conversation_id': {'type': 'string', 'description': 'The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.'}, 'resolved_workspace': {'type': 'object', 'required': ['workspace_id', 'name'], 'properties': {'name': {'anyOf': [{'type': 'string'}, {'type': 'null'}]}, 'workspace_id': {'type': 'string'}}, 'description': 'The workspace that answered, when the caller named none and the token authorizes several.', 'additionalProperties': False}, 'conversation_id_note': {'type': 'string', 'description': 'Present only when the server opened a fresh lane, stating that no choice recorded earlier was read.'}, 'conversation_id_source': {'enum': ['host_meta', 'argument', 'minted'], 'type': 'string', 'description': "Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened."}}, 'additionalProperties': False}
Recent tool changes
Similar MCP servers
Lovie Company Formation
Supports company formation and business administration with bank accounts, cards, invoicing, bookkeeping, accounting periods, and…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Red by Big Red Cloud
Connects to Big Red Cloud accounting for customers, suppliers, products, invoices, purchases, payments, receipts, journals, quote…
GestãoClick
Connects to the GestãoClick ERP to manage customers, suppliers, products, sales, service orders, budgets, and financial records.
Superlógica Condomínios
Connects to a condominium ERP for billing, collections, agreements, expenses, bank movements, statements, files, communications, …
FalaZuki Finance BR
Provides Brazil-focused financial calculations and rules for investments, credit, taxes, payroll, labor costs, debt, budgeting, a…
XBOSS
Accesses Korean tax, social insurance, payroll, cash receipt, e-tax invoice, and certificate filing services.
Sirenic
Provides European company registry, financial, procurement, sanctions, regulatory, insolvency, ownership, and ongoing due-diligen…