{"openapi":"3.1.0","info":{"version":"1.0.0","title":"Lotics API","summary":"REST API for Lotics — operations software for supply chain and logistics teams.","description":"Programmatic access to a Lotics workspace: tables and fields, records (query, aggregate, create, update, delete), views, workflows, document generation, apps, comments, files and search.\n\nAuthenticate with an organization-scoped API key (`Authorization: Bearer ltk_…`), created by an admin under Settings → API keys. A key inherits the permissions of the member who created it, so the API never reaches data that member could not open in the product.\n\nList endpoints are cursor-paginated: pass the previous response's `next_cursor` as `cursor` until it is absent. Every non-2xx response carries the same JSON error body — branch on `code`, not on the wording of `message`.\n\nGuide and examples: https://lotics.ai/docs/api","termsOfService":"https://lotics.ai/terms","contact":{"name":"Lotics","url":"https://lotics.ai/contact","email":"hello@lotics.ai"}},"externalDocs":{"description":"Lotics REST API guide","url":"https://lotics.ai/docs/api"},"servers":[{"url":"https://api.lotics.ai","description":"This instance"}],"security":[{"ApiKeyAuth":[]}],"tags":[{"name":"agent_context_activations"},{"name":"api_keys"},{"name":"app-icons"},{"name":"approval_requests"},{"name":"apps"},{"name":"audit_logs"},{"name":"auth"},{"name":"automations"},{"name":"billing"},{"name":"cli"},{"name":"connected_accounts"},{"name":"document_templates"},{"name":"explorer"},{"name":"files"},{"name":"iam"},{"name":"instance"},{"name":"instructions"},{"name":"invitations"},{"name":"knowledge_docs"},{"name":"mcp_grants"},{"name":"me"},{"name":"member_instructions"},{"name":"members"},{"name":"memories"},{"name":"notifications"},{"name":"organization"},{"name":"realtime"},{"name":"record_data_templates"},{"name":"records"},{"name":"search"},{"name":"skills"},{"name":"system_agents"},{"name":"table"},{"name":"table_checks"},{"name":"tables"},{"name":"usage"},{"name":"user"},{"name":"views"},{"name":"voice_sessions"},{"name":"waiting_rows"},{"name":"workflow_executions"},{"name":"workflows"},{"name":"workspace"},{"name":"workspaces"}],"paths":{"/v1/iam/member_groups":{"post":{"operationId":"post_v1_iam_member_groups","tags":["iam"],"summary":"Create a new group","description":"Create a new group","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_member_groups_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_member_groups_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_iam_member_groups","tags":["iam"],"summary":"List all groups in the organization","description":"List all groups in the organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_member_groups_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/my_permissions":{"get":{"operationId":"get_v1_iam_my_permissions","tags":["iam"],"summary":"Get all permissions for the current user","description":"Get all permissions for the current user","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_my_permissions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/invitations":{"get":{"operationId":"get_v1_iam_invitations","tags":["iam"],"summary":"List pending invitations for the organization (API-key-accessible)","description":"List pending invitations for the organization (API-key-accessible)","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_invitations_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/user/invitations":{"get":{"operationId":"get_v1_user_invitations","tags":["user"],"summary":"List the signed-in user's pending invitations, across organizations","description":"List the signed-in user's pending invitations, across organizations","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_user_invitations_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/principals":{"get":{"operationId":"get_v1_iam_principals","tags":["iam"],"summary":"List all assignable principals (members, pending invitations, groups) in the organization","description":"List all assignable principals (members, pending invitations, groups) in the organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_principals_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/me/role_bindings":{"get":{"operationId":"get_v1_iam_me_role_bindings","tags":["iam"],"summary":"Get all role bindings for the current authenticated member","description":"Get all role bindings for the current authenticated member","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_me_role_bindings_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/member_groups/{group_id}":{"delete":{"operationId":"delete_v1_iam_member_groups_group_id","tags":["iam"],"summary":"Delete a group","description":"Delete a group","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_iam_member_groups_group_id","tags":["iam"],"summary":"Get a specific group by ID","description":"Get a specific group by ID","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_member_groups_group_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put_v1_iam_member_groups_group_id","tags":["iam"],"summary":"Update a group","description":"Update a group","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_iam_member_groups_group_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_iam_member_groups_group_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/content_items/{resource_type}":{"get":{"operationId":"get_v1_iam_content_items_resource_type","tags":["iam"],"summary":"List every knowledge doc or template in the workspace, as metadata (admins)","description":"Every doc or template in the workspace with its name, owner, who has access, and whether the caller may open it — never its content. Admins only: this is how an admin sees what exists without being shared it.","parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","enum":["knowledge_doc","document_template"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_content_items_resource_type_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/resource_access/{resource_type}":{"get":{"operationId":"get_v1_iam_resource_access_resource_type","tags":["iam"],"summary":"List who each resource of a type is shared with","description":"For every resource of this type in the workspace that the caller can see, the members, groups and organization granted access. Read-only: no roles and no binding ids, so it cannot be used to change sharing.","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource being addressed. With `resource_id` it names one object to act on.","schema":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_resource_access_resource_type_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/role_bindings/{binding_id}":{"delete":{"operationId":"delete_v1_iam_role_bindings_binding_id","tags":["iam"],"summary":"Remove a role binding","description":"Remove a role binding","parameters":[{"name":"binding_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_iam_role_bindings_binding_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_iam_role_bindings_binding_id","tags":["iam"],"summary":"Update a role binding","description":"Update a role binding","parameters":[{"name":"binding_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_iam_role_bindings_binding_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_iam_role_bindings_binding_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/invitations/{invitation_id}":{"patch":{"operationId":"patch_v1_iam_invitations_invitation_id","tags":["iam"],"summary":"Update a pending invitation's display name","description":"Update a pending invitation's display name","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_iam_invitations_invitation_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_iam_invitations_invitation_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/content_items/{resource_type}/make_private":{"post":{"operationId":"post_v1_iam_content_items_resource_type_make_private","tags":["iam"],"summary":"Stop sharing several knowledge docs or templates with people, groups and the organization","description":"Removes every person, group and organization share on each item except its owner's own. An API key's access is left alone — it is chosen on the key. Every item must be one the caller owns, or the caller must be an admin, and the removals commit together or not at all.","parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","enum":["knowledge_doc","document_template"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_content_items_resource_type_make_private_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_content_items_resource_type_make_private_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/invitations/{invitation_id}/revoke":{"post":{"operationId":"post_v1_iam_invitations_invitation_id_revoke","tags":["iam"],"summary":"Revoke a pending invitation (cascade-deletes pre-granted access)","description":"Revoke a pending invitation (cascade-deletes pre-granted access)","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_invitations_invitation_id_revoke_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/content_items/{resource_type}/share_with_organization":{"post":{"operationId":"post_v1_iam_content_items_resource_type_share_with_organization","tags":["iam"],"summary":"Share several knowledge docs or templates with everyone in the organization","description":"Gives the organization the `user` role on each item not already shared with it; an existing organization share keeps its role. Every item must be one the caller owns, or the caller must be an admin, and the writes commit together or not at all.","parameters":[{"name":"resource_type","in":"path","required":true,"schema":{"type":"string","enum":["knowledge_doc","document_template"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_content_items_resource_type_share_with_organization_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_content_items_resource_type_share_with_organization_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/resources/{resource_type}/{resource_id}/role_bindings":{"post":{"operationId":"post_v1_iam_resources_resource_type_resource_id_role_bindings","tags":["iam"],"summary":"Assign a role binding to a principal for a resource","description":"Assign a role binding to a principal for a resource","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource being addressed. With `resource_id` it names one object to act on.","schema":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"]}},{"name":"resource_id","in":"path","required":true,"description":"The id of the resource named by `resource_type`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_resources_resource_type_resource_id_role_bindings_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_resources_resource_type_resource_id_role_bindings_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_iam_resources_resource_type_resource_id_role_bindings","tags":["iam"],"summary":"Get all role bindings for a specific resource","description":"Get all role bindings for a specific resource","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource being addressed. With `resource_id` it names one object to act on.","schema":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"]}},{"name":"resource_id","in":"path","required":true,"description":"The id of the resource named by `resource_type`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_resources_resource_type_resource_id_role_bindings_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/resources/{resource_type}/{resource_id}/my_actions":{"get":{"operationId":"get_v1_iam_resources_resource_type_resource_id_my_actions","tags":["iam"],"summary":"Get the current user's effective actions for a resource","description":"Get the current user's effective actions for a resource","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource being addressed. With `resource_id` it names one object to act on.","schema":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"]}},{"name":"resource_id","in":"path","required":true,"description":"The id of the resource named by `resource_type`.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_resources_resource_type_resource_id_my_actions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/resources/{resource_type}/{resource_id}/transfer_ownership":{"post":{"operationId":"post_v1_iam_resources_resource_type_resource_id_transfer_ownership","tags":["iam"],"summary":"Transfer resource ownership to another member","description":"Transfer resource ownership to another member","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource being addressed. With `resource_id` it names one object to act on.","schema":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"]}},{"name":"resource_id","in":"path","required":true,"description":"The id of the resource named by `resource_type`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_resources_resource_type_resource_id_transfer_ownership_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_iam_resources_resource_type_resource_id_transfer_ownership_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/members/{member_id}":{"delete":{"operationId":"delete_v1_members_member_id","tags":["members"],"summary":"Remove a member from the organization","description":"Remove a member from the organization","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_members_member_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_members_member_id","tags":["members"],"summary":"Update a member's per-organization display name","description":"Update a member's per-organization display name","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_members_member_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_members_member_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/invitations/{invitation_id}/organization":{"get":{"operationId":"get_v1_invitations_invitation_id_organization","tags":["invitations"],"summary":"The organization a pending invitation would join","description":"The organization a pending invitation would join","parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_invitations_invitation_id_organization_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/members/{member_id}/restore":{"post":{"operationId":"post_v1_members_member_id_restore","tags":["members"],"summary":"Restore a removed member","description":"Restore a removed member","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_members_member_id_restore_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/chat_sessions":{"get":{"operationId":"get_v1_system_agents_chat_sessions","tags":["system_agents"],"summary":"Get chat sessions","description":"Gets chat sessions for a member","parameters":[{"name":"limit","in":"query","required":false,"description":"How many sessions to return, newest first.","schema":{"type":"number"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_system_agents_chat_sessions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/chat_sessions/{chat_session_id}":{"delete":{"operationId":"delete_v1_system_agents_chat_sessions_chat_session_id","tags":["system_agents"],"summary":"Delete a chat session","description":"Archives a chat session (soft delete)","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_system_agents_chat_sessions_chat_session_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_system_agents_chat_sessions_chat_session_id","tags":["system_agents"],"summary":"Get chat session","description":"Gets a chat session for a member","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_system_agents_chat_sessions_chat_session_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/chat_sessions/{chat_session_id}/usage":{"get":{"operationId":"get_v1_system_agents_chat_sessions_chat_session_id_usage","tags":["system_agents"],"summary":"Get context occupancy and credit spend for a chat session","description":"Per-turn context occupancy (for the chat's memory meter) and the total credits the conversation has consumed.","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_system_agents_chat_sessions_chat_session_id_usage_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/{chat_session_id}/messages":{"get":{"operationId":"get_v1_system_agents_chat_session_id_messages","tags":["system_agents"],"summary":"Get messages for a chat session","description":"Retrieves all messages for a specific chat session of an agent","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_system_agents_chat_session_id_messages_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_system_agents_chat_session_id_messages","tags":["system_agents"],"summary":"Generate agent message","description":"Generates a streaming message from the agent","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_system_agents_chat_session_id_messages_Body"}}}},"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/{chat_session_id}/messages/save":{"post":{"operationId":"post_v1_system_agents_chat_session_id_messages_save","tags":["system_agents"],"summary":"Save messages without LLM generation","description":"Saves messages directly to the chat session without triggering AI response generation. Used for workflow action results.","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_system_agents_chat_session_id_messages_save_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_system_agents_chat_session_id_messages_save_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/system_agents/{chat_session_id}/messages/{message_id}/archive":{"post":{"operationId":"post_v1_system_agents_chat_session_id_messages_message_id_archive","tags":["system_agents"],"summary":"Archive a chat message","description":"Archives a single chat message (soft delete). Used to clean up draft messages after the real message is created.","parameters":[{"name":"chat_session_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"message_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_system_agents_chat_session_id_messages_message_id_archive_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/facebook":{"get":{"operationId":"get_auth_facebook","tags":["auth"],"summary":"Start the Facebook OAuth flow and return the URL to send the browser to.","description":"Start the Facebook OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_facebook_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/google":{"get":{"operationId":"get_auth_google","tags":["auth"],"summary":"Start the Google OAuth flow and return the URL to send the browser to.","description":"Start the Google OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_google_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/google_drive":{"get":{"operationId":"get_auth_google_drive","tags":["auth"],"summary":"Start the Google Drive OAuth flow and return the URL to send the browser to.","description":"Start the Google Drive OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_google_drive_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/instagram":{"get":{"operationId":"get_auth_instagram","tags":["auth"],"summary":"Start the Instagram OAuth flow and return the URL to send the browser to.","description":"Start the Instagram OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_instagram_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/linkedin":{"get":{"operationId":"get_auth_linkedin","tags":["auth"],"summary":"Start the LinkedIn OAuth flow and return the URL to send the browser to.","description":"Start the LinkedIn OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_linkedin_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/outlook":{"get":{"operationId":"get_auth_outlook","tags":["auth"],"summary":"Start the Microsoft Outlook OAuth flow and return the URL to send the browser to.","description":"Start the Microsoft Outlook OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_outlook_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/threads":{"get":{"operationId":"get_auth_threads","tags":["auth"],"summary":"Start the Threads OAuth flow and return the URL to send the browser to.","description":"Start the Threads OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_threads_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/x":{"get":{"operationId":"get_auth_x","tags":["auth"],"summary":"Start the X OAuth flow and return the URL to send the browser to.","description":"Start the X OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_x_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/zalo":{"get":{"operationId":"get_auth_zalo","tags":["auth"],"summary":"Start the Zalo OAuth flow and return the URL to send the browser to.","description":"Start the Zalo OAuth flow and return the URL to send the browser to.","parameters":[{"name":"from","in":"query","required":true,"description":"Where to send the browser once the flow finishes: a path within the app, such as `/settings/connections`. Anything pointing at another origin is ignored and the browser lands on the app root instead.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_auth_zalo_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connected_accounts":{"post":{"operationId":"post_v1_connected_accounts","tags":["connected_accounts"],"summary":"Connect an account by storing credentials for a provider.","description":"Connect an account by storing credentials for a provider.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_connected_accounts_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_connected_accounts_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_connected_accounts","tags":["connected_accounts"],"summary":"List the connected accounts this member can use, optionally filtered by provider.","description":"List the connected accounts this member can use, optionally filtered by provider.","parameters":[{"name":"providers","in":"query","required":false,"description":"Return only accounts for these providers, such as \"facebook\", \"google\" or \"microsoft\". Omit for every provider.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_connected_accounts_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connected_accounts/{connected_account_id}":{"delete":{"operationId":"delete_v1_connected_accounts_connected_account_id","tags":["connected_accounts"],"summary":"Disconnect an account and delete its stored credentials.","description":"Disconnect an account and delete its stored credentials.","parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_connected_accounts_connected_account_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_connected_accounts_connected_account_id","tags":["connected_accounts"],"summary":"Get one connected account, without its stored secrets.","description":"Get one connected account, without its stored secrets.","parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_connected_accounts_connected_account_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_connected_accounts_connected_account_id","tags":["connected_accounts"],"summary":"Rename a connected account or replace its credentials.","description":"Rename a connected account or replace its credentials.","parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/connected_accounts/{connected_account_id}/connector_config":{"patch":{"operationId":"patch_v1_connected_accounts_connected_account_id_connector_config","tags":["connected_accounts"],"summary":"Set what members' AI connectors may do through this workspace-shared account.","description":"Set what members' AI connectors may do through this workspace-shared account.","parameters":[{"name":"connected_account_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables":{"post":{"operationId":"post_v1_tables","tags":["tables"],"summary":"Create a new table with fields. Formula, rollup, and lookup fields are computed and read-only in records.","description":"Create a new table with fields. Formula, rollup, and lookup fields are computed and read-only in records.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_tables","tags":["tables"],"summary":"List all tables in the workspace with their field schemas.","description":"List all tables in the workspace with their field schemas.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/explorer":{"get":{"operationId":"get_v1_explorer","tags":["explorer"],"summary":"List the workspace's tables and views as the sidebar tree shows them.","description":"List the workspace's tables and views as the sidebar tree shows them.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_explorer_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/table_checks":{"get":{"operationId":"get_v1_table_checks","tags":["table_checks"],"summary":"List the workspace's live table checks on tables the caller can read: each check's id and its table.","description":"List the workspace's live table checks on tables the caller can read: each check's id and its table.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_table_checks_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/reorder":{"post":{"operationId":"post_v1_tables_reorder","tags":["tables"],"summary":"Reorder tables","description":"Reorder tables in the workspace by providing an ordered array of table IDs","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_reorder_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_reorder_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/records/resolve":{"post":{"operationId":"post_v1_records_resolve","tags":["records"],"summary":"Resolve record ids to their table identity — only records the caller can see.","description":"Resolve record ids to their table identity — only records the caller can see.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_records_resolve_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_records_resolve_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/record_data_templates/{record_data_template_id}":{"delete":{"operationId":"delete_v1_record_data_templates_record_data_template_id","tags":["record_data_templates"],"summary":"Delete a record data template.","description":"Delete a record data template.","parameters":[{"name":"record_data_template_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_record_data_templates_record_data_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_record_data_templates_record_data_template_id","tags":["record_data_templates"],"summary":"Get one record data template.","description":"Get one record data template.","parameters":[{"name":"record_data_template_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_record_data_templates_record_data_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_record_data_templates_record_data_template_id","tags":["record_data_templates"],"summary":"Update a record data template's name or prefilled values.","description":"Update a record data template's name or prefilled values.","parameters":[{"name":"record_data_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_record_data_templates_record_data_template_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_record_data_templates_record_data_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}":{"delete":{"operationId":"delete_v1_tables_table_id","tags":["tables"],"summary":"Permanently delete a table and all its records. Cannot be undone.","description":"Permanently delete a table and all its records. Cannot be undone.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cascade","in":"query","required":false,"description":"Set 'true' to also delete link fields on other tables that point at this one.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_tables_table_id","tags":["tables"],"summary":"Get a table's full schema including field definitions. Call this first to learn field keys and types before reading or writing records.","description":"Get a table's full schema including field definitions. Call this first to learn field keys and types before reading or writing records.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_tables_table_id","tags":["tables"],"summary":"Update a table's name, fields, or configuration.","description":"Update a table's name, fields, or configuration.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}":{"delete":{"operationId":"delete_v1_views_view_id","tags":["views"],"summary":"Delete a view. It is archived and can be restored.","description":"Delete a view. It is archived and can be restored.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_views_view_id","tags":["views"],"summary":"Get a view's full configuration.","description":"Get a view's full configuration.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_views_view_id","tags":["views"],"summary":"Update a view's name, filters, sorting, or field visibility. Send only changed properties.","description":"Update a view's name, filters, sorting, or field visibility. Send only changed properties.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_views_view_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/records/{record_id}":{"get":{"operationId":"get_v1_records_record_id","tags":["records"],"summary":"Get a single record by ID.","description":"Get a single record by ID.","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/clone":{"post":{"operationId":"post_v1_tables_table_id_clone","tags":["tables"],"summary":"Clone a table's structure, optionally with its rows.","description":"Clone a table's structure, optionally with its rows.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_clone_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_clone_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/clone":{"post":{"operationId":"post_v1_views_view_id_clone","tags":["views"],"summary":"Clone a view","description":"Creates a copy of an existing view. Pass filters/sort/field_config to override the source view's values (e.g. to save the caller's unsaved changes as a new view).","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_clone_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_clone_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/draft_records":{"post":{"operationId":"post_v1_tables_table_id_draft_records","tags":["tables"],"summary":"Create a draft record, not yet visible to the rest of the workspace.","description":"Create a draft record, not yet visible to the rest of the workspace.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_draft_records_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_draft_records_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/record_data_templates":{"post":{"operationId":"post_v1_tables_table_id_record_data_templates","tags":["tables"],"summary":"Create a record data template — a named set of prefilled values for new records.","description":"Create a record data template — a named set of prefilled values for new records.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_record_data_templates_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_record_data_templates_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_tables_table_id_record_data_templates","tags":["tables"],"summary":"List a table's record data templates.","description":"List a table's record data templates.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_record_data_templates_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/fields":{"post":{"operationId":"post_v1_tables_table_id_fields","tags":["tables"],"summary":"Add a new field to a table. Call get_api_docs({ topics: [\"schema_management\"] }) for field type reference.","description":"Add a new field to a table. Call get_api_docs({ topics: [\"schema_management\"] }) for field type reference.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_fields_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_fields_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records":{"post":{"operationId":"post_v1_tables_table_id_records","tags":["tables"],"summary":"Create records. Only include writable fields — skip formula, rollup, lookup, and button fields.","description":"Create records. Only include writable fields — skip formula, rollup, lookup, and button fields.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"delete_v1_tables_table_id_records","tags":["tables"],"summary":"Soft-delete (archive) records by IDs. Can be restored later.","description":"Soft-delete (archive) records by IDs. Can be restored later.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_records_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_records_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_tables_table_id_records","tags":["tables"],"summary":"Update records. Send only changed fields — omitted fields are unchanged. Skip computed fields (formula, rollup, lookup).","description":"Update records. Send only changed fields — omitted fields are unchanged. Skip computed fields (formula, rollup, lookup).","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_records_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_records_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/views":{"post":{"operationId":"post_v1_tables_table_id_views","tags":["tables"],"summary":"Create a saved view with filters, sorting, and field visibility.","description":"Create a saved view with filters, sorting, and field visibility.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/export_csv":{"post":{"operationId":"post_v1_views_view_id_export_csv","tags":["views"],"summary":"Export a view's rows as CSV, under that view's filters and sort.","description":"Export a view's rows as CSV, under that view's filters and sort.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_export_csv_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_export_csv_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/export_xlsx":{"post":{"operationId":"post_v1_views_view_id_export_xlsx","tags":["views"],"summary":"Export a view's rows as an .xlsx workbook, under that view's filters and sort.","description":"Export a view's rows as an .xlsx workbook, under that view's filters and sort.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_export_xlsx_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_export_xlsx_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/records/{record_id}/comments":{"get":{"operationId":"get_v1_records_record_id_comments","tags":["records"],"summary":"List the comments on a record.","description":"List the comments on a record.","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_records_record_id_comments_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/comments":{"get":{"operationId":"get_v1_tables_table_id_comments","tags":["tables"],"summary":"List the comments across a table's records.","description":"List the comments across a table's records.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_comments_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/records/{record_id}/logs":{"get":{"operationId":"get_v1_records_record_id_logs","tags":["records"],"summary":"List a record's activity: who changed which field, when, and to what.","description":"List a record's activity: who changed which field, when, and to what.","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Continue from a previous page: pass the `next_cursor` it returned. Omit for the newest page.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Entries per page, 1–100. Defaults to 50.","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_records_record_id_logs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/references":{"get":{"operationId":"get_v1_tables_table_id_references","tags":["tables"],"summary":"List what else in the workspace references this table.","description":"List what else in the workspace references this table.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_references_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/hide":{"post":{"operationId":"post_v1_views_view_id_hide","tags":["views"],"summary":"Hide a view from the calling member's explorer sidebar. Personal preference — does not affect access or other members.","description":"Hide a view from the calling member's explorer sidebar. Personal preference — does not affect access or other members.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_hide_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/archived_views":{"get":{"operationId":"get_v1_tables_table_id_archived_views","tags":["tables"],"summary":"List a table's deleted views, most recently deleted first.","description":"List a table's deleted views, most recently deleted first.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_archived_views_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/profile":{"get":{"operationId":"get_v1_tables_table_id_profile","tags":["tables"],"summary":"Statistical shape of a table's data — fill rates, distinct counts, value lengths","description":"Statistical shape of a table's data — fill rates, distinct counts, value lengths","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_profile_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/restore":{"post":{"operationId":"post_v1_views_view_id_restore","tags":["views"],"summary":"Restore a deleted view, with its filters, sorting and columns intact.","description":"Restore a deleted view, with its filters, sorting and columns intact.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_restore_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/views/{view_id}/unhide":{"post":{"operationId":"post_v1_views_view_id_unhide","tags":["views"],"summary":"Restore a view the calling member previously hid from their explorer sidebar.","description":"Restore a view the calling member previously hid from their explorer sidebar.","parameters":[{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_views_view_id_unhide_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/comments":{"post":{"operationId":"post_v1_tables_table_id_records_comments","tags":["tables"],"summary":"Comment on a record.","description":"Comment on a record.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_comments_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_comments_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/find_position":{"post":{"operationId":"post_v1_tables_table_id_records_find_position","tags":["tables"],"summary":"Find which page of a view a record falls on, under that view's sort and filters.","description":"Find which page of a view a record falls on, under that view's sort and filters.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_find_position_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_find_position_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/by_ids":{"post":{"operationId":"post_v1_tables_table_id_records_by_ids","tags":["tables"],"summary":"Get multiple records by IDs in one request.","description":"Get multiple records by IDs in one request.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_by_ids_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_by_ids_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/lock":{"post":{"operationId":"post_v1_tables_table_id_records_lock","tags":["tables"],"summary":"Lock fields on records so they can only be changed through an approval.","description":"Lock fields on records so they can only be changed through an approval.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_lock_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_lock_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/purge":{"post":{"operationId":"post_v1_tables_table_id_records_purge","tags":["tables"],"summary":"Permanently delete archived records from the trash. Targets must already be archived. Requires table:manage.","description":"Permanently delete archived records from the trash. Targets must already be archived. Requires table:manage.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_purge_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_purge_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/query":{"post":{"operationId":"post_v1_tables_table_id_records_query","tags":["tables"],"summary":"Query records with filters, sorting, search, and pagination. Use field_keys to select specific fields. Set limit=0 for count only.","description":"Query records with filters, sorting, search, and pagination. Use field_keys to select specific fields. Set limit=0 for count only.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_query_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_query_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/views/reorder":{"post":{"operationId":"post_v1_tables_table_id_views_reorder","tags":["tables"],"summary":"Reorder views","description":"Reorder views in a table by providing an ordered array of view IDs","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_reorder_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_reorder_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/restore":{"post":{"operationId":"post_v1_tables_table_id_records_restore","tags":["tables"],"summary":"Restore deleted records — each comes back live, so the table's checks answer for it as a create.","description":"Restore deleted records — each comes back live, so the table's checks answer for it as a create.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_restore_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_restore_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/draft_records/submit":{"post":{"operationId":"post_v1_tables_table_id_draft_records_submit","tags":["tables"],"summary":"Publish a draft record — its create, which the table's checks answer for.","description":"Publish a draft record — its create, which the table's checks answer for.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_draft_records_submit_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_draft_records_submit_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/unlock":{"post":{"operationId":"post_v1_tables_table_id_records_unlock","tags":["tables"],"summary":"Unlock fields that were locked on records.","description":"Unlock fields that were locked on records.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_unlock_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_unlock_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/views/{view_id}":{"delete":{"operationId":"delete_v1_tables_table_id_views_view_id","tags":["tables"],"summary":"Delete a view.","description":"Delete a view.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_tables_table_id_views_view_id","tags":["tables"],"summary":"Get one view, with its filters, sorts, grouping and field visibility.","description":"Get one view, with its filters, sorts, grouping and field visibility.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_tables_table_id_views_view_id","tags":["tables"],"summary":"Update a view's filters, sorts, grouping, colors or field visibility.","description":"Update a view's filters, sorts, grouping, colors or field visibility.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_views_view_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_views_view_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/records/{record_id}/comments/{comment_id}":{"delete":{"operationId":"delete_v1_records_record_id_comments_comment_id","tags":["records"],"summary":"Delete a comment.","description":"Delete a comment.","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_records_record_id_comments_comment_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_records_record_id_comments_comment_id","tags":["records"],"summary":"Edit a comment the caller wrote.","description":"Edit a comment the caller wrote.","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_records_record_id_comments_comment_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_records_record_id_comments_comment_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/fields/{field_key}":{"delete":{"operationId":"delete_v1_tables_table_id_fields_field_key","tags":["tables"],"summary":"Delete a field. Use force=true to cascade-delete dependent formula/rollup/lookup fields.","description":"Delete a field. Use force=true to cascade-delete dependent formula/rollup/lookup fields.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field_key","in":"path","required":true,"description":"The field within `table_id`, by its key (`fld_...`), not its display name.","schema":{"type":"string"}},{"name":"force","in":"query","required":false,"description":"If true, cascade-deletes same-table dependent fields (formula/rollup/lookup). Does NOT bypass cross-table rollup/lookup dependents, nor references from workflows or apps — those must be deleted, repointed, or archived first.","schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_fields_field_key_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_tables_table_id_fields_field_key","tags":["tables"],"summary":"Update a field's name, type, or options (e.g. add select options). The field_key param identifies which field.","description":"Update a field's name, type, or options (e.g. add select options). The field_key param identifies which field.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field_key","in":"path","required":true,"description":"The field within `table_id`, by its key (`fld_...`), not its display name.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/workflows/{table_workflow_id}":{"delete":{"operationId":"delete_v1_tables_table_id_workflows_table_workflow_id","tags":["tables"],"summary":"Delete a table workflow. Archives the underlying workflow row.","description":"Delete a table workflow. Archives the underlying workflow row.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"table_workflow_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_tables_table_id_workflows_table_workflow_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_tables_table_id_workflows_table_workflow_id","tags":["tables"],"summary":"Update a table workflow. Runs the same parse pipeline as the agent tool — DSL parse, display-name resolution, semantic validation.","description":"Update a table workflow. Runs the same parse pipeline as the agent tool — DSL parse, display-name resolution, semantic validation.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"table_workflow_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_workflows_table_workflow_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_tables_table_id_workflows_table_workflow_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/fields/{field_key}/dependencies":{"get":{"operationId":"get_v1_tables_table_id_fields_field_key_dependencies","tags":["tables"],"summary":"Get field dependencies","description":"What deleting a field moves, read as the delete reads it: will_break (fields of this table reading it at any depth — the delete refuses while they exist, a forced delete takes them with it), requires_manual_action (rollups and lookups on other tables, figures reading each row's unit or currency, and fields whose default_from copies through or off it, that read the field or one the forced delete takes, which refuse the delete forced or not), and can_auto_cleanup (view, colour and link-display references the delete removes).","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field_key","in":"path","required":true,"description":"The field within `table_id`, by its key (`fld_...`), not its display name.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_tables_table_id_fields_field_key_dependencies_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/views/{view_id}/summary":{"post":{"operationId":"post_v1_tables_table_id_views_view_id_summary","tags":["tables"],"summary":"Get view summary","description":"Compute aggregate summaries for a table view. Accepts filters and search from the frontend.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"view_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_view_id_summary_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_views_view_id_summary_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/fields/{field_key}/repoint":{"post":{"operationId":"post_v1_tables_table_id_fields_field_key_repoint","tags":["tables"],"summary":"Point a linked-record field at a different table, rewriting its existing links.","description":"Point a linked-record field at a different table, rewriting its existing links.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"field_key","in":"path","required":true,"description":"The linked-record field to repoint, by its key (`fld_...`).","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_fields_field_key_repoint_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_fields_field_key_repoint_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/tables/{table_id}/records/{record_id}/buttons/{field_key}/press":{"post":{"operationId":"post_v1_tables_table_id_records_record_id_buttons_field_key_press","tags":["tables"],"summary":"Press a button field on a record, running the workflow it is bound to.","description":"Press a button field on a record, running the workflow it is bound to.","parameters":[{"name":"table_id","in":"path","required":true,"description":"Table containing the button field","schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"description":"Record to press the button on","schema":{"type":"string"}},{"name":"field_key","in":"path","required":true,"description":"Field key of the button field","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_tables_table_id_records_record_id_buttons_field_key_press_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/table/{table_id}/export_excel":{"post":{"operationId":"post_table_table_id_export_excel","tags":["table"],"summary":"Export a whole table as an .xlsx workbook.","description":"Export a whole table as an .xlsx workbook.","parameters":[{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_table_table_id_export_excel_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_table_table_id_export_excel_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspaces":{"post":{"operationId":"post_v1_workspaces","tags":["workspaces"],"summary":"Create a workspace in this organization.","description":"Create a workspace in this organization.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspaces_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspaces_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_workspaces","tags":["workspaces"],"summary":"List the workspaces in this organization that the caller can open.","description":"List the workspaces in this organization that the caller can open.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workspaces_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspace":{"get":{"operationId":"get_v1_workspace","tags":["workspace"],"summary":"Get the workspace this request is scoped to.","description":"Get the workspace this request is scoped to.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workspace_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_workspace","tags":["workspace"],"summary":"Update the current workspace's settings.","description":"Update the current workspace's settings.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_workspace_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_workspace_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspace/backup":{"post":{"operationId":"post_v1_workspace_backup","tags":["workspace"],"summary":"Take a backup of the current workspace.","description":"Take a backup of the current workspace.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspace_backup_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspace/backups":{"get":{"operationId":"get_v1_workspace_backups","tags":["workspace"],"summary":"List the backups held for the current workspace.","description":"List the backups held for the current workspace.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workspace_backups_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspaces/dangling-references":{"get":{"operationId":"get_v1_workspaces_dangling_references","tags":["workspaces"],"summary":"Report references in this organization that point at a workspace which no longer exists.","description":"Report references in this organization that point at a workspace which no longer exists.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workspaces_dangling_references_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspaces/model":{"get":{"operationId":"get_v1_workspaces_model","tags":["workspaces"],"summary":"The workspace's tables as a model file: what scaffold would need to recreate them, with aliases in place of ids.","description":"The workspace's tables as a model file: what scaffold would need to recreate them, with aliases in place of ids.","parameters":[{"name":"tables","in":"query","required":false,"description":"Table ids to read; omitted reads every table here. A link out of one pulls its target in.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","minLength":1}}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workspaces_model_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspaces/scaffold":{"post":{"operationId":"post_v1_workspaces_scaffold","tags":["workspaces"],"summary":"Create tables, fields, options, views and roles in this workspace from a model.","description":"Takes a workspace model and creates its entities as tables, their fields and select options, its views and its roles, plus any first rows sent with it. Re-runnable with `adopt`: an entity whose label already names a table here binds to that table and adds the fields, options and views it is missing; without `adopt` a colliding label is refused. Rows are written only when every bound table is empty; otherwise `rows_skipped` is true and none are.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspaces_scaffold_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspaces_scaffold_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspace/backups/{backup_id}/restore":{"post":{"operationId":"post_v1_workspace_backups_backup_id_restore","tags":["workspace"],"summary":"Restore the current workspace from one of its backups.","description":"Restore the current workspace from one of its backups.","parameters":[{"name":"backup_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workspace_backups_backup_id_restore_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workspaces/{id}":{"delete":{"operationId":"delete_v1_workspaces_id","tags":["workspaces"],"summary":"Delete a workspace and everything in it.","description":"Delete a workspace and everything in it.","parameters":[{"name":"id","in":"path","required":true,"description":"The workspace to delete.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_workspaces_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/notifications":{"post":{"operationId":"post_v1_notifications","tags":["notifications"],"summary":"Send a notification to a member.","description":"Send a notification to a member.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_notifications_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_notifications_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"delete_v1_notifications","tags":["notifications"],"summary":"Delete every notification for this member.","description":"Delete every notification for this member.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_notifications_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_notifications","tags":["notifications"],"summary":"List this member's notifications, newest first.","description":"List this member's notifications, newest first.","parameters":[{"name":"done","in":"query","required":false,"description":"Return only notifications that have been marked done, or only those that have not. Omit for both.","schema":{"type":"boolean"}},{"name":"level","in":"query","required":false,"description":"Return only notifications at this severity. Omit for every level.","schema":{"type":"string","enum":["urgent","warning","info","success"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_notifications_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/notifications/{notification_id}/done":{"post":{"operationId":"post_v1_notifications_notification_id_done","tags":["notifications"],"summary":"Mark a notification done.","description":"Mark a notification done.","parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_notifications_notification_id_done_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files":{"get":{"operationId":"get_v1_files","tags":["files"],"summary":"List files in this workspace, newest first.","description":"List files in this workspace, newest first.","parameters":[{"name":"file_ids","in":"query","required":false,"description":"Return only these files, in this order. Omit to page the whole workspace.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"limit","in":"query","required":false,"description":"Page size. Ignored when file_ids is given.","schema":{"default":50,"type":"integer","minimum":1,"maximum":200}},{"name":"cursor","in":"query","required":false,"description":"The previous page's next_cursor. Ignored when file_ids is given.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_files_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_files","tags":["files"],"summary":"Upload a file through the API, for files small enough to send in one request.","description":"Upload a file through the API, for files small enough to send in one request.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/download_zip":{"post":{"operationId":"post_v1_files_download_zip","tags":["files"],"summary":"Bundle several files into one zip and return it.","description":"Bundle several files into one zip and return it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_download_zip_Body"}}}},"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/auth_token":{"get":{"operationId":"get_v1_files_auth_token","tags":["files"],"summary":"Mint the short-lived token the file proxy accepts, so a browser can load private files directly.","description":"Mint the short-lived token the file proxy accepts, so a browser can load private files directly.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_files_auth_token_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/profile_image":{"delete":{"operationId":"delete_v1_files_profile_image","tags":["files"],"summary":"Remove the caller's profile image.","description":"Remove the caller's profile image.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_files_profile_image_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_files_profile_image","tags":["files"],"summary":"Upload the caller's profile image.","description":"Upload the caller's profile image.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_profile_image_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/upload_url":{"post":{"operationId":"post_v1_files_upload_url","tags":["files"],"summary":"Authorize an upload and get a short-lived URL to PUT the file's bytes to.","description":"Authorize an upload and get a short-lived URL to PUT the file's bytes to.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_upload_url_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_upload_url_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/multipart/abort":{"post":{"operationId":"post_v1_files_multipart_abort","tags":["files"],"summary":"Abandon a multipart upload and discard the parts already sent.","description":"Abandon a multipart upload and discard the parts already sent.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_abort_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_abort_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/direct/complete":{"post":{"operationId":"post_v1_files_direct_complete","tags":["files"],"summary":"Finish a direct upload and register the file once its bytes are in storage.","description":"Finish a direct upload and register the file once its bytes are in storage.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_direct_complete_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_direct_complete_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/multipart/complete":{"post":{"operationId":"post_v1_files_multipart_complete","tags":["files"],"summary":"Finish a multipart upload and register the assembled file.","description":"Finish a multipart upload and register the assembled file.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_complete_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_complete_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/direct/init":{"post":{"operationId":"post_v1_files_direct_init","tags":["files"],"summary":"Start a single-part direct upload and get the presigned URL to PUT the bytes to.","description":"Start a single-part direct upload and get the presigned URL to PUT the bytes to.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_direct_init_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_direct_init_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/multipart/init":{"post":{"operationId":"post_v1_files_multipart_init","tags":["files"],"summary":"Start a multipart upload and get presigned URLs for its parts.","description":"Start a multipart upload and get presigned URLs for its parts.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_init_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_multipart_init_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/upload/{token}":{"put":{"operationId":"put_v1_files_upload_token","tags":["files"],"summary":"Upload a file's bytes against a short-lived upload URL.","description":"Upload a file's bytes against a short-lived upload URL.","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_files_upload_token_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/{file_id}/signed_url":{"get":{"operationId":"get_v1_files_file_id_signed_url","tags":["files"],"summary":"Get a time-limited download URL for a file.","description":"Get a time-limited download URL for a file.","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"variant","in":"query","required":false,"description":"Serve a derived rendition instead of the original. Omit for the original bytes.","schema":{"type":"string","enum":["thumbnail"]}},{"name":"disposition","in":"query","required":false,"description":"Whether the browser should display the file or download it.","schema":{"type":"string","enum":["inline","attachment"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_files_file_id_signed_url_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/{file_id}/versions":{"get":{"operationId":"get_v1_files_file_id_versions","tags":["files"],"summary":"List a file's version chain, newest first.","description":"List a file's version chain, newest first.","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_files_file_id_versions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/{file_id}/rename":{"post":{"operationId":"post_v1_files_file_id_rename","tags":["files"],"summary":"Get a file under another name — a new file over the same bytes, to put in the old one's place.","description":"Get a file under another name — a new file over the same bytes, to put in the old one's place.","parameters":[{"name":"file_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/files/{org_id}/{file_id}/{filename}":{"get":{"operationId":"get_v1_files_org_id_file_id_filename","tags":["files"],"summary":"Serve a file's bytes.","description":"Serve a file's bytes.","parameters":[{"name":"org_id","in":"path","required":true,"description":"The organization that owns the file.","schema":{"type":"string"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"filename","in":"path","required":true,"description":"The file's name. Carried in the path so a browser download and a shared link land on a meaningful filename; the bytes served are decided by `file_id`.","schema":{"type":"string"}},{"name":"variant","in":"query","required":false,"description":"Serve a derived rendition instead of the original. Omit for the original bytes.","schema":{"type":"string","enum":["thumbnail"]}},{"name":"disposition","in":"query","required":false,"description":"Whether the browser should display the file or download it.","schema":{"type":"string","enum":["inline","attachment"]}}],"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflows":{"get":{"operationId":"get_v1_workflows","tags":["workflows"],"summary":"List workflows","description":"Lists all workflows in the workspace, optionally filtered by table IDs","parameters":[{"name":"ids","in":"query","required":false,"description":"Filter by workflow IDs","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"table_ids","in":"query","required":false,"description":"Filter by table IDs referenced in workflows","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workflows_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflows/dry_run":{"post":{"operationId":"post_v1_workflows_dry_run","tags":["workflows"],"summary":"Dry-run a workflow against a synthetic trigger payload","description":"Verifies the workflow source and, on success, simulates execution with all tool calls recorded but not dispatched. Returns the planned mutations, step outputs, and any validation failures or evaluation errors.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workflows_dry_run_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workflows_dry_run_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflows/rescan":{"post":{"operationId":"post_v1_workflows_rescan","tags":["workflows"],"summary":"Rescan all workflows","description":"Rescans all workflows in the workspace to rebuild their metadata.table_ids based on table references in steps and triggers","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workflows_rescan_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflows/{workflow_id}":{"get":{"operationId":"get_v1_workflows_workflow_id","tags":["workflows"],"summary":"Get workflow by ID","description":"Retrieves a workflow by its ID","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workflows_workflow_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_workflows_workflow_id","tags":["workflows"],"summary":"Update workflow","description":"Updates an existing workflow","parameters":[{"name":"workflow_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_workflows_workflow_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_workflows_workflow_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates":{"post":{"operationId":"post_v1_document_templates","tags":["document_templates"],"summary":"Create a document template from an uploaded PDF, Excel, Word or HTML file.","description":"Create a document template from an uploaded PDF, Excel, Word or HTML file.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_document_templates","tags":["document_templates"],"summary":"List the document templates in this workspace.","description":"List the document templates in this workspace.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_document_templates_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}":{"delete":{"operationId":"delete_v1_document_templates_document_template_id","tags":["document_templates"],"summary":"Delete a document template.","description":"Delete a document template.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_document_templates_document_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_document_templates_document_template_id","tags":["document_templates"],"summary":"Get one document template, including its variable and region markup.","description":"Get one document template, including its variable and region markup.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_document_templates_document_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_document_templates_document_template_id","tags":["document_templates"],"summary":"Update a document template's name, source file or data schema.","description":"Update a document template's name, source file or data schema.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_document_templates_document_template_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_document_templates_document_template_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/find_text":{"post":{"operationId":"post_v1_document_templates_document_template_id_find_text","tags":["document_templates"],"summary":"Locate a literal string in a template, so it can be marked without knowing its coordinates.","description":"Locate a literal string in a template, so it can be marked without knowing its coordinates.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_find_text_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_find_text_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/mark_conditional_region":{"post":{"operationId":"post_v1_document_templates_document_template_id_mark_conditional_region","tags":["document_templates"],"summary":"Mark a region of the template as conditional, included only when its expression is true.","description":"Mark a region of the template as conditional, included only when its expression is true.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_conditional_region_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_conditional_region_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/mark_loop_region":{"post":{"operationId":"post_v1_document_templates_document_template_id_mark_loop_region","tags":["document_templates"],"summary":"Mark a region of the template as a loop, repeated once per row of a list.","description":"Mark a region of the template as a loop, repeated once per row of a list.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_loop_region_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_loop_region_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/mark_variable":{"post":{"operationId":"post_v1_document_templates_document_template_id_mark_variable","tags":["document_templates"],"summary":"Mark a span of the template as a variable to fill at generation time.","description":"Mark a span of the template as a variable to fill at generation time.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_variable_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_mark_variable_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/unmark_conditional_region":{"post":{"operationId":"post_v1_document_templates_document_template_id_unmark_conditional_region","tags":["document_templates"],"summary":"Remove a conditional marking from a template region.","description":"Remove a conditional marking from a template region.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_conditional_region_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_conditional_region_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/unmark_loop_region":{"post":{"operationId":"post_v1_document_templates_document_template_id_unmark_loop_region","tags":["document_templates"],"summary":"Remove a loop marking from a template region.","description":"Remove a loop marking from a template region.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_loop_region_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_loop_region_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/document_templates/{document_template_id}/unmark_variable":{"post":{"operationId":"post_v1_document_templates_document_template_id_unmark_variable","tags":["document_templates"],"summary":"Remove a variable marking, restoring the literal text.","description":"Remove a variable marking, restoring the literal text.","parameters":[{"name":"document_template_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_variable_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_variable_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps":{"post":{"operationId":"post_v1_apps","tags":["apps"],"summary":"Create a custom-code app.","description":"Create a custom-code app.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_apps","tags":["apps"],"summary":"List the apps in this workspace that the caller can open.","description":"List the apps in this workspace that the caller can open.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/waiting_rows":{"get":{"operationId":"get_v1_waiting_rows","tags":["waiting_rows"],"summary":"List the rows waiting on the caller across the workspace's apps — each at a step they own — read through each app's own access.","description":"List the rows waiting on the caller across the workspace's apps — each at a step they own — read through each app's own access.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_waiting_rows_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/app-icons":{"get":{"operationId":"get_v1_app_icons","tags":["app-icons"],"summary":"Search the icon set an app can use for its launcher tile.","description":"Search the icon set an app can use for its launcher tile.","parameters":[{"name":"q","in":"query","required":true,"description":"Search term — a word or concept (\"shipping\", \"calendar\").","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Max results, 1–50 (default 30).","schema":{"type":"integer","minimum":1,"maximum":50}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_app_icons_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/reorder":{"post":{"operationId":"post_v1_apps_reorder","tags":["apps"],"summary":"Reorder the calling member's apps list","description":"Arrange the apps list for the calling member only. Personal preference — it does not affect access, and no other member's list changes. Apps left out of the array keep the default order behind the listed ones.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_reorder_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_reorder_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/by-subdomain/{subdomain}":{"get":{"operationId":"get_v1_apps_by_subdomain_subdomain","tags":["apps"],"summary":"Resolve a public subdomain to the app's identity","description":"Resolve a public subdomain to the app's identity","parameters":[{"name":"subdomain","in":"path","required":true,"description":"The subdomain the app is published under, without the domain.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_by_subdomain_subdomain_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}":{"delete":{"operationId":"delete_v1_apps_app_id","tags":["apps"],"summary":"Delete an app.","description":"Delete an app.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_apps_app_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_apps_app_id","tags":["apps"],"summary":"Get one app, with its declared aliases and bindings.","description":"Get one app, with its declared aliases and bindings.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_apps_app_id","tags":["apps"],"summary":"Update an app's name, icon or settings.","description":"Update an app's name, icon or settings.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_apps_app_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_apps_app_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/field-options":{"post":{"operationId":"post_v1_apps_app_id_field_options","tags":["apps"],"summary":"Resolve the full option set (key, label, color, mark) of a named query's select columns, and the units of its figures read per row","description":"Resolve the full option set (key, label, color, mark) of a named query's select columns, and the units of its figures read per row","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_field_options_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_field_options_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/imports":{"get":{"operationId":"get_v1_apps_app_id_imports","tags":["apps"],"summary":"List a register's imports — the runs of the workflows importing into its table, each with the rows it added, changed and removed — read through an app's own access.","description":"List a register's imports — the runs of the workflows importing into its table, each with the rows it added, changed and removed — read through an app's own access.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Continue past a page: pass its `next`. Omit for the newest page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_imports_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/write_model":{"get":{"operationId":"get_v1_apps_app_id_write_model","tags":["apps"],"summary":"What the app's writes will change, so its SDK shows each one before the server answers: each bound workflow's record-write subset, each query's column sources, and the fields they name. Empty for a caller outside the app's organization","description":"What the app's writes will change, so its SDK shows each one before the server answers: each bound workflow's record-write subset, each query's column sources, and the fields they name. Empty for a caller outside the app's organization","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_write_model_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/export":{"post":{"operationId":"post_v1_apps_app_id_export","tags":["apps"],"summary":"Export every row of a named query as one file: the default report workbook, or a template the query declares","description":"Export every row of a named query as one file: the default report workbook, or a template the query declares","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_export_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_export_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/embed-grant":{"get":{"operationId":"get_v1_apps_app_id_embed_grant","tags":["apps"],"summary":"Mint a grant so an authenticated member can embed a password-gated app","description":"Mint a grant so an authenticated member can embed a password-gated app","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_embed_grant_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/openapi.json":{"get":{"operationId":"get_v1_apps_app_id_openapi_json","tags":["apps"],"summary":"The OpenAPI document for the app's published API","description":"The OpenAPI document for the app's published API","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"An OpenAPI 3.1 document describing this app's published API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_openapi_json_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/public-info":{"get":{"operationId":"get_v1_apps_app_id_public_info","tags":["apps"],"summary":"Resolve an app's public origin and subdomain, and who reads it","description":"Resolve an app's public origin and subdomain, and who reads it","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_public_info_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/agent-runs":{"get":{"operationId":"get_v1_apps_app_id_agent_runs","tags":["apps"],"summary":"List an app agent session's run history","description":"List an app agent session's run history","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"session_id","in":"query","required":true,"description":"The session thread to list runs for.","schema":{"type":"string","minLength":1}},{"name":"limit","in":"query","required":false,"description":"Runs per page.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"How many runs to skip, for paging.","schema":{"type":"number"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_agent_runs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/members":{"get":{"operationId":"get_v1_apps_app_id_members","tags":["apps"],"summary":"List the app organization's members (member-picker source)","description":"List the app organization's members (member-picker source)","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"group_id","in":"query","required":false,"description":"Restrict to one member group — only honored if declared on a member input","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_members_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/versions":{"get":{"operationId":"get_v1_apps_app_id_versions","tags":["apps"],"summary":"List an app's deployed versions, newest first.","description":"List an app's deployed versions, newest first.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Versions per page.","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"How many versions to skip, for paging.","schema":{"type":"number"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_versions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/query_batch":{"post":{"operationId":"post_v1_apps_app_id_query_batch","tags":["apps"],"summary":"Run several named queries of one app in one request","description":"Run several named queries of one app in one request","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_query_batch_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_query_batch_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/query":{"post":{"operationId":"post_v1_apps_app_id_query","tags":["apps"],"summary":"Run a named query declared in the app's manifest","description":"Run a named query declared in the app's manifest","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_query_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_query_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/prediction_misses":{"post":{"operationId":"post_v1_apps_app_id_prediction_misses","tags":["apps"],"summary":"Where the app's SDK drew a write the server then stored differently, or could not predict one — counted by workflow, field and kind, never with a value. The app's own organization only","description":"Where the app's SDK drew a write the server then stored differently, or could not predict one — counted by workflow, field and kind, never with a value. The app's own organization only","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_prediction_misses_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_prediction_misses_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/public-password":{"put":{"operationId":"put_v1_apps_app_id_public_password","tags":["apps"],"summary":"Set or clear the shared password gating the app's public link","description":"Set or clear the shared password gating the app's public link","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_apps_app_id_public_password_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_apps_app_id_public_password_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/subdomain":{"put":{"operationId":"put_v1_apps_app_id_subdomain","tags":["apps"],"summary":"Rename an app's public subdomain","description":"Rename an app's public subdomain","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_apps_app_id_subdomain_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_apps_app_id_subdomain_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/public/authenticate":{"post":{"operationId":"post_v1_apps_app_id_public_authenticate","tags":["apps"],"summary":"Exchange a shared password for a public-app session token","description":"Exchange a shared password for a public-app session token","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_public_authenticate_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_public_authenticate_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/files/complete":{"post":{"operationId":"post_v1_apps_app_id_files_complete","tags":["apps"],"summary":"Finalize a presigned upload into an app","description":"Finalize a presigned upload into an app","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_complete_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_complete_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/api/publication":{"get":{"operationId":"get_v1_apps_app_id_api_publication","tags":["apps"],"summary":"Whether the app is publishing an API, and which contract version.","description":"Whether the app is publishing an API, and which contract version.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_api_publication_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/api/publish":{"post":{"operationId":"post_v1_apps_app_id_api_publish","tags":["apps"],"summary":"Publish the app's API, snapshotting the contract its callers may rely on.","description":"Publish the app's API, snapshotting the contract its callers may rely on.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_api_publish_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_api_publish_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"delete_v1_apps_app_id_api_publish","tags":["apps"],"summary":"Stop publishing the app's API.","description":"Stop publishing the app's API.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_apps_app_id_api_publish_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/files/upload-url":{"post":{"operationId":"post_v1_apps_app_id_files_upload_url","tags":["apps"],"summary":"Mint a presigned URL for uploading a file into an app","description":"Mint a presigned URL for uploading a file into an app","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_upload_url_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_upload_url_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/embed-grant/verify":{"post":{"operationId":"post_v1_apps_app_id_embed_grant_verify","tags":["apps"],"summary":"Verify an embed grant relayed by the app-host Worker","description":"Verify an embed grant relayed by the app-host Worker","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_embed_grant_verify_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_embed_grant_verify_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/imports/{run_id}":{"get":{"operationId":"get_v1_apps_app_id_imports_run_id","tags":["apps"],"summary":"List one import's rows — added, changed and removed, each with its fields before and after — read through an app's own access.","description":"List one import's rows — added, changed and removed, each with its fields before and after — read through an app's own access.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Continue past a page of the run's rows: pass its `next`. Omit for the first page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_imports_run_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/agent-runs/{run_id}":{"get":{"operationId":"get_v1_apps_app_id_agent_runs_run_id","tags":["apps"],"summary":"Get a single app agent run by id","description":"Get a single app agent run by id","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_agent_runs_run_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/versions/{version_id}":{"get":{"operationId":"get_v1_apps_app_id_versions_version_id","tags":["apps"],"summary":"Get one app version's metadata, including its entry HTML path.","description":"Get one app version's metadata, including its entry HTML path.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_versions_version_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/queries/{alias}":{"post":{"operationId":"post_v1_apps_app_id_queries_alias","tags":["apps"],"summary":"Run a named query declared in the app's manifest","description":"Run a named query declared in the app's manifest","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"alias","in":"path","required":true,"description":"The query to run, by the alias the app declares it under.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_queries_alias_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_queries_alias_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/records/{record_id}/activity":{"get":{"operationId":"get_v1_apps_app_id_records_record_id_activity","tags":["apps"],"summary":"List a record's activity — its changes and comments, one entry per save — read through an app's own access.","description":"List a record's activity — its changes and comments, one entry per save — read through an app's own access.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"entity","in":"query","required":true,"description":"The entity the record is a row of — the alias the app's spec names it under.","schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Continue past a page: pass its `next`. Omit for the newest page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_records_record_id_activity_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/agent-runs/{run_id}/cancel":{"post":{"operationId":"post_v1_apps_app_id_agent_runs_run_id_cancel","tags":["apps"],"summary":"Cancel an in-flight app agent run","description":"Cancel an in-flight app agent run","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_agent_runs_run_id_cancel_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/agent-runs/{run_id}/continue":{"post":{"operationId":"post_v1_apps_app_id_agent_runs_run_id_continue","tags":["apps"],"summary":"Answer a run's pending ask_user_choice and continue it (streams)","description":"Answer a run's pending ask_user_choice and continue it (streams)","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"run_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_agent_runs_run_id_continue_Body"}}}},"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/agents/{alias}/runs":{"post":{"operationId":"post_v1_apps_app_id_agents_alias_runs","tags":["apps"],"summary":"Run an app agent by its manifest alias (streams the result)","description":"Run an app agent by its manifest alias (streams the result)","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"alias","in":"path","required":true,"description":"The agent to run, by the alias the app declares it under.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_agents_alias_runs_Body"}}}},"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/workflows/{alias}/execute":{"post":{"operationId":"post_v1_apps_app_id_workflows_alias_execute","tags":["apps"],"summary":"Execute a workflow by its app-manifest alias","description":"Execute a workflow by its app-manifest alias","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"alias","in":"path","required":true,"description":"The workflow to run, by the alias the app declares it under.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_workflows_alias_execute_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_workflows_alias_execute_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/versions/{version_id}/source":{"get":{"operationId":"get_v1_apps_app_id_versions_version_id_source","tags":["apps"],"summary":"Download an app version's source archive.","description":"Download an app version's source archive.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_versions_version_id_source_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/workflows/{alias}/dts":{"post":{"operationId":"post_v1_apps_app_id_workflows_alias_dts","tags":["apps"],"summary":"Get the workspace .d.ts + envelope for an app workflow body","description":"Get the workspace .d.ts + envelope for an app workflow body","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"alias","in":"path","required":true,"description":"The workflow whose input/output types to return, by its declared alias.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_workflows_alias_dts_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_workflows_alias_dts_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/files/{file_id}/rename":{"post":{"operationId":"post_v1_apps_app_id_files_file_id_rename","tags":["apps"],"summary":"Get a file of an app under another name, to put in the old one's place","description":"Get a file of an app under another name, to put in the old one's place","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"file_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_file_id_rename_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_files_file_id_rename_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/records/{record_id}/comments":{"post":{"operationId":"post_v1_apps_app_id_records_record_id_comments","tags":["apps"],"summary":"Comment on a record through an app.","description":"Comment on a record through an app.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_records_record_id_comments_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_records_record_id_comments_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_apps_app_id_records_record_id_comments","tags":["apps"],"summary":"List the comments on a record, read through an app's own access.","description":"List the comments on a record, read through an app's own access.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_records_record_id_comments_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/tables/{table_id}/comment-counts":{"get":{"operationId":"get_v1_apps_app_id_tables_table_id_comment_counts","tags":["apps"],"summary":"Count comments per record for a table, so an app can badge its rows.","description":"Count comments per record for a table, so an app can badge its rows.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"table_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_apps_app_id_tables_table_id_comment_counts_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/records/{record_id}/comments/{comment_id}":{"delete":{"operationId":"delete_v1_apps_app_id_records_record_id_comments_comment_id","tags":["apps"],"summary":"Delete a comment, through an app.","description":"Delete a comment, through an app.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_apps_app_id_records_record_id_comments_comment_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_apps_app_id_records_record_id_comments_comment_id","tags":["apps"],"summary":"Edit a comment the caller wrote, through an app.","description":"Edit a comment the caller wrote, through an app.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"comment_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_apps_app_id_records_record_id_comments_comment_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_apps_app_id_records_record_id_comments_comment_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/automations":{"post":{"operationId":"post_v1_automations","tags":["automations"],"summary":"Create an automation (trigger + workflow pair)","description":"Creates an automation with a trigger and associated workflow. Accepts every trigger type registered in the adapter registry — required config keys are enforced per adapter.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_automations_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_automations_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_automations","tags":["automations"],"summary":"Query automations","description":"Queries automations with optional filters","parameters":[{"name":"ids","in":"query","required":false,"description":"Filter by automation (trigger) IDs","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"enabled","in":"query","required":false,"description":"Filter by enabled/disabled status","schema":{"type":"boolean"}},{"name":"trigger_type","in":"query","required":false,"description":"Filter by trigger type (e.g. recurring_schedule, receive_webhook)","schema":{"type":"string"}},{"name":"exclude_trigger_types","in":"query","required":false,"description":"Exclude automations whose trigger type is in this list","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_automations_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/automations/{trigger_id}":{"delete":{"operationId":"delete_v1_automations_trigger_id","tags":["automations"],"summary":"Delete automation","description":"Archives an automation's trigger and associated workflow","parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_automations_trigger_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_automations_trigger_id","tags":["automations"],"summary":"Update automation","description":"Updates an automation's trigger config and/or workflow steps","parameters":[{"name":"trigger_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_automations_trigger_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_automations_trigger_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/skills":{"post":{"operationId":"post_v1_skills","tags":["skills"],"summary":"Create skill","description":"Creates a new skill in the workspace","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_skills_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_skills_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_skills","tags":["skills"],"summary":"List skills","description":"Lists skills in the workspace. Pass user_invocable=true to list only skills visible in the composer picker.","parameters":[{"name":"user_invocable","in":"query","required":false,"description":"Return only skills a member can invoke from the composer picker.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_skills_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/skills/{skill_id}":{"delete":{"operationId":"delete_v1_skills_skill_id","tags":["skills"],"summary":"Delete skill","description":"Deletes a skill from the workspace","parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_skills_skill_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_skills_skill_id","tags":["skills"],"summary":"Get skill by ID","description":"Retrieves a skill by its ID","parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_skills_skill_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_skills_skill_id","tags":["skills"],"summary":"Update skill","description":"Updates an existing skill in the workspace","parameters":[{"name":"skill_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_skills_skill_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_skills_skill_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/instructions":{"post":{"operationId":"post_v1_instructions","tags":["instructions"],"summary":"Create instruction","description":"Creates a new workspace instruction","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_instructions_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_instructions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_instructions","tags":["instructions"],"summary":"List instructions","description":"Lists instructions in the workspace. Filter by scope.","parameters":[{"name":"scope","in":"query","required":false,"description":"Return only instructions at this scope — those set for the whole workspace, or this member's own. Omit for both.","schema":{"type":"string","enum":["workspace","member"]}},{"name":"include_table_scoped","in":"query","required":false,"description":"Also return instructions attached to a single table, which are left out by default.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_instructions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/instructions/{instruction_id}":{"delete":{"operationId":"delete_v1_instructions_instruction_id","tags":["instructions"],"summary":"Delete instruction","description":"Archives an instruction","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_instructions_instruction_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_instructions_instruction_id","tags":["instructions"],"summary":"Get instruction","description":"Retrieves an instruction by ID","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_instructions_instruction_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_instructions_instruction_id","tags":["instructions"],"summary":"Update instruction","description":"Updates an existing instruction. Creates a new version.","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_instructions_instruction_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_instructions_instruction_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/instructions/{instruction_id}/versions":{"get":{"operationId":"get_v1_instructions_instruction_id_versions","tags":["instructions"],"summary":"List instruction versions","description":"Lists version history for an instruction","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Versions per page, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"offset","in":"query","required":false,"description":"How many versions to skip, for paging.","schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_instructions_instruction_id_versions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/instructions/{instruction_id}/restore":{"post":{"operationId":"post_v1_instructions_instruction_id_restore","tags":["instructions"],"summary":"Restore instruction version","description":"Restores an instruction to a previous version. Creates a new version with the restored content.","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_instructions_instruction_id_restore_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_instructions_instruction_id_restore_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/member_instructions":{"post":{"operationId":"post_v1_member_instructions","tags":["member_instructions"],"summary":"Create personal instruction","description":"Creates a new personal instruction for the current member","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_member_instructions_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_member_instructions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_member_instructions","tags":["member_instructions"],"summary":"List personal instructions","description":"Lists the current member's personal instructions","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_member_instructions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/member_instructions/{instruction_id}":{"delete":{"operationId":"delete_v1_member_instructions_instruction_id","tags":["member_instructions"],"summary":"Delete personal instruction","description":"Archives a personal instruction owned by the current member","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_member_instructions_instruction_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_member_instructions_instruction_id","tags":["member_instructions"],"summary":"Update personal instruction","description":"Updates a personal instruction owned by the current member","parameters":[{"name":"instruction_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_member_instructions_instruction_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_member_instructions_instruction_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/knowledge_docs":{"patch":{"operationId":"patch_v1_knowledge_docs","tags":["knowledge_docs"],"summary":"Update knowledge docs in bulk","description":"Applies one metadata change to a set of docs. Tags arrive as an add/remove DIFF rather than a replacement, because the docs in a selection carry different labels and one array applied across them would strip whatever the others were filed under.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_knowledge_docs_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_knowledge_docs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_knowledge_docs","tags":["knowledge_docs"],"summary":"Create knowledge doc","description":"Creates a new knowledge doc in the workspace","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_knowledge_docs_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_knowledge_docs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_knowledge_docs","tags":["knowledge_docs"],"summary":"List knowledge docs","description":"Lists knowledge docs in the workspace (metadata only; the body is fetched by the single GET)","parameters":[{"name":"include_hidden","in":"query","required":false,"description":"Include docs that have been hidden. Omitted, they are left out — hiding a doc is a statement that it is out of circulation, so it takes an explicit ask to list one.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_knowledge_docs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/knowledge_docs/{knowledge_doc_id}":{"delete":{"operationId":"delete_v1_knowledge_docs_knowledge_doc_id","tags":["knowledge_docs"],"summary":"Delete knowledge doc","description":"Archives a knowledge doc","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_knowledge_docs_knowledge_doc_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_knowledge_docs_knowledge_doc_id","tags":["knowledge_docs"],"summary":"Get knowledge doc","description":"Retrieves a knowledge doc by ID","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_knowledge_docs_knowledge_doc_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_knowledge_docs_knowledge_doc_id","tags":["knowledge_docs"],"summary":"Update knowledge doc","description":"Updates a knowledge doc. A content change lands in the doc's version history (`/versions`).","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_knowledge_docs_knowledge_doc_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_knowledge_docs_knowledge_doc_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/knowledge_docs/{knowledge_doc_id}/versions":{"get":{"operationId":"get_v1_knowledge_docs_knowledge_doc_id_versions","tags":["knowledge_docs"],"summary":"List a knowledge doc's versions","description":"Lists the doc's kept bodies, newest first, without their content: a checkpoint where an editing session ended or a program wrote, and each version a person named.","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"after","in":"query","required":false,"description":"Continue past a page: pass its `next`. Omit for the newest page.","schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_knowledge_docs_knowledge_doc_id_versions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_knowledge_docs_knowledge_doc_id_versions","tags":["knowledge_docs"],"summary":"Name a knowledge doc version","description":"Names a kept version of the doc's body (`version_id`), or keeps the body as it is stored now under a name.","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_knowledge_docs_knowledge_doc_id_versions_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_knowledge_docs_knowledge_doc_id_versions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/knowledge_docs/{knowledge_doc_id}/versions/{version_id}":{"get":{"operationId":"get_v1_knowledge_docs_knowledge_doc_id_versions_version_id","tags":["knowledge_docs"],"summary":"Get a knowledge doc version","description":"Reads one kept body of the doc. Restore it by writing its content back through the doc's PATCH; the body it replaces is kept as a checkpoint.","parameters":[{"name":"knowledge_doc_id","in":"path","required":true,"schema":{"type":"string"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_knowledge_docs_knowledge_doc_id_versions_version_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/memories":{"post":{"operationId":"post_v1_memories","tags":["memories"],"summary":"Create memory","description":"Creates a new personal memory","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_memories_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_memories_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_memories","tags":["memories"],"summary":"List memories","description":"Lists the caller's personal memories","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_memories_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/memories/{memory_id}":{"delete":{"operationId":"delete_v1_memories_memory_id","tags":["memories"],"summary":"Delete memory","description":"Archives a memory","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_memories_memory_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_memories_memory_id","tags":["memories"],"summary":"Update memory","description":"Updates description and/or content of a memory","parameters":[{"name":"memory_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_memories_memory_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_memories_memory_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["search"],"summary":"Global search","description":"Search across the workspace. Returns a single ranked list of tables, views, and records.","parameters":[{"name":"q","in":"query","required":true,"description":"Search query string","schema":{"type":"string","minLength":1,"maxLength":200}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_search_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys":{"post":{"operationId":"post_v1_api_keys","tags":["api_keys"],"summary":"Create API key","description":"Creates a new API key and returns plaintext value once","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_api_keys_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_api_keys_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_api_keys","tags":["api_keys"],"summary":"List API keys","description":"Lists all API keys in the current organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_api_keys_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys/grantable_resources":{"get":{"operationId":"get_v1_api_keys_grantable_resources","tags":["api_keys"],"summary":"Apps and tables a key can be given","description":"Lists every app and table in this organization, and the workspace each sits in","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_api_keys_grantable_resources_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys/self":{"delete":{"operationId":"delete_v1_api_keys_self","tags":["api_keys"],"summary":"Revoke the API key making this request","description":"Disables the credential this request authenticated with","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_api_keys_self_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys/{api_key_id}":{"delete":{"operationId":"delete_v1_api_keys_api_key_id","tags":["api_keys"],"summary":"Delete an API key","description":"Ends one key in this organization permanently. It never authenticates again.","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_api_keys_api_key_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"patch_v1_api_keys_api_key_id","tags":["api_keys"],"summary":"Update API key","description":"Updates metadata, status, or what an existing API key reaches","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_api_keys_api_key_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/patch_v1_api_keys_api_key_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys/{api_key_id}/access":{"get":{"operationId":"get_v1_api_keys_api_key_id_access","tags":["api_keys"],"summary":"What an API key reaches","description":"Lists the apps and tables one key reaches or owns, and the workspace each one sits in","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_api_keys_api_key_id_access_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/api_keys/{api_key_id}/roll":{"post":{"operationId":"post_v1_api_keys_api_key_id_roll","tags":["api_keys"],"summary":"Roll an API key","description":"Issues a new secret for an existing key and ends the old secret 24 hours from now","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_api_keys_api_key_id_roll_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/cancel_erasure":{"post":{"operationId":"post_v1_me_cancel_erasure","tags":["me"],"summary":"Cancel a pending account-erasure request during the grace window","description":"Cancel a pending account-erasure request during the grace window","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_cancel_erasure_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/claim_email":{"post":{"operationId":"post_v1_me_claim_email","tags":["me"],"summary":"Start moving the authenticated member's sign-in identity onto another email address","description":"Start moving the authenticated member's sign-in identity onto another email address","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_claim_email_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_claim_email_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/confirm_email_claim":{"post":{"operationId":"post_v1_me_confirm_email_claim","tags":["me"],"summary":"Confirm an email claim with the token sent to the new address","description":"Confirm an email claim with the token sent to the new address","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_confirm_email_claim_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_confirm_email_claim_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/confirm_erasure":{"post":{"operationId":"post_v1_me_confirm_erasure","tags":["me"],"summary":"Confirm a pending erasure request and start the 30-day grace window","description":"Confirm a pending erasure request and start the 30-day grace window","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_confirm_erasure_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_confirm_erasure_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/export":{"get":{"operationId":"get_v1_me_export","tags":["me"],"summary":"Export the authenticated member's personal data (GDPR access/portability)","description":"Export the authenticated member's personal data (GDPR access/portability)","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_export_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/erasure":{"get":{"operationId":"get_v1_me_erasure","tags":["me"],"summary":"Read the authenticated member's pending account-erasure schedule, if any","description":"Read the authenticated member's pending account-erasure schedule, if any","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_erasure_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/credentials":{"get":{"operationId":"get_v1_me_credentials","tags":["me"],"summary":"List the credentials the authenticated member acts through","description":"List the credentials the authenticated member acts through","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_credentials_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/security-events":{"get":{"operationId":"get_v1_me_security_events","tags":["me"],"summary":"List the authenticated member's recent account-security events","description":"List the authenticated member's recent account-security events","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_security_events_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/sessions":{"get":{"operationId":"get_v1_me_sessions","tags":["me"],"summary":"List the authenticated member's active sessions","description":"List the authenticated member's active sessions","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_sessions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"delete_v1_me_sessions","tags":["me"],"summary":"Revoke every session of the authenticated member except the current one","description":"Revoke every session of the authenticated member except the current one","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_me_sessions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/request_erasure":{"post":{"operationId":"post_v1_me_request_erasure","tags":["me"],"summary":"Request erasure of the authenticated member's account (emails a confirmation token)","description":"Request erasure of the authenticated member's account (emails a confirmation token)","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_me_request_erasure_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/credentials/{credential_id}":{"delete":{"operationId":"delete_v1_me_credentials_credential_id","tags":["me"],"summary":"Revoke one of the authenticated member's credentials","description":"Revoke one of the authenticated member's credentials","parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_me_credentials_credential_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/sessions/{session_id}":{"delete":{"operationId":"delete_v1_me_sessions_session_id","tags":["me"],"summary":"Revoke one of the authenticated member's sessions","description":"Revoke one of the authenticated member's sessions","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_me_sessions_session_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approval_requests":{"get":{"operationId":"get_v1_approval_requests","tags":["approval_requests"],"summary":"List approval requests addressed to this member.","description":"List approval requests addressed to this member.","parameters":[{"name":"status","in":"query","required":false,"description":"Return only requests in this state. Omit for every state.","schema":{"type":"string","enum":["pending","approved","rejected","timed_out"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_approval_requests_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approval_requests/locked_record_change":{"post":{"operationId":"post_v1_approval_requests_locked_record_change","tags":["approval_requests"],"summary":"Ask an approver to release a locked field so a record change can be applied.","description":"Ask an approver to release a locked field so a record change can be applied.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_approval_requests_locked_record_change_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_approval_requests_locked_record_change_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approval_requests/{approval_request_id}":{"get":{"operationId":"get_v1_approval_requests_approval_request_id","tags":["approval_requests"],"summary":"Get one approval request, with the change it is asking about.","description":"Get one approval request, with the change it is asking about.","parameters":[{"name":"approval_request_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_approval_requests_approval_request_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/approval_requests/{approval_request_id}/respond":{"post":{"operationId":"post_v1_approval_requests_approval_request_id_respond","tags":["approval_requests"],"summary":"Approve or reject an approval request.","description":"Approve or reject an approval request.","parameters":[{"name":"approval_request_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_approval_requests_approval_request_id_respond_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_approval_requests_approval_request_id_respond_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/audit_logs":{"get":{"operationId":"get_v1_audit_logs","tags":["audit_logs"],"summary":"List audit logs","description":"Query audit logs with combined filters for resource, action, actor, and date range","parameters":[{"name":"resource_type","in":"query","required":false,"description":"Return only entries about this kind of resource.","schema":{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]}},{"name":"resource_id","in":"query","required":false,"description":"Return only entries about this one resource.","schema":{"type":"string"}},{"name":"parent_resource_type","in":"query","required":false,"description":"Return only entries whose parent resource is of this kind.","schema":{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]}},{"name":"parent_resource_id","in":"query","required":false,"description":"Return only entries beneath this one resource — every record under a table, for example.","schema":{"type":"string"}},{"name":"action","in":"query","required":false,"description":"Return only these actions. Pass more than one, comma-separated, to match any of them.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"actor_id","in":"query","required":false,"description":"Return only entries for what this member did.","schema":{"type":"string"}},{"name":"workspace_id","in":"query","required":false,"description":"Return only entries in this workspace. Omit for the whole organization; one record's history (resource_type record with resource_id) defaults to the request's workspace.","schema":{"type":"string"}},{"name":"created_after","in":"query","required":false,"description":"ISO 8601 timestamp. Entries at or after this instant — the bound is inclusive.","schema":{"type":"string"}},{"name":"created_before","in":"query","required":false,"description":"ISO 8601 timestamp. Entries strictly before this instant — the bound is exclusive.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Continue from a previous page: pass the `next_cursor` it returned. Omit for the first page.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Entries per page, 1–50. Defaults to 20.","schema":{"type":"number"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_audit_logs_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent_context_activations":{"get":{"operationId":"get_v1_agent_context_activations","tags":["agent_context_activations"],"summary":"List agent context activations","description":"Lists the current member's activation state for skills","parameters":[{"name":"resource_type","in":"query","required":true,"description":"The kind of resource whose activation is being read or set.","schema":{"type":"string","enum":["skill"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_agent_context_activations_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/agent_context_activations/{resource_type}/{resource_id}":{"put":{"operationId":"put_v1_agent_context_activations_resource_type_resource_id","tags":["agent_context_activations"],"summary":"Set agent context activation","description":"Enable or disable a skill in the current member's agent context","parameters":[{"name":"resource_type","in":"path","required":true,"description":"The kind of resource whose activation is being read or set.","schema":{"type":"string","enum":["skill"]}},{"name":"resource_id","in":"path","required":true,"description":"The id of the resource named by `resource_type`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_agent_context_activations_resource_type_resource_id_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_agent_context_activations_resource_type_resource_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/pending":{"get":{"operationId":"get_v1_voice_sessions_pending","tags":["voice_sessions"],"summary":"List recording sessions that were left unfinished, so the client can resume them.","description":"List recording sessions that were left unfinished, so the client can resume them.","parameters":[{"name":"chat_session_id","in":"query","required":false,"description":"Return only unfinished recordings started from this chat session.","schema":{"type":"string"}},{"name":"destination","in":"query","required":false,"description":"`app` lists this workspace's app recordings still needing their member — live, processing, failed, or finished and not yet filed. Omitted means chat recordings.","schema":{"type":"string","enum":["chat","app"]}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_voice_sessions_pending_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/init":{"post":{"operationId":"post_v1_voice_sessions_init","tags":["voice_sessions"],"summary":"Open a recording session and get presigned URLs for its first chunks.","description":"Open a recording session and get presigned URLs for its first chunks.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_init_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_init_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/{session_id}":{"delete":{"operationId":"delete_v1_voice_sessions_session_id","tags":["voice_sessions"],"summary":"Delete a recording session and its stored audio.","description":"Delete a recording session and its stored audio.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_voice_sessions_session_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"operationId":"get_v1_voice_sessions_session_id","tags":["voice_sessions"],"summary":"Get a recording session, its transcript and its summary.","description":"Get a recording session, its transcript and its summary.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_voice_sessions_session_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/{session_id}/complete":{"post":{"operationId":"post_v1_voice_sessions_session_id_complete","tags":["voice_sessions"],"summary":"Close a recording session and queue it for transcription.","description":"Close a recording session and queue it for transcription.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_complete_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_complete_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/{session_id}/urls":{"post":{"operationId":"post_v1_voice_sessions_session_id_urls","tags":["voice_sessions"],"summary":"Get more presigned chunk-upload URLs for a recording still in progress.","description":"Get more presigned chunk-upload URLs for a recording still in progress.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_urls_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_urls_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/apps/{app_id}/recordings":{"post":{"operationId":"post_v1_apps_app_id_recordings","tags":["apps"],"summary":"Open a recording session whose finished recording files through one of the app's workflows.","description":"Open a recording session whose finished recording files through one of the app's workflows.","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_recordings_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_apps_app_id_recordings_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/{session_id}/deliver":{"post":{"operationId":"post_v1_voice_sessions_session_id_deliver","tags":["voice_sessions"],"summary":"File a finished app recording again, after its delivery failed.","description":"File a finished app recording again, after its delivery failed.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_deliver_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/voice_sessions/{session_id}/retry":{"post":{"operationId":"post_v1_voice_sessions_session_id_retry","tags":["voice_sessions"],"summary":"Re-run transcription for a session whose processing failed.","description":"Re-run transcription for a session whose processing failed.","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_voice_sessions_session_id_retry_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/credit_balance":{"get":{"operationId":"get_v1_usage_credit_balance","tags":["usage"],"summary":"Get credit balance for the current organization","description":"Get credit balance for the current organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_credit_balance_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/credit_statement":{"get":{"operationId":"get_v1_usage_credit_statement","tags":["usage"],"summary":"Get the credit consumption statement for a billing period","description":"Get the credit consumption statement for a billing period","parameters":[{"name":"cycle_offset","in":"query","required":false,"description":"Which billing cycle to report on, counted back from the current one: 0 or omitted for the cycle in progress, -1 for the previous cycle, and so on. Cycles follow the organization's billing day, not calendar months.","schema":{"type":"integer","minimum":-9007199254740991,"maximum":0}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_credit_statement_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/plan":{"get":{"operationId":"get_v1_usage_plan","tags":["usage"],"summary":"Get current organization plan","description":"Get current organization plan","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_plan_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/events":{"get":{"operationId":"get_v1_usage_events","tags":["usage"],"summary":"Get paginated usage event log","description":"Get paginated usage event log","parameters":[{"name":"cycle_offset","in":"query","required":false,"description":"Which billing cycle to report on, counted back from the current one: 0 or omitted for the cycle in progress, -1 for the previous cycle, and so on. Cycles follow the organization's billing day, not calendar months.","schema":{"type":"integer","minimum":-9007199254740991,"maximum":0}},{"name":"member_id","in":"query","required":false,"description":"Scope the log to one member. Omit for the whole organization.","schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Continue from a previous page: pass the `next_cursor` it returned. Omit for the first page.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Events per page, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_events_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/member_detail":{"get":{"operationId":"get_v1_usage_member_detail","tags":["usage"],"summary":"Get usage breakdown for a specific member","description":"Get usage breakdown for a specific member","parameters":[{"name":"member_id","in":"query","required":true,"description":"The member whose charges to break down.","schema":{"type":"string"}},{"name":"cycle_offset","in":"query","required":false,"description":"Which billing cycle to report on, counted back from the current one: 0 or omitted for the cycle in progress, -1 for the previous cycle, and so on. Cycles follow the organization's billing day, not calendar months.","schema":{"type":"integer","minimum":-9007199254740991,"maximum":0}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_member_detail_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/model_detail":{"get":{"operationId":"get_v1_usage_model_detail","tags":["usage"],"summary":"Get daily usage breakdown for a specific model","description":"Get daily usage breakdown for a specific model","parameters":[{"name":"model_id","in":"query","required":true,"description":"The AI model to break down, as it appears in `by_model` on the usage summary.","schema":{"type":"string"}},{"name":"cycle_offset","in":"query","required":false,"description":"Which billing cycle to report on, counted back from the current one: 0 or omitted for the cycle in progress, -1 for the previous cycle, and so on. Cycles follow the organization's billing day, not calendar months.","schema":{"type":"integer","minimum":-9007199254740991,"maximum":0}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_model_detail_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/summary":{"get":{"operationId":"get_v1_usage_summary","tags":["usage"],"summary":"Get usage summary for a billing period","description":"Get usage summary for a billing period","parameters":[{"name":"cycle_offset","in":"query","required":false,"description":"Which billing cycle to report on, counted back from the current one: 0 or omitted for the cycle in progress, -1 for the previous cycle, and so on. Cycles follow the organization's billing day, not calendar months.","schema":{"type":"integer","minimum":-9007199254740991,"maximum":0}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_summary_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/usage/plan/history":{"get":{"operationId":"get_v1_usage_plan_history","tags":["usage"],"summary":"Get plan change history for the organization","description":"Get plan change history for the organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_usage_plan_history_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/party":{"get":{"operationId":"get_v1_billing_party","tags":["billing"],"summary":"Read the current organization's billing party","description":"Read the current organization's billing party","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_billing_party_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put_v1_billing_party","tags":["billing"],"summary":"Set the current organization's billing party","description":"Set the current organization's billing party","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_billing_party_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_billing_party_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/charges":{"get":{"operationId":"get_v1_billing_charges","tags":["billing"],"summary":"List the charges billed to the current organization","description":"List the charges billed to the current organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_billing_charges_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/invoices":{"get":{"operationId":"get_v1_billing_invoices","tags":["billing"],"summary":"List invoices issued to the current organization","description":"List invoices issued to the current organization","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_billing_invoices_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/invoices/archive":{"get":{"operationId":"get_v1_billing_invoices_archive","tags":["billing"],"summary":"Download every invoice for the current organization as a zip","description":"Download every invoice for the current organization as a zip","responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/billing/invoices/{invoice_id}/download":{"get":{"operationId":"get_v1_billing_invoices_invoice_id_download","tags":["billing"],"summary":"Download an invoice document","description":"Download an invoice document","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response"},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflow_executions":{"get":{"operationId":"get_v1_workflow_executions","tags":["workflow_executions"],"summary":"Query workflow executions","description":"Lists workflow executions with optional status filtering and pagination","parameters":[{"name":"workflow_id","in":"query","required":true,"description":"Filter by workflow ID","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter by execution status","schema":{"type":"string","enum":["running","completed","failed","waiting","cancelled","returned"]}},{"name":"limit","in":"query","required":false,"description":"Max results (default 20, max 100)","schema":{"type":"number"}},{"name":"offset","in":"query","required":false,"description":"Pagination offset","schema":{"type":"number"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workflow_executions_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflow_executions/{execution_id}":{"get":{"operationId":"get_v1_workflow_executions_execution_id","tags":["workflow_executions"],"summary":"Get workflow execution with steps","description":"Returns a single workflow execution with its step-level logs for auditing","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_workflow_executions_execution_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/workflow_executions/{execution_id}/cancel":{"post":{"operationId":"post_v1_workflow_executions_execution_id_cancel","tags":["workflow_executions"],"summary":"Cancel a waiting workflow execution","description":"Cancels an execution paused on an approval step: resolves its pending approval requests and stops it from ever resuming. Only executions in the waiting state can be cancelled.","parameters":[{"name":"execution_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_workflow_executions_execution_id_cancel_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cli/login_requests":{"post":{"operationId":"post_v1_cli_login_requests","tags":["cli"],"summary":"Ask to sign this terminal in as the owner of an email address","description":"Always accepted, whether or not the address has an account — an answer that varied would tell a stranger which addresses are registered. When it does have one, the confirm page `/cli_login/{request_id}` is mailed to it; the link only reaches that page, and the key is minted when the person presses confirm there. Poll `GET /v1/cli/login_requests/{request_id}` with the secret in the `x-lotics-login-secret` header to collect it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_cli_login_requests_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_cli_login_requests_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cli/login_requests/{request_id}":{"get":{"operationId":"get_v1_cli_login_requests_request_id","tags":["cli"],"summary":"Collect the key an approved sign-in request authorises — once","description":"Send the secret the start returned in the `x-lotics-login-secret` header — a header rather than the query string, which every intermediary logs. `approved` mints the key as the member who approved and carries it exactly once: the row moves to `claimed` in the same statement that reads it, so a repeat — or a second caller holding the same secret — gets `claimed` and no credential. An unknown id, a wrong secret and a missing one answer alike.","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_cli_login_requests_request_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cli/login_requests/{request_id}/approve":{"post":{"operationId":"post_v1_cli_login_requests_request_id_approve","tags":["cli"],"summary":"Authorise a waiting terminal to hold a key for one of your organizations","description":"The press that authorises the credential; the terminal's next poll mints it under this membership. Refused unless the browser session's own address is the one the request names, the session belongs to the organization it names, and the request is still waiting.","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_cli_login_requests_request_id_approve_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_cli_login_requests_request_id_approve_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/cli/login_requests/{request_id}/context":{"get":{"operationId":"get_v1_cli_login_requests_request_id_context","tags":["cli"],"summary":"What the confirm page shows about a sign-in request","description":"Answered only to a browser session whose address is the one the request names. Says nothing about the terminal beyond the code it printed and when it asked.","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_cli_login_requests_request_id_context_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/mcp_grants":{"get":{"operationId":"get_v1_mcp_grants","tags":["mcp_grants"],"summary":"List the AI assistants members connected over MCP","description":"List the AI assistants members connected over MCP","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_mcp_grants_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/mcp_grants":{"get":{"operationId":"get_v1_me_mcp_grants","tags":["me"],"summary":"List the AI assistants the authenticated member connected over MCP","description":"List the AI assistants the authenticated member connected over MCP","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_me_mcp_grants_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/me/mcp_grants/{grant_id}":{"delete":{"operationId":"delete_v1_me_mcp_grants_grant_id","tags":["me"],"summary":"Disconnect one of the authenticated member's MCP assistants","description":"Disconnect one of the authenticated member's MCP assistants","parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_me_mcp_grants_grant_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/mcp_grants/{grant_id}":{"delete":{"operationId":"delete_v1_mcp_grants_grant_id","tags":["mcp_grants"],"summary":"Disconnect a member's MCP assistant","description":"Disconnect a member's MCP assistant","parameters":[{"name":"grant_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_mcp_grants_grant_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/realtime/token":{"post":{"operationId":"post_v1_realtime_token","tags":["realtime"],"summary":"Issue a short-lived token for the realtime change channel","description":"Issue a short-lived token for the realtime change channel","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_realtime_token_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/organization/logo":{"delete":{"operationId":"delete_v1_organization_logo","tags":["organization"],"summary":"Remove the active organization's logo.","description":"Remove the active organization's logo.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_organization_logo_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"post_v1_organization_logo","tags":["organization"],"summary":"Upload the active organization's logo.","description":"Upload the active organization's logo.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/post_v1_organization_logo_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/instance":{"get":{"operationId":"get_v1_instance","tags":["instance"],"summary":"Read this instance's kind, release and capabilities.","description":"What this deployment can do. `hosted` is lotics.ai with every integration configured; a private instance (`docs/on_premise.md`) starts with none and gains one per connector its operator registers. Read it to decide what to offer — authorization is enforced server-side regardless.","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_instance_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/absences":{"get":{"operationId":"get_v1_iam_absences","tags":["iam"],"summary":"List who is away in the organization and who stands in for them","description":"List who is away in the organization and who stands in for them","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/get_v1_iam_absences_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/me/absence":{"delete":{"operationId":"delete_v1_iam_me_absence","tags":["iam"],"summary":"End your own absence: your stages wait on you alone again","description":"End your own absence: your stages wait on you alone again","responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_iam_me_absence_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"put":{"operationId":"put_v1_iam_me_absence","tags":["iam"],"summary":"Set your own absence and who stands in for you, replacing the one set before","description":"Set your own absence and who stands in for you, replacing the one set before","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_iam_me_absence_Body"}}}},"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/put_v1_iam_me_absence_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/iam/absences/{member_id}":{"delete":{"operationId":"delete_v1_iam_absences_member_id","tags":["iam"],"summary":"End a member's absence, as an admin of the organization: their stages wait on them alone again","description":"End a member's absence, as an admin of the organization: their stages wait on them alone again","parameters":[{"name":"member_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/delete_v1_iam_absences_member_id_Response"}}}},"400":{"description":"The request was malformed, or failed validation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authenticated, but not permitted to perform this operation.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The resource does not exist, or is not visible to this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded. Retry after the number of seconds in `Retry-After`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"ltk_<48 characters>","description":"Organization-scoped API key, sent as `Authorization: Bearer ltk_…`. Created by an organization admin under Settings → API keys and shown once. A key inherits the permissions of the member who created it."}},"schemas":{"TableRecordFilters":{"anyOf":[{"type":"object","properties":{"node_type":{"type":"string","const":"condition"},"field_key":{"type":"string"},"type":{"type":"string"},"operator":{"type":"string"},"value":{},"unit_option":{"type":"string"}},"required":["node_type","operator"],"additionalProperties":false},{"type":"object","properties":{"node_type":{"type":"string","const":"traversal"},"path":{"type":"array","items":{"type":"string"}},"condition":{"type":"object","properties":{"node_type":{"type":"string","const":"condition"},"field_key":{"type":"string"},"type":{"type":"string"},"operator":{"type":"string"},"value":{},"unit_option":{"type":"string"}},"required":["node_type","operator"],"additionalProperties":false}},"required":["node_type","path","condition"],"additionalProperties":false},{"$ref":"#/components/schemas/TableRecordFiltersGroup"}]},"TableRecordFiltersGroup":{"type":"object","properties":{"node_type":{"type":"string","const":"group"},"logic":{"type":"string","enum":["and","or"]},"children":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"node_type":{"type":"string","const":"condition"},"field_key":{"type":"string"},"type":{"type":"string"},"operator":{"type":"string"},"value":{},"unit_option":{"type":"string"}},"required":["node_type","operator"],"additionalProperties":false},{"type":"object","properties":{"node_type":{"type":"string","const":"traversal"},"path":{"type":"array","items":{"type":"string"}},"condition":{"type":"object","properties":{"node_type":{"type":"string","const":"condition"},"field_key":{"type":"string"},"type":{"type":"string"},"operator":{"type":"string"},"value":{},"unit_option":{"type":"string"}},"required":["node_type","operator"],"additionalProperties":false}},"required":["node_type","path","condition"],"additionalProperties":false},{"$ref":"#/components/schemas/TableRecordFiltersGroup"}]}}},"required":["node_type","logic","children"],"additionalProperties":false},"AppWorkflowOutput":{"oneOf":[{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"text"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"number"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"date"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"datetime"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"email"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"json"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"record_link"},"table_id":{"type":"string"},"multi":{"type":"boolean"}},"required":["type","table_id"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"select"},"options":{"description":"Inline option set. Provide EITHER `options` OR `field`, never both.","minItems":1,"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false}},"field":{"description":"A select field's key (fld_…) whose CURRENT options back this declaration — resolved at type-gen, validated at run time, drift-proof. Provide EITHER `field` OR `options`, never both.","type":"string"},"multi":{"type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"object"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}}},"required":["type","fields"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"array"},"items":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"required":["type","items"],"additionalProperties":false}]},"AppWorkflowInput":{"oneOf":[{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"text"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"number"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"date"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"datetime"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"email"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"record_link"},"table_id":{"type":"string","description":"Records must belong to this table. Validated at execute time + workflow save."},"multi":{"description":"When true, accept an array of record_ids. Defaults to single.","type":"boolean"},"max":{"description":"With `multi`: the most record_ids one call may carry — a call past it is refused before the workflow runs.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["type","table_id"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"description":"Inline option set. Provide EITHER `options` OR `field`, never both.","minItems":1,"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false}},"field":{"description":"A select field's key (fld_…) whose CURRENT options back this declaration — resolved at type-gen, validated at run time, drift-proof. Provide EITHER `field` OR `options`, never both.","type":"string"},"multi":{"type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"date_range"},"include_time":{"description":"When true, the range includes time components (datetime). Defaults to false.","type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"member"},"multi":{"type":"boolean"},"group":{"description":"Member group ID this input draws from. Gates `useMembers({ group })` to declared groups (an app can only list a group it declares here) and constrains the submitted member(s) to that group at execution.","type":"string"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"json"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"file"},"multi":{"type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"object"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}}},"required":["type","fields"],"additionalProperties":false},{"type":"object","properties":{"description":{"description":"Human-readable description of this input — surfaces in agent + CLI tooling","type":"string"},"required":{"description":"Whether the input must be provided. Defaults to true.","type":"boolean"},"type":{"type":"string","const":"array"},"items":{"$ref":"#/components/schemas/AppWorkflowInput"}},"required":["type","items"],"additionalProperties":false}]},"WorkflowStep":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"tool_call"},"tool_name":{"type":"string","minLength":1},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ToolInputValue"}}},"required":["id","description","type","tool_name","input"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"bind"},"expression":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["id","description","type","expression"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"wait"},"duration_in_minutes":{"type":"number","exclusiveMinimum":0}},"required":["id","description","type","duration_in_minutes"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"wait_for_event"},"event_type":{"type":"string","enum":["payment","webhook"]},"event_ref":{"$ref":"#/components/schemas/WorkflowExpression"},"timeout_in_minutes":{"type":"number","exclusiveMinimum":0}},"required":["id","description","type","event_type","event_ref"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"wait_for_approval"},"approvers":{"$ref":"#/components/schemas/WorkflowExpression"},"prompt":{"$ref":"#/components/schemas/WorkflowExpression"},"timeout_in_minutes":{"type":"number","exclusiveMinimum":0}},"required":["id","description","type","approvers","prompt"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"return"},"status":{"type":"string","enum":["success","error"]},"message":{"$ref":"#/components/schemas/WorkflowExpression"},"field_errors":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/WorkflowExpression"}},"data":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["id","description","type","status","message"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"validate"},"checks":{"minItems":1,"type":"array","items":{"type":"object","properties":{"fail_when":{"$ref":"#/components/schemas/WorkflowExpression"},"field_key":{"type":"string","minLength":1},"message":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["fail_when","message"],"additionalProperties":false}}},"required":["id","description","type","checks"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"agent"},"instructions":{"type":"string","minLength":1},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ToolInputValue"}},"tool_names":{"type":"array","items":{"type":"string","minLength":1}},"model_tier":{"type":"string","enum":["haiku","sonnet","opus"]},"output":{"oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"text"}},"required":["mode"],"additionalProperties":false},{"type":"object","properties":{"mode":{"type":"string","const":"object"},"schema":{"oneOf":[{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"text"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"number"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"date"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"datetime"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"email"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"json"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"record_link"},"table_id":{"type":"string"},"multi":{"type":"boolean"}},"required":["type","table_id"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"select"},"options":{"description":"Inline option set. Provide EITHER `options` OR `field`, never both.","minItems":1,"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false}},"field":{"description":"A select field's key (fld_…) whose CURRENT options back this declaration — resolved at type-gen, validated at run time, drift-proof. Provide EITHER `field` OR `options`, never both.","type":"string"},"multi":{"type":"boolean"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"object"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}}},"required":["type","fields"],"additionalProperties":false},{"type":"object","properties":{"description":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string","const":"array"},"items":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"required":["type","items"],"additionalProperties":false}],"$ref":"#/components/schemas/AppWorkflowOutput"}},"required":["mode","schema"],"additionalProperties":false}]}},"required":["id","description","type","instructions","input","tool_names","output"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"app_agent"},"alias":{"type":"string","minLength":1},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ToolInputValue"}},"wait":{"type":"boolean","const":false}},"required":["id","description","type","alias","input"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"break"}},"required":["id","description","type"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"continue"}},"required":["id","description","type"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"let_declare"},"name":{"type":"string","minLength":1},"initial":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["id","description","type","name","initial"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"assign"},"name":{"type":"string","minLength":1},"value":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["id","description","type","name","value"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"if"},"condition":{"$ref":"#/components/schemas/WorkflowExpression"},"then":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"else":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","condition","then"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"switch"},"expression":{"$ref":"#/components/schemas/WorkflowExpression"},"cases":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"default":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","expression","cases"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"foreach"},"items":{"$ref":"#/components/schemas/WorkflowExpression"},"bind_name":{"default":"item","type":"string","minLength":1},"steps":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","items","bind_name","steps"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"try"},"body":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"catch":{"type":"object","properties":{"error_binding":{"type":"string","minLength":1},"body":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["error_binding","body"],"additionalProperties":false}},"required":["id","description","type","body","catch"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"while"},"condition":{"$ref":"#/components/schemas/WorkflowExpression"},"body":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","condition","body"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"do_while"},"condition":{"$ref":"#/components/schemas/WorkflowExpression"},"body":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","condition","body"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","minLength":1},"description":{"type":"string","minLength":1},"type":{"type":"string","const":"c_for"},"init":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"test":{"anyOf":[{"$ref":"#/components/schemas/WorkflowExpression"},{"type":"null"}]},"update":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}},"body":{"minItems":1,"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"}}},"required":["id","description","type","init","test","update","body"],"additionalProperties":false}]},"WorkflowExpression":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"lit"},"value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"read"},"source":{"oneOf":[{"type":"object","properties":{"from":{"type":"string","const":"trigger"}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"trigger_record"}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"trigger_record_prev"}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"trigger_changes"}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"foreach_item"},"name":{"type":"string","minLength":1}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"foreach_index"}},"required":["from"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"step_output"},"step_id":{"type":"string","minLength":1}},"required":["from","step_id"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"runtime"},"key":{"type":"string","enum":["timezone","workflow_id","execution_id","workspace_id","organization_id","now","change_origin","triggered_by_member_id"]}},"required":["from","key"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"lambda_param"},"name":{"type":"string","minLength":1}},"required":["from","name"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"lexical"},"name":{"type":"string","minLength":1}},"required":["from","name"],"additionalProperties":false},{"type":"object","properties":{"from":{"type":"string","const":"value"},"expr":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["from","expr"],"additionalProperties":false}]},"path":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"at":{"type":"string","const":"key"},"key":{"type":"string","minLength":1}},"required":["at","key"],"additionalProperties":false},{"type":"object","properties":{"at":{"type":"string","const":"index"},"index":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"$ref":"#/components/schemas/WorkflowExpression"}]}},"required":["at","index"],"additionalProperties":false},{"type":"object","properties":{"at":{"type":"string","const":"field"},"key":{"type":"string","minLength":1}},"required":["at","key"],"additionalProperties":false},{"type":"object","properties":{"at":{"type":"string","const":"linked"},"via":{"type":"string","minLength":1},"index":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"string","const":"each"},{"$ref":"#/components/schemas/WorkflowExpression"}]}},"required":["at","via","index"],"additionalProperties":false}]}},"coerce":{"type":"string","enum":["raw","display"]}},"required":["kind","source","path"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"call"},"fn":{"type":"string","minLength":1},"args":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowExpression"}}},"required":["kind","fn","args"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"binary"},"op":{"type":"string","enum":["eq","neq","seq","sneq","gt","lt","gte","lte","and","or","add","sub","mul","div","mod"]},"left":{"$ref":"#/components/schemas/WorkflowExpression"},"right":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["kind","op","left","right"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"unary"},"op":{"type":"string","enum":["not","neg"]},"arg":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["kind","op","arg"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"ternary"},"cond":{"$ref":"#/components/schemas/WorkflowExpression"},"then":{"$ref":"#/components/schemas/WorkflowExpression"},"else":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["kind","cond","then","else"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"template"},"parts":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"t":{"type":"string","const":"text"},"s":{"type":"string"}},"required":["t","s"],"additionalProperties":false},{"type":"object","properties":{"t":{"type":"string","const":"ex"},"e":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["t","e"],"additionalProperties":false}]}}},"required":["kind","parts"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"lambda"},"params":{"type":"array","items":{"type":"string","minLength":1}},"body":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["kind","params","body"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"array_literal"},"elements":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowExpression"}}},"required":["kind","elements"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"object_literal"},"entries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1},"value":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["key","value"],"additionalProperties":false}}},"required":["kind","entries"],"additionalProperties":false}]},"ToolInputValue":{"anyOf":[{"type":"object","properties":{"$expr":{"$ref":"#/components/schemas/WorkflowExpression"}},"required":["$expr"],"additionalProperties":false},{"type":"array","items":{"$ref":"#/components/schemas/ToolInputValue"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/ToolInputValue"}}]},"post_v1_iam_member_groups_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the member group"},"name":{"type":"string","description":"Display name of the group"},"description":{"description":"Optional description of the group's purpose","type":"string"},"member_ids":{"type":"array","items":{"type":"string"},"description":"Array of member IDs in this group"},"invitation_ids":{"type":"array","items":{"type":"string"},"description":"Array of pending invitation IDs pre-granted membership; migrated to member_ids on accept"},"organization_id":{"type":"string","description":"ID of the organization this group belongs to"},"created_at":{"type":"string","description":"Timestamp when group was created"},"created_by":{"type":"string","description":"Member ID of the user who created this group"}},"required":["id","name","member_ids","invitation_ids","organization_id","created_at","created_by"],"additionalProperties":false},"get_v1_iam_my_permissions_Response":{"type":"object","properties":{"is_org_admin":{"type":"boolean"},"resources":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["is_org_admin","resources"],"additionalProperties":false},"get_v1_iam_member_groups_Response":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the member group"},"name":{"type":"string","description":"Display name of the group"},"description":{"description":"Optional description of the group's purpose","type":"string"},"member_ids":{"type":"array","items":{"type":"string"},"description":"Array of member IDs in this group"},"organization_id":{"type":"string","description":"ID of the organization this group belongs to"},"created_at":{"type":"string","description":"Timestamp when group was created"},"created_by":{"type":"string","description":"Member ID of the user who created this group"},"invitation_ids":{"description":"Pending invitation IDs — ADMINS ONLY; omitted entirely for a non-admin caller","type":"array","items":{"type":"string"}}},"required":["id","name","member_ids","organization_id","created_at","created_by"],"additionalProperties":false}}},"required":["groups"],"additionalProperties":false},"get_v1_iam_invitations_Response":{"type":"object","properties":{"invitations":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_iam_invitations_invitation_id_Response"}}},"required":["invitations"],"additionalProperties":false},"get_v1_user_invitations_Response":{"type":"object","properties":{"invitations":{"type":"array","items":{"type":"object","properties":{"invitation_id":{"type":"string","description":"Unique identifier for the pending invitation"},"organization_id":{"type":"string","description":"Organization the invitee will join on accept"},"email":{"type":"string","description":"Email the invitation was sent to"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Admin-supplied display name (carried onto member.name on accept; invitee can override at accept time)"},"role":{"type":"string","enum":["owner","admin","member"],"description":"Role the invitee will receive on accept"},"expires_at":{"type":"string","description":"ISO timestamp when the invitation expires"},"organization_name":{"type":"string"},"organization_logo_url":{"description":"Serving URL for the organization's logo, absent when it has none.","type":"string"}},"required":["invitation_id","organization_id","email","name","role","expires_at","organization_name"],"additionalProperties":false}}},"required":["invitations"],"additionalProperties":false},"get_v1_iam_principals_Response":{"type":"object","properties":{"members":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_members_member_id_Response"}},"invitations":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_iam_invitations_invitation_id_Response"}},"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the member group"},"name":{"type":"string","description":"Display name of the group"},"description":{"description":"Optional description of the group's purpose","type":"string"},"member_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of accepted members in the group"},"invitation_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Number of pending invitations pre-granted membership"}},"required":["id","name","member_count","invitation_count"],"additionalProperties":false}}},"required":["members","invitations","groups"],"additionalProperties":false},"get_v1_iam_me_role_bindings_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_iam_resources_resource_type_resource_id_role_bindings_Response"}},"get_v1_iam_member_groups_group_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the member group"},"name":{"type":"string","description":"Display name of the group"},"description":{"description":"Optional description of the group's purpose","type":"string"},"member_ids":{"type":"array","items":{"type":"string"},"description":"Array of member IDs in this group"},"invitation_ids":{"type":"array","items":{"type":"string"},"description":"Array of pending invitation IDs pre-granted membership; migrated to member_ids on accept"},"organization_id":{"type":"string","description":"ID of the organization this group belongs to"},"created_at":{"type":"string","description":"Timestamp when group was created"},"created_by":{"type":"string","description":"Member ID of the user who created this group"}},"required":["id","name","member_ids","invitation_ids","organization_id","created_at","created_by"],"additionalProperties":false},"get_v1_iam_content_items_resource_type_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"ID of the knowledge doc or template"},"name":{"type":"string","description":"Its name"},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Member who owns it; null when nobody does"},"created_at":{"type":"string","description":"When it was created"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"When a knowledge doc was last changed; null for a template"},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"When a knowledge doc was hidden; null when it is in use, and for a template"},"template_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"A template's type (html, email, word, excel, pdf-form); null for a knowledge doc"},"can_open":{"type":"boolean","description":"Whether the caller may open it; false means it is not shared with them"},"principals":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: an individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: a member group"},"id":{"type":"string","description":"Group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: everyone in the organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false}]},"description":"Members, groups and the organization it has been shared with, besides its owner"}},"required":["id","name","owner_member_id","created_at","updated_at","hidden_at","template_type","can_open","principals"],"additionalProperties":false}},"get_v1_iam_resource_access_resource_type_Response":{"type":"array","items":{"type":"object","properties":{"resource_id":{"type":"string","description":"ID of the resource these principals can reach"},"principals":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: an individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: a member group"},"id":{"type":"string","description":"Group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: everyone in the organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false}]},"description":"Members, groups and the organization that have been granted access"}},"required":["resource_id","principals"],"additionalProperties":false}},"delete_v1_iam_role_bindings_binding_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"put_v1_iam_member_groups_group_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the member group"},"name":{"type":"string","description":"Display name of the group"},"description":{"description":"Optional description of the group's purpose","type":"string"},"member_ids":{"type":"array","items":{"type":"string"},"description":"Array of member IDs in this group"},"invitation_ids":{"type":"array","items":{"type":"string"},"description":"Array of pending invitation IDs pre-granted membership; migrated to member_ids on accept"},"organization_id":{"type":"string","description":"ID of the organization this group belongs to"},"created_at":{"type":"string","description":"Timestamp when group was created"},"created_by":{"type":"string","description":"Member ID of the user who created this group"}},"required":["id","name","member_ids","invitation_ids","organization_id","created_at","created_by"],"additionalProperties":false},"patch_v1_iam_invitations_invitation_id_Response":{"type":"object","properties":{"invitation_id":{"type":"string","description":"Unique identifier for the pending invitation"},"organization_id":{"type":"string","description":"Organization the invitee will join on accept"},"email":{"type":"string","description":"Email the invitation was sent to"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Admin-supplied display name (carried onto member.name on accept; invitee can override at accept time)"},"role":{"type":"string","enum":["owner","admin","member"],"description":"Role the invitee will receive on accept"},"expires_at":{"type":"string","description":"ISO timestamp when the invitation expires"}},"required":["invitation_id","organization_id","email","name","role","expires_at"],"additionalProperties":false},"patch_v1_iam_role_bindings_binding_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the role binding"},"principal":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}],"description":"Who this role binding applies to (member, group, or organization)"},"resource_type":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Type of resource being accessed"},"resource_id":{"type":"string","description":"ID of the specific resource"},"role":{"type":"string","description":"Role name (e.g., 'viewer', 'editor', 'manager', 'user')"}},"required":["id","principal","resource_type","resource_id","role"],"additionalProperties":false},"post_v1_iam_content_items_resource_type_make_private_Response":{"type":"object","properties":{"removed":{"type":"number"}},"required":["removed"],"additionalProperties":false},"post_v1_iam_invitations_invitation_id_revoke_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"post_v1_iam_content_items_resource_type_share_with_organization_Response":{"type":"object","properties":{"shared":{"type":"number"}},"required":["shared"],"additionalProperties":false},"post_v1_iam_resources_resource_type_resource_id_role_bindings_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the role binding"},"principal":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}],"description":"Who this role binding applies to (member, group, or organization)"},"resource_type":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Type of resource being accessed"},"resource_id":{"type":"string","description":"ID of the specific resource"},"role":{"type":"string","description":"Role name (e.g., 'viewer', 'editor', 'manager', 'user')"}},"required":["id","principal","resource_type","resource_id","role"],"additionalProperties":false},"get_v1_iam_resources_resource_type_resource_id_my_actions_Response":{"type":"object","properties":{"actions":{"type":"array","items":{"type":"string"}},"is_org_admin":{"type":"boolean"}},"required":["actions","is_org_admin"],"additionalProperties":false},"get_v1_iam_resources_resource_type_resource_id_role_bindings_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the role binding"},"principal":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}],"description":"Who this role binding applies to (member, group, or organization)"},"resource_type":{"type":"string","enum":["table","table_view","app","automation","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Type of resource being accessed"},"resource_id":{"type":"string","description":"ID of the specific resource"},"role":{"type":"string","description":"Role name (e.g., 'viewer', 'editor', 'manager', 'user')"},"principal_name":{"description":"What this principal is called, for one the picker does not carry — an API key. Absent for every principal a caller can already name, and on an older server.","type":"string"}},"required":["id","principal","resource_type","resource_id","role"],"additionalProperties":false}},"post_v1_iam_resources_resource_type_resource_id_transfer_ownership_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"delete_v1_members_member_id_Response":{"type":"object","properties":{"member_id":{"type":"string"},"sign_in_identifier":{"type":"string"},"credential_revoked":{"type":"boolean"},"automations_archived":{"type":"number"},"resources_reassigned":{"type":"number"},"table_checks_reassigned":{"type":"number"},"connected_accounts_archived":{"type":"number"}},"required":["member_id","sign_in_identifier","credential_revoked","automations_archived","resources_reassigned","table_checks_reassigned","connected_accounts_archived"],"additionalProperties":false},"patch_v1_members_member_id_Response":{"type":"object","properties":{"member_id":{"type":"string","description":"Unique identifier for the member"},"organization_id":{"type":"string","description":"Organization ID the member belongs to"},"name":{"type":"string","description":"Display name of the member"},"email_address":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"What the member types to sign in: an email address for a self-managed member, an administrator-issued name (e.g. giamdoc.sunrise) for an admin-managed one. The latter is NOT an address and cannot receive mail — the field name predates the split. Null for a service identity, which holds no credential and signs in nowhere."},"role":{"type":"string","enum":["owner","admin","member"],"description":"Organization role"},"image":{"description":"URL to the member's profile picture","anyOf":[{"type":"string"},{"type":"null"}]},"account_type":{"type":"string","enum":["self_managed","admin_managed","service"],"description":"How the account is credentialed. admin_managed means an admin chose the sign-in name and set the password; the account has NO email address at all, so nothing can be mailed to it until the member claims one they control. service means no credential exists at all — the membership is an integration's identity, reached only by an API key bound to it."},"archived":{"description":"True when this person has been removed from the organization. The membership survives removal so records naming them keep resolving; it grants nothing. Optional because an older server omits it — absent means active.","type":"boolean"},"joined_at":{"description":"ISO timestamp of when this membership began. Optional because an older server omits it — absent means not told, never 'joined at the epoch'.","type":"string"}},"required":["member_id","organization_id","name","email_address","role","account_type"],"additionalProperties":false},"get_v1_invitations_invitation_id_organization_Response":{"type":"object","properties":{"organization_name":{"type":"string"},"organization_logo_url":{"description":"Serving URL for the organization's logo, absent when it has none.","type":"string"}},"required":["organization_name"],"additionalProperties":false},"post_v1_members_member_id_restore_Response":{"type":"object","properties":{"member_id":{"type":"string"},"name":{"type":"string"},"sign_in_identifier":{"type":"string"},"role":{"type":"string"},"account_type":{"type":"string"},"credential_needed":{"type":"boolean"}},"required":["member_id","name","sign_in_identifier","role","account_type","credential_needed"],"additionalProperties":false},"get_v1_system_agents_chat_sessions_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the system agent session"},"workspace_id":{"type":"string","description":"ID of the workspace this session belongs to"},"member_id":{"type":"string","description":"ID of the member who owns this session"},"title":{"type":"string","description":"Title/name for the chat session"},"summarized_text":{"type":"string","description":"Summary of the conversation history"},"last_summarized_at_message_index":{"type":"number","description":"Index of the last message included in the summary"},"created_at":{"type":"string","description":"Timestamp when session was created"}},"required":["id","workspace_id","member_id","title","summarized_text","last_summarized_at_message_index","created_at"],"additionalProperties":false}},"delete_v1_system_agents_chat_sessions_chat_session_id_Response":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}},"required":["id","deleted"],"additionalProperties":false},"get_v1_system_agents_chat_sessions_chat_session_id_Response":{"anyOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the system agent session"},"workspace_id":{"type":"string","description":"ID of the workspace this session belongs to"},"member_id":{"type":"string","description":"ID of the member who owns this session"},"title":{"type":"string","description":"Title/name for the chat session"},"summarized_text":{"type":"string","description":"Summary of the conversation history"},"last_summarized_at_message_index":{"type":"number","description":"Index of the last message included in the summary"},"created_at":{"type":"string","description":"Timestamp when session was created"}},"required":["id","workspace_id","member_id","title","summarized_text","last_summarized_at_message_index","created_at"],"additionalProperties":false},{"type":"null"}]},"get_v1_system_agents_chat_sessions_chat_session_id_usage_Response":{"type":"object","properties":{"turns":{"type":"array","items":{"type":"object","properties":{"message_id":{"type":"string"},"context_tokens":{"type":"number"}},"required":["message_id","context_tokens"],"additionalProperties":false}},"credits_used":{"type":"number"}},"required":["turns","credits_used"],"additionalProperties":false},"get_v1_system_agents_chat_session_id_messages_Response":{"type":"array","items":{}},"post_v1_system_agents_chat_session_id_messages_save_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"post_v1_system_agents_chat_session_id_messages_message_id_archive_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_auth_facebook_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_google_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_google_drive_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_instagram_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_linkedin_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_outlook_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_threads_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_x_Response":{"type":"object","properties":{"redirect_url":{"type":"string"}},"required":["redirect_url"],"additionalProperties":false},"get_auth_zalo_Response":{"type":"object","properties":{"redirect_url":{"type":"string","format":"uri"}},"required":["redirect_url"],"additionalProperties":false},"post_v1_connected_accounts_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"wininvoice","description":"WinInvoice provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"}},"required":["client_id"],"additionalProperties":false,"description":"WinInvoice API credentials (secret stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"outlook","description":"Outlook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Outlook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Outlook"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"gmail","description":"Gmail provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Gmail provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Gmail"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"google_drive","description":"Google Drive provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Google provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Google"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"facebook","description":"Facebook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Facebook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"Facebook user ID"},"name":{"type":"string","description":"User's display name on Facebook"},"email":{"description":"User's email address (if available)","type":"string"},"picture":{"description":"User's profile picture information","type":"object","properties":{"data":{"type":"object","properties":{"url":{"type":"string","description":"URL to the profile picture"},"width":{"type":"number","description":"Width of the profile picture in pixels"},"height":{"type":"number","description":"Height of the profile picture in pixels"}},"required":["url","width","height"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["id","name"],"additionalProperties":false,"description":"User profile data from Facebook"},"resources":{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Facebook Page ID"},"name":{"type":"string","description":"Name of the Facebook Page"},"category":{"type":"string","description":"Primary category of the Facebook Page"},"category_list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Category ID"},"name":{"type":"string","description":"Category name"}},"required":["id","name"],"additionalProperties":false},"description":"List of categories assigned to the Facebook Page"},"tasks":{"type":"array","items":{"type":"string"},"description":"List of tasks/permissions available for this page"}},"required":["id","name","category","category_list","tasks"],"additionalProperties":false},"description":"Facebook Pages managed by this account"}},"required":["pages"],"additionalProperties":false,"description":"Resources (pages) available through this connection"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","resources","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"zalo","description":"Zalo provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Zalo provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"oa_id":{"type":"number","description":"Zalo Official Account ID"},"name":{"type":"string","description":"Name of the Zalo Official Account"},"description":{"type":"string","description":"Description of the Zalo Official Account"},"oa_alias":{"description":"Alias/username for the Official Account","anyOf":[{"type":"string"},{"type":"null"}]},"is_verified":{"type":"boolean","description":"Whether the Official Account is verified by Zalo"},"oa_type":{"type":"number","description":"Type code for the Official Account"},"cate_name":{"type":"string","description":"Category name of the Official Account"},"num_follower":{"type":"number","description":"Number of followers"},"avatar":{"type":"string","description":"URL to the account avatar image"},"cover":{"type":"string","description":"URL to the account cover image"},"package_name":{"description":"Name of the subscription package","type":"string"},"package_valid_through_date":{"description":"Expiration date of the subscription package","type":"string"},"package_auto_renew_date":{"description":"Auto-renewal date for the subscription","type":"string"},"linked_zca":{"description":"Linked Zalo Cloud Account identifier","type":"string"}},"required":["oa_id","name","description","is_verified","oa_type","cate_name","num_follower","avatar","cover"],"additionalProperties":false,"description":"Official Account profile data from Zalo"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"threads","description":"Threads provider identifier"},"provider_user_id":{"type":"string","description":"Threads user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Threads profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"instagram","description":"Instagram provider identifier"},"provider_user_id":{"type":"string","description":"Instagram user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Instagram profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"x","description":"X (Twitter) provider identifier"},"provider_user_id":{"type":"string","description":"X user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"X user id"},"username":{"type":"string","description":"X handle, without the @"},"name":{"type":"string","description":"X display name"}},"required":["id","username","name"],"additionalProperties":false,"description":"X profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"linkedin","description":"LinkedIn provider identifier"},"provider_user_id":{"type":"string","description":"LinkedIn member id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"sub":{"type":"string","description":"LinkedIn member id — the person URN's id"},"name":{"type":"string","description":"LinkedIn display name"}},"required":["sub","name"],"additionalProperties":false,"description":"LinkedIn profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"payos","description":"PayOS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"}},"required":["client_id"],"additionalProperties":false,"description":"PayOS API credentials (secrets stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"misa","description":"MISA AMIS accounting provider identifier"},"credentials":{"type":"object","properties":{"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["org_company_code","expires_at"],"additionalProperties":false,"description":"MISA AMIS credentials (secrets stripped at API boundary)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"lark","description":"Lark Base (Bitable) provider identifier"},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["app_id","region","expires_at"],"additionalProperties":false,"description":"Lark credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"fedex","description":"FedEx shipping provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","account_number","environment","expires_at"],"additionalProperties":false,"description":"FedEx credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"kiotviet","description":"KiotViet retail POS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","retailer","edition","expires_at"],"additionalProperties":false,"description":"KiotViet credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"telegram","description":"Telegram bot provider identifier"},"credentials":{"type":"object","properties":{"bot_id":{"type":"number","description":"The bot's Telegram user id, from getMe"},"bot_username":{"type":"string","description":"The bot's @username, from getMe"}},"required":["bot_id","bot_username"],"additionalProperties":false,"description":"Telegram bot, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"bkav","description":"Bkav eHoadon e-invoice provider identifier"},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","environment","tax_code"],"additionalProperties":false,"description":"Bkav credentials, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false}]},"get_v1_connected_accounts_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Response"}},"delete_v1_connected_accounts_connected_account_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_connected_accounts_connected_account_id_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"wininvoice","description":"WinInvoice provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"}},"required":["client_id"],"additionalProperties":false,"description":"WinInvoice API credentials (secret stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"outlook","description":"Outlook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Outlook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Outlook"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"gmail","description":"Gmail provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Gmail provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Gmail"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"google_drive","description":"Google Drive provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Google provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Google"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"facebook","description":"Facebook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Facebook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"Facebook user ID"},"name":{"type":"string","description":"User's display name on Facebook"},"email":{"description":"User's email address (if available)","type":"string"},"picture":{"description":"User's profile picture information","type":"object","properties":{"data":{"type":"object","properties":{"url":{"type":"string","description":"URL to the profile picture"},"width":{"type":"number","description":"Width of the profile picture in pixels"},"height":{"type":"number","description":"Height of the profile picture in pixels"}},"required":["url","width","height"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["id","name"],"additionalProperties":false,"description":"User profile data from Facebook"},"resources":{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Facebook Page ID"},"name":{"type":"string","description":"Name of the Facebook Page"},"category":{"type":"string","description":"Primary category of the Facebook Page"},"category_list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Category ID"},"name":{"type":"string","description":"Category name"}},"required":["id","name"],"additionalProperties":false},"description":"List of categories assigned to the Facebook Page"},"tasks":{"type":"array","items":{"type":"string"},"description":"List of tasks/permissions available for this page"}},"required":["id","name","category","category_list","tasks"],"additionalProperties":false},"description":"Facebook Pages managed by this account"}},"required":["pages"],"additionalProperties":false,"description":"Resources (pages) available through this connection"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","resources","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"zalo","description":"Zalo provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Zalo provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"oa_id":{"type":"number","description":"Zalo Official Account ID"},"name":{"type":"string","description":"Name of the Zalo Official Account"},"description":{"type":"string","description":"Description of the Zalo Official Account"},"oa_alias":{"description":"Alias/username for the Official Account","anyOf":[{"type":"string"},{"type":"null"}]},"is_verified":{"type":"boolean","description":"Whether the Official Account is verified by Zalo"},"oa_type":{"type":"number","description":"Type code for the Official Account"},"cate_name":{"type":"string","description":"Category name of the Official Account"},"num_follower":{"type":"number","description":"Number of followers"},"avatar":{"type":"string","description":"URL to the account avatar image"},"cover":{"type":"string","description":"URL to the account cover image"},"package_name":{"description":"Name of the subscription package","type":"string"},"package_valid_through_date":{"description":"Expiration date of the subscription package","type":"string"},"package_auto_renew_date":{"description":"Auto-renewal date for the subscription","type":"string"},"linked_zca":{"description":"Linked Zalo Cloud Account identifier","type":"string"}},"required":["oa_id","name","description","is_verified","oa_type","cate_name","num_follower","avatar","cover"],"additionalProperties":false,"description":"Official Account profile data from Zalo"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"threads","description":"Threads provider identifier"},"provider_user_id":{"type":"string","description":"Threads user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Threads profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"instagram","description":"Instagram provider identifier"},"provider_user_id":{"type":"string","description":"Instagram user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Instagram profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"x","description":"X (Twitter) provider identifier"},"provider_user_id":{"type":"string","description":"X user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"X user id"},"username":{"type":"string","description":"X handle, without the @"},"name":{"type":"string","description":"X display name"}},"required":["id","username","name"],"additionalProperties":false,"description":"X profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"linkedin","description":"LinkedIn provider identifier"},"provider_user_id":{"type":"string","description":"LinkedIn member id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"sub":{"type":"string","description":"LinkedIn member id — the person URN's id"},"name":{"type":"string","description":"LinkedIn display name"}},"required":["sub","name"],"additionalProperties":false,"description":"LinkedIn profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"payos","description":"PayOS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"}},"required":["client_id"],"additionalProperties":false,"description":"PayOS API credentials (secrets stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"misa","description":"MISA AMIS accounting provider identifier"},"credentials":{"type":"object","properties":{"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["org_company_code","expires_at"],"additionalProperties":false,"description":"MISA AMIS credentials (secrets stripped at API boundary)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"lark","description":"Lark Base (Bitable) provider identifier"},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["app_id","region","expires_at"],"additionalProperties":false,"description":"Lark credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"fedex","description":"FedEx shipping provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","account_number","environment","expires_at"],"additionalProperties":false,"description":"FedEx credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"kiotviet","description":"KiotViet retail POS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","retailer","edition","expires_at"],"additionalProperties":false,"description":"KiotViet credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"telegram","description":"Telegram bot provider identifier"},"credentials":{"type":"object","properties":{"bot_id":{"type":"number","description":"The bot's Telegram user id, from getMe"},"bot_username":{"type":"string","description":"The bot's @username, from getMe"}},"required":["bot_id","bot_username"],"additionalProperties":false,"description":"Telegram bot, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"bkav","description":"Bkav eHoadon e-invoice provider identifier"},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","environment","tax_code"],"additionalProperties":false,"description":"Bkav credentials, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false}]},"patch_v1_connected_accounts_connected_account_id_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"wininvoice","description":"WinInvoice provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"}},"required":["client_id"],"additionalProperties":false,"description":"WinInvoice API credentials (secret stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"outlook","description":"Outlook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Outlook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Outlook"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"gmail","description":"Gmail provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Gmail provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Gmail"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"google_drive","description":"Google Drive provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Google provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Google"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"facebook","description":"Facebook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Facebook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"Facebook user ID"},"name":{"type":"string","description":"User's display name on Facebook"},"email":{"description":"User's email address (if available)","type":"string"},"picture":{"description":"User's profile picture information","type":"object","properties":{"data":{"type":"object","properties":{"url":{"type":"string","description":"URL to the profile picture"},"width":{"type":"number","description":"Width of the profile picture in pixels"},"height":{"type":"number","description":"Height of the profile picture in pixels"}},"required":["url","width","height"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["id","name"],"additionalProperties":false,"description":"User profile data from Facebook"},"resources":{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Facebook Page ID"},"name":{"type":"string","description":"Name of the Facebook Page"},"category":{"type":"string","description":"Primary category of the Facebook Page"},"category_list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Category ID"},"name":{"type":"string","description":"Category name"}},"required":["id","name"],"additionalProperties":false},"description":"List of categories assigned to the Facebook Page"},"tasks":{"type":"array","items":{"type":"string"},"description":"List of tasks/permissions available for this page"}},"required":["id","name","category","category_list","tasks"],"additionalProperties":false},"description":"Facebook Pages managed by this account"}},"required":["pages"],"additionalProperties":false,"description":"Resources (pages) available through this connection"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","resources","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"zalo","description":"Zalo provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Zalo provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"oa_id":{"type":"number","description":"Zalo Official Account ID"},"name":{"type":"string","description":"Name of the Zalo Official Account"},"description":{"type":"string","description":"Description of the Zalo Official Account"},"oa_alias":{"description":"Alias/username for the Official Account","anyOf":[{"type":"string"},{"type":"null"}]},"is_verified":{"type":"boolean","description":"Whether the Official Account is verified by Zalo"},"oa_type":{"type":"number","description":"Type code for the Official Account"},"cate_name":{"type":"string","description":"Category name of the Official Account"},"num_follower":{"type":"number","description":"Number of followers"},"avatar":{"type":"string","description":"URL to the account avatar image"},"cover":{"type":"string","description":"URL to the account cover image"},"package_name":{"description":"Name of the subscription package","type":"string"},"package_valid_through_date":{"description":"Expiration date of the subscription package","type":"string"},"package_auto_renew_date":{"description":"Auto-renewal date for the subscription","type":"string"},"linked_zca":{"description":"Linked Zalo Cloud Account identifier","type":"string"}},"required":["oa_id","name","description","is_verified","oa_type","cate_name","num_follower","avatar","cover"],"additionalProperties":false,"description":"Official Account profile data from Zalo"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"threads","description":"Threads provider identifier"},"provider_user_id":{"type":"string","description":"Threads user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Threads profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"instagram","description":"Instagram provider identifier"},"provider_user_id":{"type":"string","description":"Instagram user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Instagram profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"x","description":"X (Twitter) provider identifier"},"provider_user_id":{"type":"string","description":"X user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"X user id"},"username":{"type":"string","description":"X handle, without the @"},"name":{"type":"string","description":"X display name"}},"required":["id","username","name"],"additionalProperties":false,"description":"X profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"linkedin","description":"LinkedIn provider identifier"},"provider_user_id":{"type":"string","description":"LinkedIn member id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"sub":{"type":"string","description":"LinkedIn member id — the person URN's id"},"name":{"type":"string","description":"LinkedIn display name"}},"required":["sub","name"],"additionalProperties":false,"description":"LinkedIn profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"payos","description":"PayOS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"}},"required":["client_id"],"additionalProperties":false,"description":"PayOS API credentials (secrets stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"misa","description":"MISA AMIS accounting provider identifier"},"credentials":{"type":"object","properties":{"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["org_company_code","expires_at"],"additionalProperties":false,"description":"MISA AMIS credentials (secrets stripped at API boundary)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"lark","description":"Lark Base (Bitable) provider identifier"},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["app_id","region","expires_at"],"additionalProperties":false,"description":"Lark credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"fedex","description":"FedEx shipping provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","account_number","environment","expires_at"],"additionalProperties":false,"description":"FedEx credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"kiotviet","description":"KiotViet retail POS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","retailer","edition","expires_at"],"additionalProperties":false,"description":"KiotViet credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"telegram","description":"Telegram bot provider identifier"},"credentials":{"type":"object","properties":{"bot_id":{"type":"number","description":"The bot's Telegram user id, from getMe"},"bot_username":{"type":"string","description":"The bot's @username, from getMe"}},"required":["bot_id","bot_username"],"additionalProperties":false,"description":"Telegram bot, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"bkav","description":"Bkav eHoadon e-invoice provider identifier"},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","environment","tax_code"],"additionalProperties":false,"description":"Bkav credentials, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false}]},"patch_v1_connected_accounts_connected_account_id_connector_config_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"wininvoice","description":"WinInvoice provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"}},"required":["client_id"],"additionalProperties":false,"description":"WinInvoice API credentials (secret stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"outlook","description":"Outlook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Outlook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Outlook"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"gmail","description":"Gmail provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Gmail provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Gmail"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"google_drive","description":"Google Drive provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Google provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"description":"User profile data from Google"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"facebook","description":"Facebook provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Facebook provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"Facebook user ID"},"name":{"type":"string","description":"User's display name on Facebook"},"email":{"description":"User's email address (if available)","type":"string"},"picture":{"description":"User's profile picture information","type":"object","properties":{"data":{"type":"object","properties":{"url":{"type":"string","description":"URL to the profile picture"},"width":{"type":"number","description":"Width of the profile picture in pixels"},"height":{"type":"number","description":"Height of the profile picture in pixels"}},"required":["url","width","height"],"additionalProperties":false}},"required":["data"],"additionalProperties":false}},"required":["id","name"],"additionalProperties":false,"description":"User profile data from Facebook"},"resources":{"type":"object","properties":{"pages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Facebook Page ID"},"name":{"type":"string","description":"Name of the Facebook Page"},"category":{"type":"string","description":"Primary category of the Facebook Page"},"category_list":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Category ID"},"name":{"type":"string","description":"Category name"}},"required":["id","name"],"additionalProperties":false},"description":"List of categories assigned to the Facebook Page"},"tasks":{"type":"array","items":{"type":"string"},"description":"List of tasks/permissions available for this page"}},"required":["id","name","category","category_list","tasks"],"additionalProperties":false},"description":"Facebook Pages managed by this account"}},"required":["pages"],"additionalProperties":false,"description":"Resources (pages) available through this connection"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","resources","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"zalo","description":"Zalo provider identifier"},"provider_user_id":{"type":"string","description":"User ID from the Zalo provider"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"oa_id":{"type":"number","description":"Zalo Official Account ID"},"name":{"type":"string","description":"Name of the Zalo Official Account"},"description":{"type":"string","description":"Description of the Zalo Official Account"},"oa_alias":{"description":"Alias/username for the Official Account","anyOf":[{"type":"string"},{"type":"null"}]},"is_verified":{"type":"boolean","description":"Whether the Official Account is verified by Zalo"},"oa_type":{"type":"number","description":"Type code for the Official Account"},"cate_name":{"type":"string","description":"Category name of the Official Account"},"num_follower":{"type":"number","description":"Number of followers"},"avatar":{"type":"string","description":"URL to the account avatar image"},"cover":{"type":"string","description":"URL to the account cover image"},"package_name":{"description":"Name of the subscription package","type":"string"},"package_valid_through_date":{"description":"Expiration date of the subscription package","type":"string"},"package_auto_renew_date":{"description":"Auto-renewal date for the subscription","type":"string"},"linked_zca":{"description":"Linked Zalo Cloud Account identifier","type":"string"}},"required":["oa_id","name","description","is_verified","oa_type","cate_name","num_follower","avatar","cover"],"additionalProperties":false,"description":"Official Account profile data from Zalo"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"threads","description":"Threads provider identifier"},"provider_user_id":{"type":"string","description":"Threads user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Threads profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"instagram","description":"Instagram provider identifier"},"provider_user_id":{"type":"string","description":"Instagram user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"The account's user id on the platform"},"username":{"type":"string","description":"Username, without the @"}},"required":["id","username"],"additionalProperties":false,"description":"Instagram profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"x","description":"X (Twitter) provider identifier"},"provider_user_id":{"type":"string","description":"X user id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"id":{"type":"string","description":"X user id"},"username":{"type":"string","description":"X handle, without the @"},"name":{"type":"string","description":"X display name"}},"required":["id","username","name"],"additionalProperties":false,"description":"X profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"linkedin","description":"LinkedIn provider identifier"},"provider_user_id":{"type":"string","description":"LinkedIn member id"},"scopes":{"type":"array","items":{"type":"string"},"description":"OAuth scopes granted for this account"},"profile":{"type":"object","properties":{"sub":{"type":"string","description":"LinkedIn member id — the person URN's id"},"name":{"type":"string","description":"LinkedIn display name"}},"required":["sub","name"],"additionalProperties":false,"description":"LinkedIn profile"}},"required":["id","name","member_id","created_at","workspace_id","provider","provider_user_id","scopes","profile"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"payos","description":"PayOS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"}},"required":["client_id"],"additionalProperties":false,"description":"PayOS API credentials (secrets stripped)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"misa","description":"MISA AMIS accounting provider identifier"},"credentials":{"type":"object","properties":{"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["org_company_code","expires_at"],"additionalProperties":false,"description":"MISA AMIS credentials (secrets stripped at API boundary)"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"lark","description":"Lark Base (Bitable) provider identifier"},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["app_id","region","expires_at"],"additionalProperties":false,"description":"Lark credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"fedex","description":"FedEx shipping provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","account_number","environment","expires_at"],"additionalProperties":false,"description":"FedEx credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"kiotviet","description":"KiotViet retail POS provider identifier"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"},"expires_at":{"type":"string","description":"ISO timestamp of cached token expiry"}},"required":["client_id","retailer","edition","expires_at"],"additionalProperties":false,"description":"KiotViet credentials, secrets omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"telegram","description":"Telegram bot provider identifier"},"credentials":{"type":"object","properties":{"bot_id":{"type":"number","description":"The bot's Telegram user id, from getMe"},"bot_username":{"type":"string","description":"The bot's @username, from getMe"}},"required":["bot_id","bot_username"],"additionalProperties":false,"description":"Telegram bot, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the connected account"},"name":{"type":"string","description":"Display name for this connected account"},"member_id":{"type":"string","description":"ID of the member who created this account"},"created_at":{"type":"string","description":"Timestamp when account was connected"},"workspace_id":{"type":"string","description":"ID of the workspace this account belongs to"},"provider":{"type":"string","const":"bkav","description":"Bkav eHoadon e-invoice provider identifier"},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","environment","tax_code"],"additionalProperties":false,"description":"Bkav credentials, token omitted"},"connector_config":{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"],"additionalProperties":false,"description":"What members' AI connectors may do through this account, set by an admin"}},"required":["id","name","member_id","created_at","workspace_id","provider","credentials","connector_config"],"additionalProperties":false}]},"post_v1_tables_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the table"},"workspace_id":{"type":"string","description":"ID of the workspace this table belongs to"},"name":{"type":"string","description":"Display name of the table"},"description":{"type":"string","description":"Description of the table's purpose"},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the table. Lower numbers are shown first. "},"fields":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"},"description":"Array of field definitions for this table"},"workflows":{"description":"Workflows attached to this table that fire after its record writes commit.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-workflow binding ID (tbw_ prefix)"},"name":{"type":"string","description":"Human-readable name"},"description":{"type":"string","description":"Description of what this workflow does"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"event":{"type":"string","enum":["after_create","after_update","after_delete"],"description":"Lifecycle event that fires this workflow, after the write commits."},"workflow_id":{"type":"string","description":"ID of the workflow row that owns this binding's steps. The workflow's steps_v2 is the source of truth for the AST."},"if":{"description":"Optional pre-execution gate. Evaluated against the trigger context (record / prev_record / changes / runtime); the workflow fires only when truthy. Skip gating means the workflow always fires.","anyOf":[{},{"type":"null"}]},"created_at":{"type":"string","description":"When the binding was created"},"updated_at":{"type":"string","description":"When the binding was last modified"},"archived_at":{"description":"Set when the binding was removed (soft-delete). An archived binding never fires and is hidden from active listings, but is restorable; null/absent = active.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","description","enabled","event","workflow_id","created_at","updated_at"],"additionalProperties":false}},"private_filters":{"description":"Row-level private filters AND'd to every query as a security boundary (admin bypass)","anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}]},"colors":{"description":"Color rules for styling records based on filter conditions","anyOf":[{"type":"array","items":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"The filter conditions that determine when this color rule applies. Null means no filtering."},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The color to apply to records matching the filters."}},"required":["filters","color"],"additionalProperties":false}},{"type":"null"}]},"approvers":{"description":"Principals (members, groups, or the organization) who review locked-record change requests on this table. Null/empty = organization admins review. The requester never reviews their own request.","anyOf":[{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},{"type":"null"}]},"unique":{"anyOf":[{"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string"}},"description":"Field-key tuples whose values no two live rows share: a create or update that would repeat every value of a tuple is refused. Members are text, number, date, single-select or cardinality-one link fields; a row with any member empty never collides."},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when table was created"}},"required":["id","workspace_id","name","description","fields","created_at"],"additionalProperties":false},"get_v1_explorer_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"views":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"owner_member_id":{"type":"string"},"visible_to":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"hidden":{"type":"boolean"}},"required":["id","name","owner_member_id","hidden"],"additionalProperties":false}},"owner_member_id":{"type":"string"}},"required":["id","name","views","owner_member_id"],"additionalProperties":false}},"get_v1_tables_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_tables_table_id_clone_Response"}},"get_v1_table_checks_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"table_id":{"type":"string"}},"required":["id","table_id"],"additionalProperties":false}},"post_v1_tables_reorder_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_tables_table_id_clone_Response"}},"post_v1_records_resolve_Response":{"type":"object","properties":{"records":{"type":"array","items":{"type":"object","properties":{"record_id":{"type":"string"},"table_id":{"type":"string"},"table_name":{"type":"string"},"record_label":{"type":"string"}},"required":["record_id","table_id","table_name","record_label"],"additionalProperties":false}},"unresolved_ids":{"type":"array","items":{"type":"string"}}},"required":["records","unresolved_ids"],"additionalProperties":false},"delete_v1_record_data_templates_record_data_template_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"delete_v1_tables_table_id_Response":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean"}},"required":["id","deleted"],"additionalProperties":false},"delete_v1_views_view_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_record_data_templates_record_data_template_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the record data template"},"name":{"type":"string","description":"Display name of the record data template"},"description":{"type":"string","description":"Description of the record data template"},"table_id":{"type":"string","description":"ID of the table this record template belongs to"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The data of the record template. The key is the Field key."}},"required":["id","name","description","table_id","data"],"additionalProperties":false},"get_v1_tables_table_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the table"},"workspace_id":{"type":"string","description":"ID of the workspace this table belongs to"},"name":{"type":"string","description":"Display name of the table"},"description":{"type":"string","description":"Description of the table's purpose"},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the table. Lower numbers are shown first. "},"fields":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"},"description":"Array of field definitions for this table"},"workflows":{"description":"Workflows attached to this table that fire after its record writes commit.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-workflow binding ID (tbw_ prefix)"},"name":{"type":"string","description":"Human-readable name"},"description":{"type":"string","description":"Description of what this workflow does"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"event":{"type":"string","enum":["after_create","after_update","after_delete"],"description":"Lifecycle event that fires this workflow, after the write commits."},"workflow_id":{"type":"string","description":"ID of the workflow row that owns this binding's steps. The workflow's steps_v2 is the source of truth for the AST."},"if":{"description":"Optional pre-execution gate. Evaluated against the trigger context (record / prev_record / changes / runtime); the workflow fires only when truthy. Skip gating means the workflow always fires.","anyOf":[{},{"type":"null"}]},"created_at":{"type":"string","description":"When the binding was created"},"updated_at":{"type":"string","description":"When the binding was last modified"},"archived_at":{"description":"Set when the binding was removed (soft-delete). An archived binding never fires and is hidden from active listings, but is restorable; null/absent = active.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","description","enabled","event","workflow_id","created_at","updated_at"],"additionalProperties":false}},"private_filters":{"description":"Row-level private filters AND'd to every query as a security boundary (admin bypass)","anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}]},"colors":{"description":"Color rules for styling records based on filter conditions","anyOf":[{"type":"array","items":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"The filter conditions that determine when this color rule applies. Null means no filtering."},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The color to apply to records matching the filters."}},"required":["filters","color"],"additionalProperties":false}},{"type":"null"}]},"approvers":{"description":"Principals (members, groups, or the organization) who review locked-record change requests on this table. Null/empty = organization admins review. The requester never reviews their own request.","anyOf":[{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},{"type":"null"}]},"unique":{"anyOf":[{"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string"}},"description":"Field-key tuples whose values no two live rows share: a create or update that would repeat every value of a tuple is refused. Members are text, number, date, single-select or cardinality-one link fields; a row with any member empty never collides."},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when table was created"}},"required":["id","workspace_id","name","description","fields","created_at"],"additionalProperties":false},"get_v1_records_record_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the record"},"table_id":{"type":"string","description":"ID of the table this record belongs to"},"workspace_id":{"type":"string","description":"ID of the workspace this record belongs to"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The data of the record. The key is the Field key."},"locked":{"description":"Whether the entire record is locked from editing","type":"boolean"},"draft":{"description":"Whether the record is an unsubmitted draft — UI-only in-progress state, not yet a real row. Row-visibility scoping is enforced at submit, not while a draft is being filled in.","type":"boolean"},"updated_at":{"type":"string","description":"Timestamp of last update"},"created_at":{"type":"string","description":"Timestamp when record was created"}},"required":["id","table_id","workspace_id","data","updated_at","created_at"],"additionalProperties":false},"get_v1_views_view_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"patch_v1_record_data_templates_record_data_template_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the record data template"},"name":{"type":"string","description":"Display name of the record data template"},"description":{"type":"string","description":"Description of the record data template"},"table_id":{"type":"string","description":"ID of the table this record template belongs to"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The data of the record template. The key is the Field key."}},"required":["id","name","description","table_id","data"],"additionalProperties":false},"patch_v1_tables_table_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the table"},"workspace_id":{"type":"string","description":"ID of the workspace this table belongs to"},"name":{"type":"string","description":"Display name of the table"},"description":{"type":"string","description":"Description of the table's purpose"},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the table. Lower numbers are shown first. "},"fields":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"},"description":"Array of field definitions for this table"},"workflows":{"description":"Workflows attached to this table that fire after its record writes commit.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-workflow binding ID (tbw_ prefix)"},"name":{"type":"string","description":"Human-readable name"},"description":{"type":"string","description":"Description of what this workflow does"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"event":{"type":"string","enum":["after_create","after_update","after_delete"],"description":"Lifecycle event that fires this workflow, after the write commits."},"workflow_id":{"type":"string","description":"ID of the workflow row that owns this binding's steps. The workflow's steps_v2 is the source of truth for the AST."},"if":{"description":"Optional pre-execution gate. Evaluated against the trigger context (record / prev_record / changes / runtime); the workflow fires only when truthy. Skip gating means the workflow always fires.","anyOf":[{},{"type":"null"}]},"created_at":{"type":"string","description":"When the binding was created"},"updated_at":{"type":"string","description":"When the binding was last modified"},"archived_at":{"description":"Set when the binding was removed (soft-delete). An archived binding never fires and is hidden from active listings, but is restorable; null/absent = active.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","description","enabled","event","workflow_id","created_at","updated_at"],"additionalProperties":false}},"private_filters":{"description":"Row-level private filters AND'd to every query as a security boundary (admin bypass)","anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}]},"colors":{"description":"Color rules for styling records based on filter conditions","anyOf":[{"type":"array","items":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"The filter conditions that determine when this color rule applies. Null means no filtering."},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The color to apply to records matching the filters."}},"required":["filters","color"],"additionalProperties":false}},{"type":"null"}]},"approvers":{"description":"Principals (members, groups, or the organization) who review locked-record change requests on this table. Null/empty = organization admins review. The requester never reviews their own request.","anyOf":[{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},{"type":"null"}]},"unique":{"anyOf":[{"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string"}},"description":"Field-key tuples whose values no two live rows share: a create or update that would repeat every value of a tuple is refused. Members are text, number, date, single-select or cardinality-one link fields; a row with any member empty never collides."},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when table was created"}},"required":["id","workspace_id","name","description","fields","created_at"],"additionalProperties":false},"patch_v1_views_view_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"post_v1_tables_table_id_clone_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the table"},"workspace_id":{"type":"string","description":"ID of the workspace this table belongs to"},"name":{"type":"string","description":"Display name of the table"},"description":{"type":"string","description":"Description of the table's purpose"},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the table. Lower numbers are shown first. "},"fields":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"},"description":"Array of field definitions for this table"},"workflows":{"description":"Workflows attached to this table that fire after its record writes commit.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique table-workflow binding ID (tbw_ prefix)"},"name":{"type":"string","description":"Human-readable name"},"description":{"type":"string","description":"Description of what this workflow does"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"event":{"type":"string","enum":["after_create","after_update","after_delete"],"description":"Lifecycle event that fires this workflow, after the write commits."},"workflow_id":{"type":"string","description":"ID of the workflow row that owns this binding's steps. The workflow's steps_v2 is the source of truth for the AST."},"if":{"description":"Optional pre-execution gate. Evaluated against the trigger context (record / prev_record / changes / runtime); the workflow fires only when truthy. Skip gating means the workflow always fires.","anyOf":[{},{"type":"null"}]},"created_at":{"type":"string","description":"When the binding was created"},"updated_at":{"type":"string","description":"When the binding was last modified"},"archived_at":{"description":"Set when the binding was removed (soft-delete). An archived binding never fires and is hidden from active listings, but is restorable; null/absent = active.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","description","enabled","event","workflow_id","created_at","updated_at"],"additionalProperties":false}},"private_filters":{"description":"Row-level private filters AND'd to every query as a security boundary (admin bypass)","anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}]},"colors":{"description":"Color rules for styling records based on filter conditions","anyOf":[{"type":"array","items":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"The filter conditions that determine when this color rule applies. Null means no filtering."},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The color to apply to records matching the filters."}},"required":["filters","color"],"additionalProperties":false}},{"type":"null"}]},"approvers":{"description":"Principals (members, groups, or the organization) who review locked-record change requests on this table. Null/empty = organization admins review. The requester never reviews their own request.","anyOf":[{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},{"type":"null"}]},"unique":{"anyOf":[{"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string"}},"description":"Field-key tuples whose values no two live rows share: a create or update that would repeat every value of a tuple is refused. Members are text, number, date, single-select or cardinality-one link fields; a row with any member empty never collides."},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when table was created"}},"required":["id","workspace_id","name","description","fields","created_at"],"additionalProperties":false},"post_v1_views_view_id_clone_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"post_v1_tables_table_id_draft_records_Response":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"post_v1_tables_table_id_record_data_templates_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the record data template"},"name":{"type":"string","description":"Display name of the record data template"},"description":{"type":"string","description":"Description of the record data template"},"table_id":{"type":"string","description":"ID of the table this record template belongs to"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"The data of the record template. The key is the Field key."}},"required":["id","name","description","table_id","data"],"additionalProperties":false},"post_v1_tables_table_id_fields_Response":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"type":"string","enum":["number","currency","percentage"],"description":"Replaced by \"notation\", and never read: naming another reading in it is refused."},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","format"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"],"additionalProperties":false}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link","description":"Field type for linking to records in another table"},"table_id":{"type":"string","description":"ID of the target table that records can be linked to"},"display_field_keys":{"default":[],"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If empty, the picker shows all fields.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"paired_field_key":{"description":"Key of the paired link field in the linked table. If set to a string, this indicates a bidirectional link where both tables can reference each other and data synchronizes in both directions. Both fields have paired_field_key pointing to each other. If set to null, explicitly disconnects the bidirectional link (clears paired_field_key on both sides). If undefined, no change is made to the existing paired_field_key.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id","display_field_keys"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"],"additionalProperties":false}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"],"additionalProperties":false}},"required":["key","name","description","type","source_field_key","lookup_field_key"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"],"additionalProperties":false}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"additionalProperties":false,"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"],"additionalProperties":false}]},"post_v1_tables_table_id_records_Response":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"}}},"required":["record_ids"],"additionalProperties":false},"post_v1_tables_table_id_views_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"delete_v1_tables_table_id_records_Response":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"deleted":{"type":"boolean"},"cascaded":{"description":"The records a cascade removed on other tables, deepest first.","type":"array","items":{"type":"object","properties":{"table_id":{"type":"string"},"record_ids":{"type":"array","items":{"type":"string"}}},"required":["table_id","record_ids"],"additionalProperties":false}}},"required":["ids","deleted"],"additionalProperties":false},"post_v1_views_view_id_export_csv_Response":{"type":"object","properties":{"file_id":{"type":"string"},"filename":{"type":"string"}},"required":["file_id","filename"],"additionalProperties":false},"post_v1_views_view_id_export_xlsx_Response":{"type":"object","properties":{"url":{"type":"string"},"filename":{"type":"string"}},"required":["url","filename"],"additionalProperties":false},"get_v1_records_record_id_comments_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_records_record_id_comments_comment_id_Response"}},"get_v1_tables_table_id_record_data_templates_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_tables_table_id_record_data_templates_Response"}},"get_v1_tables_table_id_comments_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_records_record_id_comments_comment_id_Response"}},"get_v1_records_record_id_logs_Response":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"organization_id":{"type":"string"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"action":{"type":"string","enum":["record.create","record.update","record.delete","record.delete_permanent","record.restore","record.lock","record.unlock","record.comment.create","record.comment.update","record.comment.delete","table.create","table.update","table.archive","table.restore","field.create","field.update","field.delete","view.create","view.update","view.archive","view.restore","iam.role_binding.assign","iam.role_binding.update","iam.role_binding.remove","iam.ownership.transfer","iam.group.create","iam.group.update","iam.group.delete","iam.member.create_managed","iam.member.reset_password","iam.member.update_name","iam.invitation.revoke","iam.invitation.update","iam.absence.set","iam.absence.end","app.create","app.update","app.archive","app.instantiate","app.upgrade","app.public_password.set","app.public_password.clear","app.api.publish","app.api.unpublish","starter.publish","starter.set_official","starter.unpublish","starter.edit_listing","starter.delete","workspace.scaffold","workspace.recompute_figures","app.install","app.uninstall","app.eject","app.adopt","app.rebind_role","app.reset","app.config_update","package.publish","package.set_official","package.yank","package.retire","package.edit_listing","package.content_install","package.content_upgrade","package.content_uninstall","skill.create","skill.update","skill.archive","automation.create","automation.update","automation.archive","document_template.create","document_template.update","document_template.archive","instruction.create","instruction.update","instruction.archive","instruction.restore","knowledge_doc.create","knowledge_doc.update","knowledge_doc.archive","knowledge_doc.restore","plan_period.create","plan_period.activate","plan_period.upgrade","plan_period.renew","plan_period.cancel_renewal","plan_period.resume_renewal","plan_period.set_overage","plan_period.downgrade","plan_period.expire","plan_period.trial","plan_period.suspend","plan_period.unsuspend","scheduled_change.create","scheduled_change.cancel","scheduled_change.apply","credit_grant.create","credit_grant.revoke","billing_invoice.attach","billing_invoice.remove","billing_invoice.set_buyer","billing_charge.create","billing_charge.void","billing_charge.write_off","billing_charge.release_draft","billing_credit_note.issue","billing_payment.record","billing_payment.allocate","billing_payment.refund","billing_payment.void","billing_party.set","private_instance.create","private_instance.revoke","demo_script.set","demo_script.clear","demo_workspace.reset","api_key.create","api_key.update","api_key.revoke","cli_login.approve","member.data_export","member.erasure_requested","member.erasure_cancelled","member.erasure_executed","organization.renamed","organization.logo_updated","organization.logo_removed","member.invited","member.accepted","member.removed","member.restored","member.role_changed","member.email_claimed","session.revoked","support.access","chat_transcript.read","workflow_execution.read","connected_account.write"]},"actor_type":{"type":"string","enum":["member","api_key","system","public"]},"actor_id":{"type":"string"},"resource_type":{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]},"resource_id":{"type":"string"},"parent_resource_type":{"anyOf":[{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]},{"type":"null"}]},"parent_resource_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"change_origin":{"anyOf":[{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Change originated from a member"},"member_id":{"type":"string","description":"Member ID of the user who modified"},"member_session_id":{"description":"Session ID of the member at the time of modification","type":"string"},"app_id":{"description":"ID of the app through which the member acted","type":"string"}},"required":["type","member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"chat_agent","description":"Change originated from chat agent"},"on_behalf_member_id":{"type":"string","description":"ID of the member on whose behalf the chat agent acted"},"tool_call_id":{"description":"ID of the tool call that the chat agent performed","type":"string"}},"required":["type","on_behalf_member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"api_client","description":"Change originated from a programmatic client — an MCP host, the CLI, or a direct API call — acting under a member's authority. Named for the DOOR the write came through, never for what is behind it: whether the caller is an agent or a script is a claim only `client` carries, and only the caller can make it."},"surface":{"type":"string","enum":["mcp","cli","api"],"description":"Which programmatic entry point served the request"},"client":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Self-declared client identity — `claude-ai/1.2`, `lotics-cli/0.117.0`. Caller-supplied text, so it attributes without proving; `api_key_id` and `on_behalf_member_id` are the halves that do not depend on trusting it."},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The API key that authenticated the call. Null when the caller came in over OAuth."},"on_behalf_member_id":{"type":"string","description":"ID of the member whose authority the call ran under"}},"required":["type","surface","client","api_key_id","on_behalf_member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"button","description":"Change originated from a button click"},"table_id":{"type":"string","description":"ID of the table containing the button"},"record_id":{"type":"string","description":"ID of the record where the button was clicked"},"field_key":{"type":"string","description":"Key of the button field"},"clicked_by":{"type":"string","description":"ID of the member who clicked the button"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","record_id","field_key","clicked_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"submit_record","description":"Change originated from a draft record submission"},"table_id":{"type":"string","description":"ID of the table containing the record"},"record_id":{"type":"string","description":"ID of the record being submitted"},"submitted_by":{"type":"string","description":"ID of the member who submitted"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","record_id","submitted_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_action","description":"Change originated from an app action"},"app_id":{"type":"string","description":"ID of the app containing the action"},"action_id":{"type":"string","description":"ID of the action that was triggered"},"triggered_by":{"type":"string","description":"ID of the member who triggered the action"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","app_id","action_id","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_workflow","description":"Change originated from a custom-code app calling useWorkflow(alias). The alias resolves through the app's declared workflows under its IAM principal — no ui.actions[] lookup, no record-level button binding."},"app_id":{"type":"string","description":"ID of the app that called the workflow"},"alias":{"type":"string","description":"Alias used in the app's manifest"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the member who triggered the call. Null when an anonymous visitor triggered it through a publicly-shared app — there is no member."},"app_agent_run_id":{"description":"The app agent run whose run_app_workflow call started this run. Absent when a member, a visitor or the app's own screen started it.","type":"string"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","app_id","alias","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_agent","description":"Change originated from a custom-code app running an agent via useAgentRun(alias). The alias resolves through the app's declared agents under its IAM principal; the agent's tools mutate records under that authority, distinct from a run-to-completion app_workflow."},"app_id":{"type":"string","description":"ID of the app that ran the agent"},"alias":{"type":"string","description":"Agent alias in the app's manifest"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the member who started the run. Null when an anonymous visitor started it through a publicly-shared app — there is no member."},"run_id":{"description":"ID of the app_agent_runs row for this run","type":"string"}},"required":["type","app_id","alias","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"automation","description":"Change originated from an automation (trigger + workflow)"},"trigger_type":{"description":"Type of the trigger that initiated this automation","type":"string"},"trigger_id":{"description":"ID of the trigger that initiated this automation","type":"string"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"},"automation_id":{"description":"[Legacy] Use trigger_id instead","type":"string"},"automation_execution_id":{"description":"[Legacy] Use workflow_execution_id instead","type":"string"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"system","description":"Change originated from system (Human system administrator/engineer)"},"author":{"type":"string","description":"Name of the system administrator/engineer"}},"required":["type","author"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_workflow","description":"Change originated from a table workflow execution"},"table_id":{"type":"string","description":"ID of the table whose workflow fired"},"table_workflow_id":{"type":"string","description":"ID of the binding entry on the table"},"event":{"type":"string","description":"Lifecycle event that fired the workflow (after_create, after_update, after_delete)"},"triggered_by_member_id":{"description":"Member who initiated the write that fired this workflow (or the head of the chain when fired by another workflow). Null when fired from a non-member origin (recurring schedule, system).","anyOf":[{"type":"string"},{"type":"null"}]},"workflow_id":{"description":"ID of the workflow procedure that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","table_workflow_id","event"],"additionalProperties":false}]},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"}},"required":["id","organization_id","workspace_id","action","actor_type","actor_id","resource_type","resource_id","parent_resource_type","parent_resource_id","change_origin","details","ip_address","user_agent","request_id","session_id","created_at"],"additionalProperties":false}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["logs","next_cursor"],"additionalProperties":false},"get_v1_tables_table_id_references_Response":{"type":"object","properties":{"table":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["app","workflow","check"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["kind","id","name"],"additionalProperties":false}},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["app","workflow","check"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["kind","id","name"],"additionalProperties":false}}}},"required":["table","fields"],"additionalProperties":false},"post_v1_views_view_id_hide_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_tables_table_id_archived_views_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_views_view_id_Response"}},"get_v1_tables_table_id_profile_Response":{"type":"object","properties":{"table_id":{"type":"string"},"row_count":{"type":"number"},"fields":{"type":"array","items":{"type":"object","properties":{"field_id":{"type":"string"},"type":{"type":"string"},"fill_rate":{"type":"number"},"distinct_count":{"type":"number"},"min_length":{"anyOf":[{"type":"number"},{"type":"null"}]},"max_length":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["field_id","type","fill_rate","distinct_count","min_length","max_length"],"additionalProperties":false}}},"required":["table_id","row_count","fields"],"additionalProperties":false},"post_v1_views_view_id_restore_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"post_v1_views_view_id_unhide_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"patch_v1_tables_table_id_records_Response":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"},"description":"IDs the server actually wrote — excludes records that were skipped (e.g., locked rows)."},"skipped_record_ids":{"type":"array","items":{"type":"string"},"description":"DEPRECATED: read `blocked` instead. Maintained for one release as `blocked.map(b => b.record_id)` for clients that haven't migrated."},"blocked":{"type":"array","items":{"type":"object","properties":{"record_id":{"type":"string"},"reason":{"type":"string","const":"record_locked"},"blocked_field_keys":{"type":"array","items":{"type":"string"}}},"required":["record_id","reason","blocked_field_keys"],"additionalProperties":false},"description":"Per-record denial details for writes the server skipped due to lock protection."}},"required":["record_ids","skipped_record_ids","blocked"],"additionalProperties":false},"post_v1_tables_table_id_records_comments_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_records_record_id_comments_comment_id_Response"}},"post_v1_tables_table_id_records_find_position_Response":{"type":"object","properties":{"position":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["position"],"additionalProperties":false},"post_v1_tables_table_id_records_by_ids_Response":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}}},"required":["records"],"additionalProperties":false},"post_v1_tables_table_id_records_lock_Response":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"post_v1_tables_table_id_records_purge_Response":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"}},"deleted":{"type":"boolean"}},"required":["ids","deleted"],"additionalProperties":false},"post_v1_tables_table_id_records_query_Response":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"total":{"type":"number"}},"required":["records","total"],"additionalProperties":false},"post_v1_tables_table_id_views_reorder_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_views_view_id_Response"}},"post_v1_tables_table_id_records_restore_Response":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"post_v1_tables_table_id_draft_records_submit_Response":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"status":{"type":"string","enum":["success","error"]},"message":{"type":"string"}},"required":["records"],"additionalProperties":false},"post_v1_tables_table_id_records_unlock_Response":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_records_record_id_Response"}},"delete_v1_tables_table_id_views_view_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"delete_v1_records_record_id_comments_comment_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"delete_v1_tables_table_id_fields_field_key_Response":{"type":"object","properties":{"deleted":{"type":"boolean"},"field_key":{"type":"string"},"cleaned_up":{"description":"Cleanup statistics","type":"object","properties":{"views":{"type":"number","description":"Number of views updated"},"fields":{"type":"number","description":"Number of dependent fields deleted"},"records":{"type":"number","description":"Number of records with field data cleaned"}},"required":["views","fields","records"],"additionalProperties":false}},"required":["deleted","field_key"],"additionalProperties":false},"delete_v1_tables_table_id_workflows_table_workflow_id_Response":{"type":"object","properties":{"table_workflow_id":{"type":"string"},"table_id":{"type":"string"}},"required":["table_workflow_id","table_id"],"additionalProperties":false},"get_v1_tables_table_id_views_view_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"patch_v1_records_record_id_comments_comment_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the comment"},"record_id":{"type":"string","description":"ID of the record this comment belongs to"},"table_id":{"type":"string","description":"ID of the table this comment belongs to"},"member_id":{"type":"string","description":"ID of the member who created this comment"},"content":{"type":"string","minLength":0,"maxLength":10000,"description":"Comment text content (0-10,000 characters)"},"files":{"description":"Array of files attached to this comment","anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this comment belongs to"},"updated_at":{"type":"string","description":"Timestamp of last update"},"created_at":{"type":"string","description":"Timestamp when comment was created"}},"required":["id","record_id","table_id","member_id","content","workspace_id","updated_at","created_at"],"additionalProperties":false},"patch_v1_tables_table_id_fields_field_key_Response":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"type":"string","enum":["number","currency","percentage"],"description":"Replaced by \"notation\", and never read: naming another reading in it is refused."},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","format"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"],"additionalProperties":false}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link","description":"Field type for linking to records in another table"},"table_id":{"type":"string","description":"ID of the target table that records can be linked to"},"display_field_keys":{"default":[],"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If empty, the picker shows all fields.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"paired_field_key":{"description":"Key of the paired link field in the linked table. If set to a string, this indicates a bidirectional link where both tables can reference each other and data synchronizes in both directions. Both fields have paired_field_key pointing to each other. If set to null, explicitly disconnects the bidirectional link (clears paired_field_key on both sides). If undefined, no change is made to the existing paired_field_key.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id","display_field_keys"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"],"additionalProperties":false}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"],"additionalProperties":false}},"required":["key","name","description","type","source_field_key","lookup_field_key"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"],"additionalProperties":false}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"additionalProperties":false,"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"],"additionalProperties":false},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"],"additionalProperties":false}]},"patch_v1_tables_table_id_views_view_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the view"},"table_id":{"type":"string","description":"ID of the table this view displays"},"workspace_id":{"type":"string","description":"ID of the workspace this view belongs to"},"name":{"type":"string","description":"Display name of the view"},"description":{"type":"string","description":"Description of the view's purpose"},"visible_to":{"description":"Sidebar declutter list (NOT access control). null/absent = every member with access to the parent table sees this view; a non-empty list of members/groups restricts who sees it in the explorer. [] is normalized to null on write.","anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"],"additionalProperties":false}},{"type":"null"}]},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"Display ordering index for the view. Lower numbers are shown first. Use incremental values with gaps (100, 200, 300) instead of consecutive numbers (1, 2, 3) to enable efficient reordering without updating multiple records. Example: To insert between 100 and 200, use 150."},"frozen_columns":{"description":"Number of columns to freeze. Frozen columns are not scrollable.","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"description":"Map of field keys to summary operations.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"null"}]}},{"type":"null"}]},"default_record_data_template_id":{"description":"ID of the record template to use as the default record initial data","anyOf":[{"type":"string"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"],"additionalProperties":false},"description":"Ordered array of field config entries. Order = display order, visibility = per-entry. Fields not listed are hidden."},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},{"type":"null"}],"description":"Sorting configuration for records in this view"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"Filter conditions applied to records in this view"},"created_at":{"type":"string","description":"Timestamp when view was created"}},"required":["id","table_id","workspace_id","name","description","position","field_config","sort","filters","created_at"],"additionalProperties":false},"patch_v1_tables_table_id_workflows_table_workflow_id_Response":{"type":"object","properties":{"table_workflow_id":{"type":"string"},"workflow_id":{"type":"string"},"table_id":{"type":"string"},"event":{"type":"string","enum":["after_create","after_update","after_delete"]},"enabled":{"type":"boolean"}},"required":["table_workflow_id","workflow_id","table_id","event","enabled"],"additionalProperties":false},"get_v1_tables_table_id_fields_field_key_dependencies_Response":{"type":"object","properties":{"field_key":{"type":"string","description":"Key of the field being analyzed"},"field_name":{"type":"string","description":"Name of the field being analyzed"},"table_id":{"type":"string","description":"ID of the table containing the field"},"dependencies":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["formula_reference","rollup_source","lookup_source","rollup_target","lookup_target","figure_select","link_display","copy_link","copy_source"],"description":"What the field is: a formula, rollup or lookup of this table reading the delete (formula_reference, rollup_source, lookup_source), a rollup or lookup on another table reading it (rollup_target, lookup_target), a figure reading its unit or currency per row from it (figure_select), a link displaying it (link_display), a field whose default_from copies through it as the link (copy_link) or off it as the source (copy_source)"},"entity_type":{"type":"string","const":"field"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"field":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false,"description":"The dependent field"},"table":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The table the dependent field stands on"},"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["field","table","reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["view_filter","view_sort","view_field_config","view_summary"],"description":"The part of the view the delete cleans up"},"entity_type":{"type":"string","const":"view"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_colors","description":"The table's colour rules, which the delete cleans up"},"entity_type":{"type":"string","const":"table"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false}]},"description":"All dependencies found"},"can_auto_cleanup":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["formula_reference","rollup_source","lookup_source","rollup_target","lookup_target","figure_select","link_display","copy_link","copy_source"],"description":"What the field is: a formula, rollup or lookup of this table reading the delete (formula_reference, rollup_source, lookup_source), a rollup or lookup on another table reading it (rollup_target, lookup_target), a figure reading its unit or currency per row from it (figure_select), a link displaying it (link_display), a field whose default_from copies through it as the link (copy_link) or off it as the source (copy_source)"},"entity_type":{"type":"string","const":"field"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"field":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false,"description":"The dependent field"},"table":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The table the dependent field stands on"},"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["field","table","reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["view_filter","view_sort","view_field_config","view_summary"],"description":"The part of the view the delete cleans up"},"entity_type":{"type":"string","const":"view"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_colors","description":"The table's colour rules, which the delete cleans up"},"entity_type":{"type":"string","const":"table"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false}]},"description":"Views, colour rules and link displays naming the field, or a field the delete takes with it; the delete removes those references"},"will_break":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["formula_reference","rollup_source","lookup_source","rollup_target","lookup_target","figure_select","link_display","copy_link","copy_source"],"description":"What the field is: a formula, rollup or lookup of this table reading the delete (formula_reference, rollup_source, lookup_source), a rollup or lookup on another table reading it (rollup_target, lookup_target), a figure reading its unit or currency per row from it (figure_select), a link displaying it (link_display), a field whose default_from copies through it as the link (copy_link) or off it as the source (copy_source)"},"entity_type":{"type":"string","const":"field"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"field":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false,"description":"The dependent field"},"table":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The table the dependent field stands on"},"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["field","table","reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["view_filter","view_sort","view_field_config","view_summary"],"description":"The part of the view the delete cleans up"},"entity_type":{"type":"string","const":"view"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_colors","description":"The table's colour rules, which the delete cleans up"},"entity_type":{"type":"string","const":"table"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false}]},"description":"Fields of this table reading the field, at any depth: a delete refuses while they exist, and a forced delete takes them with it"},"requires_manual_action":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["formula_reference","rollup_source","lookup_source","rollup_target","lookup_target","figure_select","link_display","copy_link","copy_source"],"description":"What the field is: a formula, rollup or lookup of this table reading the delete (formula_reference, rollup_source, lookup_source), a rollup or lookup on another table reading it (rollup_target, lookup_target), a figure reading its unit or currency per row from it (figure_select), a link displaying it (link_display), a field whose default_from copies through it as the link (copy_link) or off it as the source (copy_source)"},"entity_type":{"type":"string","const":"field"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"field":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false,"description":"The dependent field"},"table":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The table the dependent field stands on"},"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["field","table","reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","enum":["view_filter","view_sort","view_field_config","view_summary"],"description":"The part of the view the delete cleans up"},"entity_type":{"type":"string","const":"view"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_colors","description":"The table's colour rules, which the delete cleans up"},"entity_type":{"type":"string","const":"table"},"entity_id":{"type":"string","description":"ID of the dependent entity: a field of this table by its key, a field of another table as `<table_id>:<field_key>`"},"entity_name":{"type":"string","description":"Name of the dependent entity; a field of another table as `<table name> > <field name>`"},"facts":{"type":"object","properties":{"reads":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"additionalProperties":false},"description":"The fields of the delete — the field and those a forced delete takes with it — the entry reads or names"}},"required":["reads"],"additionalProperties":false,"description":"What the entry names, by id and name"}},"required":["type","entity_type","entity_id","entity_name","facts"],"additionalProperties":false}]},"description":"Fields that refuse the delete, forced or not, until they are removed or repointed: rollups and lookups on other tables, figures reading each row's unit or currency, and fields whose default_from copies through or off it, that read the field or one a forced delete takes with it"}},"required":["field_key","field_name","table_id","dependencies","can_auto_cleanup","will_break","requires_manual_action"],"additionalProperties":false},"post_v1_tables_table_id_views_view_id_summary_Response":{"type":"object","properties":{"results":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"value":{"anyOf":[{"type":"number"},{"type":"string"}]},"units":{"description":"Over a figure each row reads in its own unit or currency: one total per unit its rows hold, most rows first; `unit` null for rows naming none. `value` is the first.","type":"array","items":{"type":"object","properties":{"unit":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"type":"number"}},"required":["unit","value"],"additionalProperties":false}}},"required":["value"],"additionalProperties":false}}},"required":["results"],"additionalProperties":false},"post_v1_tables_table_id_fields_field_key_repoint_Response":{"type":"object","properties":{"apps_updated":{"type":"array","items":{"type":"string"}},"workflows_updated":{"type":"array","items":{"type":"string"}},"triggers_updated":{"type":"array","items":{"type":"string"}}},"required":["apps_updated","workflows_updated","triggers_updated"],"additionalProperties":false},"post_v1_tables_table_id_records_record_id_buttons_field_key_press_Response":{"type":"object","properties":{"execution_id":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"}},"status":{"type":"string","enum":["success","error"]},"message":{"type":"string"}},"additionalProperties":false},"post_table_table_id_export_excel_Response":{"type":"object","properties":{"url":{"type":"string"},"filename":{"type":"string"}},"required":["url","filename"],"additionalProperties":false},"post_v1_workspaces_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workspace"},"name":{"type":"string","description":"Display name of the workspace"},"default_currency":{"type":"string","description":"Default currency code for the workspace"},"timezone":{"type":"string","description":"IANA timezone name (e.g., 'America/New_York', 'Asia/Ho_Chi_Minh')"},"organization_id":{"type":"string","description":"Organization ID this workspace belongs to"},"created_at":{"type":"string","description":"Timestamp when workspace was created"}},"required":["id","name","default_currency","timezone","organization_id","created_at"],"additionalProperties":false},"get_v1_workspace_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workspace"},"name":{"type":"string","description":"Display name of the workspace"},"default_currency":{"type":"string","description":"Default currency code for the workspace"},"timezone":{"type":"string","description":"IANA timezone name (e.g., 'America/New_York', 'Asia/Ho_Chi_Minh')"},"organization_id":{"type":"string","description":"Organization ID this workspace belongs to"},"created_at":{"type":"string","description":"Timestamp when workspace was created"},"table_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Active tables in this workspace. Zero: not set up yet."}},"required":["id","name","default_currency","timezone","organization_id","created_at","table_count"],"additionalProperties":false},"get_v1_workspaces_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_workspace_Response"}},"patch_v1_workspace_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workspace"},"name":{"type":"string","description":"Display name of the workspace"},"default_currency":{"type":"string","description":"Default currency code for the workspace"},"timezone":{"type":"string","description":"IANA timezone name (e.g., 'America/New_York', 'Asia/Ho_Chi_Minh')"},"organization_id":{"type":"string","description":"Organization ID this workspace belongs to"},"created_at":{"type":"string","description":"Timestamp when workspace was created"}},"required":["id","name","default_currency","timezone","organization_id","created_at"],"additionalProperties":false},"post_v1_workspace_backup_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_workspace_backups_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workspace backup"},"workspace_id":{"type":"string","description":"ID of the workspace that was backed up"},"organization_id":{"type":"string","description":"ID of the organization this backup belongs to"},"status":{"type":"string","enum":["pending","completed","failed"],"description":"Current status of the backup operation"},"type":{"type":"string","enum":["auto","manual"],"description":"Backup type: 'auto' for scheduled backups, 'manual' for user-initiated"},"url":{"type":"string","description":"URL to download the backup file"},"storage_provider":{"type":"string","description":"Storage provider where backup is stored (e.g., 'aws', 'gcs')"},"storage_key":{"type":"string","description":"Storage key/path where backup file is stored"},"metadata":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}],"description":"Additional metadata about the backup"},"created_at":{"type":"string","description":"Timestamp when backup was initiated"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when backup completed (null if still in progress)"}},"required":["id","workspace_id","organization_id","status","type","url","storage_provider","storage_key","metadata","created_at","completed_at"],"additionalProperties":false}},"get_v1_workspaces_dangling_references_Response":{"type":"array","items":{"type":"object","properties":{"namespace":{"type":"string","enum":["tables","fields","options","templates","groups","knowledge"]},"id":{"type":"string"},"referent":{"type":"object","properties":{"kind":{"type":"string","enum":["app","workflow","check"]},"id":{"type":"string"},"name":{"type":"string"}},"required":["kind","id","name"],"additionalProperties":false}},"required":["namespace","id","referent"],"additionalProperties":false}},"get_v1_workspaces_model_Response":{"type":"object","properties":{"contract":{"type":"object","properties":{"entities":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable entity alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The table's name in the workspace, which apply names it"},"singular":{"description":"One row of this table, in the business's own words — what a create's button and panel name","type":"string","minLength":1},"description":{"description":"The table's description, written onto the table in the workspace","type":"string"},"writes":{"description":"false: no app opens or edits this table's rows. Direct writes follow the table's access, as on any table","type":"boolean","const":false},"fields":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"string"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"description":"How the words are drawn — plain, as a link that opens, or as markdown","type":"string","enum":["text","link","markdown"]},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"number"},"type":{"type":"string","const":"number"},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. Omitted, a decimal.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"format":{"description":"What the figure is — a plain number, money in `currency`, or a percent. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. A date string in the field's format.","type":"string"},"type":{"type":"string","const":"date"},"format":{"description":"Whether the field holds a day or a moment, alone or as a span","type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp; the field becomes read-only.","type":"string","enum":["created_at","updated_at"]},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. Option alias(es) this field declares — one for single-select.","type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}},"type":{"type":"string","const":"select"},"options":{"minItems":1,"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the field"},"label":{"type":"string","minLength":1,"description":"Display label for the option"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The colour the option's badge is drawn in"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["alias","label","color"],"additionalProperties":false},"description":"The choices, in the order every picker and every ladder lists them"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type","options"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"select_record_link"},"target_entity":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of the entity this field links to"},"sync_both_ways":{"description":"Create a paired link field on the target entity for bidirectional sync","type":"boolean"},"paired_field_alias":{"description":"The pair edge of a bidirectional link: the field alias ON THE TARGET ENTITY that is this link's sync partner. Both sides of a pair carry it, each naming the other. Apply creates whichever side it reaches first WITH the pairing (the platform auto-creates the partner) and binds the partner alias to the auto-created field — without this edge the two contract fields would be created independently and collide with the auto-created partner.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"cardinality":{"description":"How many linked records this field holds. Default 'many'. 'one' holds a single row and needs no partner; where the link IS paired, the partner side holds many.","type":"string","enum":["one","many"]},"display_field_aliases":{"description":"Field aliases on the target entity shown as the link's display text / picker columns","type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type","target_entity"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"files"}},"required":["alias","label","type"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"formula"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"The expression, over fields of THIS entity by alias in braces — `{quantity} * {unit_price}`"},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"options":{"description":"The categories the formula yields, drawn as a single select's options are (read-only). The expression yields one of them as `{this_field:option}`, or null — `{days_idle} > 30 ? {warmth:cold} : {warmth:hot}`. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the field"},"label":{"type":"string","minLength":1,"description":"Display label for the option"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The colour the option's badge is drawn in"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["alias","label","color"],"additionalProperties":false}},"output_type":{"description":"What the expression YIELDS — the kind the platform infers at write time, declared here so the offline checks can read it. `notation` beside it is how a number result reads, not what it is. Ignored on the wire (the platform re-infers it); `lotics model pull` writes the inferred value.","type":"string","enum":["number","text","date","datetime","boolean","select"]}},"required":["expression"],"additionalProperties":false,"description":"Formula config. The expression references other fields on the SAME entity by alias in braces, e.g. `{quantity} * {unit_price}`."}},"required":["alias","label","type","formula"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"rollup"},"source_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of a select_record_link field on this entity to roll up from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"],"additionalProperties":false}],"description":"Aggregation operation. Its `field_key` names a field alias on the linked entity."},"filter":{"description":"Only linked records matching this filter are aggregated; one condition on its own is a group of one. Every `field_key` in it names a field alias on the linked entity, and a select condition's value names an option alias there. A traversal node reaches past that entity, so its `path` hops and inner `field_key` are fully-qualified `entity.field` aliases.","$ref":"#/components/schemas/TableRecordFiltersGroup"}},"required":["alias","label","type","source_field_alias","aggregate_option"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"lookup"},"source_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of a select_record_link field on this entity to look up through"},"lookup_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of the field on the linked entity to display"},"order_by":{"description":"Show ONE linked row's value — the first in this order — rather than every linked row's","type":"object","properties":{"field_key":{"type":"string","description":"A field alias on the linked entity the rows are ordered by"},"direction":{"type":"string","enum":["asc","desc"],"description":"Which end of that order the one row is taken from"}},"required":["field_key","direction"],"additionalProperties":false}},"required":["alias","label","type","source_field_alias","lookup_field_alias"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["alias","label","type"],"additionalProperties":false}],"description":"What the field holds — each type takes the further keys its own section lists"},"description":"The table's columns"},"read_scope":{"description":"Which rows a member reads. Absent, every member with access to the table reads every row.","type":"object","properties":{"any":{"minItems":1,"type":"array","items":{"anyOf":[{"type":"object","properties":{"member_of":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A role alias: whoever is in the group it binds to reads the row"}},"required":["member_of"],"additionalProperties":false},{"type":"object","properties":{"through":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"select_record_link aliases from this entity outward, each of cardinality \"one\" — the clause's field is on the entity the last hop lands on"},"field":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A select_member field alias on this entity, or on the entity `through` lands on"},"is":{"type":"string","const":"self","description":"The members this column names on a row read that row"}},"required":["field","is"],"additionalProperties":false},{"type":"object","properties":{"through":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"select_record_link aliases from this entity outward, each of cardinality \"one\" — the clause's field is on the entity the last hop lands on"},"field":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A single-select field alias on this entity, or on the entity `through` lands on"},"is":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"Its option aliases whose rows are readable — naming none would hide every row"}},"required":["field","is"],"additionalProperties":false}]},"description":"A row is readable when ANY of these holds"}},"required":["any"],"additionalProperties":false},"unique":{"description":"Sets of fields whose values no two live rows share — each a list of field aliases (text, number, date, a single select, or a link of cardinality \"one\"). A create or update landing a second row with the same values is refused.","minItems":1,"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}}},"views":{"default":[],"description":"Saved views, in the order they are listed; with none, the table still opens on its default grid","type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable view alias, unique within the entity"},"label":{"type":"string","minLength":1,"description":"Display name of the view"},"description":{"description":"The view's description, written onto the view in the workspace","type":"string"},"columns":{"description":"The columns the view shows, in this order and no others; absent, every field","minItems":1,"type":"array","items":{"type":"object","properties":{"field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A field of this entity"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"description":"The column's width, in pixels","type":"number"}},"required":["field_alias","visibility"],"additionalProperties":false}},"filters":{"description":"The rows the view keeps","$ref":"#/components/schemas/TableRecordFilters"},"sort":{"description":"The order the view reads its rows in","type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"],"additionalProperties":false}},"summary":{"description":"Field alias → the operation its footer cell states","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"frozen_columns":{"description":"How many leading columns stay in place while the rest scroll","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["alias","label"],"additionalProperties":false}}},"required":["alias","label","fields","views"],"additionalProperties":false}},"roles":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable role alias, bound to a workspace group when the model is applied"},"label":{"type":"string","minLength":1,"description":"The group's name in the workspace"}},"required":["alias","label"],"additionalProperties":false}},"templates":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"html"},"content":{"type":"string","minLength":1,"description":"Inline template content; placeholders reference field aliases"},"content_sha256":{"description":"sha256 (64-char lowercase hex) of the utf-8 content; derived where the template is written when absent","type":"string"},"locale":{"description":"The language its figures, dates and amounts in words print in; absent prints in the organization's","type":"string","enum":["vi","en"]}},"required":["alias","label","type","content"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"email"},"content":{"type":"string","minLength":1,"description":"Inline template content; placeholders reference field aliases"},"content_sha256":{"description":"sha256 (64-char lowercase hex) of the utf-8 content; derived where the template is written when absent","type":"string"},"locale":{"description":"The language its figures, dates and amounts in words print in; absent prints in the organization's","type":"string","enum":["vi","en"]}},"required":["alias","label","type","content"],"additionalProperties":false},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"excel"},"file_id":{"type":"string","pattern":"^fil_","description":"The uploaded .xlsx (`fil_…`) the template is made from; its markers read what the export fills it with"}},"required":["alias","label","type","file_id"],"additionalProperties":false}],"description":"html is a page a workflow renders to a PDF; email is a message a workflow sends; excel is a workbook a register's export fills"}}},"required":["entities","roles","templates"],"additionalProperties":false},"findings":{"type":"array","items":{"type":"object","properties":{"severity":{"type":"string","enum":["error","warning","info"]},"area":{"type":"string","description":"Where it was found — \"entities.<alias>.fields\", \"entities.<alias>.views.<alias>\", \"templates\"."},"message":{"type":"string"}},"required":["severity","area","message"],"additionalProperties":false},"description":"What the tables hold that a model cannot carry, and was dropped."},"pulled_in":{"type":"array","items":{"type":"string"},"description":"Labels of the entities the link closure added — tables nobody named. Empty when every table here was read."}},"required":["contract","findings","pulled_in"],"additionalProperties":false},"post_v1_workspaces_scaffold_Response":{"type":"object","properties":{"entities":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string"},"table_id":{"type":"string"},"created":{"type":"boolean","description":"False when an existing table of that label was adopted."},"created_fields":{"type":"number","description":"Columns this run added to that table."},"created_options":{"type":"number","description":"Select options this run added to its fields — a new field's own among them."},"created_views":{"type":"number","description":"Views this run added to it."},"settled_fields":{"type":"number","description":"Fields the table already had that this run gave the model's default or format — no stored value changes."},"bound_by":{"type":"string","enum":["created","id","label"],"description":"How the table was found: created by this run, through the binding this workspace already held, or by its label."}},"required":["alias","table_id","created","created_fields","created_options","created_views","settled_fields","bound_by"],"additionalProperties":false},"description":"Every entity the model declares, in contract order, with what this run put on it."},"roles":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string"},"group_id":{"type":"string"},"created":{"type":"boolean","description":"False when an existing group of that label was adopted — it may already hold members this model never named."}},"required":["alias","group_id","created"],"additionalProperties":false}},"record_ids":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Ids of the rows written, per entity alias — the handle for deleting them again."},"rows_skipped":{"type":"boolean","description":"True when rows were sent and none were written, because a bound table already holds records."},"drift":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["entity","field","option","template","role","view","row","document","app"]},"alias":{"type":"string","description":"`order`, `order.state`, `order.state:open`."},"id":{"type":"string"},"on":{"description":"The table a field or option sits on — neither is addressable alone.","type":"string"},"under":{"description":"The field an option belongs to, for the same reason.","type":"string"},"model_label":{"type":"string"},"live_label":{"type":"string"}},"required":["kind","alias","id","model_label","live_label"],"additionalProperties":false},"description":"Bound aliases this workspace calls something other than the model does. Not a refusal: the binding says the two are one thing, so a moved name is a rename."},"carried_rules":{"description":"Entity aliases whose adopted table kept its own row rule — the model states a different one, and every door goes on serving the table's.","type":"array","items":{"type":"string"}},"kept_marks":{"description":"Options of an adopted field that kept a mark other than the model's — every surface draws the live one.","type":"array","items":{"type":"object","properties":{"alias":{"type":"string","description":"`order.state:open`."},"model":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"},"live":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["alias","model","live"],"additionalProperties":false}},"unwritten_marks":{"description":"Adopted fields the model marks and this run left unmarked: a field marks every option or none, and these options have no mark the model states.","type":"array","items":{"type":"object","properties":{"alias":{"type":"string","description":"`order.state`."},"bare":{"type":"array","items":{"type":"string"},"description":"The live options the model does not list, which wear no mark."}},"required":["alias","bare"],"additionalProperties":false}}},"required":["entities","roles","record_ids","rows_skipped","drift"],"additionalProperties":false},"post_v1_workspace_backups_backup_id_restore_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"delete_v1_workspaces_id_Response":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean"}},"required":["id","deleted"],"additionalProperties":false},"post_v1_notifications_Response":{"type":"object","properties":{"created":{"type":"boolean"}},"required":["created"],"additionalProperties":false},"delete_v1_notifications_Response":{"type":"object","properties":{"deleted":{"type":"boolean"}},"required":["deleted"],"additionalProperties":false},"get_v1_notifications_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_notifications_notification_id_done_Response"}},"post_v1_notifications_notification_id_done_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"send_notification_tool","description":"Notification triggered by automation tool"},"data":{"type":"object","properties":{},"additionalProperties":false,"description":"Additional data associated with the notification"}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"approval_request"},"data":{"type":"object","properties":{"approval_request_id":{"type":"string"},"workflow_name":{"type":"string"},"workflow_execution_id":{"type":"string"},"resolved_status":{"type":"string","enum":["approved","rejected","timed_out","cancelled"]},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_comment":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["approval_request_id","workflow_name","workflow_execution_id"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"locked_record_change"},"data":{"type":"object","properties":{"approval_request_id":{"type":"string"},"table_id":{"type":"string"},"table_name":{"type":"string"},"record_id":{"type":"string"},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"field_name":{"type":"string"},"old_value_display":{"type":"string"},"new_value_display":{"type":"string"}},"required":["field_key","field_name","old_value_display","new_value_display"],"additionalProperties":false}},"reason":{"type":"string"},"requested_by_name":{"type":"string"},"resolved_status":{"type":"string","enum":["approved","rejected","timed_out","cancelled"]},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"resolved_comment":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["approval_request_id","table_id","table_name","record_id","changes","reason","requested_by_name"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"record_allowance"},"data":{"type":"object","properties":{"plan_id":{"type":"string"},"records_live":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"record_quota":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"threshold":{"type":"string","enum":["approaching","exceeded"]}},"required":["plan_id","records_live","record_quota","threshold"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"workflow_execution_failed"},"data":{"type":"object","properties":{"workflow_id":{"type":"string"},"workflow_name":{"type":"string"},"execution_id":{"type":"string"},"authority_type":{"type":"string","enum":["table","app","trigger"]},"authority_id":{"type":"string"},"resource_name":{"type":"string"},"error_message":{"type":"string"}},"required":["workflow_id","workflow_name","execution_id","authority_type","authority_id","resource_name","error_message"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"app_sharing_cleared"},"data":{"type":"object","properties":{"app_id":{"type":"string"},"app_name":{"type":"string"},"previous_owner_member_id":{"type":"string"},"bindings_revoked":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"reason":{"type":"string","enum":["transfer","offboarding"]}},"required":["app_id","app_name","previous_owner_member_id","bindings_revoked","reason"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"resources_handed_over"},"data":{"type":"object","properties":{"from_member_id":{"type":"string"},"items":{"minItems":1,"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table_check"]},"resource_id":{"type":"string"}},"required":["resource_type","resource_id"],"additionalProperties":false}}},"required":["from_member_id","items"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the notification"},"title":{"type":"string","description":"Title/heading of the notification"},"body":{"type":"string","description":"The message to display in the notification."},"member_id":{"type":"string","description":"ID of the member who should receive this notification"},"workspace_id":{"type":"string","description":"ID of the workspace this notification belongs to"},"level":{"anyOf":[{"type":"string","enum":["urgent","warning","info","success"]},{"type":"null"}],"description":"Notification level"},"created_at":{"type":"string","description":"Timestamp when notification was created"},"done_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when notification was marked as done/read"},"type":{"type":"string","const":"stage_handoff"},"data":{"type":"object","properties":{"app_id":{"type":"string"},"app_name":{"type":"string"},"table_id":{"type":"string"},"record_id":{"type":"string"},"record_title":{"type":"string"},"field_key":{"type":"string"},"option_key":{"type":"string"},"step_name":{"type":"string"},"figure":{"anyOf":[{"type":"string"},{"type":"null"}]},"handed_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"due_at":{"anyOf":[{"anyOf":[{"type":"string","format":"date","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])))$"},{"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|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}]},{"type":"null"}]},"moved_on_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["app_id","app_name","table_id","record_id","record_title","field_key","option_key","step_name","figure","handed_by_member_id","due_at"],"additionalProperties":false}},"required":["id","title","body","member_id","workspace_id","level","created_at","done_at","type","data"],"additionalProperties":false}]},"get_v1_files_Response":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pass as `cursor` for the next page. Null on the last one."}},"required":["files","next_cursor"],"additionalProperties":false},"post_v1_files_Response":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"},"description":"Successfully uploaded files"},"errors":{"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename that failed to upload"},"error":{"type":"string","description":"Error message describing the failure reason"}},"required":["filename","error"],"additionalProperties":false},"description":"Files that failed to upload with error details"}},"required":["files","errors"],"additionalProperties":false},"get_v1_files_auth_token_Response":{"type":"object","properties":{"token":{"type":"string"},"expires_at":{"type":"string"}},"required":["token","expires_at"],"additionalProperties":false},"delete_v1_files_profile_image_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"post_v1_files_upload_url_Response":{"type":"object","properties":{"upload_url":{"type":"string"},"ticket_id":{"type":"string"},"method":{"type":"string","const":"PUT"},"expires_at":{"type":"string"},"max_bytes":{"type":"number"},"required_headers":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["upload_url","ticket_id","method","expires_at","max_bytes","required_headers"],"additionalProperties":false},"post_v1_files_profile_image_Response":{"type":"object","properties":{"file":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"},"small_variant_url":{"type":"string"}},"required":["file","small_variant_url"],"additionalProperties":false},"post_v1_files_multipart_abort_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"post_v1_files_direct_complete_Response":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"},"description":"Successfully uploaded files"},"errors":{"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename that failed to upload"},"error":{"type":"string","description":"Error message describing the failure reason"}},"required":["filename","error"],"additionalProperties":false},"description":"Files that failed to upload with error details"}},"required":["files","errors"],"additionalProperties":false},"post_v1_files_multipart_complete_Response":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_files_file_id_rename_Response"},"description":"Successfully uploaded files"},"errors":{"type":"array","items":{"type":"object","properties":{"filename":{"type":"string","description":"Original filename that failed to upload"},"error":{"type":"string","description":"Error message describing the failure reason"}},"required":["filename","error"],"additionalProperties":false},"description":"Files that failed to upload with error details"}},"required":["files","errors"],"additionalProperties":false},"post_v1_files_direct_init_Response":{"type":"object","properties":{"file_id":{"type":"string"},"file_storage_key":{"type":"string"},"upload_url":{"type":"string"}},"required":["file_id","file_storage_key","upload_url"],"additionalProperties":false},"post_v1_files_multipart_init_Response":{"type":"object","properties":{"file_id":{"type":"string"},"upload_id":{"type":"string"},"file_storage_key":{"type":"string"},"part_size":{"type":"number"},"parts":{"type":"array","items":{"type":"object","properties":{"part_number":{"type":"number"},"url":{"type":"string"}},"required":["part_number","url"],"additionalProperties":false}}},"required":["file_id","upload_id","file_storage_key","part_size","parts"],"additionalProperties":false},"put_v1_files_upload_token_Response":{"type":"object","properties":{"file_id":{"type":"string"},"file_name":{"type":"string"},"mime_type":{"type":"string"},"size_bytes":{"type":"number"},"sha256":{"type":"string","description":"sha256 of the bytes received, so a caller can prove they arrived intact."}},"required":["file_id","file_name","mime_type","size_bytes","sha256"],"additionalProperties":false},"get_v1_files_file_id_signed_url_Response":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},"get_v1_files_file_id_versions_Response":{"type":"object","properties":{"original_file_id":{"type":"string"},"current_version_id":{"type":"string"},"versions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"filename":{"type":"string"},"url":{"type":"string"},"file_storage_key":{"type":"string"},"mime_type":{"type":"string"},"created_at":{"type":"string"},"is_current":{"type":"boolean"},"source_file_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","filename","url","file_storage_key","mime_type","created_at","is_current","source_file_id"],"additionalProperties":false},"description":"Ordered newest → oldest. Index 0 is the current version."}},"required":["original_file_id","current_version_id","versions"],"additionalProperties":false},"post_v1_files_file_id_rename_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the processed file"},"filename":{"type":"string","description":"Original filename of the uploaded file"},"mime_type":{"type":"string","description":"MIME type of the file (e.g., 'image/png', 'application/pdf')"},"url":{"description":"Stable file serving URL, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"provider":{"type":"string","description":"Storage provider name (e.g., 'aws', 'gcs')"},"file_storage_key":{"type":"string","description":"Storage key/path where the file is stored"},"workspace_id":{"type":"string","description":"ID of the workspace this file belongs to"},"size":{"description":"Byte size of the stored object (null until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when file was uploaded"},"metadata":{"description":"Additional metadata about the file"},"data":{"description":"File-type-specific data (e.g., {width, height, orientation} for images)"}},"required":["id","filename","mime_type","provider","file_storage_key","workspace_id","created_at","metadata","data"],"additionalProperties":false},"get_v1_workflows_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_workflows_workflow_id_Response"}},"post_v1_workflows_dry_run_Response":{"type":"object","properties":{"errors":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["parse","typecheck","resolve","lint","structural"]},"severity":{"type":"string","enum":["error","warning"]},"code":{"type":"string"},"message":{"type":"string"},"step_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"step_path":{"type":"array","items":{"type":"number"}},"line":{"type":"number"},"lines":{"type":"array","items":{"type":"number"}},"col":{"type":"number"},"suggestion":{"type":"string"}},"required":["source","severity","code","message"],"additionalProperties":false}},"warnings":{"type":"array","items":{"type":"object","properties":{"source":{"type":"string","enum":["parse","typecheck","resolve","lint","structural"]},"severity":{"type":"string","enum":["error","warning"]},"code":{"type":"string"},"message":{"type":"string"},"step_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"step_path":{"type":"array","items":{"type":"number"}},"line":{"type":"number"},"lines":{"type":"array","items":{"type":"number"}},"col":{"type":"number"},"suggestion":{"type":"string"}},"required":["source","severity","code","message"],"additionalProperties":false}},"planned_calls":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string"},"tool_name":{"type":"string"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["step_id","tool_name","input"],"additionalProperties":false}},"step_outputs":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"return_value":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["success","error"]},"message":{"type":"string"},"field_errors":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"data":{}},"required":["status","message"],"additionalProperties":false},{"type":"null"}]},"validation_failures":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string"},"field_key":{"anyOf":[{"type":"string"},{"type":"null"}]},"message":{"type":"string"}},"required":["step_id","field_key","message"],"additionalProperties":false}},"planned_waits":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string"},"kind":{"type":"string","enum":["wait","wait_for_event","wait_for_approval"]}},"required":["step_id","kind"],"additionalProperties":false}},"evaluation_errors":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string"},"message":{"type":"string"}},"required":["step_id","message"],"additionalProperties":false}},"tool_input_errors":{"type":"array","items":{"type":"object","properties":{"step_id":{"type":"string"},"tool_name":{"type":"string"},"message":{"type":"string"}},"required":["step_id","tool_name","message"],"additionalProperties":false}},"halted":{"type":"boolean"}},"required":["errors","warnings","planned_calls","step_outputs","return_value","validation_failures","planned_waits","evaluation_errors","tool_input_errors","halted"],"additionalProperties":false},"post_v1_workflows_rescan_Response":{"type":"object","properties":{"total":{"type":"number"},"updated":{"type":"number"}},"required":["total","updated"],"additionalProperties":false},"get_v1_workflows_workflow_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workflow"},"name":{"type":"string","description":"Display name of the workflow"},"description":{"type":"string","description":"Human-readable description of what this workflow does"},"steps":{"description":"AST-valued step tree (tool calls, conditionals, loops)."},"metadata":{"description":"Metadata for the workflow","anyOf":[{"type":"object","properties":{"table_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the tables this workflow affects"},"staged_for_app_id":{"description":"Present while the row is a draft-staged fork for this app; cleared when the app publishes the binding. Marked rows left unbound are archived at publish/discard.","type":"string"}},"required":["table_ids"],"additionalProperties":false},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Current version number"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"imports_into":{"description":"The table this workflow brings data into: its runs are the imports log of a register over that table that keeps one (`register.imports`). Null, it imports into none.","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this workflow belongs to"},"created_at":{"type":"string","description":"Timestamp when workflow was created"},"updated_at":{"type":"string","description":"Timestamp of last update"}},"required":["id","name","description","steps","current_version","enabled","workspace_id","created_at","updated_at"],"additionalProperties":false},"patch_v1_workflows_workflow_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the workflow"},"name":{"type":"string","description":"Display name of the workflow"},"description":{"type":"string","description":"Human-readable description of what this workflow does"},"steps":{"description":"AST-valued step tree (tool calls, conditionals, loops)."},"metadata":{"description":"Metadata for the workflow","anyOf":[{"type":"object","properties":{"table_ids":{"type":"array","items":{"type":"string"},"description":"IDs of the tables this workflow affects"},"staged_for_app_id":{"description":"Present while the row is a draft-staged fork for this app; cleared when the app publishes the binding. Marked rows left unbound are archived at publish/discard.","type":"string"}},"required":["table_ids"],"additionalProperties":false},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Current version number"},"enabled":{"type":"boolean","description":"Whether this workflow is active"},"imports_into":{"description":"The table this workflow brings data into: its runs are the imports log of a register over that table that keeps one (`register.imports`). Null, it imports into none.","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this workflow belongs to"},"created_at":{"type":"string","description":"Timestamp when workflow was created"},"updated_at":{"type":"string","description":"Timestamp of last update"}},"required":["id","name","description","steps","current_version","enabled","workspace_id","created_at","updated_at"],"additionalProperties":false},"post_v1_document_templates_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"get_v1_document_templates_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_document_templates_document_template_id_unmark_variable_Response"}},"delete_v1_document_templates_document_template_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_document_templates_document_template_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"patch_v1_document_templates_document_template_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_find_text_Response":{"type":"object","properties":{"occurrences":{"type":"array","items":{"type":"object","properties":{"occurrence_index":{"type":"number"},"element_index":{"type":"number"},"context_before":{"type":"string"},"matched_text":{"type":"string"},"context_after":{"type":"string"}},"required":["occurrence_index","element_index","context_before","matched_text","context_after"],"additionalProperties":false}}},"required":["occurrences"],"additionalProperties":false},"post_v1_document_templates_document_template_id_mark_conditional_region_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_mark_loop_region_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_mark_variable_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_unmark_conditional_region_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_unmark_loop_region_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_document_templates_document_template_id_unmark_variable_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the document template"},"workspace_id":{"type":"string","description":"ID of the workspace this template belongs to"},"name":{"type":"string","description":"Display name of the template"},"description":{"type":"string","description":"What the template produces, shown under its name in the library"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string","description":"Template content with variable placeholders (e.g., {{customer_name}})"},"format":{"type":"string","description":"Supported document formats."},"orientation":{"type":"string","enum":["portrait","landscape"],"description":"Page orientation for PDF generation"},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Data to pass to the template."},"locale":{"anyOf":[{"type":"string","enum":["vi","en"],"description":"The language its figures, dates and amounts in words print in: vi (Vietnamese) or en (English)"},{"type":"null"}],"description":"The language it prints in; null prints in the organization's"},"current_version":{"type":"number","description":"Current version number of the template"},"owner_member_id":{"description":"Member who created the template, from the IAM registry. Absent on write responses.","anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when template was created"},"template_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signed URL to download the template file (pdf-form/excel only)"}},"required":["id","workspace_id","name","description","type","template","variables","locale","current_version","created_at","template_url"],"additionalProperties":false},"post_v1_apps_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the app"},"name":{"type":"string","description":"Display name of the app"},"description":{"description":"Optional description of the app's purpose","anyOf":[{"type":"string"},{"type":"null"}]},"icon":{"description":"Icon name for the app (e.g., 'home', 'chart-bar')","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this app belongs to"},"current_version_id":{"description":"The app's current version — every change to the app makes a new one; null before the first.","anyOf":[{"type":"string"},{"type":"null"}]},"served_artifact":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"An opaque identity of what the app's origin serves. It changes when a version ships a new spec or bundle, and not when a binding write makes a version. Null when the origin serves nothing."},"public_subdomain":{"type":"string","description":"DNS label for the app's public origin, under the instance's apps domain. Server-generated, high-entropy, and distinct from `id` (app_ids are not valid DNS labels). Assigned at creation for every app."},"public_password_set":{"description":"Whether a shared password gates the public binding. True → anonymous visitors must authenticate at `/v1/apps/{app_id}/public/authenticate` before any publicAppAccess endpoint resolves. The hash itself is never sent over the wire; only this flag is exposed (and only on authenticated owner-side reads — the public by-subdomain response surfaces the same fact as `requires_password`).","type":"boolean"},"workflows":{"description":"Alias → workflow declaration map. Each alias resolves to a workflow_id and an optional typed inputs schema, set by `set_app_workflow` / `remove_app_binding` or a model apply; a deploy carries it forward. The iframe SDK's useWorkflow(alias) resolves through this map; when an inputs schema is declared, the server validates payloads against it before invocation. The workflow always executes under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"workflow_id":{"type":"string","description":"ID of the workflow this alias resolves to"},"inputs":{"description":"Typed input schema for the workflow alias. Keys are input names; values declare type + constraints. The server validates payloads against this schema before invoking the workflow; CLI codegen emits typed `useWorkflow<alias>` signatures for the app side. Omit `inputs` for workflows that accept no inputs or whose shape isn't worth declaring.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the data the workflow returns via `return({ data })`. Keys are field names; values declare type + (nested object/array) shape. The server validates the returned data against this schema at the app boundary and the workflow won't save unless its `return({ data })` matches; CLI codegen types `result.data`. Omit when the workflow returns no data, or pass it through untyped.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"description":{"description":"What this workflow does, in one line — read by an agent choosing between the app's aliases, the same job a query's `description` does. Omitted, the workflow keeps the description already on it. Capped at 300 characters.","type":"string"},"body_sha":{"description":"Fingerprint of the body currently bound to this alias, written by the server on every accepted `set_app_workflow`. Never sent by a caller — it is the value a caller's `expected_body_sha` is checked against, so that a push built on a stale copy of the body is refused instead of silently overwriting whatever replaced it. Absent on a binding last written before the field existed, where no comparison is possible.","type":"string"},"table_ids":{"description":"Tables the bound workflow reads or writes, scanned by the server from its body and trigger. Read-only. Codegen unions these with the tables the app's queries name, so a field the app only WRITES still has an `F`/`OPT` alias to type against.","type":"array","items":{"type":"string"}}},"required":["workflow_id"],"additionalProperties":false}},{"type":"null"}]},"queries":{"description":"Alias → query declaration map. Each alias resolves to a fixed query AST template with a typed param schema, set by `set_app_queries` or a model apply; a deploy carries it forward. The iframe SDK's useQuery(alias, params) resolves through this map; custom-code apps never send a raw AST. The query runs under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ast":{"description":"Query AST template (a QueryNode). Validated server-side via parseQueryNode at deploy. May embed {{params.<name>}} tokens in filter value positions."},"params":{"description":"Typed param schema. Keys are param names referenced as {{params.<name>}} in the ast; values declare type + constraints. The server validates the caller's params payload against this before interpolating. Omit for queries that take no params.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"description":{"description":"What this query returns, in one line — read by an agent choosing between the app's aliases. An alias is a JS identifier, which names a query without saying what it covers. Capped at 300 characters.","type":"string"},"templates":{"description":"Document templates an export of this query's rows may fill, by the name the export asks for. An export names one of these or none; a template it does not declare is refused.","type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"},"additionalProperties":{"type":"object","properties":{"template_id":{"type":"string","minLength":1,"description":"The document template (`dtl_…`) filled: an Excel workbook, or an HTML page made a PDF."},"rows":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$","description":"The key the template lists the rows under, beside title, lines, readings, at, dates, period, per."},"tabs":{"description":"The keys each of a register's tabs lists its rows under, beside the rows; every export filling the template sends exactly these.","minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"}}},"required":["template_id","rows"],"additionalProperties":false}}},"required":["ast"],"additionalProperties":false}},{"type":"null"}]},"capabilities":{"description":"Opt-in app capabilities, set by `update_app` or a model apply; a deploy carries them forward. Capabilities are off unless declared — least ambient authority. `comments` gates the members-only `useComments` primitive: only an app that declares it can read/write record comments (each under the VIEWING member's own authority).","anyOf":[{"type":"object","properties":{"comments":{"description":"Enable the members-only `useComments` primitive. When true, the app may read/write record comments — each operation under the VIEWING member's own table access, row-scope, and author identity (never the app owner's). Default off.","type":"boolean"},"photo_places":{"description":"Serve each photo's `place` — where the device stood as it took it, as its upload stated — on the file cells this app's reads return, to a member of the app's organization only; a caller outside it never receives one. Default off: no read carries a place.","type":"boolean"}},"additionalProperties":false},{"type":"null"}]},"agents":{"description":"Alias → agent declaration map. Each alias binds a streaming tool-loop agent the app runs via `useAgentRun(alias)` (an SSE stream), with declared tools, model, and typed inputs/outputs, set by `set_app_agent` / `remove_app_binding` or a model apply; a deploy carries it forward. The agent runs under the app's IAM principal; runs persist a flat history per session.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System instructions for the agent — the task it performs per run."},"tool_names":{"type":"array","items":{"type":"string","minLength":1},"description":"Tools the agent may call, resolved against the shared registry minus the automation blacklist. The capability boundary — the run can use nothing else. May be empty for a pure-reasoning agent."},"knowledge_doc_ids":{"description":"Knowledge docs the agent may read, validated at declare time against the app owner's `use` access. Small docs are inlined into the agent's system prompt each run; a doc too large to inline requires the code tools (code_exec) in tool_names and is read by staging it into a code run. Omit for an agent that needs no knowledge.","type":"array","items":{"type":"string","minLength":1}},"query_aliases":{"description":"Named queries from this app's manifest the agent may run via `run_app_query`, validated at declare time against the app's own queries. This is the agent's ENTIRE read surface over workspace data — a template fixes the tables, filters, and projection, so it bounds rows and columns, not just tables. Omit for an agent that reads no records.","type":"array","items":{"type":"string","minLength":1}},"workflow_aliases":{"description":"Workflows from this app's manifest the agent may invoke via `run_app_workflow`, validated at declare time against the app's own workflows. This is the agent's ENTIRE write surface — the same declared mutation path the app's UI uses, so table hooks and side-effect harvesting apply. Omit for a read-only agent.","type":"array","items":{"type":"string","minLength":1}},"model_tier":{"description":"Model tier the agent runs on — `haiku`, `sonnet`, or `opus`. Omit to follow the platform default tier, resolved at run time: the preferred choice. A tier names capability, not a version, so the generation behind it moves with the platform and this declaration never needs a rewrite. Pin only a deliberate, tested choice.","type":"string","enum":["haiku","sonnet","opus"]},"effort_level":{"description":"Reasoning depth for adaptive-thinking tiers — one of the chosen tier's supported levels (validated against model_tier at declare time). Omit to use the model default; ignored on tiers without adaptive thinking.","type":"string","enum":["low","medium","high","xhigh","max"]},"prefix_cache_ttl":{"description":"How long this agent's prompt-cache prefix (tools + system block) is kept warm. Omit — the default (5m, Anthropic's own) is right for essentially every agent. \"1h\" doubles the write price (2x the input rate against 1.25x) to buy only the 5m..1h band, and an entry nothing re-reads inside the hour is paid for twice over; declining it still leaves the prefix cached at the default. Set it only from measured cadence, never a guess.","type":"string","enum":["5m","1h"]},"inputs":{"description":"Typed input schema for one run. Keys are input names; values declare type + constraints. The server validates the run payload against this before invoking; CLI codegen emits a typed `useAgentRun<alias>` signature. Omit for an untyped payload.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the structured result the agent emits. Keys are field names; values declare type + (nested object/array) shape. When declared, the run must emit a result matching it — the server validates before persisting and the SDK types `run.output`. Omit for a free-text run whose output is the final message.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"writes":{"description":"Where the run's outputs land: each named output written to a field of the one row an input names, under the app's authority, once the result validates — locks and hooks apply as to any update. Omit for an agent whose output is only returned.","type":"object","properties":{"table_id":{"type":"string","minLength":1,"description":"The table of the row written"},"row":{"type":"string","minLength":1,"description":"The input naming that row: a single `record_link` input to `table_id`"},"fields":{"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","minLength":1},"description":"Output name → the field key of `table_id` it is written to"}},"required":["table_id","row","fields"],"additionalProperties":false}},"required":["instructions","tool_names"],"additionalProperties":false}},{"type":"null"}]},"theme":{"description":"Theme settings for the app","anyOf":[{"type":"object","properties":{"color":{"description":"Theme color for the app","anyOf":[{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"can_author":{"description":"Whether the caller may author this app — deploy a version of it and change its bindings. True for the app's owner and for an organization admin. A `manager` share is not authoring: it manages the app under its owner's authority, which is somebody else's. Optional because an older server omits it — absent means that server's rule, an organization admin.","type":"boolean"},"created_at":{"type":"string","description":"Timestamp when app was created"},"updated_at":{"type":"string","description":"Timestamp of last update"}},"required":["id","name","workspace_id","served_artifact","public_subdomain","created_at","updated_at"],"additionalProperties":false},"get_v1_apps_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_apps_app_id_Response"}},"get_v1_waiting_rows_Response":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"app_id":{"type":"string"},"record_id":{"type":"string"},"title":{"type":"string","description":"The row's name, as its app's register names it."},"step":{"type":"string","description":"The step the row stands at, by its name."},"due_on":{"anyOf":[{"type":"string","format":"date","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])))$"},{"type":"null"}],"description":"The day the step should be done by — the day the row entered it, plus the days the step should take; null where the step states none or its entry is not read."},"stands_in_for":{"description":"Where the row waits on the caller only because they stand in today for its step's owner away: whom, and the last day away.","type":"object","properties":{"name":{"type":"string"},"until":{"type":"string","format":"date","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])))$"}},"required":["name","until"],"additionalProperties":false}},"required":["app_id","record_id","title","step","due_on"],"additionalProperties":false},"description":"The rows waiting on the caller, the soonest step's day first, those with none last."},"more":{"type":"boolean","description":"An app holds more rows waiting on the caller than the 50 listed of it; its register lists them all."},"unread":{"type":"array","items":{"type":"string"},"description":"The apps, by id, whose rows could not be read this time; the rows listed are the other apps'."}},"required":["rows","more","unread"],"additionalProperties":false},"get_v1_app_icons_Response":{"type":"object","properties":{"icons":{"type":"array","items":{"type":"string"}}},"required":["icons"],"additionalProperties":false},"post_v1_apps_reorder_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"get_v1_apps_by_subdomain_subdomain_Response":{"type":"object","properties":{"app_id":{"type":"string"},"app_name":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"requires_password":{"type":"boolean"},"comments_enabled":{"type":"boolean"},"timezone":{"type":"string","description":"The IANA zone of the app's workspace."},"default_currency":{"type":"string","description":"The ISO 4217 code of the app's workspace — what money a field states no code for is counted in."}},"required":["app_id","app_name","workspace_id","organization_id","requires_password","comments_enabled","timezone","default_currency"],"additionalProperties":false},"delete_v1_apps_app_id_Response":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}},"required":["id","deleted"],"additionalProperties":false},"get_v1_apps_app_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the app"},"name":{"type":"string","description":"Display name of the app"},"description":{"description":"Optional description of the app's purpose","anyOf":[{"type":"string"},{"type":"null"}]},"icon":{"description":"Icon name for the app (e.g., 'home', 'chart-bar')","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this app belongs to"},"current_version_id":{"description":"The app's current version — every change to the app makes a new one; null before the first.","anyOf":[{"type":"string"},{"type":"null"}]},"served_artifact":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"An opaque identity of what the app's origin serves. It changes when a version ships a new spec or bundle, and not when a binding write makes a version. Null when the origin serves nothing."},"public_subdomain":{"type":"string","description":"DNS label for the app's public origin, under the instance's apps domain. Server-generated, high-entropy, and distinct from `id` (app_ids are not valid DNS labels). Assigned at creation for every app."},"public_password_set":{"description":"Whether a shared password gates the public binding. True → anonymous visitors must authenticate at `/v1/apps/{app_id}/public/authenticate` before any publicAppAccess endpoint resolves. The hash itself is never sent over the wire; only this flag is exposed (and only on authenticated owner-side reads — the public by-subdomain response surfaces the same fact as `requires_password`).","type":"boolean"},"workflows":{"description":"Alias → workflow declaration map. Each alias resolves to a workflow_id and an optional typed inputs schema, set by `set_app_workflow` / `remove_app_binding` or a model apply; a deploy carries it forward. The iframe SDK's useWorkflow(alias) resolves through this map; when an inputs schema is declared, the server validates payloads against it before invocation. The workflow always executes under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"workflow_id":{"type":"string","description":"ID of the workflow this alias resolves to"},"inputs":{"description":"Typed input schema for the workflow alias. Keys are input names; values declare type + constraints. The server validates payloads against this schema before invoking the workflow; CLI codegen emits typed `useWorkflow<alias>` signatures for the app side. Omit `inputs` for workflows that accept no inputs or whose shape isn't worth declaring.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the data the workflow returns via `return({ data })`. Keys are field names; values declare type + (nested object/array) shape. The server validates the returned data against this schema at the app boundary and the workflow won't save unless its `return({ data })` matches; CLI codegen types `result.data`. Omit when the workflow returns no data, or pass it through untyped.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"description":{"description":"What this workflow does, in one line — read by an agent choosing between the app's aliases, the same job a query's `description` does. Omitted, the workflow keeps the description already on it. Capped at 300 characters.","type":"string"},"body_sha":{"description":"Fingerprint of the body currently bound to this alias, written by the server on every accepted `set_app_workflow`. Never sent by a caller — it is the value a caller's `expected_body_sha` is checked against, so that a push built on a stale copy of the body is refused instead of silently overwriting whatever replaced it. Absent on a binding last written before the field existed, where no comparison is possible.","type":"string"},"table_ids":{"description":"Tables the bound workflow reads or writes, scanned by the server from its body and trigger. Read-only. Codegen unions these with the tables the app's queries name, so a field the app only WRITES still has an `F`/`OPT` alias to type against.","type":"array","items":{"type":"string"}}},"required":["workflow_id"],"additionalProperties":false}},{"type":"null"}]},"queries":{"description":"Alias → query declaration map. Each alias resolves to a fixed query AST template with a typed param schema, set by `set_app_queries` or a model apply; a deploy carries it forward. The iframe SDK's useQuery(alias, params) resolves through this map; custom-code apps never send a raw AST. The query runs under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ast":{"description":"Query AST template (a QueryNode). Validated server-side via parseQueryNode at deploy. May embed {{params.<name>}} tokens in filter value positions."},"params":{"description":"Typed param schema. Keys are param names referenced as {{params.<name>}} in the ast; values declare type + constraints. The server validates the caller's params payload against this before interpolating. Omit for queries that take no params.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"description":{"description":"What this query returns, in one line — read by an agent choosing between the app's aliases. An alias is a JS identifier, which names a query without saying what it covers. Capped at 300 characters.","type":"string"},"templates":{"description":"Document templates an export of this query's rows may fill, by the name the export asks for. An export names one of these or none; a template it does not declare is refused.","type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"},"additionalProperties":{"type":"object","properties":{"template_id":{"type":"string","minLength":1,"description":"The document template (`dtl_…`) filled: an Excel workbook, or an HTML page made a PDF."},"rows":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$","description":"The key the template lists the rows under, beside title, lines, readings, at, dates, period, per."},"tabs":{"description":"The keys each of a register's tabs lists its rows under, beside the rows; every export filling the template sends exactly these.","minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"}}},"required":["template_id","rows"],"additionalProperties":false}}},"required":["ast"],"additionalProperties":false}},{"type":"null"}]},"capabilities":{"description":"Opt-in app capabilities, set by `update_app` or a model apply; a deploy carries them forward. Capabilities are off unless declared — least ambient authority. `comments` gates the members-only `useComments` primitive: only an app that declares it can read/write record comments (each under the VIEWING member's own authority).","anyOf":[{"type":"object","properties":{"comments":{"description":"Enable the members-only `useComments` primitive. When true, the app may read/write record comments — each operation under the VIEWING member's own table access, row-scope, and author identity (never the app owner's). Default off.","type":"boolean"},"photo_places":{"description":"Serve each photo's `place` — where the device stood as it took it, as its upload stated — on the file cells this app's reads return, to a member of the app's organization only; a caller outside it never receives one. Default off: no read carries a place.","type":"boolean"}},"additionalProperties":false},{"type":"null"}]},"agents":{"description":"Alias → agent declaration map. Each alias binds a streaming tool-loop agent the app runs via `useAgentRun(alias)` (an SSE stream), with declared tools, model, and typed inputs/outputs, set by `set_app_agent` / `remove_app_binding` or a model apply; a deploy carries it forward. The agent runs under the app's IAM principal; runs persist a flat history per session.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System instructions for the agent — the task it performs per run."},"tool_names":{"type":"array","items":{"type":"string","minLength":1},"description":"Tools the agent may call, resolved against the shared registry minus the automation blacklist. The capability boundary — the run can use nothing else. May be empty for a pure-reasoning agent."},"knowledge_doc_ids":{"description":"Knowledge docs the agent may read, validated at declare time against the app owner's `use` access. Small docs are inlined into the agent's system prompt each run; a doc too large to inline requires the code tools (code_exec) in tool_names and is read by staging it into a code run. Omit for an agent that needs no knowledge.","type":"array","items":{"type":"string","minLength":1}},"query_aliases":{"description":"Named queries from this app's manifest the agent may run via `run_app_query`, validated at declare time against the app's own queries. This is the agent's ENTIRE read surface over workspace data — a template fixes the tables, filters, and projection, so it bounds rows and columns, not just tables. Omit for an agent that reads no records.","type":"array","items":{"type":"string","minLength":1}},"workflow_aliases":{"description":"Workflows from this app's manifest the agent may invoke via `run_app_workflow`, validated at declare time against the app's own workflows. This is the agent's ENTIRE write surface — the same declared mutation path the app's UI uses, so table hooks and side-effect harvesting apply. Omit for a read-only agent.","type":"array","items":{"type":"string","minLength":1}},"model_tier":{"description":"Model tier the agent runs on — `haiku`, `sonnet`, or `opus`. Omit to follow the platform default tier, resolved at run time: the preferred choice. A tier names capability, not a version, so the generation behind it moves with the platform and this declaration never needs a rewrite. Pin only a deliberate, tested choice.","type":"string","enum":["haiku","sonnet","opus"]},"effort_level":{"description":"Reasoning depth for adaptive-thinking tiers — one of the chosen tier's supported levels (validated against model_tier at declare time). Omit to use the model default; ignored on tiers without adaptive thinking.","type":"string","enum":["low","medium","high","xhigh","max"]},"prefix_cache_ttl":{"description":"How long this agent's prompt-cache prefix (tools + system block) is kept warm. Omit — the default (5m, Anthropic's own) is right for essentially every agent. \"1h\" doubles the write price (2x the input rate against 1.25x) to buy only the 5m..1h band, and an entry nothing re-reads inside the hour is paid for twice over; declining it still leaves the prefix cached at the default. Set it only from measured cadence, never a guess.","type":"string","enum":["5m","1h"]},"inputs":{"description":"Typed input schema for one run. Keys are input names; values declare type + constraints. The server validates the run payload against this before invoking; CLI codegen emits a typed `useAgentRun<alias>` signature. Omit for an untyped payload.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the structured result the agent emits. Keys are field names; values declare type + (nested object/array) shape. When declared, the run must emit a result matching it — the server validates before persisting and the SDK types `run.output`. Omit for a free-text run whose output is the final message.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"writes":{"description":"Where the run's outputs land: each named output written to a field of the one row an input names, under the app's authority, once the result validates — locks and hooks apply as to any update. Omit for an agent whose output is only returned.","type":"object","properties":{"table_id":{"type":"string","minLength":1,"description":"The table of the row written"},"row":{"type":"string","minLength":1,"description":"The input naming that row: a single `record_link` input to `table_id`"},"fields":{"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","minLength":1},"description":"Output name → the field key of `table_id` it is written to"}},"required":["table_id","row","fields"],"additionalProperties":false}},"required":["instructions","tool_names"],"additionalProperties":false}},{"type":"null"}]},"theme":{"description":"Theme settings for the app","anyOf":[{"type":"object","properties":{"color":{"description":"Theme color for the app","anyOf":[{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"can_author":{"description":"Whether the caller may author this app — deploy a version of it and change its bindings. True for the app's owner and for an organization admin. A `manager` share is not authoring: it manages the app under its owner's authority, which is somebody else's. Optional because an older server omits it — absent means that server's rule, an organization admin.","type":"boolean"},"created_at":{"type":"string","description":"Timestamp when app was created"},"updated_at":{"type":"string","description":"Timestamp of last update"}},"required":["id","name","workspace_id","served_artifact","public_subdomain","created_at","updated_at"],"additionalProperties":false},"patch_v1_apps_app_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the app"},"name":{"type":"string","description":"Display name of the app"},"description":{"description":"Optional description of the app's purpose","anyOf":[{"type":"string"},{"type":"null"}]},"icon":{"description":"Icon name for the app (e.g., 'home', 'chart-bar')","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this app belongs to"},"current_version_id":{"description":"The app's current version — every change to the app makes a new one; null before the first.","anyOf":[{"type":"string"},{"type":"null"}]},"served_artifact":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"An opaque identity of what the app's origin serves. It changes when a version ships a new spec or bundle, and not when a binding write makes a version. Null when the origin serves nothing."},"public_subdomain":{"type":"string","description":"DNS label for the app's public origin, under the instance's apps domain. Server-generated, high-entropy, and distinct from `id` (app_ids are not valid DNS labels). Assigned at creation for every app."},"public_password_set":{"description":"Whether a shared password gates the public binding. True → anonymous visitors must authenticate at `/v1/apps/{app_id}/public/authenticate` before any publicAppAccess endpoint resolves. The hash itself is never sent over the wire; only this flag is exposed (and only on authenticated owner-side reads — the public by-subdomain response surfaces the same fact as `requires_password`).","type":"boolean"},"workflows":{"description":"Alias → workflow declaration map. Each alias resolves to a workflow_id and an optional typed inputs schema, set by `set_app_workflow` / `remove_app_binding` or a model apply; a deploy carries it forward. The iframe SDK's useWorkflow(alias) resolves through this map; when an inputs schema is declared, the server validates payloads against it before invocation. The workflow always executes under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"workflow_id":{"type":"string","description":"ID of the workflow this alias resolves to"},"inputs":{"description":"Typed input schema for the workflow alias. Keys are input names; values declare type + constraints. The server validates payloads against this schema before invoking the workflow; CLI codegen emits typed `useWorkflow<alias>` signatures for the app side. Omit `inputs` for workflows that accept no inputs or whose shape isn't worth declaring.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the data the workflow returns via `return({ data })`. Keys are field names; values declare type + (nested object/array) shape. The server validates the returned data against this schema at the app boundary and the workflow won't save unless its `return({ data })` matches; CLI codegen types `result.data`. Omit when the workflow returns no data, or pass it through untyped.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"description":{"description":"What this workflow does, in one line — read by an agent choosing between the app's aliases, the same job a query's `description` does. Omitted, the workflow keeps the description already on it. Capped at 300 characters.","type":"string"},"body_sha":{"description":"Fingerprint of the body currently bound to this alias, written by the server on every accepted `set_app_workflow`. Never sent by a caller — it is the value a caller's `expected_body_sha` is checked against, so that a push built on a stale copy of the body is refused instead of silently overwriting whatever replaced it. Absent on a binding last written before the field existed, where no comparison is possible.","type":"string"},"table_ids":{"description":"Tables the bound workflow reads or writes, scanned by the server from its body and trigger. Read-only. Codegen unions these with the tables the app's queries name, so a field the app only WRITES still has an `F`/`OPT` alias to type against.","type":"array","items":{"type":"string"}}},"required":["workflow_id"],"additionalProperties":false}},{"type":"null"}]},"queries":{"description":"Alias → query declaration map. Each alias resolves to a fixed query AST template with a typed param schema, set by `set_app_queries` or a model apply; a deploy carries it forward. The iframe SDK's useQuery(alias, params) resolves through this map; custom-code apps never send a raw AST. The query runs under the app's IAM principal.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"ast":{"description":"Query AST template (a QueryNode). Validated server-side via parseQueryNode at deploy. May embed {{params.<name>}} tokens in filter value positions."},"params":{"description":"Typed param schema. Keys are param names referenced as {{params.<name>}} in the ast; values declare type + constraints. The server validates the caller's params payload against this before interpolating. Omit for queries that take no params.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"description":{"description":"What this query returns, in one line — read by an agent choosing between the app's aliases. An alias is a JS identifier, which names a query without saying what it covers. Capped at 300 characters.","type":"string"},"templates":{"description":"Document templates an export of this query's rows may fill, by the name the export asks for. An export names one of these or none; a template it does not declare is refused.","type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"},"additionalProperties":{"type":"object","properties":{"template_id":{"type":"string","minLength":1,"description":"The document template (`dtl_…`) filled: an Excel workbook, or an HTML page made a PDF."},"rows":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$","description":"The key the template lists the rows under, beside title, lines, readings, at, dates, period, per."},"tabs":{"description":"The keys each of a register's tabs lists its rows under, beside the rows; every export filling the template sends exactly these.","minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-zA-Z_$][a-zA-Z0-9_$]*$"}}},"required":["template_id","rows"],"additionalProperties":false}}},"required":["ast"],"additionalProperties":false}},{"type":"null"}]},"capabilities":{"description":"Opt-in app capabilities, set by `update_app` or a model apply; a deploy carries them forward. Capabilities are off unless declared — least ambient authority. `comments` gates the members-only `useComments` primitive: only an app that declares it can read/write record comments (each under the VIEWING member's own authority).","anyOf":[{"type":"object","properties":{"comments":{"description":"Enable the members-only `useComments` primitive. When true, the app may read/write record comments — each operation under the VIEWING member's own table access, row-scope, and author identity (never the app owner's). Default off.","type":"boolean"},"photo_places":{"description":"Serve each photo's `place` — where the device stood as it took it, as its upload stated — on the file cells this app's reads return, to a member of the app's organization only; a caller outside it never receives one. Default off: no read carries a place.","type":"boolean"}},"additionalProperties":false},{"type":"null"}]},"agents":{"description":"Alias → agent declaration map. Each alias binds a streaming tool-loop agent the app runs via `useAgentRun(alias)` (an SSE stream), with declared tools, model, and typed inputs/outputs, set by `set_app_agent` / `remove_app_binding` or a model apply; a deploy carries it forward. The agent runs under the app's IAM principal; runs persist a flat history per session.","anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System instructions for the agent — the task it performs per run."},"tool_names":{"type":"array","items":{"type":"string","minLength":1},"description":"Tools the agent may call, resolved against the shared registry minus the automation blacklist. The capability boundary — the run can use nothing else. May be empty for a pure-reasoning agent."},"knowledge_doc_ids":{"description":"Knowledge docs the agent may read, validated at declare time against the app owner's `use` access. Small docs are inlined into the agent's system prompt each run; a doc too large to inline requires the code tools (code_exec) in tool_names and is read by staging it into a code run. Omit for an agent that needs no knowledge.","type":"array","items":{"type":"string","minLength":1}},"query_aliases":{"description":"Named queries from this app's manifest the agent may run via `run_app_query`, validated at declare time against the app's own queries. This is the agent's ENTIRE read surface over workspace data — a template fixes the tables, filters, and projection, so it bounds rows and columns, not just tables. Omit for an agent that reads no records.","type":"array","items":{"type":"string","minLength":1}},"workflow_aliases":{"description":"Workflows from this app's manifest the agent may invoke via `run_app_workflow`, validated at declare time against the app's own workflows. This is the agent's ENTIRE write surface — the same declared mutation path the app's UI uses, so table hooks and side-effect harvesting apply. Omit for a read-only agent.","type":"array","items":{"type":"string","minLength":1}},"model_tier":{"description":"Model tier the agent runs on — `haiku`, `sonnet`, or `opus`. Omit to follow the platform default tier, resolved at run time: the preferred choice. A tier names capability, not a version, so the generation behind it moves with the platform and this declaration never needs a rewrite. Pin only a deliberate, tested choice.","type":"string","enum":["haiku","sonnet","opus"]},"effort_level":{"description":"Reasoning depth for adaptive-thinking tiers — one of the chosen tier's supported levels (validated against model_tier at declare time). Omit to use the model default; ignored on tiers without adaptive thinking.","type":"string","enum":["low","medium","high","xhigh","max"]},"prefix_cache_ttl":{"description":"How long this agent's prompt-cache prefix (tools + system block) is kept warm. Omit — the default (5m, Anthropic's own) is right for essentially every agent. \"1h\" doubles the write price (2x the input rate against 1.25x) to buy only the 5m..1h band, and an entry nothing re-reads inside the hour is paid for twice over; declining it still leaves the prefix cached at the default. Set it only from measured cadence, never a guess.","type":"string","enum":["5m","1h"]},"inputs":{"description":"Typed input schema for one run. Keys are input names; values declare type + constraints. The server validates the run payload against this before invoking; CLI codegen emits a typed `useAgentRun<alias>` signature. Omit for an untyped payload.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the structured result the agent emits. Keys are field names; values declare type + (nested object/array) shape. When declared, the run must emit a result matching it — the server validates before persisting and the SDK types `run.output`. Omit for a free-text run whose output is the final message.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}},"writes":{"description":"Where the run's outputs land: each named output written to a field of the one row an input names, under the app's authority, once the result validates — locks and hooks apply as to any update. Omit for an agent whose output is only returned.","type":"object","properties":{"table_id":{"type":"string","minLength":1,"description":"The table of the row written"},"row":{"type":"string","minLength":1,"description":"The input naming that row: a single `record_link` input to `table_id`"},"fields":{"type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","minLength":1},"description":"Output name → the field key of `table_id` it is written to"}},"required":["table_id","row","fields"],"additionalProperties":false}},"required":["instructions","tool_names"],"additionalProperties":false}},{"type":"null"}]},"theme":{"description":"Theme settings for the app","anyOf":[{"type":"object","properties":{"color":{"description":"Theme color for the app","anyOf":[{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}]},"can_author":{"description":"Whether the caller may author this app — deploy a version of it and change its bindings. True for the app's owner and for an organization admin. A `manager` share is not authoring: it manages the app under its owner's authority, which is somebody else's. Optional because an older server omits it — absent means that server's rule, an organization admin.","type":"boolean"},"created_at":{"type":"string","description":"Timestamp when app was created"},"updated_at":{"type":"string","description":"Timestamp of last update"}},"required":["id","name","workspace_id","served_artifact","public_subdomain","created_at","updated_at"],"additionalProperties":false},"post_v1_apps_app_id_field_options_Response":{"type":"object","properties":{"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false,"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","label","color"],"additionalProperties":false}}},"required":["label","options"],"additionalProperties":false}},"units":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"vocabulary":{"type":"string","enum":["unit","currency"]},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key","label"],"additionalProperties":false}}},"required":["vocabulary","options"],"additionalProperties":false},"description":"Each number column read in each row's own unit or currency: the options a runtime filter on it names as `unit_option`"}},"required":["fields","units"],"additionalProperties":false},"get_v1_apps_app_id_imports_Response":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"log"},"workflows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"What a run's `workflow.id` names."},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"The workflows importing into the register's table, whether or not they have run."},"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"The run's id: what `useImportRun` reads its rows by."},"workflow":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The workflow that ran."},"at":{"type":"string","description":"When it started."},"until":{"description":"When it ended; absent while it runs.","type":"string"},"end":{"type":"string","enum":["running","done","failed","partial"],"description":"Still `running`; `done`; `failed` having written none of the rows the reader sees; `partial`, failed after writing some."},"added":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it added that the reader sees."},"changed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it changed a field of that the reader sees."},"removed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it removed that the reader sees."},"stopped":{"description":"Where a `failed` or `partial` run stopped, and why; absent on any other.","type":"object","properties":{"step":{"description":"The description of the step it stopped at; absent where it stopped at none.","type":"string"},"reason":{"description":"Why, as the run recorded it — it can quote any value the run read, so only a reader who manages the workflow is served it; absent otherwise, and where it recorded nothing.","type":"string"}},"additionalProperties":false}},"required":["id","workflow","at","end","added","changed","removed"],"additionalProperties":false},"description":"Newest first."},"next":{"description":"Where the log continues: pass it as `after`. Absent at its end.","type":"string"}},"required":["kind","workflows","runs"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"none"}},"required":["kind"],"additionalProperties":false}]},"get_v1_apps_app_id_write_model_Response":{"type":"object","properties":{"workflows":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"plan":{"type":"array","items":{"$ref":"#/components/schemas/WorkflowStep"},"description":"The record-write subset of its body; empty where it writes no record."},"table_ids":{"type":"array","items":{"type":"string"},"description":"Every table its body names, so a run re-reads the queries over them."}},"required":["plan","table_ids"],"additionalProperties":false},"description":"Each bound workflow, by alias."},"queries":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"columns":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"object","properties":{"table_id":{"type":"string"},"field_key":{"type":"string"}},"required":["table_id","field_key"],"additionalProperties":false},{"type":"object","properties":{"table_id":{"type":"string"},"via":{"type":"string"},"target_table_id":{"type":"string"},"field_key":{"type":"string"}},"required":["table_id","via","target_table_id","field_key"],"additionalProperties":false}]},{"type":"null"}]},"description":"Each output column by the field it reads."},"rows":{"description":"A read of one table's rows.","type":"object","properties":{"table_id":{"type":"string"},"filter":{"description":"The stored template, its `{{params.x}}` tokens standing, so a caller fills them from the call.","$ref":"#/components/schemas/TableRecordFilters"},"closed":{"type":"boolean","description":"Which rows the read holds turns on more than each row's own cells (free text, a cap), so a client neither adds a row to it nor counts one in or out."},"sort":{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"order":{"type":"string","enum":["asc","desc"]}},"required":["field_key","order"],"additionalProperties":false},"description":"The read's own order, by the fields of its rows' table: where a new row stands among them."}},"required":["table_id","closed","sort"],"additionalProperties":false},"totals":{"description":"A total over one table's rows, one aggregate per output column, grouped by fields.","type":"object","properties":{"table_id":{"type":"string"},"filter":{"$ref":"#/components/schemas/TableRecordFilters"},"by":{"type":"array","items":{"type":"object","properties":{"output":{"type":"string"},"field_key":{"type":"string"}},"required":["output","field_key"],"additionalProperties":false}},"aggregates":{"type":"array","items":{"type":"object","properties":{"output":{"type":"string"},"operation":{"type":"string","enum":["count","empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked","selected","string_agg"]},"field_key":{"type":"string"}},"required":["output","operation"],"additionalProperties":false}}},"required":["table_id","by","aggregates"],"additionalProperties":false}},"required":["columns"],"additionalProperties":false}},"tables":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_tables_table_id_fields_field_key_Response"}}},"required":["id","name","fields"],"additionalProperties":false},"description":"The tables the plans and queries touch, with only the fields they name."}},"required":["workflows","queries","tables"],"additionalProperties":false},"post_v1_apps_app_id_export_Response":{"type":"object","properties":{"file":{"type":"object","properties":{"filename":{"type":"string"},"mime_type":{"type":"string"},"url":{"type":"string","description":"The file, signed for at most an hour."},"size":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Bytes."},"created_at":{"type":"string","description":"When the export was made."}},"required":["filename","mime_type","url","size","created_at"],"additionalProperties":false}},"required":["file"],"additionalProperties":false},"get_v1_apps_app_id_embed_grant_Response":{"type":"object","properties":{"grant":{"type":"string"},"expires_at":{"type":"string"}},"required":["grant","expires_at"],"additionalProperties":false},"get_v1_apps_app_id_openapi_json_Response":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"An OpenAPI 3.1 document describing this app's published API."},"get_v1_apps_app_id_public_info_Response":{"type":"object","properties":{"app_id":{"type":"string"},"public_subdomain":{"type":"string"},"origin":{"type":"string"},"requires_password":{"type":"boolean"},"comments_enabled":{"type":"boolean"},"reader":{"description":"Who reads the app, as its host hands it: the caller's groups and who in the organization is away. Only for a member of the app's organization reading it in a browser or a render; absent for anyone else and for a key.","type":"object","properties":{"group_ids":{"type":"array","items":{"type":"string"},"description":"The member groups the viewing member is in, by id."},"absences":{"type":"array","items":{"type":"object","properties":{"member":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The member away."},"stand_in":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The member who, on every day away, may also do each stage the member away owns."},"starts_on":{"type":"string","format":"date","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])))$","description":"The first day away, in the workspace's calendar; it counts."},"ends_on":{"type":"string","format":"date","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])))$","description":"The last day away; it counts."},"group_ids":{"type":"array","items":{"type":"string"},"description":"The groups the member away is in, by id: a stage one of them owns waits on the one standing in too."}},"required":["member","stand_in","starts_on","ends_on","group_ids"],"additionalProperties":false},"description":"Who in the organization is away, or will be, and who stands in; an absence that has ended is left out."}},"required":["group_ids","absences"],"additionalProperties":false}},"required":["app_id","public_subdomain","origin","requires_password","comments_enabled"],"additionalProperties":false},"get_v1_apps_app_id_agent_runs_Response":{"type":"object","properties":{"runs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"app_id":{"type":"string"},"agent_alias":{"type":"string"},"session_id":{"type":"string"},"status":{"type":"string"},"input":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"output":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},{"type":"null"}]},"usage":{"anyOf":[{"type":"object","properties":{"input_tokens":{"type":"number"},"output_tokens":{"type":"number"}},"required":["input_tokens","output_tokens"],"additionalProperties":false},{"type":"null"}]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"triggered_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","app_id","agent_alias","session_id","status","input","output","usage","error_message","triggered_by_member_id","started_at","completed_at"],"additionalProperties":false}}},"required":["runs"],"additionalProperties":false},"get_v1_apps_app_id_members_Response":{"type":"object","properties":{"members":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"email":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"anyOf":[{"type":"string"},{"type":"null"}]},"groups":{"type":"array","items":{"type":"string"}},"role":{"type":"string","enum":["owner","admin","member"]},"joined":{"type":"string"}},"required":["id","name","email","image","groups","role"],"additionalProperties":false}}},"required":["members"],"additionalProperties":false},"get_v1_apps_app_id_versions_Response":{"type":"object","properties":{"current_version_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"versions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"version":{"type":"number"},"message":{"anyOf":[{"type":"string"},{"type":"null"}]},"build_status":{"type":"string"},"bundle_size_bytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_by_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","message","build_status","bundle_size_bytes","created_at","created_by","created_by_name"],"additionalProperties":false}}},"required":["current_version_id","versions"],"additionalProperties":false},"post_v1_apps_app_id_query_batch_Response":{"type":"object","properties":{"results":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"result":{"$ref":"#/components/schemas/post_v1_apps_app_id_queries_alias_Response"}},"required":["result"],"additionalProperties":false},{"type":"object","properties":{"error":{"type":"object","properties":{"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The status the read's own request would answer with."},"code":{"type":"string"},"message":{"type":"string"},"hint":{"type":"string"}},"required":["status","code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}]}}},"required":["results"],"additionalProperties":false},"post_v1_apps_app_id_query_Response":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"columns":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"source_fields_by_table_id":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{}}},"total":{"description":"Total rows in the filtered set. Present only when the request set `count: true`.","type":"number"},"counts":{"description":"Rows in the filtered set per value of the `count_by` column, or per name of `count_where`. Present only when the request set one of them.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"next_cursor":{"description":"Cursor for the next page (keyset mode only). Null when this was the last page; absent for offset/count requests.","anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"description":"True when more rows matched than were returned, so `rows` is short — the caller's `limit` or the server row cap cut it. Absent on a count request.","type":"boolean"}},"required":["rows","columns","source_fields_by_table_id"],"additionalProperties":false},"post_v1_apps_app_id_prediction_misses_Response":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"put_v1_apps_app_id_public_password_Response":{"type":"object","properties":{"app_id":{"type":"string"},"public_password_set":{"type":"boolean"}},"required":["app_id","public_password_set"],"additionalProperties":false},"put_v1_apps_app_id_subdomain_Response":{"type":"object","properties":{"app_id":{"type":"string"},"public_subdomain":{"type":"string"},"origin":{"type":"string"}},"required":["app_id","public_subdomain","origin"],"additionalProperties":false},"post_v1_apps_app_id_public_authenticate_Response":{"type":"object","properties":{"session_token":{"type":"string"},"expires_at":{"type":"string"}},"required":["session_token","expires_at"],"additionalProperties":false},"post_v1_apps_app_id_files_complete_Response":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"url":{"description":"Serving URL, signed for 24 hours.","type":"string"},"thumbnail_url":{"description":"Signed thumbnail, for an image.","type":"string"},"preview_url":{"type":"string"},"size":{"description":"Bytes, where the object records it.","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"When the file was uploaded.","type":"string"},"document_template_id":{"description":"The document template the file was generated from.","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"required":["file"],"additionalProperties":false},"get_v1_apps_app_id_api_publication_Response":{"type":"object","properties":{"published":{"type":"boolean"},"contract_version":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["published","contract_version","published_at"],"additionalProperties":false},"post_v1_apps_app_id_api_publish_Response":{"type":"object","properties":{"app_id":{"type":"string"},"contract_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"published_at":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"},"description":"What the published surface exposes that the owner may not have intended."}},"required":["app_id","contract_version","published_at","warnings"],"additionalProperties":false},"post_v1_apps_app_id_files_upload_url_Response":{"type":"object","properties":{"file_id":{"type":"string","description":"The id a workflow or agent `file` input takes, once `files/complete` has answered."},"file_storage_key":{"type":"string","description":"Sent back unchanged to `files/complete`."},"upload_url":{"type":"string","description":"PUT the bytes here, with the declared `Content-Type` and length, within 10 minutes."}},"required":["file_id","file_storage_key","upload_url"],"additionalProperties":false},"delete_v1_apps_app_id_api_publish_Response":{"type":"object","properties":{"app_id":{"type":"string"},"unpublished":{"type":"boolean","description":"False when the app was publishing nothing, which this leaves unchanged."}},"required":["app_id","unpublished"],"additionalProperties":false},"post_v1_apps_app_id_embed_grant_verify_Response":{"type":"object","properties":{"expires_at":{"type":"string"}},"required":["expires_at"],"additionalProperties":false},"get_v1_apps_app_id_imports_run_id_Response":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"run"},"run":{"type":"object","properties":{"id":{"type":"string","description":"The run's id: what `useImportRun` reads its rows by."},"workflow":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false,"description":"The workflow that ran."},"at":{"type":"string","description":"When it started."},"until":{"description":"When it ended; absent while it runs.","type":"string"},"end":{"type":"string","enum":["running","done","failed","partial"],"description":"Still `running`; `done`; `failed` having written none of the rows the reader sees; `partial`, failed after writing some."},"added":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it added that the reader sees."},"changed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it changed a field of that the reader sees."},"removed":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"The rows it removed that the reader sees."},"stopped":{"description":"Where a `failed` or `partial` run stopped, and why; absent on any other.","type":"object","properties":{"step":{"description":"The description of the step it stopped at; absent where it stopped at none.","type":"string"},"reason":{"description":"Why, as the run recorded it — it can quote any value the run read, so only a reader who manages the workflow is served it; absent otherwise, and where it recorded nothing.","type":"string"}},"additionalProperties":false}},"required":["id","workflow","at","end","added","changed","removed"],"additionalProperties":false},"rows":{"type":"array","items":{"type":"object","properties":{"record_id":{"type":"string"},"kind":{"type":"string","enum":["added","changed","removed"]},"at":{"type":"string","description":"When the run first wrote it."},"changes":{"type":"array","items":{"type":"object","properties":{"field_id":{"type":"string","description":"The field's id — what a spec's field `id` holds."},"label":{"type":"string","description":"The field's label in the app today; a field the app no longer has, its label when written."},"removed":{"description":"The field is gone from its table.","type":"boolean","const":true},"before":{"anyOf":[{"type":"null"},{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key","label"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"string"}},"required":["id","display"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}}],"description":"Before the entry's first edit of the field."},"after":{"anyOf":[{"type":"null"},{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key","label"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"string"}},"required":["id","display"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}}],"description":"After the entry's last edit of the field."}},"required":["field_id","label","before","after"],"additionalProperties":false},"description":"Its fields the reader sees, from before the run's first write to after its last: an added row's from nothing, a removed row's to nothing."}},"required":["record_id","kind","at","changes"],"additionalProperties":false},"description":"In the order the run first wrote them."},"next":{"description":"Where the rows continue: pass it as `after`. Absent at their end. A page holding fewer rows than it can still says it where more of the run lies past what it read.","type":"string"}},"required":["kind","run","rows"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"none"}},"required":["kind"],"additionalProperties":false}]},"get_v1_apps_app_id_agent_runs_run_id_Response":{"type":"object","properties":{"run":{"type":"object","properties":{"id":{"type":"string"},"app_id":{"type":"string"},"agent_alias":{"type":"string"},"session_id":{"type":"string"},"status":{"type":"string"},"input":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"output":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}]},{"type":"null"}]},"usage":{"anyOf":[{"type":"object","properties":{"input_tokens":{"type":"number"},"output_tokens":{"type":"number"}},"required":["input_tokens","output_tokens"],"additionalProperties":false},{"type":"null"}]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"triggered_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"pending_interactive":{"type":"object","properties":{"tool_call_id":{"type":"string"},"tool_name":{"type":"string"},"input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["tool_call_id","tool_name","input"],"additionalProperties":false}},"required":["id","app_id","agent_alias","session_id","status","input","output","usage","error_message","triggered_by_member_id","started_at","completed_at"],"additionalProperties":false}},"required":["run"],"additionalProperties":false},"get_v1_apps_app_id_versions_version_id_Response":{"type":"object","properties":{"id":{"type":"string"},"app_id":{"type":"string"},"version":{"type":"number"},"r2_prefix":{"anyOf":[{"type":"string"},{"type":"null"}]},"entry_html_path":{"type":"string"},"build_status":{"type":"string"},"bundle_size_bytes":{"anyOf":[{"type":"number"},{"type":"null"}]},"message":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","app_id","version","r2_prefix","entry_html_path","build_status","bundle_size_bytes","message","created_at","created_by"],"additionalProperties":false},"post_v1_apps_app_id_queries_alias_Response":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"columns":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"source_fields_by_table_id":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{}}},"total":{"description":"Total rows in the filtered set. Present only when the request set `count: true`.","type":"number"},"counts":{"description":"Rows in the filtered set per value of the `count_by` column, or per name of `count_where`. Present only when the request set one of them.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"next_cursor":{"description":"Cursor for the next page (keyset mode only). Null when this was the last page; absent for offset/count requests.","anyOf":[{"type":"string"},{"type":"null"}]},"truncated":{"description":"True when more rows matched than were returned, so `rows` is short — the caller's `limit` or the server row cap cut it. Absent on a count request.","type":"boolean"}},"required":["rows","columns","source_fields_by_table_id"],"additionalProperties":false},"get_v1_apps_app_id_records_record_id_activity_Response":{"type":"object","properties":{"entries":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"change"},"id":{"type":"string"},"actor":{"type":"object","properties":{"kind":{"type":"string","enum":["member","agent","workflow","import"],"description":"A person (`member`), an AI acting for one (`agent`), a workflow on its own (`workflow`), or a program bringing data in (`import`)."},"id":{"type":"string","description":"The member's id, for a member, an agent or an import a member ran; else the workflow's, or `system`."},"name":{"type":"string","description":"The member's name, else the workflow's; empty where neither resolves."},"image":{"description":"The member's avatar, presigned; absent where there is none.","type":"string"}},"required":["kind","id","name"],"additionalProperties":false},"at":{"type":"string","description":"When its first write was made."},"until":{"type":"string","description":"When its last write was made."},"created":{"description":"Its first write made the record: `changes` are what it was made with. Absent, every write edited it.","type":"boolean","const":true},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_id":{"type":"string","description":"The field's id — what a spec's field `id` holds."},"label":{"type":"string","description":"The field's label in the app today; a field the app no longer has, its label when written."},"removed":{"description":"The field is gone from its table.","type":"boolean","const":true},"before":{"anyOf":[{"type":"null"},{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key","label"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"string"}},"required":["id","display"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}}],"description":"Before the entry's first edit of the field."},"after":{"anyOf":[{"type":"null"},{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"}},"required":["key","label"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"string"}},"required":["id","display"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"image":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}}],"description":"After the entry's last edit of the field."}},"required":["field_id","label","before","after"],"additionalProperties":false}}},"required":["kind","id","actor","at","until","changes"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"comment"},"id":{"type":"string"},"actor":{"type":"object","properties":{"kind":{"type":"string","enum":["member","agent","workflow","import"],"description":"A person (`member`), an AI acting for one (`agent`), a workflow on its own (`workflow`), or a program bringing data in (`import`)."},"id":{"type":"string","description":"The member's id, for a member, an agent or an import a member ran; else the workflow's, or `system`."},"name":{"type":"string","description":"The member's name, else the workflow's; empty where neither resolves."},"image":{"description":"The member's avatar, presigned; absent where there is none.","type":"string"}},"required":["kind","id","name"],"additionalProperties":false},"at":{"type":"string","description":"When its first write was made."},"until":{"type":"string","description":"When its last write was made."},"comment":{"type":"object","properties":{"id":{"type":"string"},"body":{"type":"string","description":"The comment as it reads now."},"mentions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"The members it names."},"files":{"description":"The files attached to it, presigned; absent where it holds none.","type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}}},"required":["id","body","mentions"],"additionalProperties":false}},"required":["kind","id","actor","at","until","comment"],"additionalProperties":false}]},"description":"Newest first."},"next":{"description":"Where the trail continues: pass it as `after`. Absent at its end.","type":"string"}},"required":["entries"],"additionalProperties":false},"post_v1_apps_app_id_agent_runs_run_id_cancel_Response":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"post_v1_apps_app_id_workflows_alias_execute_Response":{"type":"object","properties":{"status":{"type":"string","enum":["success","error"],"description":"Status of the workflow execution"},"message":{"description":"Message returned from the workflow or fallback message","type":"string"},"execution_id":{"description":"The run's id when it failed. The app's owner reads the run's error under this id; a caller outside the app's organization receives a generic `message` beside it.","type":"string"},"files":{"description":"Files generated by the workflow","type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"url":{"description":"Serving URL, signed for 24 hours.","type":"string"},"thumbnail_url":{"description":"Signed thumbnail, for an image.","type":"string"},"preview_url":{"type":"string"},"size":{"description":"Bytes, where the object records it.","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"When the file was uploaded.","type":"string"},"document_template_id":{"description":"The document template the file was generated from.","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"data":{"description":"Structured data the workflow returned via `return({ data })`. Validated against the alias's declared `outputs` schema when present; passed through untyped otherwise. The wire shape is `unknown`; the SDK types it per alias from the declared outputs."},"field_errors":{"description":"Per-control refusals, each keyed by the input name the alias declares — a payload the alias refuses, the workflow's own `return({ field_errors })`, or the input a step's refused write took a field from — else by that field's key (`fld_…`) when no input wrote it. A form renders each against the control it names, where `message` can only say it at the dialog's scope.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"side_effects":{"description":"Honest post-run harvest of the run's side effects (created records/files, irreversible calls, possible sub-workflows). Present on every terminal status for a caller in the app's own organization; a caller outside it receives the workflow's own answer without it.","type":"object","properties":{"created_records":{"type":"array","items":{"type":"object","properties":{"table_id":{"type":"string"},"record_ids":{"type":"array","items":{"type":"string"}}},"required":["table_id","record_ids"],"additionalProperties":false},"description":"Records the run created, grouped by table — deletable by id for cleanup."},"created_files":{"type":"array","items":{"type":"string"},"description":"File ids the run produced."},"irreversible_tool_calls":{"type":"array","items":{"type":"object","properties":{"tool_name":{"type":"string"},"step_id":{"type":"string"}},"required":["tool_name","step_id"],"additionalProperties":false},"description":"Tool calls whose effect cannot be undone — external integrations + notifications, plus record-creating calls that returned no ids to delete by."},"sub_workflows_possible":{"type":"boolean","description":"True when a write this run made could fan out into a descendant execution this summary does not capture — a created/updated/deleted record whose table has a matching after_* workflow, or a press_button that spawned its own execution."}},"required":["created_records","created_files","irreversible_tool_calls","sub_workflows_possible"],"additionalProperties":false},"refused":{"description":"Present on an error the workflow REFUSED rather than crashed on — its own error return, or a step's write the target table's rules refused. The refused write never landed; what an earlier step wrote did, and the record counts say so. For a caller in the app's own organization.","type":"boolean","const":true},"records_created":{"description":"Records the run created. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_updated":{"description":"Records the run updated. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_changed":{"description":"Of `records_updated`, how many a field actually changed on. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_deleted":{"description":"Records the run deleted. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_restored":{"description":"Records the run restored from the trash. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_deleted_permanently":{"description":"Records the run deleted for good from the trash. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"records_lock_changed":{"description":"Records the run locked or unlocked. For a caller in the app's own organization.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["status"],"additionalProperties":false},"get_v1_apps_app_id_versions_version_id_source_Response":{"type":"object","properties":{"url":{"type":"string","description":"Presigned URL to download source.tar.gz from R2"}},"required":["url"],"additionalProperties":false},"post_v1_apps_app_id_workflows_alias_dts_Response":{"type":"object","properties":{"dts":{"type":"string","description":"Workspace .d.ts content the server typechecks the body against."},"envelope_prefix":{"type":"string","description":"Prefix that opens the __workflow wrapper the server compiles inside."},"envelope_suffix":{"type":"string","description":"Suffix that closes the __workflow wrapper."}},"required":["dts","envelope_prefix","envelope_suffix"],"additionalProperties":false},"post_v1_apps_app_id_files_file_id_rename_Response":{"type":"object","properties":{"file":{"type":"object","properties":{"id":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"url":{"description":"Serving URL, signed for 24 hours.","type":"string"},"thumbnail_url":{"description":"Signed thumbnail, for an image.","type":"string"},"preview_url":{"type":"string"},"size":{"description":"Bytes, where the object records it.","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"When the file was uploaded.","type":"string"},"document_template_id":{"description":"The document template the file was generated from.","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"required":["file"],"additionalProperties":false},"post_v1_apps_app_id_records_record_id_comments_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the comment"},"record_id":{"type":"string","description":"ID of the record this comment belongs to"},"table_id":{"type":"string","description":"ID of the table this comment belongs to"},"member_id":{"type":"string","description":"ID of the member who created this comment"},"content":{"type":"string","minLength":0,"maxLength":10000,"description":"Comment text content (0-10,000 characters)"},"files":{"description":"Array of files attached to this comment","anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this comment belongs to"},"updated_at":{"type":"string","description":"Timestamp of last update"},"created_at":{"type":"string","description":"Timestamp when comment was created"},"author":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name; null when the id no longer resolves."},"image":{"description":"Presigned avatar URL, when the member has one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name"],"additionalProperties":false,"description":"The author's display identity, resolved against the organization's memberships."}},"required":["id","record_id","table_id","member_id","content","workspace_id","updated_at","created_at","author"],"additionalProperties":false},"get_v1_apps_app_id_records_record_id_comments_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_apps_app_id_records_record_id_comments_comment_id_Response"}},"get_v1_apps_app_id_tables_table_id_comment_counts_Response":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"number"}},"delete_v1_apps_app_id_records_record_id_comments_comment_id_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"patch_v1_apps_app_id_records_record_id_comments_comment_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the comment"},"record_id":{"type":"string","description":"ID of the record this comment belongs to"},"table_id":{"type":"string","description":"ID of the table this comment belongs to"},"member_id":{"type":"string","description":"ID of the member who created this comment"},"content":{"type":"string","minLength":0,"maxLength":10000,"description":"Comment text content (0-10,000 characters)"},"files":{"description":"Array of files attached to this comment","anyOf":[{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this comment belongs to"},"updated_at":{"type":"string","description":"Timestamp of last update"},"created_at":{"type":"string","description":"Timestamp when comment was created"},"author":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Display name; null when the id no longer resolves."},"image":{"description":"Presigned avatar URL, when the member has one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name"],"additionalProperties":false,"description":"The author's display identity, resolved against the organization's memberships."}},"required":["id","record_id","table_id","member_id","content","workspace_id","updated_at","created_at","author"],"additionalProperties":false},"post_v1_automations_Response":{"type":"object","properties":{"automation_id":{"type":"string","description":"The trigger ID."},"workflow_id":{"type":"string","description":"The associated workflow ID."},"type":{"type":"string","description":"The trigger type."},"webhook_url":{"description":"Public webhook URL (webhook type only).","type":"string"}},"required":["automation_id","workflow_id","type"],"additionalProperties":false},"get_v1_automations_Response":{"type":"array","items":{"type":"object","properties":{"trigger":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"recurring_schedule","description":"Trigger type: runs on a recurring schedule"},"config":{"type":"object","properties":{"cron_expression":{"type":"string","description":"The cron expression defining the schedule."}},"required":["cron_expression"],"additionalProperties":false,"description":"Schedule configuration with cron expression"},"data":{"anyOf":[{"type":"object","properties":{"job_scheduler_id":{"type":"string","description":"ID of the scheduled job in the job queue system"}},"required":["job_scheduler_id"],"additionalProperties":false,"description":"Data needed to manage the scheduled job in the job scheduler service"},{"type":"null"}],"description":"Job scheduler data for managing the recurring schedule"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_outlook_email","description":"Trigger type: receive Outlook email"},"config":{"type":"object","properties":{"filter":{"type":"object","properties":{"from":{"type":"array","items":{"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":"Email addresses to monitor (sender filter)"},"subject_containing":{"type":"string","minLength":3,"maxLength":100,"description":"Text that must appear in the email subject"}},"required":["from","subject_containing"],"additionalProperties":false,"description":"Filtering criteria for incoming emails"},"monitored_events":{"type":"array","items":{"type":"string","enum":["created","updated","deleted"]},"description":"The types of changes to monitor"},"connected_account_id":{"type":"string","description":"ID of the connected Outlook account to monitor"}},"required":["filter","monitored_events","connected_account_id"],"additionalProperties":false,"description":"Configuration for the receive Outlook email"},"data":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","description":"Email address being monitored"},"subscription":{"type":"object","properties":{"id":{"type":"string","description":"Subscription identifier"},"subscriptionId":{"description":"Microsoft Graph subscription ID","type":"string"},"expirationDateTime":{"type":"string","description":"ISO 8601 date when subscription expires"},"clientState":{"type":"string","description":"Client state value for webhook validation"},"notificationUrl":{"type":"string","description":"URL for webhook notifications"},"resource":{"type":"string","description":"Microsoft Graph resource path being monitored"},"changeType":{"type":"string","description":"Types of changes being monitored (created, updated, deleted)"},"creatorId":{"description":"ID of the user who created the subscription","type":"string"}},"required":["id","expirationDateTime","clientState","notificationUrl","resource","changeType"],"additionalProperties":false,"description":"Microsoft Graph subscription details"},"last_checked_at":{"description":"Timestamp of last check for new emails"},"job_id":{"type":"string","description":"ID of the background job handling this trigger"}},"required":["email","subscription","last_checked_at","job_id"],"additionalProperties":false},{"type":"null"}],"description":"Data for the receive Outlook email"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_gmail_email","description":"Trigger type: receive Gmail email"},"config":{"type":"object","properties":{"filter":{"type":"object","properties":{"from":{"type":"array","items":{"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":"Email addresses to monitor (sender filter)"},"subject_containing":{"type":"string","minLength":3,"maxLength":100,"description":"Text that must appear in the email subject"},"label_ids":{"type":"array","items":{"type":"string"},"description":"Gmail label IDs to monitor (e.g., 'INBOX', 'SENT')"}},"required":["from","subject_containing","label_ids"],"additionalProperties":false,"description":"Filtering criteria for incoming emails"},"connected_account_id":{"type":"string","description":"ID of the connected Gmail account to monitor"}},"required":["filter","connected_account_id"],"additionalProperties":false,"description":"Configuration for the receive Gmail email"},"data":{"anyOf":[{"type":"object","properties":{"history_id":{"type":"string","description":"Gmail history ID for tracking changes since last check"},"expiration":{"type":"string","description":"ISO 8601 date when Gmail push notification expires"},"job_id":{"type":"string","description":"ID of the background job handling this trigger"},"email":{"type":"string","description":"Email address being monitored"}},"required":["history_id","expiration","job_id","email"],"additionalProperties":false},{"type":"null"}],"description":"Data for the receive Gmail email"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_webhook","description":"Trigger type: fires on incoming webhook"},"config":{"type":"object","properties":{"secret":{"description":"HMAC-SHA256 secret for signature verification","type":"string"}},"additionalProperties":false,"description":"Configuration for the webhook trigger"},"data":{"anyOf":[{"type":"object","properties":{"webhook_path":{"type":"string","description":"Cryptographically random path for the webhook endpoint"}},"required":["webhook_path"],"additionalProperties":false},{"type":"null"}],"description":"Webhook endpoint data including the random path"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false}]},"workflow":{"$ref":"#/components/schemas/patch_v1_workflows_workflow_id_Response"}},"required":["trigger","workflow"],"additionalProperties":false}},"delete_v1_automations_trigger_id_Response":{"type":"object","properties":{"trigger_id":{"type":"string"},"workflow_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"deleted":{"type":"boolean","const":true}},"required":["trigger_id","deleted"],"additionalProperties":false},"patch_v1_automations_trigger_id_Response":{"type":"object","properties":{"trigger":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"recurring_schedule","description":"Trigger type: runs on a recurring schedule"},"config":{"type":"object","properties":{"cron_expression":{"type":"string","description":"The cron expression defining the schedule."}},"required":["cron_expression"],"additionalProperties":false,"description":"Schedule configuration with cron expression"},"data":{"anyOf":[{"type":"object","properties":{"job_scheduler_id":{"type":"string","description":"ID of the scheduled job in the job queue system"}},"required":["job_scheduler_id"],"additionalProperties":false,"description":"Data needed to manage the scheduled job in the job scheduler service"},{"type":"null"}],"description":"Job scheduler data for managing the recurring schedule"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_outlook_email","description":"Trigger type: receive Outlook email"},"config":{"type":"object","properties":{"filter":{"type":"object","properties":{"from":{"type":"array","items":{"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":"Email addresses to monitor (sender filter)"},"subject_containing":{"type":"string","minLength":3,"maxLength":100,"description":"Text that must appear in the email subject"}},"required":["from","subject_containing"],"additionalProperties":false,"description":"Filtering criteria for incoming emails"},"monitored_events":{"type":"array","items":{"type":"string","enum":["created","updated","deleted"]},"description":"The types of changes to monitor"},"connected_account_id":{"type":"string","description":"ID of the connected Outlook account to monitor"}},"required":["filter","monitored_events","connected_account_id"],"additionalProperties":false,"description":"Configuration for the receive Outlook email"},"data":{"anyOf":[{"type":"object","properties":{"email":{"type":"string","description":"Email address being monitored"},"subscription":{"type":"object","properties":{"id":{"type":"string","description":"Subscription identifier"},"subscriptionId":{"description":"Microsoft Graph subscription ID","type":"string"},"expirationDateTime":{"type":"string","description":"ISO 8601 date when subscription expires"},"clientState":{"type":"string","description":"Client state value for webhook validation"},"notificationUrl":{"type":"string","description":"URL for webhook notifications"},"resource":{"type":"string","description":"Microsoft Graph resource path being monitored"},"changeType":{"type":"string","description":"Types of changes being monitored (created, updated, deleted)"},"creatorId":{"description":"ID of the user who created the subscription","type":"string"}},"required":["id","expirationDateTime","clientState","notificationUrl","resource","changeType"],"additionalProperties":false,"description":"Microsoft Graph subscription details"},"last_checked_at":{"description":"Timestamp of last check for new emails"},"job_id":{"type":"string","description":"ID of the background job handling this trigger"}},"required":["email","subscription","last_checked_at","job_id"],"additionalProperties":false},{"type":"null"}],"description":"Data for the receive Outlook email"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_gmail_email","description":"Trigger type: receive Gmail email"},"config":{"type":"object","properties":{"filter":{"type":"object","properties":{"from":{"type":"array","items":{"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":"Email addresses to monitor (sender filter)"},"subject_containing":{"type":"string","minLength":3,"maxLength":100,"description":"Text that must appear in the email subject"},"label_ids":{"type":"array","items":{"type":"string"},"description":"Gmail label IDs to monitor (e.g., 'INBOX', 'SENT')"}},"required":["from","subject_containing","label_ids"],"additionalProperties":false,"description":"Filtering criteria for incoming emails"},"connected_account_id":{"type":"string","description":"ID of the connected Gmail account to monitor"}},"required":["filter","connected_account_id"],"additionalProperties":false,"description":"Configuration for the receive Gmail email"},"data":{"anyOf":[{"type":"object","properties":{"history_id":{"type":"string","description":"Gmail history ID for tracking changes since last check"},"expiration":{"type":"string","description":"ISO 8601 date when Gmail push notification expires"},"job_id":{"type":"string","description":"ID of the background job handling this trigger"},"email":{"type":"string","description":"Email address being monitored"}},"required":["history_id","expiration","job_id","email"],"additionalProperties":false},{"type":"null"}],"description":"Data for the receive Gmail email"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the trigger"},"enabled":{"type":"boolean","description":"Whether the trigger is enabled"},"workflow_id":{"description":"ID of the workflow this trigger dispatches to","anyOf":[{"type":"string"},{"type":"null"}]},"workspace_id":{"type":"string","description":"ID of the workspace this trigger belongs to"},"created_at":{"type":"string","description":"Timestamp when trigger was created"},"updated_at":{"type":"string","description":"Timestamp of last update"},"type":{"type":"string","const":"receive_webhook","description":"Trigger type: fires on incoming webhook"},"config":{"type":"object","properties":{"secret":{"description":"HMAC-SHA256 secret for signature verification","type":"string"}},"additionalProperties":false,"description":"Configuration for the webhook trigger"},"data":{"anyOf":[{"type":"object","properties":{"webhook_path":{"type":"string","description":"Cryptographically random path for the webhook endpoint"}},"required":["webhook_path"],"additionalProperties":false},{"type":"null"}],"description":"Webhook endpoint data including the random path"}},"required":["id","enabled","workspace_id","created_at","updated_at","type","config","data"],"additionalProperties":false}]},"workflow":{"$ref":"#/components/schemas/patch_v1_workflows_workflow_id_Response"}},"required":["trigger","workflow"],"additionalProperties":false},"post_v1_skills_Response":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"member_id":{"type":"string"},"disable_agent_invocation":{"type":"boolean"},"user_invocable":{"type":"boolean"},"active_by_default":{"type":"boolean"},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string"},"workspace_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","description","content","member_id","disable_agent_invocation","user_invocable","active_by_default","current_version","source","workspace_id","created_at","updated_at"],"additionalProperties":false},"get_v1_skills_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_skills_skill_id_Response"}},"delete_v1_skills_skill_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_v1_skills_skill_id_Response":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"member_id":{"type":"string"},"disable_agent_invocation":{"type":"boolean"},"user_invocable":{"type":"boolean"},"active_by_default":{"type":"boolean"},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string"},"workspace_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","description","content","member_id","disable_agent_invocation","user_invocable","active_by_default","current_version","source","workspace_id","created_at","updated_at"],"additionalProperties":false},"patch_v1_skills_skill_id_Response":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"member_id":{"type":"string"},"disable_agent_invocation":{"type":"boolean"},"user_invocable":{"type":"boolean"},"active_by_default":{"type":"boolean"},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"source":{"type":"string"},"workspace_id":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","description","content","member_id","disable_agent_invocation","user_invocable","active_by_default","current_version","source","workspace_id","created_at","updated_at"],"additionalProperties":false},"post_v1_instructions_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"table_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","table_id","current_version","created_at","updated_at"],"additionalProperties":false},"get_v1_instructions_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_instructions_instruction_id_restore_Response"}},"delete_v1_instructions_instruction_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_v1_instructions_instruction_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"table_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","table_id","current_version","created_at","updated_at"],"additionalProperties":false},"patch_v1_instructions_instruction_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"table_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","table_id","current_version","created_at","updated_at"],"additionalProperties":false},"get_v1_instructions_instruction_id_versions_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"instruction_id":{"type":"string"},"version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"}},"required":["id","instruction_id","version","name","description","content","created_by","created_at"],"additionalProperties":false}},"post_v1_instructions_instruction_id_restore_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"table_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","table_id","current_version","created_at","updated_at"],"additionalProperties":false},"post_v1_member_instructions_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","current_version","created_at","updated_at"],"additionalProperties":false},"get_v1_member_instructions_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_member_instructions_instruction_id_Response"}},"delete_v1_member_instructions_instruction_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"patch_v1_member_instructions_instruction_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"scope":{"type":"string","enum":["workspace","member"]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","content","scope","member_id","current_version","created_at","updated_at"],"additionalProperties":false},"patch_v1_knowledge_docs_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","tags","content_sha","files","hidden_at","owner_member_id","created_at","updated_at"],"additionalProperties":false}},"post_v1_knowledge_docs_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"content":{"type":"string"},"content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","tags","content","content_sha","files","hidden_at","owner_member_id","created_at","updated_at"],"additionalProperties":false},"get_v1_knowledge_docs_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","tags","content_sha","files","hidden_at","owner_member_id","created_at","updated_at"],"additionalProperties":false}},"delete_v1_knowledge_docs_knowledge_doc_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_v1_knowledge_docs_knowledge_doc_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"content":{"type":"string"},"content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","tags","content","content_sha","files","hidden_at","owner_member_id","created_at","updated_at"],"additionalProperties":false},"patch_v1_knowledge_docs_knowledge_doc_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"content":{"type":"string"},"content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the file"},"file_storage_key":{"description":"Storage key for the file","type":"string"},"filename":{"type":"string","description":"Original filename"},"mime_type":{"type":"string","description":"MIME type of the file"},"url":{"description":"Public URL for the file, resolved at serving time","type":"string"},"thumbnail_url":{"description":"Thumbnail URL for image files, resolved at serving time","type":"string"},"preview_url":{"description":"Preview URL for legacy Excel files, resolved at serving time","type":"string"},"size":{"description":"Byte size, resolved at serving time from the file object (null/absent until backfilled)","anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"description":"Upload timestamp, resolved at serving time from the file object","type":"string"},"document_template_id":{"description":"The document template the file was generated from, resolved at serving time from the file object; absent on a file a person brought","type":"string"}},"required":["id","filename","mime_type"],"additionalProperties":false}},"hidden_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"owner_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","workspace_id","name","description","tags","content","content_sha","files","hidden_at","owner_member_id","created_at","updated_at"],"additionalProperties":false},"get_v1_knowledge_docs_knowledge_doc_id_versions_Response":{"type":"object","properties":{"versions":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_knowledge_docs_knowledge_doc_id_versions_Response"},"description":"Newest first."},"next":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Pass as `after` for the page past this one; null at the history's start."}},"required":["versions","next"],"additionalProperties":false},"post_v1_knowledge_docs_knowledge_doc_id_versions_Response":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["checkpoint","named"],"description":"`checkpoint`: kept by the server where an editing session ended or a program wrote. `named`: a person marked it."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The name a person gave it; null for a checkpoint."},"content_sha":{"type":"string","description":"`documentSha` of its content."},"written_at":{"type":"string","description":"When the content it holds was written."},"written_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The member who wrote that content; null where no member did, or none is recorded."},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The member whose write or mark kept it."},"created_at":{"type":"string"}},"required":["id","kind","name","content_sha","written_at","written_by","created_by","created_at"],"additionalProperties":false},"get_v1_knowledge_docs_knowledge_doc_id_versions_version_id_Response":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["checkpoint","named"],"description":"`checkpoint`: kept by the server where an editing session ended or a program wrote. `named`: a person marked it."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The name a person gave it; null for a checkpoint."},"content_sha":{"type":"string","description":"`documentSha` of its content."},"written_at":{"type":"string","description":"When the content it holds was written."},"written_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The member who wrote that content; null where no member did, or none is recorded."},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The member whose write or mark kept it."},"created_at":{"type":"string"},"content":{"type":"string"}},"required":["id","kind","name","content_sha","written_at","written_by","created_by","created_at","content"],"additionalProperties":false},"post_v1_memories_Response":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"workspace_id":{"type":"string"},"member_id":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"type":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","key","workspace_id","member_id","description","content","type","created_at","updated_at"],"additionalProperties":false},"get_v1_memories_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_memories_memory_id_Response"}},"delete_v1_memories_memory_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"patch_v1_memories_memory_id_Response":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"workspace_id":{"type":"string"},"member_id":{"type":"string"},"description":{"type":"string"},"content":{"type":"string"},"type":{"type":"string"},"created_at":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","key","workspace_id","member_id","description","content","type","created_at","updated_at"],"additionalProperties":false},"get_v1_search_Response":{"type":"object","properties":{"results":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"table"},"id":{"type":"string"},"name":{"type":"string"},"score":{"type":"number"}},"required":["type","id","name","score"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"view"},"id":{"type":"string"},"name":{"type":"string"},"table_id":{"type":"string"},"table_name":{"type":"string"},"score":{"type":"number"}},"required":["type","id","name","table_id","table_name","score"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"record"},"id":{"type":"string"},"table_id":{"type":"string"},"table_name":{"type":"string"},"display_text":{"type":"string"},"view_id":{"type":"string"},"view_name":{"type":"string"},"score":{"type":"number"}},"required":["type","id","table_id","table_name","display_text","view_id","view_name","score"],"additionalProperties":false}]}}},"required":["results"],"additionalProperties":false},"post_v1_api_keys_Response":{"type":"object","properties":{"plaintext_key":{"type":"string","description":"The plaintext API key value. Returned once and never retrievable again."},"api_key":{"description":"Persisted metadata for the created API key","$ref":"#/components/schemas/patch_v1_api_keys_api_key_id_Response"}},"required":["plaintext_key","api_key"],"additionalProperties":false},"get_v1_api_keys_Response":{"type":"array","items":{"$ref":"#/components/schemas/patch_v1_api_keys_api_key_id_Response"}},"get_v1_api_keys_grantable_resources_Response":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."},"name":{"type":"string","description":"What the resource is called."},"workspace_id":{"type":"string","description":"The workspace the resource sits in"},"workspace_name":{"type":"string","description":"What that workspace is called."}},"required":["resource_type","resource_id","name","workspace_id","workspace_name"],"additionalProperties":false},"description":"Every app and table in this organization, ordered by workspace and then by name."}},"required":["resources"],"additionalProperties":false},"delete_v1_api_keys_self_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"delete_v1_api_keys_api_key_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"patch_v1_api_keys_api_key_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the API key"},"organization_id":{"type":"string","description":"Organization ID this API key belongs to"},"name":{"type":"string","description":"Display name for this API key"},"key_prefix":{"type":"string","description":"Non-secret prefix used to identify the key"},"enabled":{"type":"boolean","description":"Whether this API key is active"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when this key was last used"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"When this key stops authenticating. Null means it never expires."},"idle_expiry_days":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Days of disuse before this key retires itself, and whether `expires_at` MOVES: set means every use pushes the date out, null means the date is fixed. Without it a reader cannot tell a date that will move from one that will not."},"scopes":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"What this key may do. Null means unscoped — the full authority of the member it acts as."},"acts_as":{"description":"The member this credential acts as. Resolved from the membership on every read rather than copied at mint time, so a rename, a removal or an erasure shows here at once. Optional because an older server omits it — absent means not told.","type":"object","properties":{"kind":{"type":"string","enum":["person","key"],"description":"Whether a person acts through this credential. `person` is somebody's own sign-in; `key` is an integration's identity, which nobody signs in as."},"member_id":{"type":"string","description":"The membership whose authority this credential carries"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"What that membership is called. Null once the account behind it was erased."}},"required":["kind","member_id","name"],"additionalProperties":false},"origin":{"description":"Whether this credential is a terminal sign-in or a key an admin issued. Optional because an older server omits it, and null because a row minted before it was recorded cannot say — absent and null both mean not told.","anyOf":[{"type":"string","enum":["api_key","sign_in"]},{"type":"null"}]},"created_by_name":{"description":"The admin who created this key, resolved live like `acts_as.name` and including one who has since been removed. Optional because an older server omits it, because a row created before this was recorded cannot say, and because an erasure forgets it — absent means not told. Null only while the row still names a creator whose membership is gone.","anyOf":[{"type":"string"},{"type":"null"}]},"access":{"description":"What this key reaches. Null for a key that carries a person's own access. Optional because an older server omits it.","anyOf":[{"type":"string","enum":["all","selected"]},{"type":"null"}]},"created_at":{"type":"string","description":"Timestamp when this API key was created"},"updated_at":{"type":"string","description":"Timestamp when this API key was last updated"}},"required":["id","organization_id","name","key_prefix","enabled","last_used_at","expires_at","idle_expiry_days","scopes","created_at","updated_at"],"additionalProperties":false},"get_v1_api_keys_api_key_id_access_Response":{"type":"object","properties":{"access":{"type":"string","enum":["all","selected"],"description":"What this key reaches. `all` carries every app and table, and lists nothing."},"resources":{"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."},"role":{"type":"string","description":"What the key may do with it: `viewer` or `editor` on a table, `user` or `manager` on everything else."},"name":{"type":"string","description":"What the resource is called."},"workspace_id":{"type":"string","description":"The workspace the resource sits in"},"workspace_name":{"type":"string","description":"What that workspace is called."}},"required":["resource_type","resource_id","role","name","workspace_id","workspace_name"],"additionalProperties":false},"description":"Every app and table this key reaches. Empty for a key that reaches all of them."},"owned":{"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."},"name":{"type":"string","description":"What the resource is called."},"workspace_id":{"type":"string","description":"The workspace the resource sits in"},"workspace_name":{"type":"string","description":"What that workspace is called."}},"required":["resource_type","resource_id","name","workspace_id","workspace_name"],"additionalProperties":false},"description":"Every app and table this key CREATED. An owner reaches everything on what it owns, so narrowing the key or taking a resource back from it leaves these; only a transfer moves them."}},"required":["access","resources","owned"],"additionalProperties":false},"post_v1_api_keys_api_key_id_roll_Response":{"type":"object","properties":{"plaintext_key":{"type":"string","description":"The plaintext API key value. Returned once and never retrievable again."},"api_key":{"description":"Persisted metadata for the created API key","$ref":"#/components/schemas/patch_v1_api_keys_api_key_id_Response"}},"required":["plaintext_key","api_key"],"additionalProperties":false},"post_v1_me_cancel_erasure_Response":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"],"additionalProperties":false},"post_v1_me_claim_email_Response":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"],"additionalProperties":false},"post_v1_me_confirm_email_claim_Response":{"type":"object","properties":{"email":{"type":"string"},"signed_out":{"type":"boolean","description":"True when this redemption revoked the caller's own session, so the page must send them to sign in rather than into the app"}},"required":["email","signed_out"],"additionalProperties":false},"post_v1_me_confirm_erasure_Response":{"type":"object","properties":{"erasure_scheduled_at":{"type":"string"}},"required":["erasure_scheduled_at"],"additionalProperties":false},"get_v1_me_export_Response":{"type":"object","properties":{"exported_at":{"type":"string"},"profile":{"type":"object","properties":{"user":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"member":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["user","member"],"additionalProperties":false},"sessions":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"connected_accounts":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"api_keys":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"api_keys_created":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"absences":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"activity":{"type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"required":["exported_at","profile","sessions","connected_accounts","api_keys","api_keys_created","absences","activity"],"additionalProperties":false},"get_v1_me_erasure_Response":{"type":"object","properties":{"scheduled_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["scheduled_at"],"additionalProperties":false},"get_v1_me_credentials_Response":{"type":"object","properties":{"credentials":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique identifier for the API key"},"name":{"type":"string","description":"Display name for this API key"},"key_prefix":{"type":"string","description":"Non-secret prefix used to identify the key"},"created_at":{"type":"string","description":"Timestamp when this API key was created"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Timestamp when this key was last used"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"When this key stops authenticating. Null means it never expires."},"enabled":{"type":"boolean","description":"Whether this API key is active"},"origin":{"description":"Whether this credential is a terminal sign-in or a key an admin issued. Optional because an older server omits it, and null because a row minted before it was recorded cannot say — absent and null both mean not told.","anyOf":[{"type":"string","enum":["api_key","sign_in"]},{"type":"null"}]}},"required":["id","name","key_prefix","created_at","last_used_at","expires_at","enabled"],"additionalProperties":false}}},"required":["credentials"],"additionalProperties":false},"get_v1_me_security_events_Response":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"action":{"type":"string","enum":["session.login","session.login_failed","member.mfa_enrolled","member.mfa_disabled"]},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"created_at":{"type":"string"}},"required":["id","user_id","action","ip_address","user_agent","details","created_at"],"additionalProperties":false}}},"required":["events"],"additionalProperties":false},"get_v1_me_sessions_Response":{"type":"object","properties":{"sessions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_current":{"type":"boolean"}},"required":["id","created_at","expires_at","ip_address","user_agent","is_current"],"additionalProperties":false}}},"required":["sessions"],"additionalProperties":false},"post_v1_me_request_erasure_Response":{"type":"object","properties":{"ok":{"type":"boolean"}},"required":["ok"],"additionalProperties":false},"delete_v1_me_sessions_Response":{"type":"object","properties":{"revoked":{"type":"number"}},"required":["revoked"],"additionalProperties":false},"delete_v1_me_credentials_credential_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"delete_v1_me_sessions_session_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_v1_approval_requests_Response":{"type":"array","items":{"$ref":"#/components/schemas/post_v1_approval_requests_approval_request_id_respond_Response"}},"post_v1_approval_requests_locked_record_change_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"workflow_step"},"payload":{"type":"object","properties":{"workflow_execution_id":{"type":"string"},"execution_step_id":{"type":"string"},"waiting_step_id":{"type":"string"},"workflow_name":{"type":"string"}},"required":["workflow_execution_id","execution_step_id","waiting_step_id","workflow_name"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"locked_record_change"},"payload":{"type":"object","properties":{"table_id":{"type":"string"},"table_name":{"type":"string"},"record_id":{"type":"string"},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"field_name":{"type":"string"},"old_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"new_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"old_value_display":{"type":"string"},"new_value_display":{"type":"string"}},"required":["field_key","field_name","old_value","new_value","old_value_display","new_value_display"],"additionalProperties":false}},"reason":{"type":"string"},"requested_by_member_id":{"type":"string"}},"required":["table_id","table_name","record_id","changes","reason","requested_by_member_id"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false}]},"get_v1_approval_requests_approval_request_id_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"workflow_step"},"payload":{"type":"object","properties":{"workflow_execution_id":{"type":"string"},"execution_step_id":{"type":"string"},"waiting_step_id":{"type":"string"},"workflow_name":{"type":"string"}},"required":["workflow_execution_id","execution_step_id","waiting_step_id","workflow_name"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"locked_record_change"},"payload":{"type":"object","properties":{"table_id":{"type":"string"},"table_name":{"type":"string"},"record_id":{"type":"string"},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"field_name":{"type":"string"},"old_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"new_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"old_value_display":{"type":"string"},"new_value_display":{"type":"string"}},"required":["field_key","field_name","old_value","new_value","old_value_display","new_value_display"],"additionalProperties":false}},"reason":{"type":"string"},"requested_by_member_id":{"type":"string"}},"required":["table_id","table_name","record_id","changes","reason","requested_by_member_id"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false}]},"post_v1_approval_requests_approval_request_id_respond_Response":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"workflow_step"},"payload":{"type":"object","properties":{"workflow_execution_id":{"type":"string"},"execution_step_id":{"type":"string"},"waiting_step_id":{"type":"string"},"workflow_name":{"type":"string"}},"required":["workflow_execution_id","execution_step_id","waiting_step_id","workflow_name"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"workspace_id":{"type":"string"},"organization_id":{"type":"string"},"approvers":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"],"additionalProperties":false}]}},"target_member_ids":{"type":"array","items":{"type":"string"}},"prompt":{"type":"string"},"status":{"type":"string","enum":["pending","approved","rejected","timed_out","cancelled"]},"decided_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"decided_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision_comment":{"anyOf":[{"type":"string"},{"type":"null"}]},"timeout_in_minutes":{"anyOf":[{"type":"number"},{"type":"null"}]},"created_at":{"type":"string"},"updated_at":{"type":"string"},"type":{"type":"string","const":"locked_record_change"},"payload":{"type":"object","properties":{"table_id":{"type":"string"},"table_name":{"type":"string"},"record_id":{"type":"string"},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"field_name":{"type":"string"},"old_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"new_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]},"old_value_display":{"type":"string"},"new_value_display":{"type":"string"}},"required":["field_key","field_name","old_value","new_value","old_value_display","new_value_display"],"additionalProperties":false}},"reason":{"type":"string"},"requested_by_member_id":{"type":"string"}},"required":["table_id","table_name","record_id","changes","reason","requested_by_member_id"],"additionalProperties":false}},"required":["id","workspace_id","organization_id","approvers","target_member_ids","prompt","status","decided_by","decided_at","decision_comment","timeout_in_minutes","created_at","updated_at","type","payload"],"additionalProperties":false}]},"get_v1_audit_logs_Response":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"organization_id":{"type":"string"},"workspace_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"action":{"type":"string","enum":["record.create","record.update","record.delete","record.delete_permanent","record.restore","record.lock","record.unlock","record.comment.create","record.comment.update","record.comment.delete","table.create","table.update","table.archive","table.restore","field.create","field.update","field.delete","view.create","view.update","view.archive","view.restore","iam.role_binding.assign","iam.role_binding.update","iam.role_binding.remove","iam.ownership.transfer","iam.group.create","iam.group.update","iam.group.delete","iam.member.create_managed","iam.member.reset_password","iam.member.update_name","iam.invitation.revoke","iam.invitation.update","iam.absence.set","iam.absence.end","app.create","app.update","app.archive","app.instantiate","app.upgrade","app.public_password.set","app.public_password.clear","app.api.publish","app.api.unpublish","starter.publish","starter.set_official","starter.unpublish","starter.edit_listing","starter.delete","workspace.scaffold","workspace.recompute_figures","app.install","app.uninstall","app.eject","app.adopt","app.rebind_role","app.reset","app.config_update","package.publish","package.set_official","package.yank","package.retire","package.edit_listing","package.content_install","package.content_upgrade","package.content_uninstall","skill.create","skill.update","skill.archive","automation.create","automation.update","automation.archive","document_template.create","document_template.update","document_template.archive","instruction.create","instruction.update","instruction.archive","instruction.restore","knowledge_doc.create","knowledge_doc.update","knowledge_doc.archive","knowledge_doc.restore","plan_period.create","plan_period.activate","plan_period.upgrade","plan_period.renew","plan_period.cancel_renewal","plan_period.resume_renewal","plan_period.set_overage","plan_period.downgrade","plan_period.expire","plan_period.trial","plan_period.suspend","plan_period.unsuspend","scheduled_change.create","scheduled_change.cancel","scheduled_change.apply","credit_grant.create","credit_grant.revoke","billing_invoice.attach","billing_invoice.remove","billing_invoice.set_buyer","billing_charge.create","billing_charge.void","billing_charge.write_off","billing_charge.release_draft","billing_credit_note.issue","billing_payment.record","billing_payment.allocate","billing_payment.refund","billing_payment.void","billing_party.set","private_instance.create","private_instance.revoke","demo_script.set","demo_script.clear","demo_workspace.reset","api_key.create","api_key.update","api_key.revoke","cli_login.approve","member.data_export","member.erasure_requested","member.erasure_cancelled","member.erasure_executed","organization.renamed","organization.logo_updated","organization.logo_removed","member.invited","member.accepted","member.removed","member.restored","member.role_changed","member.email_claimed","session.revoked","support.access","chat_transcript.read","workflow_execution.read","connected_account.write"]},"actor_type":{"type":"string","enum":["member","api_key","system","public"]},"actor_id":{"type":"string"},"resource_type":{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]},"resource_id":{"type":"string"},"parent_resource_type":{"anyOf":[{"type":"string","enum":["record","table","field","view","role_binding","group","organization","member","invitation","app","package","skill","automation","document_template","instruction","knowledge_doc","plan_period","scheduled_plan_change","credit_grant","billing_invoice","billing_charge","billing_credit_note","billing_payment","billing_party","api_key","private_instance","session","connected_account","chat_session","workflow_execution","workspace"]},{"type":"null"}]},"parent_resource_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"change_origin":{"anyOf":[{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Change originated from a member"},"member_id":{"type":"string","description":"Member ID of the user who modified"},"member_session_id":{"description":"Session ID of the member at the time of modification","type":"string"},"app_id":{"description":"ID of the app through which the member acted","type":"string"}},"required":["type","member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"chat_agent","description":"Change originated from chat agent"},"on_behalf_member_id":{"type":"string","description":"ID of the member on whose behalf the chat agent acted"},"tool_call_id":{"description":"ID of the tool call that the chat agent performed","type":"string"}},"required":["type","on_behalf_member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"api_client","description":"Change originated from a programmatic client — an MCP host, the CLI, or a direct API call — acting under a member's authority. Named for the DOOR the write came through, never for what is behind it: whether the caller is an agent or a script is a claim only `client` carries, and only the caller can make it."},"surface":{"type":"string","enum":["mcp","cli","api"],"description":"Which programmatic entry point served the request"},"client":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Self-declared client identity — `claude-ai/1.2`, `lotics-cli/0.117.0`. Caller-supplied text, so it attributes without proving; `api_key_id` and `on_behalf_member_id` are the halves that do not depend on trusting it."},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The API key that authenticated the call. Null when the caller came in over OAuth."},"on_behalf_member_id":{"type":"string","description":"ID of the member whose authority the call ran under"}},"required":["type","surface","client","api_key_id","on_behalf_member_id"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"button","description":"Change originated from a button click"},"table_id":{"type":"string","description":"ID of the table containing the button"},"record_id":{"type":"string","description":"ID of the record where the button was clicked"},"field_key":{"type":"string","description":"Key of the button field"},"clicked_by":{"type":"string","description":"ID of the member who clicked the button"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","record_id","field_key","clicked_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"submit_record","description":"Change originated from a draft record submission"},"table_id":{"type":"string","description":"ID of the table containing the record"},"record_id":{"type":"string","description":"ID of the record being submitted"},"submitted_by":{"type":"string","description":"ID of the member who submitted"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","record_id","submitted_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_action","description":"Change originated from an app action"},"app_id":{"type":"string","description":"ID of the app containing the action"},"action_id":{"type":"string","description":"ID of the action that was triggered"},"triggered_by":{"type":"string","description":"ID of the member who triggered the action"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","app_id","action_id","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_workflow","description":"Change originated from a custom-code app calling useWorkflow(alias). The alias resolves through the app's declared workflows under its IAM principal — no ui.actions[] lookup, no record-level button binding."},"app_id":{"type":"string","description":"ID of the app that called the workflow"},"alias":{"type":"string","description":"Alias used in the app's manifest"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the member who triggered the call. Null when an anonymous visitor triggered it through a publicly-shared app — there is no member."},"app_agent_run_id":{"description":"The app agent run whose run_app_workflow call started this run. Absent when a member, a visitor or the app's own screen started it.","type":"string"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","app_id","alias","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"app_agent","description":"Change originated from a custom-code app running an agent via useAgentRun(alias). The alias resolves through the app's declared agents under its IAM principal; the agent's tools mutate records under that authority, distinct from a run-to-completion app_workflow."},"app_id":{"type":"string","description":"ID of the app that ran the agent"},"alias":{"type":"string","description":"Agent alias in the app's manifest"},"triggered_by":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ID of the member who started the run. Null when an anonymous visitor started it through a publicly-shared app — there is no member."},"run_id":{"description":"ID of the app_agent_runs row for this run","type":"string"}},"required":["type","app_id","alias","triggered_by"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"automation","description":"Change originated from an automation (trigger + workflow)"},"trigger_type":{"description":"Type of the trigger that initiated this automation","type":"string"},"trigger_id":{"description":"ID of the trigger that initiated this automation","type":"string"},"workflow_id":{"description":"ID of the workflow that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"},"automation_id":{"description":"[Legacy] Use trigger_id instead","type":"string"},"automation_execution_id":{"description":"[Legacy] Use workflow_execution_id instead","type":"string"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"system","description":"Change originated from system (Human system administrator/engineer)"},"author":{"type":"string","description":"Name of the system administrator/engineer"}},"required":["type","author"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table_workflow","description":"Change originated from a table workflow execution"},"table_id":{"type":"string","description":"ID of the table whose workflow fired"},"table_workflow_id":{"type":"string","description":"ID of the binding entry on the table"},"event":{"type":"string","description":"Lifecycle event that fired the workflow (after_create, after_update, after_delete)"},"triggered_by_member_id":{"description":"Member who initiated the write that fired this workflow (or the head of the chain when fired by another workflow). Null when fired from a non-member origin (recurring schedule, system).","anyOf":[{"type":"string"},{"type":"null"}]},"workflow_id":{"description":"ID of the workflow procedure that executed","type":"string"},"workflow_execution_id":{"description":"ID of the workflow execution instance","type":"string"}},"required":["type","table_id","table_workflow_id","event"],"additionalProperties":false}]},{"type":"null"}]},"details":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"}},"required":["id","organization_id","workspace_id","action","actor_type","actor_id","resource_type","resource_id","parent_resource_type","parent_resource_id","change_origin","details","ip_address","user_agent","request_id","session_id","created_at"],"additionalProperties":false}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["logs","next_cursor"],"additionalProperties":false},"get_v1_agent_context_activations_Response":{"type":"array","items":{"$ref":"#/components/schemas/put_v1_agent_context_activations_resource_type_resource_id_Response"}},"put_v1_agent_context_activations_resource_type_resource_id_Response":{"type":"object","properties":{"member_id":{"type":"string"},"resource_type":{"type":"string","enum":["skill"],"description":"The kind of resource whose activation is being read or set."},"resource_id":{"type":"string"},"enabled":{"type":"boolean"}},"required":["member_id","resource_type","resource_id","enabled"],"additionalProperties":false},"get_v1_voice_sessions_pending_Response":{"type":"array","items":{"$ref":"#/components/schemas/get_v1_voice_sessions_session_id_Response"}},"post_v1_voice_sessions_init_Response":{"type":"object","properties":{"session_id":{"type":"string"},"presigned_urls":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"url":{"type":"string"}},"required":["index","url"],"additionalProperties":false}},"video_presigned_urls":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"url":{"type":"string"}},"required":["index","url"],"additionalProperties":false}},{"type":"null"}]}},"required":["session_id","presigned_urls","video_presigned_urls"],"additionalProperties":false},"delete_v1_voice_sessions_session_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"get_v1_voice_sessions_session_id_Response":{"type":"object","properties":{"session_id":{"type":"string"},"chat_session_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string"},"mime_type":{"type":"string"},"audio_source":{"type":"string","enum":["microphone","system","system_video"]},"capture_audio":{"type":"string","enum":["mic","system","both"]},"capture_screen":{"type":"boolean"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"chunk_count":{"anyOf":[{"type":"number"},{"type":"null"}]},"audio_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"video_width":{"anyOf":[{"type":"number"},{"type":"null"}]},"video_height":{"anyOf":[{"type":"number"},{"type":"null"}]},"video_mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"video_chunk_count":{"anyOf":[{"type":"number"},{"type":"null"}]},"video_quality":{"anyOf":[{"type":"string","enum":["original","1080p","720p","480p"]},{"type":"null"}]},"transcript_text":{"anyOf":[{"type":"string"},{"type":"null"}]},"speaker_count":{"anyOf":[{"type":"number"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"},"app":{"anyOf":[{"type":"object","properties":{"app_id":{"type":"string"},"app_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"alias":{"type":"string"},"execution_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"delivery":{"type":"string","enum":["pending","filed","failed"]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"record_labels":{"type":"array","items":{"type":"string"},"description":"What the recording is about: the records its act's record-link inputs name, each by its identity now. A deleted record names nothing."}},"required":["app_id","app_name","alias","execution_id","delivery","error","record_labels"],"additionalProperties":false},{"type":"null"}]}},"required":["session_id","chat_session_id","status","mime_type","audio_source","capture_audio","capture_screen","duration_seconds","chunk_count","audio_url","video_url","video_width","video_height","video_mime_type","video_chunk_count","video_quality","transcript_text","speaker_count","error","created_at","app"],"additionalProperties":false},"post_v1_voice_sessions_session_id_complete_Response":{"type":"object","properties":{"session_id":{"type":"string"},"status":{"type":"string"}},"required":["session_id","status"],"additionalProperties":false},"post_v1_voice_sessions_session_id_urls_Response":{"type":"object","properties":{"presigned_urls":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"url":{"type":"string"}},"required":["index","url"],"additionalProperties":false}}},"required":["presigned_urls"],"additionalProperties":false},"post_v1_apps_app_id_recordings_Response":{"type":"object","properties":{"session_id":{"type":"string"},"presigned_urls":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"url":{"type":"string"}},"required":["index","url"],"additionalProperties":false}},"video_presigned_urls":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"index":{"type":"number"},"url":{"type":"string"}},"required":["index","url"],"additionalProperties":false}},{"type":"null"}]},"record_labels":{"type":"array","items":{"type":"string"},"description":"What the recording is about: the records its act's record-link inputs name, each by its identity now. A deleted record names nothing."}},"required":["session_id","presigned_urls","video_presigned_urls","record_labels"],"additionalProperties":false},"post_v1_voice_sessions_session_id_deliver_Response":{"type":"object","properties":{"session_id":{"type":"string"},"delivery":{"type":"string","const":"pending"}},"required":["session_id","delivery"],"additionalProperties":false},"post_v1_voice_sessions_session_id_retry_Response":{"type":"object","properties":{"session_id":{"type":"string"},"status":{"type":"string"}},"required":["session_id","status"],"additionalProperties":false},"get_v1_usage_credit_balance_Response":{"type":"object","properties":{"plan_id":{"type":"string"},"credit_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"credits_used":{"type":"number"},"grant_credits_remaining":{"type":"number"},"credits_remaining":{"anyOf":[{"type":"number"},{"type":"null"}]},"in_overage":{"type":"boolean"},"overage_credits":{"type":"number"}},"required":["plan_id","credit_quota","credits_used","grant_credits_remaining","credits_remaining","in_overage","overage_credits"],"additionalProperties":false},"get_v1_usage_credit_statement_Response":{"type":"object","properties":{"period_start":{"type":"string"},"period_end":{"type":"string"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"credit_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"credits_charged":{"type":"number"},"tasks_not_charged":{"type":"number"},"by_source":{"type":"array","items":{"type":"object","properties":{"credit_source":{"anyOf":[{"type":"string"},{"type":"null"}]},"credits_consumed":{"type":"number"}},"required":["credit_source","credits_consumed"],"additionalProperties":false}},"lines":{"type":"array","items":{"type":"object","properties":{"service":{"type":"string"},"event_type":{"type":"string"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"task_count":{"type":"number"},"uncharged_task_count":{"type":"number"},"input_tokens":{"type":"number"},"output_tokens":{"type":"number"},"cache_read_tokens":{"type":"number"},"cache_write_tokens":{"type":"number"},"audio_duration_seconds":{"type":"number"},"credits_consumed":{"type":"number"}},"required":["service","event_type","model_id","task_count","uncharged_task_count","input_tokens","output_tokens","cache_read_tokens","cache_write_tokens","audio_duration_seconds","credits_consumed"],"additionalProperties":false}}},"required":["period_start","period_end","plan_id","credit_quota","credits_charged","tasks_not_charged","by_source","lines"],"additionalProperties":false},"get_v1_usage_plan_Response":{"anyOf":[{"type":"object","properties":{"plan_id":{"type":"string"},"service_band":{"anyOf":[{"type":"string","enum":["upto_10","upto_30","upto_70"]},{"type":"null"}]},"infra_tier":{"anyOf":[{"type":"string","enum":["byoc","appliance"]},{"type":"null"}]},"billing_cycle_day":{"type":"number"},"credit_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"document_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"record_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"storage_gb":{"anyOf":[{"type":"number"},{"type":"null"}]},"grant_credits_remaining":{"type":"number"},"grant_credits_total":{"type":"number"},"overage_allowed":{"type":"boolean"},"overage_rate_usd":{"anyOf":[{"type":"string"},{"type":"null"}]},"effective_start":{"type":"string"},"term_months":{"anyOf":[{"type":"number"},{"type":"null"}]},"term_amount":{"anyOf":[{"type":"string"},{"type":"null"}]},"term_currency":{"anyOf":[{"type":"string"},{"type":"null"}]},"term_end_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"auto_renew":{"type":"boolean"},"pending_change":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["downgrade","activation","renewal"]},"target_plan_id":{"type":"string"},"scheduled_for":{"type":"string"}},"required":["kind","target_plan_id","scheduled_for"],"additionalProperties":false},{"type":"null"}]},"created_at":{"type":"string"}},"required":["plan_id","service_band","infra_tier","billing_cycle_day","credit_quota","document_quota","record_quota","storage_gb","grant_credits_remaining","grant_credits_total","overage_allowed","overage_rate_usd","effective_start","term_months","term_amount","term_currency","term_end_at","auto_renew","pending_change","created_at"],"additionalProperties":false},{"type":"null"}]},"get_v1_usage_events_Response":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"service":{"type":"string"},"event_type":{"type":"string"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"input_tokens":{"anyOf":[{"type":"number"},{"type":"null"}]},"output_tokens":{"anyOf":[{"type":"number"},{"type":"null"}]},"audio_duration_seconds":{"anyOf":[{"type":"string"},{"type":"null"}]},"price_usd":{"type":"string"},"created_at":{"type":"string"}},"required":["id","service","event_type","model_id","member_id","input_tokens","output_tokens","audio_duration_seconds","price_usd","created_at"],"additionalProperties":false}},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["events","next_cursor"],"additionalProperties":false},"get_v1_usage_member_detail_Response":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"service":{"type":"string"},"event_type":{"type":"string"},"model_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"task_count":{"type":"number"},"uncharged_task_count":{"type":"number"},"audio_duration_seconds":{"type":"number"},"credits_consumed":{"type":"number"}},"required":["service","event_type","model_id","task_count","uncharged_task_count","audio_duration_seconds","credits_consumed"],"additionalProperties":false}}},"required":["lines"],"additionalProperties":false},"get_v1_usage_model_detail_Response":{"type":"object","properties":{"daily":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"input_tokens":{"type":"number"},"output_tokens":{"type":"number"},"cost_usd":{"type":"string"}},"required":["date","input_tokens","output_tokens","cost_usd"],"additionalProperties":false}}},"required":["daily"],"additionalProperties":false},"get_v1_usage_summary_Response":{"type":"object","properties":{"period_start":{"type":"string"},"period_end":{"type":"string"},"plan":{"anyOf":[{"type":"object","properties":{"plan_id":{"type":"string"},"credit_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"grant_credits_remaining":{"type":"number"},"overage_allowed":{"type":"boolean"},"document_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"record_quota":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["plan_id","credit_quota","grant_credits_remaining","overage_allowed","document_quota","record_quota"],"additionalProperties":false},{"type":"null"}]},"credits_used":{"type":"number"},"documents_generated":{"type":"number"},"records_live":{"type":"number"},"ai":{"type":"object","properties":{"total_input_tokens":{"type":"number"},"total_output_tokens":{"type":"number"},"total_cost_usd":{"type":"string"},"by_model":{"type":"array","items":{"type":"object","properties":{"model_id":{"type":"string"},"input_tokens":{"type":"number"},"output_tokens":{"type":"number"},"cost_usd":{"type":"string"}},"required":["model_id","input_tokens","output_tokens","cost_usd"],"additionalProperties":false}}},"required":["total_input_tokens","total_output_tokens","total_cost_usd","by_model"],"additionalProperties":false},"transcription":{"type":"object","properties":{"total_duration_seconds":{"type":"number"},"total_cost_usd":{"type":"string"}},"required":["total_duration_seconds","total_cost_usd"],"additionalProperties":false},"by_member":{"type":"array","items":{"type":"object","properties":{"member_id":{"type":"string"},"ai_input_tokens":{"type":"number"},"ai_output_tokens":{"type":"number"},"transcription_duration_seconds":{"type":"number"},"total_cost_usd":{"type":"string"}},"required":["member_id","ai_input_tokens","ai_output_tokens","transcription_duration_seconds","total_cost_usd"],"additionalProperties":false}}},"required":["period_start","period_end","plan","credits_used","documents_generated","records_live","ai","transcription","by_member"],"additionalProperties":false},"get_v1_usage_plan_history_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"plan_id":{"type":"string"},"credit_quota":{"anyOf":[{"type":"number"},{"type":"null"}]},"overage_allowed":{"type":"boolean"},"billing_cycle_day":{"type":"number"},"effective_start":{"type":"string"},"effective_end":{"anyOf":[{"type":"string"},{"type":"null"}]},"ended_by":{"anyOf":[{"type":"string"},{"type":"null"}]},"created_at":{"type":"string"}},"required":["id","plan_id","credit_quota","overage_allowed","billing_cycle_day","effective_start","effective_end","ended_by","created_at"],"additionalProperties":false}},"get_v1_billing_party_Response":{"type":"object","properties":{"party":{"anyOf":[{"type":"object","properties":{"legal_name":{"type":"string","minLength":1,"maxLength":300},"tax_id":{"type":"string","minLength":1,"maxLength":50},"address":{"type":"string","minLength":1,"maxLength":500},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]}},"required":["legal_name","tax_id","address","email"],"additionalProperties":false},{"type":"null"}]}},"required":["party"],"additionalProperties":false},"get_v1_billing_charges_Response":{"type":"object","properties":{"charges":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"period_start":{"type":"string"},"period_end":{"type":"string"},"currency":{"type":"string"},"status":{"type":"string","enum":["owed","partially_paid","paid","credited"]},"lines":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["plan","service_band","infra_tier","adjustment","term","overage","one_off"]},"item_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"quantity":{"anyOf":[{"type":"string"},{"type":"null"}]},"amount":{"type":"string"}},"required":["kind","item_id","description","quantity","amount"],"additionalProperties":false}},"total":{"type":"string"},"credited":{"type":"string"},"paid":{"type":"string"},"owed":{"type":"string"},"invoice_number":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","period_start","period_end","currency","status","lines","total","credited","paid","owed","invoice_number"],"additionalProperties":false}}},"required":["charges"],"additionalProperties":false},"get_v1_billing_invoices_Response":{"type":"object","properties":{"invoices":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","description":"Số hóa đơn"},"issued_at":{"type":"string"},"period_start":{"type":"string"},"period_end":{"type":"string"},"amount":{"type":"string"},"currency":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"size":{"type":"number"},"buyer":{"anyOf":[{"type":"object","properties":{"legal_name":{"type":"string","minLength":1,"maxLength":300},"tax_id":{"type":"string","minLength":1,"maxLength":50},"address":{"type":"string","minLength":1,"maxLength":500},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]}},"required":["legal_name","tax_id","address","email"],"additionalProperties":false},{"type":"null"}]},"note":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","number","issued_at","period_start","period_end","amount","currency","filename","mime_type","size","buyer","note"],"additionalProperties":false}}},"required":["invoices"],"additionalProperties":false},"put_v1_billing_party_Response":{"type":"object","properties":{"party":{"type":"object","properties":{"legal_name":{"type":"string","minLength":1,"maxLength":300},"tax_id":{"type":"string","minLength":1,"maxLength":50},"address":{"type":"string","minLength":1,"maxLength":500},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]}},"required":["legal_name","tax_id","address","email"],"additionalProperties":false}},"required":["party"],"additionalProperties":false},"get_v1_workflow_executions_Response":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"workflow_id":{"type":"string"},"workspace_id":{"type":"string"},"status":{"type":"string","enum":["running","completed","failed","waiting","cancelled","returned"]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"return_status":{"anyOf":[{"type":"string","enum":["success","error"]},{"type":"null"}]},"return_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"triggered_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","workflow_id","workspace_id","status","error_message","return_status","return_message","started_at","completed_at","triggered_by_member_id"],"additionalProperties":false}},"get_v1_workflow_executions_execution_id_Response":{"type":"object","properties":{"id":{"type":"string"},"workflow_id":{"type":"string"},"workspace_id":{"type":"string"},"status":{"type":"string","enum":["running","completed","failed","waiting","cancelled","returned"]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"return_status":{"anyOf":[{"type":"string","enum":["success","error"]},{"type":"null"}]},"return_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"triggered_by_member_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"return_data":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"workflow_version":{"anyOf":[{"type":"number"},{"type":"null"}]},"steps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"step_id":{"type":"string"},"step_type":{"type":"string"},"status":{"type":"string","enum":["running","completed","failed","waiting","skipped"]},"input":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"output":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}]},"started_at":{"type":"string"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","step_id","step_type","status","input","output","error_message","started_at","completed_at"],"additionalProperties":false}}},"required":["id","workflow_id","workspace_id","status","error_message","return_status","return_message","started_at","completed_at","triggered_by_member_id","return_data","workflow_version","steps"],"additionalProperties":false},"post_v1_workflow_executions_execution_id_cancel_Response":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","const":"cancelled"}},"required":["id","status"],"additionalProperties":false},"post_v1_cli_login_requests_Response":{"type":"object","properties":{"request_id":{"type":"string"},"secret":{"type":"string","description":"Hold this to collect the key. Sent with every poll and stored nowhere else — the mailed link does not carry it."},"code":{"type":"string","description":"Show this to the person; the confirm page shows the same four characters."},"expires_at":{"type":"string"}},"required":["request_id","secret","code","expires_at"],"additionalProperties":false},"get_v1_cli_login_requests_request_id_Response":{"oneOf":[{"type":"object","properties":{"status":{"type":"string","const":"pending"}},"required":["status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"expired"}},"required":["status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"claimed"}},"required":["status"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"approved"},"api_key":{"type":"string"},"organization_id":{"type":"string"},"organization_name":{"type":"string"},"workspace_id":{"type":"string"}},"required":["status","api_key","organization_id","organization_name","workspace_id"],"additionalProperties":false}]},"post_v1_cli_login_requests_request_id_approve_Response":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"],"additionalProperties":false},"get_v1_cli_login_requests_request_id_context_Response":{"type":"object","properties":{"status":{"type":"string","enum":["pending","approved","claimed","expired"]},"code":{"type":"string"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"organizations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}}},"required":["status","code","created_at","expires_at","organizations"],"additionalProperties":false},"get_v1_mcp_grants_Response":{"type":"object","properties":{"grants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"client_name":{"type":"string"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"consented_at":{"type":"string"},"last_token_issued_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"member":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},"required":["id","client_name","workspace","consented_at","last_token_issued_at","member"],"additionalProperties":false}}},"required":["grants"],"additionalProperties":false},"get_v1_me_mcp_grants_Response":{"type":"object","properties":{"grants":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"client_name":{"type":"string"},"workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"consented_at":{"type":"string"},"last_token_issued_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","client_name","workspace","consented_at","last_token_issued_at"],"additionalProperties":false}}},"required":["grants"],"additionalProperties":false},"delete_v1_me_mcp_grants_grant_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"delete_v1_mcp_grants_grant_id_Response":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":false},"post_v1_realtime_token_Response":{"type":"object","properties":{"url":{"type":"string"},"expires_in":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["url","expires_in"],"additionalProperties":false},"delete_v1_organization_logo_Response":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false},"post_v1_organization_logo_Response":{"type":"object","properties":{"logo_url":{"type":"string","description":"Serving URL for the stored logo."}},"required":["logo_url"],"additionalProperties":false},"get_v1_instance_Response":{"type":"object","properties":{"instance":{"type":"string","enum":["hosted","private"]},"release":{"type":"string"},"apps_domain":{"type":"string"},"capabilities":{"type":"object","properties":{"gmail":{"type":"boolean"},"gmail_push":{"type":"boolean"},"google_drive":{"type":"boolean"},"outlook":{"type":"boolean"},"facebook":{"type":"boolean"},"instagram":{"type":"boolean"},"threads":{"type":"boolean"},"x":{"type":"boolean"},"linkedin":{"type":"boolean"},"zalo":{"type":"boolean"},"misa":{"type":"boolean"},"voice_transcription":{"type":"boolean"},"image_generation":{"type":"boolean"},"bank_lookup":{"type":"boolean"},"code_runs":{"type":"boolean"},"telemetry":{"type":"boolean"},"licence_issuer":{"type":"boolean"},"invoice_issuer":{"type":"boolean"}},"required":["gmail","gmail_push","google_drive","outlook","facebook","instagram","threads","x","linkedin","zalo","misa","voice_transcription","image_generation","bank_lookup","code_runs","telemetry","licence_issuer","invoice_issuer"],"additionalProperties":false},"licence":{"anyOf":[{"type":"object","properties":{"state":{"type":"string","enum":["active","grace","read_only","perpetual"]},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"writes_stop_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["state","expires_at","writes_stop_at"],"additionalProperties":false},{"type":"null"}]}},"required":["instance","release","apps_domain","capabilities","licence"],"additionalProperties":false},"get_v1_iam_absences_Response":{"type":"object","properties":{"absences":{"type":"array","items":{"$ref":"#/components/schemas/put_v1_iam_me_absence_Response"}}},"required":["absences"],"additionalProperties":false},"delete_v1_iam_me_absence_Response":{"type":"object","properties":{"id":{"type":"string","description":"The member whose absence ended — yours; ending none is no error."}},"required":["id"],"additionalProperties":false},"put_v1_iam_me_absence_Response":{"type":"object","properties":{"member_id":{"type":"string","description":"The member away."},"starts_on":{"type":"string","format":"date","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])))$","description":"The first day away, in the calendar of the workspace an act runs in."},"ends_on":{"type":"string","format":"date","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])))$","description":"The last day away — it counts. At most 60 days from the first, both counted."},"stand_in_member_id":{"type":"string","description":"The member who, on every day away, may also do each stage the member away owns."}},"required":["member_id","starts_on","ends_on","stand_in_member_id"],"additionalProperties":false},"delete_v1_iam_absences_member_id_Response":{"type":"object","properties":{"id":{"type":"string","description":"The member whose absence ended; ending none is no error."}},"required":["id"],"additionalProperties":false},"post_v1_iam_member_groups_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string"},"member_ids":{"type":"array","items":{"type":"string"}},"invitation_ids":{"type":"array","items":{"type":"string"}}},"required":["name","member_ids"]},"put_v1_iam_member_groups_group_id_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"description":{"type":"string"},"member_ids":{"type":"array","items":{"type":"string"}},"invitation_ids":{"type":"array","items":{"type":"string"}}}},"patch_v1_iam_invitations_invitation_id_Body":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name"]},"patch_v1_iam_role_bindings_binding_id_Body":{"type":"object","properties":{"role":{"type":"string"}},"required":["role"]},"post_v1_iam_content_items_resource_type_make_private_Body":{"type":"object","properties":{"resource_ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string"}}},"required":["resource_ids"]},"post_v1_iam_content_items_resource_type_share_with_organization_Body":{"type":"object","properties":{"resource_ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string"}}},"required":["resource_ids"]},"post_v1_iam_resources_resource_type_resource_id_role_bindings_Body":{"type":"object","properties":{"principal":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"]}]},"role":{"type":"string"}},"required":["principal","role"]},"post_v1_iam_resources_resource_type_resource_id_transfer_ownership_Body":{"type":"object","properties":{"member_id":{"type":"string"}},"required":["member_id"]},"patch_v1_members_member_id_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255}},"required":["name"]},"post_v1_system_agents_chat_session_id_messages_Body":{"type":"object","properties":{"messages":{},"web_search_enabled":{"type":"boolean"},"disabled_connections":{"description":"Connection ids the member switched off for this conversation. Absent means none.","type":"array","items":{"type":"string"}},"model_tier":{"type":"string","enum":["haiku","sonnet","opus"]},"model_id":{"type":"string","minLength":1},"effort_level":{"type":"string","enum":["low","medium","high","xhigh","max"]},"app_context_app_id":{"type":"string"}},"required":["messages"]},"post_v1_system_agents_chat_session_id_messages_save_Body":{"type":"object","properties":{"messages":{}},"required":["messages"]},"post_v1_connected_accounts_Body":{"oneOf":[{"type":"object","properties":{"provider":{"type":"string","const":"wininvoice"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"},"client_secret":{"type":"string","description":"WinInvoice client secret"}},"required":["client_id","client_secret"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"payos"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"},"api_key":{"type":"string","description":"PayOS API key"},"checksum_key":{"type":"string","description":"PayOS checksum key for signature verification"}},"required":["client_id","api_key","checksum_key"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"misa"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"access_code":{"type":"string","description":"Connection code generated in AMIS Settings → API Connection"},"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"}},"required":["access_code","org_company_code"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"lark"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"app_secret":{"type":"string","description":"Lark custom-app App Secret"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"}},"required":["app_id","app_secret","region"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"fedex"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"client_secret":{"type":"string","description":"FedEx secret key (OAuth client secret)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"}},"required":["client_id","client_secret","account_number","environment"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"kiotviet"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"client_secret":{"type":"string","description":"KiotViet secret key"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"}},"required":["client_id","client_secret","retailer","edition"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"telegram"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"bot_token":{"type":"string","description":"Bot token from @BotFather"}},"required":["bot_token"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]},{"type":"object","properties":{"provider":{"type":"string","const":"bkav"},"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"partner_token":{"type":"string","description":"PartnerToken, `keyBase64:ivBase64`"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","partner_token","environment","tax_code"]},"connector_config":{"$ref":"#/components/schemas/patch_v1_connected_accounts_connected_account_id_connector_config_Body"}},"required":["provider","name","credentials"]}]},"patch_v1_connected_accounts_connected_account_id_Body":{"oneOf":[{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"wininvoice"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"WinInvoice client ID"},"client_secret":{"type":"string","description":"WinInvoice client secret"}},"required":["client_id","client_secret"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"payos"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"PayOS client ID"},"api_key":{"type":"string","description":"PayOS API key"},"checksum_key":{"type":"string","description":"PayOS checksum key for signature verification"}},"required":["client_id","api_key","checksum_key"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"misa"},"credentials":{"type":"object","properties":{"access_code":{"type":"string","description":"Connection code generated in AMIS Settings → API Connection"},"org_company_code":{"type":"string","description":"Customer's MISA organization/domain identifier"}},"required":["access_code","org_company_code"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"lark"},"credentials":{"type":"object","properties":{"app_id":{"type":"string","description":"Lark custom-app App ID (cli_...)"},"app_secret":{"type":"string","description":"Lark custom-app App Secret"},"region":{"type":"string","enum":["larksuite","feishu"],"description":"larksuite (international) or feishu (China)"}},"required":["app_id","app_secret","region"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"fedex"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"FedEx API key (OAuth client ID)"},"client_secret":{"type":"string","description":"FedEx secret key (OAuth client secret)"},"account_number":{"type":"string","description":"FedEx shipping account number"},"environment":{"type":"string","enum":["sandbox","production"],"description":"sandbox or production"}},"required":["client_id","client_secret","account_number","environment"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"kiotviet"},"credentials":{"type":"object","properties":{"client_id":{"type":"string","description":"KiotViet Client ID (Thiết lập → Kết nối API)"},"client_secret":{"type":"string","description":"KiotViet secret key"},"retailer":{"type":"string","description":"Store name — the subdomain used to sign in to KiotViet"},"edition":{"type":"string","enum":["retail","fnb"],"description":"retail (bán lẻ) or fnb (nhà hàng, cà phê)"}},"required":["client_id","client_secret","retailer","edition"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"telegram"},"credentials":{"type":"object","properties":{"bot_token":{"type":"string","description":"Bot token from @BotFather"}},"required":["bot_token"]}},"required":["provider","credentials"]},{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"What to call this connection, e.g. the store or branch it belongs to."},"provider":{"type":"string","const":"bkav"},"credentials":{"type":"object","properties":{"partner_guid":{"type":"string","minLength":1,"description":"PartnerGUID Bkav issued for this account"},"partner_token":{"type":"string","description":"PartnerToken, `keyBase64:ivBase64`"},"environment":{"type":"string","enum":["demo","prod"],"description":"demo is Bkav's sandbox; prod issues real invoices"},"tax_code":{"type":"string","minLength":1,"description":"Mã số thuế of the company, as entered"}},"required":["partner_guid","partner_token","environment","tax_code"]}},"required":["provider","credentials"]}]},"patch_v1_connected_accounts_connected_account_id_connector_config_Body":{"anyOf":[{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]},{"type":"object","properties":{"access":{"type":"string","enum":["none","read","read_write"]}},"required":["access"]}]},"post_v1_tables_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"description":"What the table holds, and what makes two rows the SAME row — the natural key anything that imports or de-duplicates has to match on.","type":"string"},"fields":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"description":"Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link","description":"Field type for linking to records in another table"},"table_id":{"type":"string","description":"ID of the target table that records can be linked to"},"display_field_keys":{"default":[],"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If empty, the picker shows all fields.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"paired_field_key":{"description":"Key of the paired link field in the linked table. If set to a string, this indicates a bidirectional link where both tables can reference each other and data synchronizes in both directions. Both fields have paired_field_key pointing to each other. If set to null, explicitly disconnects the bidirectional link (clears paired_field_key on both sides). If undefined, no change is made to the existing paired_field_key.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"]}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"]}},"required":["key","name","description","type","source_field_key","lookup_field_key"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"]}]}},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["name","fields"]},"post_v1_tables_reorder_Body":{"type":"object","properties":{"table_ids":{"type":"array","items":{"type":"string"},"description":"Ordered array of table IDs defining the new order"}},"required":["table_ids"]},"post_v1_records_resolve_Body":{"type":"object","properties":{"record_ids":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"patch_v1_record_data_templates_record_data_template_id_Body":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}}},"patch_v1_tables_table_id_Body":{"type":"object","properties":{"name":{"type":"string"},"description":{"description":"What the table holds, and what makes two rows the SAME row — the natural key anything that imports or de-duplicates has to match on.","type":"string"},"fields":{"type":"array","items":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"description":"Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link","description":"Field type for linking to records in another table"},"table_id":{"type":"string","description":"ID of the target table that records can be linked to"},"display_field_keys":{"default":[],"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If empty, the picker shows all fields.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"paired_field_key":{"description":"Key of the paired link field in the linked table. If set to a string, this indicates a bidirectional link where both tables can reference each other and data synchronizes in both directions. Both fields have paired_field_key pointing to each other. If set to null, explicitly disconnects the bidirectional link (clears paired_field_key on both sides). If undefined, no change is made to the existing paired_field_key.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"]}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"]}},"required":["key","name","description","type","source_field_key","lookup_field_key"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"]}]}},"field_order":{"description":"Field keys in display order. A field it does not name keeps its place after the named ones.","type":"array","items":{"type":"string"}},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"private_filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}]},"colors":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFiltersGroup"},{"type":"null"}],"description":"The filter conditions that determine when this color rule applies. Null means no filtering."},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The color to apply to records matching the filters."}},"required":["filters","color"]}},{"type":"null"}]},"approvers":{"anyOf":[{"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"member","description":"Principal type: individual member"},"id":{"type":"string","description":"Member ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"member_group","description":"Principal type: group of members"},"id":{"type":"string","description":"Member group ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"organization","description":"Principal type: all members in organization"},"id":{"type":"string","description":"Organization ID"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"public","description":"Principal type: anyone, including unauthenticated visitors"},"id":{"type":"string","const":"public","description":"Always the `public` sentinel — no entity"}},"required":["type","id"]},{"type":"object","properties":{"type":{"type":"string","const":"invitation","description":"Principal type: pending invitation (not yet accepted)"},"id":{"type":"string","description":"Invitation ID"}},"required":["type","id"]}]}},{"type":"null"}]},"unique":{"anyOf":[{"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string"}},"description":"Field-key tuples whose values no two live rows share: a create or update that would repeat every value of a tuple is refused. Members are text, number, date, single-select or cardinality-one link fields; a row with any member empty never collides."},{"type":"null"}]}}},"patch_v1_views_view_id_Body":{"type":"object","properties":{"name":{"type":"string"},"frozen_columns":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"]},{"type":"null"}]}},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"default_record_data_template_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"]}},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"visible_to":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"]}},{"type":"null"}]}}},"post_v1_tables_table_id_clone_Body":{"type":"object","properties":{"name":{"type":"string"},"include_data":{"type":"boolean"},"include_views":{"type":"boolean"},"include_workflows":{"type":"boolean"}},"required":["name"]},"post_v1_views_view_id_clone_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"]}}}},"post_v1_tables_table_id_draft_records_Body":{"type":"object","properties":{"records":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["data"]}}},"required":["records"]},"post_v1_tables_table_id_record_data_templates_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["name","description","data"]},"post_v1_tables_table_id_fields_Body":{"type":"object","properties":{"field":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"description":"Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link"},"table_id":{"type":"string","description":"Linked table ID"},"display_field_keys":{"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If omitted, auto-selects the target's autonumber, else its first text field.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"sync_both_ways":{"description":"Enable bidirectional link sync. If the target table has exactly one existing unpaired link field pointing back, pairs with it instead of creating a new field.","type":"boolean"},"paired_field_display_field_keys":{"description":"Display fields for paired link","type":"array","items":{"type":"string"}},"paired_field_name":{"description":"Name for the auto-created paired field on the target table when sync_both_ways=true. If omitted, falls back to the source table's name (auto-uniquified with a numeric suffix on collision). Rejected as a conflict if a field with this name already exists on the target.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"]}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"]}},"required":["key","name","description","type","source_field_key","lookup_field_key"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"]}]},"add_to_views":{"description":"View IDs where the new field should be visible. Fields are hidden in all views by default.","type":"array","items":{"type":"string"}}},"required":["field"]},"post_v1_tables_table_id_records_Body":{"type":"object","properties":{"records":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Record data keyed by field key."}},"required":["data"]}}},"required":["records"]},"post_v1_tables_table_id_views_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"frozen_columns":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"summary":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"]},{"type":"null"}]}},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"]}},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"visible_to":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"]}},{"type":"null"}]}},"required":["name"]},"delete_v1_tables_table_id_records_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"},"description":"Array of record IDs to soft-delete."},"cascade":{"description":"Also delete the records whose single-valued link names one of these, and theirs in turn. Without it such a delete is refused, because clearing the link leaves a filled record belonging to nothing. Requires write_data on every table reached.","type":"boolean"}},"required":["record_ids"]},"post_v1_views_view_id_export_csv_Body":{"type":"object","properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]}}},"post_v1_views_view_id_export_xlsx_Body":{"type":"object","properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]}}},"patch_v1_tables_table_id_records_Body":{"type":"object","properties":{"records":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Partial record data — only included fields are changed."},"add_to":{"description":"Items to append to a multi-value field (files, multi-select, multi select_member, select_record_link), keyed by field key. Resolved against the record as it stands when the write lands, so two callers appending at the same time each keep their item — unlike sending the whole array in `data`, where the later write replaces the earlier. A field may appear in only one of data/add_to/remove_from, save add_to with remove_from: together they put the added items where the first removed one stood.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}},"remove_from":{"description":"Items to remove from a multi-value field, keyed by field key. Resolved against the record at write time, like `add_to`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["id","data"]}},"bypass_locked_fields":{"description":"Admin-only: bypass locked field protection.","type":"boolean"}},"required":["records"]},"post_v1_tables_table_id_records_comments_Body":{"type":"object","properties":{"comments":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"record_id":{"type":"string"},"content":{"type":"string"},"file_ids":{"type":"array","items":{"type":"string"}}},"required":["record_id","content"]}}},"required":["comments"]},"post_v1_tables_table_id_records_find_position_Body":{"type":"object","properties":{"record_id":{"type":"string"},"view_id":{"type":"string"},"search":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["record_id","view_id"]},"post_v1_tables_table_id_records_by_ids_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"},"description":"Array of record IDs to fetch."},"include_drafts":{"description":"Include draft records in results.","type":"boolean"}},"required":["record_ids"]},"post_v1_tables_table_id_records_lock_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"post_v1_tables_table_id_records_purge_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"},"description":"Archived record IDs to permanently delete."}},"required":["record_ids"]},"post_v1_tables_table_id_records_query_Body":{"type":"object","properties":{"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"search":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_keys":{"description":"Return only these fields in record data. Omit to return all fields.","type":"array","items":{"type":"string"}},"limit":{"description":"Max records to return (0-200). Set 0 for count only.","type":"integer","minimum":0,"maximum":200},"offset":{"description":"Number of records to skip for pagination.","type":"integer","minimum":0,"maximum":9007199254740991},"archived_only":{"description":"When true, return records in the trash (archived but not yet permanently deleted), ordered by archive recency.","type":"boolean"}}},"post_v1_tables_table_id_views_reorder_Body":{"type":"object","properties":{"view_ids":{"type":"array","items":{"type":"string"},"description":"Ordered array of view IDs defining the new order"}},"required":["view_ids"]},"post_v1_tables_table_id_records_restore_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"post_v1_tables_table_id_draft_records_submit_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"post_v1_tables_table_id_records_unlock_Body":{"type":"object","properties":{"record_ids":{"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"patch_v1_records_record_id_comments_comment_id_Body":{"type":"object","properties":{"content":{"type":"string","maxLength":10000},"file_ids":{"type":"array","items":{"type":"string"}},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}},"required":["content"]},"patch_v1_tables_table_id_fields_field_key_Body":{"type":"object","properties":{"field":{"oneOf":[{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"number"},"notation":{"oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}],"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }."},"format":{"description":"Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". null clears it. Replaced by \"notation\", and never read: naming another reading in it is refused.","anyOf":[{"type":"string"},{"type":"null"}]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"number"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"type":"string","enum":["text","link","markdown"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"date"},"format":{"type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp. `created_at` stamps once at insert time; `updated_at` re-stamps on every record edit. A derived field is read-only: a write naming it is refused, as for formula/rollup/lookup. Replaces the per-table after_create workflow pattern.","type":"string","enum":["created_at","updated_at"]},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. A date string in the field's format.","anyOf":[{"type":"string"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it.","anyOf":[{"type":"boolean"},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Option key(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","options"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_value":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. null clears it. Member ID(s) — one for single-select.","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"select_record_link"},"table_id":{"type":"string","description":"Linked table ID"},"display_field_keys":{"description":"Field keys of the linked table shown as the link's display text and as the columns in the record picker. If omitted, auto-selects the target's autonumber, else its first text field.","type":"array","items":{"type":"string"}},"display_field_widths":{"description":"Per-column widths in pixels for the record picker, keyed by linked-table field key. Missing keys fall back to the default column width.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"sync_both_ways":{"description":"Enable bidirectional link sync. If the target table has exactly one existing unpaired link field pointing back, pairs with it instead of creating a new field.","type":"boolean"},"paired_field_display_field_keys":{"description":"Display fields for paired link","type":"array","items":{"type":"string"}},"paired_field_name":{"description":"Name for the auto-created paired field on the target table when sync_both_ways=true. If omitted, falls back to the source table's name (auto-uniquified with a numeric suffix on collision). Rejected as a conflict if a field with this name already exists on the target.","type":"string"},"cardinality":{"description":"How many linked records this field can hold. Default 'many' (multi-select). 'one' = single-select; this side holds exactly one linked record, paired or not. Two paired sides cannot both be 'one'.","type":"string","enum":["one","many"]},"default_from":{"description":"Copied off the row `link_field_key` names when a record is made, and never re-read: the source changing later leaves the record alone. A value the write states wins; `default_value` fills what the copy leaves empty. null clears it.","anyOf":[{"type":"object","properties":{"link_field_key":{"type":"string","description":"A one-row link field of this table: the row the value is copied from"},"field_key":{"type":"string","description":"The field of the linked table whose value is copied"},"options":{"description":"Where the source is a select: each of its option keys → this field's option key. An option it leaves unmapped is not copied.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["link_field_key","field_key"],"additionalProperties":false},{"type":"null"}]}},"required":["key","name","description","type","table_id"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"rollup","description":"Field type for aggregating values from linked records (sum, avg, filled, earliest, etc.)"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to rollup from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]}],"description":"The field aggregation function to apply (e.g., sum, avg, filled, earliest)"},"filter":{"description":"Optional filter to apply to linked records before aggregation. Only records matching the filter conditions will be included in the rollup calculation.","$ref":"#/components/schemas/TableRecordFiltersGroup"},"aggregate_field_type":{"description":"What this rollup's CELL holds — 'date' for earliest/latest, 'number' for every other operation (counts, sums, percentages). Derived from the operation, not from the aggregated field: a 'filled' count over a files column is a number. Server-derived at write time; ignored on input.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"aggregate_field_notation":{"description":"How this rollup's figure reads. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range) inherit the target field's; counts are a decimal, percentages the unit \"percent\". Server-derived at write time; ignored on input.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"aggregate_field_format":{"description":"The format of this rollup's own value. Operations that preserve the aggregated value's unit (sum/avg/median/min/max/range/earliest/latest) inherit the target field's format; counting operations are 'number', percentages 'percentage'. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency":{"description":"The currency code of this rollup's own value (e.g. 'USD', 'VND'), inherited from the aggregated field only when the operation preserves its unit — a COUNT of a currency column carries no currency. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit":{"description":"The unit of this rollup's own value (e.g. 'kg', 'kiện'), inherited from the aggregated field only when the operation preserves it — a COUNT of a weight column carries none. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_unit_field":{"description":"The single select on this row whose option is this rollup's unit, where the aggregated field reads its unit per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"},"aggregate_field_currency_field":{"description":"The single select on this row whose option is this rollup's currency, where the aggregated field reads its currency per row from a lookup of that select through this rollup's link. Server-derived at write time; ignored on input.","type":"string"}},"required":["key","name","description","type","source_field_key","aggregate_option"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"lookup","description":"Field type for displaying values from fields in linked records"},"source_field_key":{"type":"string","description":"The field key of the select_record_link field to lookup from"},"lookup_field_key":{"type":"string","description":"The field key from the linked records to display"},"lookup_field_type":{"description":"The type of the target lookup field (e.g. 'text', 'number', 'date'). Resolved from the linked table's field definition at read time.","type":"string","enum":["text","number","date","boolean","select","select_member","select_record_link","files","formula","rollup","lookup","button","autonumber"]},"lookup_field_notation":{"description":"How the looked-up figure reads, where the target lookup field holds a number. Resolved from the linked table's field definition at write time.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"lookup_field_format":{"description":"The format of the target lookup field (e.g. 'currency', 'percentage', 'datetime'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_currency":{"description":"The currency code of the target lookup field (e.g. 'USD', 'VND'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_unit":{"description":"The unit of the target lookup field (e.g. 'kg', 'kiện'). Resolved from the linked table's field definition at read time.","type":"string"},"lookup_field_options":{"description":"Options for select-type lookup fields. Synced from the source select field's options.","type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name"]}},"lookup_field_autonumber":{"description":"True where the looked-up value is an autonumber's text, which sorts by its number where it is a bare one. Synced from the looked-up field.","type":"boolean"},"order_by":{"description":"When set, sort the linked records by this field on the linked table and return ONLY the picked field from the single extreme record (desc=latest, asc=earliest), as a one-element array. Omit to return every linked record's value as an array. field_key must be a field on the linked table.","type":"object","properties":{"field_key":{"type":"string"},"direction":{"type":"string","enum":["asc","desc"]}},"required":["field_key","direction"]}},"required":["key","name","description","type","source_field_key","lookup_field_key"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"files","description":"Field type for file attachments (images, PDFs, documents)"}},"required":["key","name","description","type"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"formula","description":"Field type for calculated values based on expressions"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"JavaScript expression. A field is referenced as {fld_key}, stored so; a write also takes {Field Name}, stored as its key."},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","minLength":1,"description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"options":{"description":"The categories the formula yields, drawn as a single select's options are. The expression yields one option's `key` (text) or null; a key it does not declare computes an error. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"]},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["key","name","color"]}},"output_type":{"description":"Output type of the formula. Inferred by the backend from the expression — read-only on input. `datetime` when the result carries a time of day (references a datetime field or a time-bearing helper); `select` when the formula declares `options`.","type":"string","enum":["number","text","date","datetime","boolean","select"]},"volatile":{"description":"Whether the formula's result depends on `now()` or other non-deterministic helpers. Inferred by the backend — read-only on input.","type":"boolean"}},"required":["expression"],"description":"Formula configuration and expression"}},"required":["key","name","description","type","formula"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"button","description":"Field type for action buttons"},"text":{"type":"string","description":"Button label text displayed to users"},"workflow_id":{"description":"ID of the workflow the button presses trigger. Null means no action configured — pressing the button is a no-op. Button authoring is retired: existing bindings keep running, but nothing sets a new one.","anyOf":[{"type":"string"},{"type":"null"}]}},"required":["key","name","description","type","text"]},{"type":"object","properties":{"key":{"type":"string","description":"Unique field key"},"name":{"type":"string","description":"Display name"},"description":{"type":"string","description":"Field description"},"confirm_before_update":{"description":"Show confirmation before AI updates","type":"boolean"},"required":{"description":"Refuse a record whose cell for this field is empty. Checked on the row as STORED, after defaults, autonumber stamps and computed values — so a computed field is checked on what it computed. An update is refused only when it is the write that empties the cell, so a row stored before the flag stays editable.","type":"boolean"},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["key","name","description","type"]}]}},"required":["field"]},"patch_v1_tables_table_id_views_view_id_Body":{"type":"object","properties":{"name":{"type":"string"},"frozen_columns":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"summary":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","description":"Operation to perform on the field"},"field_key":{"type":"string","description":"Field key to display in the summary row"}},"required":["operation","field_key"]},{"type":"null"}]}},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"default_record_data_template_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"field_config":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"Field key"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"type":"number"}},"required":["key","visibility"]}},"position":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"visible_to":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["member","group"],"description":"Principal kind that may see the view: an individual member or a member group"},"id":{"type":"string","description":"Member ID (type=member) or member-group ID (type=group)"}},"required":["type","id"]}},{"type":"null"}]}}},"patch_v1_tables_table_id_workflows_table_workflow_id_Body":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"enabled":{"type":"boolean"},"event":{"type":"string","enum":["after_create","after_update","after_delete"]},"source":{"type":"string"},"if_source":{"type":"string"}}},"post_v1_tables_table_id_views_view_id_summary_Body":{"type":"object","properties":{"summary":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-zA-Z0-9_]+$"},"additionalProperties":{"type":"object","properties":{"operation":{"type":"string"},"field_key":{"type":"string"}},"required":["operation","field_key"]}},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"search":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["summary"]},"post_v1_tables_table_id_fields_field_key_repoint_Body":{"type":"object","properties":{"to_field_key":{"type":"string","minLength":1}},"required":["to_field_key"]},"post_table_table_id_export_excel_Body":{"type":"object","properties":{"search":{"anyOf":[{"type":"string"},{"type":"null"}]},"filters":{"anyOf":[{"$ref":"#/components/schemas/TableRecordFilters"},{"type":"null"}]},"sort":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},{"type":"null"}]},"field_keys":{"minItems":1,"type":"array","items":{"type":"string"}},"export_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["field_keys"]},"post_v1_workspaces_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1},"timezone":{"type":"string","description":"IANA timezone name (e.g., 'America/New_York', 'Asia/Ho_Chi_Minh')"},"default_currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code (e.g. 'VND', 'USD', 'EUR'). Upper-cased."}},"required":["name"]},"patch_v1_workspace_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1},"default_currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 currency code (e.g. 'VND', 'USD', 'EUR'). Upper-cased."},"timezone":{"type":"string","description":"IANA timezone name (e.g., 'America/New_York', 'Asia/Ho_Chi_Minh')"}},"required":["name","default_currency","timezone"]},"post_v1_workspaces_scaffold_Body":{"type":"object","properties":{"contract":{"type":"object","properties":{"entities":{"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable entity alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The table's name in the workspace, which apply names it"},"singular":{"description":"One row of this table, in the business's own words — what a create's button and panel name","type":"string","minLength":1},"description":{"description":"The table's description, written onto the table in the workspace","type":"string"},"writes":{"description":"false: no app opens or edits this table's rows. Direct writes follow the table's access, as on any table","type":"boolean","const":false},"fields":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"string"},"type":{"type":"string","const":"text"},"unique":{"description":"Unique values required","type":"boolean"},"format":{"description":"How the words are drawn — plain, as a link that opens, or as markdown","type":"string","enum":["text","link","markdown"]},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"number"},"type":{"type":"string","const":"number"},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. Omitted, a decimal.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"format":{"description":"What the figure is — a plain number, money in `currency`, or a percent. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","enum":["number","currency","percentage"]},"currency":{"description":"ISO 4217 code. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. A date string in the field's format.","type":"string"},"type":{"type":"string","const":"date"},"format":{"description":"Whether the field holds a day or a moment, alone or as a span","type":"string","enum":["date","datetime","date_range","datetime_range"]},"timezone":{"description":"IANA timezone","type":"string"},"derive_from":{"description":"Auto-populate from the row's system timestamp; the field becomes read-only.","type":"string","enum":["created_at","updated_at"]},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled.","type":"boolean"},"type":{"type":"string","const":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"description":"Value pre-filled into a new record when none is supplied for this field. Applied on create only — existing records are never backfilled. Option alias(es) this field declares — one for single-select.","type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}},"type":{"type":"string","const":"select"},"options":{"minItems":1,"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the field"},"label":{"type":"string","minLength":1,"description":"Display label for the option"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The colour the option's badge is drawn in"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["alias","label","color"]},"description":"The choices, in the order every picker and every ladder lists them"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type","options"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"select_member"},"multi":{"description":"Allow multiple selections","type":"boolean"},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"select_record_link"},"target_entity":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of the entity this field links to"},"sync_both_ways":{"description":"Create a paired link field on the target entity for bidirectional sync","type":"boolean"},"paired_field_alias":{"description":"The pair edge of a bidirectional link: the field alias ON THE TARGET ENTITY that is this link's sync partner. Both sides of a pair carry it, each naming the other. Apply creates whichever side it reaches first WITH the pairing (the platform auto-creates the partner) and binds the partner alias to the auto-created field — without this edge the two contract fields would be created independently and collide with the auto-created partner.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"cardinality":{"description":"How many linked records this field holds. Default 'many'. 'one' holds a single row and needs no partner; where the link IS paired, the partner side holds many.","type":"string","enum":["one","many"]},"display_field_aliases":{"description":"Field aliases on the target entity shown as the link's display text / picker columns","type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}},"default_from":{"description":"Copied when a record is made off the row a one-row link of this entity names — `<link alias>.<field alias>` — and never re-read, so the source changing later leaves the row alone. A value the add states wins; a select copies each option as this field's option of the same alias.","type":"string","pattern":"^[a-z][a-z0-9_]*\\.[a-z][a-z0-9_]*$"}},"required":["alias","label","type","target_entity"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"files"}},"required":["alias","label","type"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"formula"},"formula":{"type":"object","properties":{"expression":{"type":"string","description":"The expression, over fields of THIS entity by alias in braces — `{quantity} * {unit_price}`"},"notation":{"description":"How the figure reads: { \"style\": \"decimal\" }; money, { \"style\": \"currency\", \"currency\": an ISO 4217 code (USD, VND) }; or a quantity, { \"style\": \"unit\", \"unit\": \"percent\" (10 reads \"10%\"), or a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does }. A currency or unit read on each row from a single select of that row is { \"per_row\": that select }. For a formula yielding a number.","oneOf":[{"type":"object","properties":{"style":{"type":"string","const":"decimal"}},"required":["style"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"currency"},"currency":{"anyOf":[{"type":"string","minLength":1},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","currency"],"additionalProperties":false},{"type":"object","properties":{"style":{"type":"string","const":"unit"},"unit":{"anyOf":[{"type":"string"},{"type":"object","properties":{"per_row":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The single select of the same row whose option is each row's currency or unit"}},"required":["per_row"],"additionalProperties":false}]}},"required":["style","unit"],"additionalProperties":false}]},"link":{"description":"The formula yields a URL as text, drawn as a link that opens.","type":"boolean","const":true},"format":{"description":"'number' / 'currency' / 'percentage' for numeric results; 'link' for a URL. Replaced by \"notation\", and never read: naming another reading in it is refused. 'link' is \"link\": true.","type":"string","enum":["number","currency","percentage","link"]},"currency":{"description":"ISO 4217 currency code, e.g. USD, VND, EUR. Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit":{"description":"What a plain figure counts or measures, drawn after it: a measured code (g, kg, t, l, m3, cbm, mm, cm, m, km, m2, min, h, day), which converts and scales within its dimension, or any other noun of at most 12 characters (kiện, pallet, TEU), which never does. Only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string"},"unit_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's unit: every option label is a unit as `unit` takes one. In place of `unit`; only beside format \"number\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"currency_field":{"description":"A single select on the same row, or a lookup of one through a one-link, whose chosen option is that row's currency: every option label is an ISO 4217 code. In place of `currency`; only beside format \"currency\". Replaced by \"notation\", and never read: naming another reading in it is refused.","type":"string","pattern":"^[a-z][a-z0-9_]*$"},"options":{"description":"The categories the formula yields, drawn as a single select's options are (read-only). The expression yields one of them as `{this_field:option}`, or null — `{days_idle} > 30 ? {warmth:cold} : {warmth:hot}`. Omit for a formula yielding a plain value.","minItems":1,"type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the field"},"label":{"type":"string","minLength":1,"description":"Display label for the option"},"color":{"type":"string","enum":["red","orange","amber","yellow","lime","green","emerald","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose","slate","gray","zinc","neutral","stone"],"description":"The colour the option's badge is drawn in"},"mark":{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"description":"The option's own mark, drawn in place of its colour dot wherever the option is shown: the brand it is ({kind: \"brand\", name: one of facebook, instagram, threads, meta, tiktok, google-ads, zalo, linkedin, x, google-meet, youtube, telegram, whatsapp, gmail, google-drive, outlook, kiotviet, misa, lark, payos}) a kit glyph ({kind: \"icon\", name: \"wrench\"}) or the face of who it is, drawn from its label ({kind: \"avatar\", name: \"person\" or \"organization\"}). Every option of a field has one, or none does. A mark a reader does not draw falls back to the dot"}},"required":["alias","label","color"]}},"output_type":{"description":"What the expression YIELDS — the kind the platform infers at write time, declared here so the offline checks can read it. `notation` beside it is how a number result reads, not what it is. Ignored on the wire (the platform re-infers it); `lotics model pull` writes the inferred value.","type":"string","enum":["number","text","date","datetime","boolean","select"]}},"required":["expression"],"description":"Formula config. The expression references other fields on the SAME entity by alias in braces, e.g. `{quantity} * {unit_price}`."}},"required":["alias","label","type","formula"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"rollup"},"source_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of a select_record_link field on this entity to roll up from"},"aggregate_option":{"anyOf":[{"type":"object","properties":{"operation":{"type":"string","const":"count"},"field_key":{"type":"string"}},"required":["operation"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","selected"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range","checked","unchecked","percent_checked","percent_unchecked"]},"field_key":{"type":"string"}},"required":["operation","field_key"]},{"type":"object","properties":{"operation":{"type":"string","enum":["empty","filled","percent_empty","percent_filled","unique","percent_unique","sum","avg","median","min","max","range","earliest","latest","date_range"]},"field_key":{"type":"string"}},"required":["operation","field_key"]}],"description":"Aggregation operation. Its `field_key` names a field alias on the linked entity."},"filter":{"description":"Only linked records matching this filter are aggregated; one condition on its own is a group of one. Every `field_key` in it names a field alias on the linked entity, and a select condition's value names an option alias there. A traversal node reaches past that entity, so its `path` hops and inner `field_key` are fully-qualified `entity.field` aliases.","$ref":"#/components/schemas/TableRecordFiltersGroup"}},"required":["alias","label","type","source_field_alias","aggregate_option"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"lookup"},"source_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of a select_record_link field on this entity to look up through"},"lookup_field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Alias of the field on the linked entity to display"},"order_by":{"description":"Show ONE linked row's value — the first in this order — rather than every linked row's","type":"object","properties":{"field_key":{"type":"string","description":"A field alias on the linked entity the rows are ordered by"},"direction":{"type":"string","enum":["asc","desc"],"description":"Which end of that order the one row is taken from"}},"required":["field_key","direction"]}},"required":["alias","label","type","source_field_alias","lookup_field_alias"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable local alias, unique within the entity"},"label":{"type":"string","minLength":1,"pattern":"^[^{}]*$","description":"The field's name in the workspace, which apply names it"},"description":{"description":"The field's description, written onto the field in the workspace","type":"string"},"required":{"description":"Refuse a record whose cell for this field is empty. Apply writes it onto the field, and every write path — create, update, an agent's tool call, a workflow's set — refuses the row by field name.","type":"boolean"},"default":{"not":{}},"type":{"type":"string","const":"autonumber"},"prefix":{"description":"Literal prefix prepended to every display value (e.g. 'KH-' → 'KH-001'). Ignored when `template` is set.","type":"string"},"padding":{"description":"Zero-pad the integer to this width. Default 1 (no padding). 3 → '001', '012', '123', '1234' (overflow uses the actual width). Ignored when `template` is set.","type":"integer","minimum":1,"maximum":20},"template":{"description":"Format template with placeholder tokens evaluated at insert time. Tokens: {N} (raw integer), {N:W} (zero-padded to width W, e.g. {N:3} → 001), {YEAR} (4-digit year), {YEAR:2} (2-digit year), {MONTH} (2-digit month), {DAY} (2-digit day). Date tokens use the workspace timezone. Example: 'HM-{YEAR}-{N:3}' yields 'HM-2026-001'. Stored as the composed string; subsequent template edits do NOT re-format existing rows (date tokens would lose the original creation date).","type":"string"}},"required":["alias","label","type"]}],"description":"What the field holds — each type takes the further keys its own section lists"},"description":"The table's columns"},"read_scope":{"description":"Which rows a member reads. Absent, every member with access to the table reads every row.","type":"object","properties":{"any":{"minItems":1,"type":"array","items":{"anyOf":[{"type":"object","properties":{"member_of":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A role alias: whoever is in the group it binds to reads the row"}},"required":["member_of"],"additionalProperties":false},{"type":"object","properties":{"through":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"select_record_link aliases from this entity outward, each of cardinality \"one\" — the clause's field is on the entity the last hop lands on"},"field":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A select_member field alias on this entity, or on the entity `through` lands on"},"is":{"type":"string","const":"self","description":"The members this column names on a row read that row"}},"required":["field","is"],"additionalProperties":false},{"type":"object","properties":{"through":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"select_record_link aliases from this entity outward, each of cardinality \"one\" — the clause's field is on the entity the last hop lands on"},"field":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A single-select field alias on this entity, or on the entity `through` lands on"},"is":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"description":"Its option aliases whose rows are readable — naming none would hide every row"}},"required":["field","is"],"additionalProperties":false}]},"description":"A row is readable when ANY of these holds"}},"required":["any"],"additionalProperties":false},"unique":{"description":"Sets of fields whose values no two live rows share — each a list of field aliases (text, number, date, a single select, or a link of cardinality \"one\"). A create or update landing a second row with the same values is refused.","minItems":1,"type":"array","items":{"minItems":1,"type":"array","items":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"}}},"views":{"default":[],"description":"Saved views, in the order they are listed; with none, the table still opens on its default grid","type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable view alias, unique within the entity"},"label":{"type":"string","minLength":1,"description":"Display name of the view"},"description":{"description":"The view's description, written onto the view in the workspace","type":"string"},"columns":{"description":"The columns the view shows, in this order and no others; absent, every field","minItems":1,"type":"array","items":{"type":"object","properties":{"field_alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"A field of this entity"},"visibility":{"type":"string","enum":["visible","hidden"],"description":"Field visibility state: 'visible' = shown to everyone, 'hidden' = not shown by default but members can toggle"},"width":{"description":"The column's width, in pixels","type":"number"}},"required":["field_alias","visibility"]}},"filters":{"description":"The rows the view keeps","$ref":"#/components/schemas/TableRecordFilters"},"sort":{"description":"The order the view reads its rows in","type":"array","items":{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]}},"summary":{"description":"Field alias → the operation its footer cell states","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"frozen_columns":{"description":"How many leading columns stay in place while the rest scroll","anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["alias","label"]}}},"required":["alias","label","fields"]},"description":"The tables this model creates, with their fields, options and views"},"roles":{"default":[],"description":"Workspace groups to create; members are added to them afterwards","type":"array","items":{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable role alias, bound to a workspace group when the model is applied"},"label":{"type":"string","minLength":1,"description":"The group's name in the workspace"}},"required":["alias","label"]}},"templates":{"default":[],"description":"Document templates: html and email inline, excel made from an uploaded workbook","type":"array","items":{"oneOf":[{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"html"},"content":{"type":"string","minLength":1,"description":"Inline template content; placeholders reference field aliases"},"content_sha256":{"description":"sha256 (64-char lowercase hex) of the utf-8 content; derived where the template is written when absent","type":"string"},"locale":{"description":"The language its figures, dates and amounts in words print in; absent prints in the organization's","type":"string","enum":["vi","en"]}},"required":["alias","label","type","content"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"email"},"content":{"type":"string","minLength":1,"description":"Inline template content; placeholders reference field aliases"},"content_sha256":{"description":"sha256 (64-char lowercase hex) of the utf-8 content; derived where the template is written when absent","type":"string"},"locale":{"description":"The language its figures, dates and amounts in words print in; absent prints in the organization's","type":"string","enum":["vi","en"]}},"required":["alias","label","type","content"]},{"type":"object","properties":{"alias":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"Stable template alias, unique within the contract"},"label":{"type":"string","minLength":1,"description":"The template's name in the workspace"},"type":{"type":"string","const":"excel"},"file_id":{"type":"string","pattern":"^fil_","description":"The uploaded .xlsx (`fil_…`) the template is made from; its markers read what the export fills it with"}},"required":["alias","label","type","file_id"]}],"description":"html is a page a workflow renders to a PDF; email is a message a workflow sends; excel is a workbook a register's export fills"}}},"required":["entities"],"additionalProperties":false,"description":"The model: entities, fields, options, links, views, roles and inline templates."},"rows":{"description":"First rows keyed by entity alias. A row's `fields` are keyed by field alias and read against the field's declared type: a select takes the option alias, a link takes \"<entity-alias>:<row-ref>\" naming another row in this request, a date takes a literal `YYYY-MM-DD`, or `@today` / `@month-start` with an optional whole-day offset (`@today-14`, `@month-start+9`) to place it relative to the day the rows land, and on a date holding its hour that hour after it (`@today 14:30`, `@today+1 06:00`), a files field takes `fil_` ids of files already uploaded into this workspace.","type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"additionalProperties":{"type":"array","items":{"type":"object","properties":{"ref":{"type":"string","minLength":1,"pattern":"^[a-z0-9_]+$","description":"Local handle for this row, referenced by other rows' link fields"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Field alias → the value, read against the field's declared type"}},"required":["ref","fields"]}}},"adopt":{"description":"Bind an entity whose label already names a table in this workspace, instead of refusing.","type":"boolean"}},"required":["contract"]},"post_v1_notifications_Body":{"type":"object","properties":{"title":{"type":"string"},"body":{"type":"string"},"level":{"type":"string","enum":["urgent","warning","info","success"]}},"required":["title","body"]},"post_v1_files_download_zip_Body":{"type":"object","properties":{"file_ids":{"minItems":1,"type":"array","items":{"type":"string"}},"filename":{"type":"string"},"size":{"type":"string","enum":["original","small"]}},"required":["file_ids"]},"post_v1_files_upload_url_Body":{"type":"object","properties":{"filename":{"type":"string","minLength":1},"mime_type":{"type":"string"},"size_bytes":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["filename"]},"post_v1_files_multipart_abort_Body":{"type":"object","properties":{"upload_id":{"type":"string"},"file_storage_key":{"type":"string"}},"required":["upload_id","file_storage_key"]},"post_v1_files_direct_complete_Body":{"type":"object","properties":{"file_id":{"type":"string"},"file_storage_key":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"original_file_id":{"description":"When set, this upload becomes a new version of the original file. The server resolves the current latest, links the new row via source_file_id, and bumps the original's latest_version_id pointer.","type":"string"}},"required":["file_id","file_storage_key","filename","mime_type"]},"post_v1_files_multipart_complete_Body":{"type":"object","properties":{"file_id":{"type":"string"},"upload_id":{"type":"string"},"file_storage_key":{"type":"string"},"filename":{"type":"string"},"mime_type":{"type":"string"},"parts":{"type":"array","items":{"type":"object","properties":{"part_number":{"type":"number"},"etag":{"type":"string"}},"required":["part_number","etag"]}},"original_file_id":{"description":"When set, this upload becomes a new version of the original file. The server resolves the current latest, links the new row via source_file_id, and bumps the original's latest_version_id pointer.","type":"string"}},"required":["file_id","upload_id","file_storage_key","filename","mime_type","parts"]},"post_v1_files_direct_init_Body":{"type":"object","properties":{"file_id":{"description":"Never sent: the server mints the file id.","not":{}},"filename":{"type":"string"},"mime_type":{"type":"string"},"file_size":{"type":"integer","exclusiveMinimum":0,"maximum":2147483648}},"required":["filename","mime_type","file_size"]},"post_v1_files_multipart_init_Body":{"type":"object","properties":{"file_id":{"description":"Never sent: the server mints the file id.","not":{}},"filename":{"type":"string"},"mime_type":{"type":"string"},"file_size":{"type":"integer","exclusiveMinimum":0,"maximum":2147483648},"network_effective_type":{"type":"string","enum":["slow-2g","2g","3g","4g"]},"network_rtt_ms":{"type":"number","minimum":0}},"required":["filename","mime_type","file_size"]},"post_v1_files_file_id_rename_Body":{"type":"object","properties":{"filename":{"type":"string","description":"The whole new name, keeping the file's extension exactly."}},"required":["filename"]},"post_v1_workflows_dry_run_Body":{"type":"object","properties":{"source":{"type":"string"},"attachment":{"type":"object","properties":{"trigger_type":{"type":"string"},"table_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["trigger_type","table_id"]},"trigger_payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"prev_data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"changes":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"object","properties":{"prev_value":{"description":"Value of the field before the change"},"next_value":{"description":"Value of the field after the change"}}},"description":"Map of changed fields with their previous and new values. Keys are field keys."}},"required":["source","attachment"]},"patch_v1_workflows_workflow_id_Body":{"type":"object","properties":{"name":{"description":"Updated name of the workflow","type":"string"},"description":{"description":"Updated description of the workflow","type":"string"},"steps":{"description":"Updated workflow steps (v2 AST; replaces all existing steps). Validated by validateV2StepTree after body parse."}}},"post_v1_document_templates_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"description":"What the template produces.","type":"string"},"type":{"type":"string","enum":["html","pdf-form","excel","word","email"],"description":"Template type: 'html' for HTML templates, 'pdf-form' for fillable PDF forms, 'excel' for Excel templates, 'word' for Word templates, 'email' for email HTML templates"},"template":{"type":"string"},"format":{"default":"A4","type":"string"},"orientation":{"default":"portrait","type":"string","enum":["portrait","landscape"]},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["name","type"]},"patch_v1_document_templates_document_template_id_Body":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"template":{"type":"string"},"format":{"type":"string"},"orientation":{"type":"string","enum":["portrait","landscape"]},"variables":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"post_v1_document_templates_document_template_id_find_text_Body":{"type":"object","properties":{"query":{"type":"string","minLength":1}},"required":["query"]},"post_v1_document_templates_document_template_id_mark_conditional_region_Body":{"type":"object","properties":{"variable_name":{"type":"string","minLength":1,"pattern":"^[a-z][a-z0-9_]*$"},"region":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"table_rows"},"element_index":{"type":"integer","minimum":0,"maximum":9007199254740991},"start_row":{"type":"integer","minimum":0,"maximum":9007199254740991},"end_row":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","element_index","start_row","end_row"]},{"type":"object","properties":{"type":{"type":"string","const":"paragraphs"},"start_index":{"type":"integer","minimum":0,"maximum":9007199254740991},"end_index":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","start_index","end_index"]}]},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["variable_name","region"]},"post_v1_document_templates_document_template_id_mark_loop_region_Body":{"type":"object","properties":{"variable_name":{"type":"string","minLength":1,"pattern":"^[a-z][a-z0-9_]*$"},"loop_variable":{"type":"string","minLength":1,"pattern":"^[a-z][a-z0-9_]*$"},"region":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"table_rows"},"element_index":{"type":"integer","minimum":0,"maximum":9007199254740991},"start_row":{"type":"integer","minimum":0,"maximum":9007199254740991},"end_row":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","element_index","start_row","end_row"]},{"type":"object","properties":{"type":{"type":"string","const":"paragraphs"},"start_index":{"type":"integer","minimum":0,"maximum":9007199254740991},"end_index":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["type","start_index","end_index"]}]},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["variable_name","loop_variable","region"]},"post_v1_document_templates_document_template_id_mark_variable_Body":{"type":"object","properties":{"selected_text":{"type":"string","minLength":1},"variable_name":{"type":"string","minLength":1,"pattern":"^[a-z][a-z0-9_]*$"},"variable_type":{"default":"string","type":"string","enum":["string","array","image"]},"occurrence_index":{"type":"integer","minimum":0,"maximum":9007199254740991},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["selected_text","variable_name","occurrence_index"]},"post_v1_document_templates_document_template_id_unmark_conditional_region_Body":{"type":"object","properties":{"variable_name":{"type":"string","minLength":1},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["variable_name"]},"post_v1_document_templates_document_template_id_unmark_loop_region_Body":{"type":"object","properties":{"variable_name":{"type":"string","minLength":1},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["variable_name"]},"post_v1_document_templates_document_template_id_unmark_variable_Body":{"type":"object","properties":{"variable_name":{"type":"string","minLength":1},"expected_version":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["variable_name"]},"post_v1_apps_Body":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"icon":{"anyOf":[{"type":"string"},{"type":"null"}]},"theme":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]}},"required":["name"]},"post_v1_apps_reorder_Body":{"type":"object","properties":{"app_ids":{"type":"array","items":{"type":"string"},"description":"Ordered array of app IDs defining the calling member's apps-list order"}},"required":["app_ids"]},"patch_v1_apps_app_id_Body":{"type":"object","properties":{"name":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"icon":{"anyOf":[{"type":"string"},{"type":"null"}]},"theme":{"anyOf":[{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},{"type":"null"}]}}},"post_v1_apps_app_id_field_options_Body":{"type":"object","properties":{"alias":{"type":"string","description":"Named query alias whose select columns' full option sets to resolve"}},"required":["alias"]},"post_v1_apps_app_id_export_Body":{"type":"object","properties":{"alias":{"type":"string","description":"Named query alias declared in the app's lotics.queries manifest"},"params":{"description":"Param values filling the query template's declared {{params.x}} holes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"filter":{"description":"Runtime filter applied over the query's OUTPUT columns. field_keys must be columns the named query projects (an un-projected field is rejected) — this bounds dynamic filtering to what the query already exposes.","$ref":"#/components/schemas/TableRecordFilters"},"sort":{"description":"Runtime sort applied over the query's OUTPUT columns, each key in turn breaking the ties of the ones before it: `{ field_key, order, blank_position? }` orders by a column the named query projects; `{ first: [filter, …] }` (at most 8) puts the rows each filter keeps — read as `filter` is — before the rest, a row with the first it meets and the rows meeting none last.","type":"array","items":{"anyOf":[{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]},{"type":"object","properties":{"first":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TableRecordFilters"}}},"required":["first"],"additionalProperties":false}]}},"tabs":{"description":"A register's tabs: each one's rows read as the export's own are, same query and params, under its own filter and sort.","minItems":2,"maxItems":5,"type":"array","items":{"type":"object","properties":{"tab":{"type":"string","pattern":"^[a-z][a-z0-9_]*$","description":"The tab's name: the key a template reads its rows under."},"label":{"type":"string","minLength":1,"maxLength":500,"description":"The tab's name in the reader's words: its sheet in the default workbook."},"filter":{"description":"Runtime filter applied over the query's OUTPUT columns. field_keys must be columns the named query projects (an un-projected field is rejected) — this bounds dynamic filtering to what the query already exposes.","$ref":"#/components/schemas/TableRecordFilters"},"sort":{"description":"Runtime sort applied over the query's OUTPUT columns, each key in turn breaking the ties of the ones before it: `{ field_key, order, blank_position? }` orders by a column the named query projects; `{ first: [filter, …] }` (at most 8) puts the rows each filter keeps — read as `filter` is — before the rest, a row with the first it meets and the rows meeting none last.","type":"array","items":{"anyOf":[{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]},{"type":"object","properties":{"first":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TableRecordFilters"}}},"required":["first"],"additionalProperties":false}]}}},"required":["tab","label"],"additionalProperties":false}},"report":{"type":"object","properties":{"title":{"type":"string","maxLength":500,"description":"The file's title: its first line, and the name of the default workbook."},"lines":{"maxItems":100,"type":"array","items":{"type":"string","maxLength":500},"description":"Under the title, one per thing narrowing the rows."},"readings":{"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"label":{"type":"string","maxLength":500},"valueLabel":{"type":"string","maxLength":500},"unit":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"truncated":{"type":"boolean"},"kind":{"type":"string","const":"metric"},"value":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","valueLabel","unit","truncated","kind","value"],"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","maxLength":500},"valueLabel":{"type":"string","maxLength":500},"unit":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"truncated":{"type":"boolean"},"kind":{"type":"string","const":"breakdown"},"byLabel":{"type":"string","maxLength":500},"parts":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":500},"value":{"type":"number"},"share":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","value","share"],"additionalProperties":false}},"total":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","valueLabel","unit","truncated","kind","byLabel","parts","total"],"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","maxLength":500},"valueLabel":{"type":"string","maxLength":500},"unit":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"truncated":{"type":"boolean"},"kind":{"type":"string","const":"trend"},"points":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":500},"value":{"type":"number"},"partial":{"type":"boolean"}},"required":["label","value","partial"],"additionalProperties":false}}},"required":["label","valueLabel","unit","truncated","kind","points"],"additionalProperties":false},{"type":"object","properties":{"label":{"type":"string","maxLength":500},"valueLabel":{"type":"string","maxLength":500},"unit":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"truncated":{"type":"boolean"},"kind":{"type":"string","const":"pivot"},"rowsLabel":{"type":"string","maxLength":500},"columnsLabel":{"type":"string","maxLength":500},"columns":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":500},"total":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","total"],"additionalProperties":false}},"rows":{"maxItems":1000,"type":"array","items":{"type":"object","properties":{"label":{"type":"string","maxLength":500},"values":{"maxItems":1000,"type":"array","items":{"type":"number"}},"total":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","values","total"],"additionalProperties":false}},"total":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["label","valueLabel","unit","truncated","kind","rowsLabel","columnsLabel","columns","rows","total"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"failed"},"label":{"type":"string","maxLength":500}},"required":["kind","label"],"additionalProperties":false}]},"description":"The figures over the rows, as the screen drew them."},"dates":{"description":"Each date filter narrowing the rows, by the alias of the field it filters: its bounds, each a day (yyyy-MM-dd) or a minute of one (yyyy-MM-ddTHH:mm), with no zone.","type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]*$"},"additionalProperties":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"additionalProperties":false}},"filename":{"description":"The file's name, in the template grammar over `title`, `at`, `dates.<field>.from` or `.to`, `period.from` or `.to`, `per`, and `lines | lookup:<n>` — at most 200 bytes once filled; absent, the template's name, or `title`.","type":"string","minLength":1,"maxLength":500},"period":{"description":"The period a register's tabs read their rows over: its bounds, each a day (yyyy-MM-dd) or a minute of one (yyyy-MM-ddTHH:mm), with no zone.","type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}},"required":["from","to"],"additionalProperties":false},"per":{"description":"The value the report was picked for, as the reader names it.","type":"string","minLength":1,"maxLength":500}},"required":["title","lines","readings"],"additionalProperties":false},"file":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","const":"workbook"},"language":{"type":"string","enum":["vi","en"],"description":"The language of the words the workbook says of its own: its summary tab, a total, a note."},"sheet":{"type":"string","minLength":1,"maxLength":500,"description":"The rows' tab."},"columns":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"description":"An output column of the query."},"header":{"type":"string","maxLength":500},"type":{"type":"string","enum":["text","number","date"]},"labels":{"description":"A select whose cells hold bare option keys: the words each key prints as.","type":"object","propertyNames":{"type":"string","minLength":1},"additionalProperties":{"type":"string","maxLength":500}}},"required":["key","header","type"],"additionalProperties":false},"description":"The rows' columns, in order."}},"required":["kind","language","sheet","columns"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","const":"template"},"template":{"type":"string","minLength":1,"description":"A template the query declares under `templates`, by its name there."}},"required":["kind","template"],"additionalProperties":false}],"description":"`workbook`: the default report — a summary tab of the readings where there are any, then the rows under `columns`. `template`: the template filled with the report — `title`, `lines`, `readings`, `at`, `dates` — and every row, each output column as the template reads it, under the key the template declares."}},"required":["alias","report","file"],"additionalProperties":false},"post_v1_apps_app_id_query_batch_Body":{"type":"object","properties":{"reads":{"minItems":1,"maxItems":16,"type":"array","items":{},"description":"Each read as `POST /v1/apps/{app_id}/query` takes it, a malformed one refused alone; answered in the same order."}},"required":["reads"]},"post_v1_apps_app_id_query_Body":{"type":"object","properties":{"alias":{"type":"string","description":"A query alias in the app's `queries` map"},"params":{"description":"Param values filling the query template's declared {{params.x}} holes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"limit":{"description":"Max rows to return; clamped to the server cap","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"offset":{"description":"Row offset for pagination","type":"integer","minimum":0,"maximum":9007199254740991},"keyset":{"description":"Opt into cursor (seek) pagination for load-more: pass the previous page's `next_cursor` as `cursor`. The server keysets a single sortable key (or the id-only default) and falls back to offset transparently for multi-key sorts. Numbered-page callers use `offset`/`count` instead.","type":"boolean"},"cursor":{"description":"Opaque pagination cursor from a prior page's `next_cursor` (keyset mode).","type":"string"},"sort":{"description":"Runtime sort applied over the query's OUTPUT columns, each key in turn breaking the ties of the ones before it: `{ field_key, order, blank_position? }` orders by a column the named query projects; `{ first: [filter, …] }` (at most 8) puts the rows each filter keeps — read as `filter` is — before the rest, a row with the first it meets and the rows meeting none last.","type":"array","items":{"anyOf":[{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]},{"type":"object","properties":{"first":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TableRecordFilters"}}},"required":["first"],"additionalProperties":false}]}},"filter":{"description":"Runtime filter applied over the query's OUTPUT columns. field_keys must be columns the named query projects (an un-projected field is rejected) — this bounds dynamic filtering to what the query already exposes.","$ref":"#/components/schemas/TableRecordFilters"},"count":{"description":"When true, return only `total` (a COUNT over the filtered set, ignoring sort/limit/offset) instead of rows — for paginated tables rendering 'Page 1 of N'.","type":"boolean"},"count_by":{"description":"With `count`, also count the filtered set per value of this output column, returned as `counts` — one scan for a strip of N bands rather than N counts. A row holding several values is counted under each; a row holding none is in `total` and in no bucket.","type":"string"},"count_where":{"description":"With `count`, also count the rows each named filter keeps — over the query's output columns as `filter` narrows them, ANDed with `filter` — returned as `counts` by name, every count from one scan. Not with `count_by`.","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"$ref":"#/components/schemas/TableRecordFilters"}},"aggregate":{"description":"Return the groups of the filtered set instead of its rows: one row per group, holding each `by` column, `__day` with `day`, `__count` (its rows) and `__sum` with `sum`. Sent with `params` and `filter` alone; `truncated` past the row cap.","type":"object","properties":{"by":{"description":"Output columns to group by — one group per distinct value each holds, at most 3. A cell holding several values groups by all of them at once.","minItems":1,"maxItems":3,"type":"array","items":{"type":"string"}},"day":{"description":"An output date column, grouped by its day and answered under `__day` (yyyy-MM-dd).","type":"string"},"sum":{"description":"An output number column each group sums, answered under `__sum`; null where no row of the group holds a number.","type":"string"}},"additionalProperties":false}},"required":["alias"]},"post_v1_apps_app_id_prediction_misses_Body":{"type":"object","properties":{"misses":{"minItems":1,"maxItems":50,"type":"array","items":{"anyOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["cell","not_removed"],"description":"A predicted value the stored one differs from, or a row predicted gone that the server still holds."},"workflow":{"type":"string","maxLength":200,"description":"The alias of the workflow whose run was predicted."},"table_id":{"type":"string","maxLength":64},"field_key":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"description":"The field that missed; null for a whole row."},"column":{"type":"string","enum":["own","via","row"],"description":"A field of the row itself, one read through its link, or the row."},"count":{"type":"integer","minimum":1,"maximum":1000}},"required":["kind","workflow","table_id","field_key","column","count"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["model_unavailable","predict_error"],"description":"The app's write model could not be read, or predicting a run threw: its writes wait for the server."},"workflow":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"description":"The workflow whose run was not predicted; null for the model."},"error":{"type":"string","pattern":"^[A-Za-z_$][\\w$]{0,63}$","description":"The error's class name alone (`TypeError`, `WorkflowEvalError`)."},"count":{"type":"integer","minimum":1,"maximum":1000}},"required":["kind","workflow","error","count"],"additionalProperties":false}]}}},"required":["misses"]},"put_v1_apps_app_id_public_password_Body":{"type":"object","properties":{"password":{"anyOf":[{"type":"string","minLength":6,"maxLength":256},{"type":"null"}]}},"required":["password"]},"put_v1_apps_app_id_subdomain_Body":{"type":"object","properties":{"public_subdomain":{"type":"string"}},"required":["public_subdomain"]},"post_v1_apps_app_id_public_authenticate_Body":{"type":"object","properties":{"password":{"type":"string"}},"required":["password"]},"post_v1_apps_app_id_files_complete_Body":{"type":"object","properties":{"file_id":{"type":"string"},"file_storage_key":{"type":"string"},"filename":{"type":"string","description":"The same name sent to `files/upload-url`."},"place":{"description":"A photo's: where the device that took it stood as it took it, as the device reported it — kept with the file, and served only on the reads of an app declaring `capabilities.photo_places`, to a member of its organization.","type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"accuracy":{"type":"number","minimum":0}},"required":["latitude","longitude","accuracy"],"additionalProperties":false}},"required":["file_id","file_storage_key","filename"]},"post_v1_apps_app_id_api_publish_Body":{"type":"object","properties":{}},"post_v1_apps_app_id_files_upload_url_Body":{"type":"object","properties":{"filename":{"type":"string","description":"The file's name, as it should be stored."},"mime_type":{"type":"string","description":"The file's media type, e.g. `image/jpeg`."},"file_size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"The file's size in bytes, exactly: the upload URL is signed for it."}},"required":["filename","mime_type","file_size"]},"post_v1_apps_app_id_embed_grant_verify_Body":{"type":"object","properties":{"grant":{"type":"string"}},"required":["grant"]},"post_v1_apps_app_id_queries_alias_Body":{"type":"object","properties":{"params":{"description":"Param values filling the query template's declared {{params.x}} holes","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"limit":{"description":"Max rows to return; clamped to the server cap","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"offset":{"description":"Row offset for pagination","type":"integer","minimum":0,"maximum":9007199254740991},"keyset":{"description":"Opt into cursor (seek) pagination for load-more: pass the previous page's `next_cursor` as `cursor`. The server keysets a single sortable key (or the id-only default) and falls back to offset transparently for multi-key sorts. Numbered-page callers use `offset`/`count` instead.","type":"boolean"},"cursor":{"description":"Opaque pagination cursor from a prior page's `next_cursor` (keyset mode).","type":"string"},"sort":{"description":"Runtime sort applied over the query's OUTPUT columns, each key in turn breaking the ties of the ones before it: `{ field_key, order, blank_position? }` orders by a column the named query projects; `{ first: [filter, …] }` (at most 8) puts the rows each filter keeps — read as `filter` is — before the rest, a row with the first it meets and the rows meeting none last.","type":"array","items":{"anyOf":[{"type":"object","properties":{"field_key":{"type":"string","description":"Field key to sort by"},"order":{"anyOf":[{"type":"string","enum":["asc","desc"]},{"type":"null"}],"description":"Sort order: 'asc' for ascending, 'desc' for descending"},"blank_position":{"description":"Blank position: 'top' for top, 'bottom' for bottom","type":"string","enum":["top","bottom"]}},"required":["field_key","order"]},{"type":"object","properties":{"first":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TableRecordFilters"}}},"required":["first"],"additionalProperties":false}]}},"filter":{"description":"Runtime filter applied over the query's OUTPUT columns. field_keys must be columns the named query projects (an un-projected field is rejected) — this bounds dynamic filtering to what the query already exposes.","$ref":"#/components/schemas/TableRecordFilters"},"count":{"description":"When true, return only `total` (a COUNT over the filtered set, ignoring sort/limit/offset) instead of rows — for paginated tables rendering 'Page 1 of N'.","type":"boolean"},"count_by":{"description":"With `count`, also count the filtered set per value of this output column, returned as `counts` — one scan for a strip of N bands rather than N counts. A row holding several values is counted under each; a row holding none is in `total` and in no bucket.","type":"string"},"count_where":{"description":"With `count`, also count the rows each named filter keeps — over the query's output columns as `filter` narrows them, ANDed with `filter` — returned as `counts` by name, every count from one scan. Not with `count_by`.","type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":64},"additionalProperties":{"$ref":"#/components/schemas/TableRecordFilters"}},"aggregate":{"description":"Return the groups of the filtered set instead of its rows: one row per group, holding each `by` column, `__day` with `day`, `__count` (its rows) and `__sum` with `sum`. Sent with `params` and `filter` alone; `truncated` past the row cap.","type":"object","properties":{"by":{"description":"Output columns to group by — one group per distinct value each holds, at most 3. A cell holding several values groups by all of them at once.","minItems":1,"maxItems":3,"type":"array","items":{"type":"string"}},"day":{"description":"An output date column, grouped by its day and answered under `__day` (yyyy-MM-dd).","type":"string"},"sum":{"description":"An output number column each group sums, answered under `__sum`; null where no row of the group holds a number.","type":"string"}},"additionalProperties":false}}},"post_v1_apps_app_id_agent_runs_run_id_continue_Body":{"type":"object","properties":{"tool_call_id":{"type":"string","minLength":1},"output":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["tool_call_id","output"]},"post_v1_apps_app_id_agents_alias_runs_Body":{"type":"object","properties":{"session_id":{"type":"string","minLength":1,"description":"App-minted key grouping this run's session thread."},"input":{"description":"Declared input values for the run (validated against the alias's inputs schema).","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["session_id"]},"post_v1_apps_app_id_workflows_alias_execute_Body":{"type":"object","properties":{"inputs":{"description":"Input values forwarded into the workflow's initial context","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"minted_ids":{"description":"Ids the caller minted for the rows this run makes: each `create_records` row that states no `ids` takes the next, in order, and a row past the list gets one of the platform's. An id already taken in the workspace refuses its create.","maxItems":200,"type":"array","items":{"type":"string"}}}},"post_v1_apps_app_id_workflows_alias_dts_Body":{"type":"object","properties":{"declaration":{"description":"The alias's inputs/outputs declaration, as the next `set_app_workflow` will store it: the schema the body must satisfy. Supplied, the dts is generated from it whether or not the alias is already bound. Omit it to render the stored contract.","type":"object","properties":{"inputs":{"description":"Typed input schema for the workflow alias. Keys are input names; values declare type + constraints. The server validates payloads against this schema before invoking the workflow; CLI codegen emits typed `useWorkflow<alias>` signatures for the app side. Omit `inputs` for workflows that accept no inputs or whose shape isn't worth declaring.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowInput"}},"outputs":{"description":"Typed output schema for the data the workflow returns via `return({ data })`. Keys are field names; values declare type + (nested object/array) shape. The server validates the returned data against this schema at the app boundary and the workflow won't save unless its `return({ data })` matches; CLI codegen types `result.data`. Omit when the workflow returns no data, or pass it through untyped.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/components/schemas/AppWorkflowOutput"}}}}}},"post_v1_apps_app_id_files_file_id_rename_Body":{"type":"object","properties":{"filename":{"type":"string","description":"The whole new name, keeping the file's extension exactly."}},"required":["filename"]},"post_v1_apps_app_id_records_record_id_comments_Body":{"type":"object","properties":{"content":{"type":"string","maxLength":10000},"file_ids":{"type":"array","items":{"type":"string"}}},"required":["content"]},"patch_v1_apps_app_id_records_record_id_comments_comment_id_Body":{"type":"object","properties":{"content":{"type":"string","maxLength":10000},"file_ids":{"type":"array","items":{"type":"string"}},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}}},"required":["content"]},"post_v1_automations_Body":{"type":"object","properties":{"name":{"type":"string","description":"Automation name."},"description":{"type":"string","description":"What this automation does."},"type":{"type":"string","enum":["recurring_schedule","receive_outlook_email","receive_gmail_email","receive_webhook"],"description":"Trigger type."},"enabled":{"description":"Whether the automation is active. Defaults to true.","type":"boolean"},"steps":{"description":"Workflow steps (v2 AST). Validated by validateV2StepTree after body parse."},"trigger_config":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Trigger-specific config. Required keys depend on `type` — the trigger adapter enforces presence and shape (e.g. `cron_expression` for recurring_schedule, `connected_account_id` for email triggers)."},"imports_into":{"description":"The table id the automation brings data into: its runs are the imports log of a register over that table that keeps one (`register.imports`).","type":"string"}},"required":["name","description","type","trigger_config"]},"patch_v1_automations_trigger_id_Body":{"type":"object","properties":{"enabled":{"description":"Enable or disable the automation","type":"boolean"},"config":{"description":"Trigger config (type-specific)","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"steps":{"description":"Workflow steps (v2 AST; replaces all existing steps). Validated by validateV2StepTree after body parse."},"imports_into":{"description":"The table id the automation brings data into: its runs are the imports log of a register over that table that keeps one (`register.imports`). Null: it imports into none.","anyOf":[{"type":"string"},{"type":"null"}]}}},"post_v1_skills_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100,"description":"Name of the skill"},"description":{"type":"string","description":"Brief description of what the skill does"},"content":{"type":"string","description":"Detailed instructions/content of the skill"},"disable_agent_invocation":{"description":"When true, agent cannot auto-invoke this skill. Useful for prompt templates with $ARGUMENTS.","type":"boolean"},"user_invocable":{"description":"When false, skill is hidden from the composer picker. Useful for background knowledge.","type":"boolean"}},"required":["name","description","content"]},"patch_v1_skills_skill_id_Body":{"type":"object","properties":{"name":{"description":"Updated name","type":"string","minLength":1,"maxLength":100},"description":{"description":"Updated description","type":"string"},"content":{"description":"Updated content","type":"string"},"disable_agent_invocation":{"description":"Updated agent invocation flag","type":"boolean"},"user_invocable":{"description":"Updated user invocable flag","type":"boolean"},"active_by_default":{"description":"When true, skill is active for all members by default. Admin only.","type":"boolean"},"expected_version":{"description":"Expected current version for optimistic concurrency control","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"post_v1_instructions_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Name of the instruction"},"description":{"type":"string","description":"Brief description of when this instruction applies"},"content":{"type":"string","description":"The instruction content the agent must follow"},"scope":{"type":"string","enum":["workspace"],"description":"Instruction scope"},"table_id":{"description":"Table to scope this instruction to","type":"string"}},"required":["name","description","content","scope"]},"patch_v1_instructions_instruction_id_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string"},"content":{"type":"string"}}},"post_v1_instructions_instruction_id_restore_Body":{"type":"object","properties":{"version":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Version number to restore"}},"required":["version"]},"post_v1_member_instructions_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Name of the instruction"},"description":{"type":"string","description":"Brief description of when this instruction applies"},"content":{"type":"string","description":"The instruction content the agent must follow"}},"required":["name","description","content"]},"patch_v1_member_instructions_instruction_id_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string"},"content":{"type":"string"}}},"patch_v1_knowledge_docs_Body":{"type":"object","properties":{"knowledge_doc_ids":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string"}},"add_tags":{"description":"Labels to add to every listed doc. A doc that already carries one is left alone.","maxItems":20,"type":"array","items":{"type":"string","maxLength":60}},"remove_tags":{"description":"Labels to strip from every listed doc. Matched case-insensitively.","maxItems":100,"type":"array","items":{"type":"string","maxLength":60}},"hidden":{"description":"Take every listed doc out of circulation (true) or put it back (false).","type":"boolean"}},"required":["knowledge_doc_ids"]},"post_v1_knowledge_docs_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200,"description":"Name of the knowledge doc"},"description":{"type":"string","description":"Brief description of what this document covers"},"content":{"type":"string","maxLength":10000000,"description":"The knowledge doc content"},"tags":{"description":"Labels to classify the doc, e.g. [\"Hồ sơ NOXH\", \"Khoản 13\"]. Omit for untagged.","maxItems":20,"type":"array","items":{"type":"string","maxLength":60}},"files":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":{}}]}}},"required":["name","description","content"]},"patch_v1_knowledge_docs_knowledge_doc_id_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string"},"content":{"type":"string","maxLength":10000000},"tags":{"description":"Replace the doc's labels. The array is the new set, not an addition.","maxItems":20,"type":"array","items":{"type":"string","maxLength":60}},"hidden":{"description":"Take the doc out of circulation (true) or put it back (false). A hidden doc drops out of every listing — the Library, and the assistant's list/search of the corpus — but still reads when something addresses it by id.","type":"boolean"},"files":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object","properties":{"id":{"type":"string"}},"required":["id"],"additionalProperties":{}}]}},"expected_content_sha":{"anyOf":[{"type":"string"},{"type":"null"}]}}},"post_v1_knowledge_docs_knowledge_doc_id_versions_Body":{"type":"object","properties":{"name":{"type":"string","description":"The version's name, 1-200 characters."},"version_id":{"description":"A kept version to name, or rename. Absent, the body stored now is kept under the name.","type":"string"}},"required":["name"]},"post_v1_memories_Body":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-z][a-z0-9_]*$"},"description":{"type":"string","minLength":1,"maxLength":500},"content":{"type":"string"}},"required":["key","description","content"]},"patch_v1_memories_memory_id_Body":{"type":"object","properties":{"description":{"type":"string","minLength":1,"maxLength":500},"content":{"type":"string"}}},"post_v1_api_keys_Body":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120,"description":"Display name for the API key"},"access":{"type":"string","enum":["all","selected"],"description":"What the key reaches. `all` is every app and table in the organization. `selected` is exactly the `resources` named below. Required: a key's reach is the decision this form exists to make, so it is asked for rather than defaulted."},"resources":{"description":"What a `selected` key reaches, chosen here on the key. Required and non-empty for `selected`; forbidden for `all`.","type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."},"role":{"type":"string","description":"What the key may do with it: `viewer` or `editor` on a table, `user` or `manager` on everything else."}},"required":["resource_type","resource_id","role"]}},"expiry":{"description":"When this key should die. Omitted means it never expires — the behaviour every key in this organization has today, kept as the default because changing it would silently retire keys already wired into unattended work.","oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"idle"},"days":{"type":"integer","minimum":1,"maximum":365,"description":"Days of disuse before the key retires itself. Every use pushes the date out again, up to one year after the key was created."}},"required":["mode","days"],"description":"Sliding: a key in use never expires, a key nobody touches dies on its own."},{"type":"object","properties":{"mode":{"type":"string","const":"absolute"},"expires_at":{"type":"string","description":"The exact moment the key stops authenticating. It does not move."}},"required":["mode","expires_at"],"description":"Fixed: the key dies on this date whether or not it is in use."},{"type":"object","properties":{"mode":{"type":"string","const":"never"}},"required":["mode"],"description":"No expiry — standing access, so it is asked for rather than reached by omission."}]},"scopes":{"description":"What this key may do, narrowing it below the authority of the member it acts as. Omitted or null mints an unscoped key — that authority in full.","anyOf":[{"minItems":1,"type":"array","items":{"type":"string","enum":["schema:read","schema:write","data:read","data:write"]}},{"type":"null"}]}},"required":["name","access"]},"patch_v1_api_keys_api_key_id_Body":{"type":"object","properties":{"name":{"description":"Updated display name","type":"string","minLength":1,"maxLength":120},"enabled":{"description":"Enable or disable this API key","type":"boolean"},"access":{"description":"Widen this key to every app and table, or narrow it back to a list. Omitted leaves it alone. Widening takes back the list the key was given, so narrowing it again names a fresh one in the same request.","type":"string","enum":["all","selected"]},"add_resources":{"description":"Apps and tables to give this key, sent as the items rather than the whole list. Giving it one it already has, at the role it already holds, changes nothing. Refused on a key that reaches all apps and tables.","minItems":1,"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."},"role":{"type":"string","description":"What the key may do with it: `viewer` or `editor` on a table, `user` or `manager` on everything else."}},"required":["resource_type","resource_id","role"]}},"remove_resources":{"description":"Apps and tables to take back from this key. Taking back one it does not have changes nothing.","minItems":1,"type":"array","items":{"type":"object","properties":{"resource_type":{"type":"string","enum":["table","app","skill","document_template","instruction","knowledge_doc","connected_account"],"description":"Which kind of thing this is — an app, a table, and the other shareable kinds."},"resource_id":{"type":"string","minLength":1,"description":"The app's or table's id."}},"required":["resource_type","resource_id"]}},"expiry":{"description":"Replace when this key dies. Omitted leaves the current setting alone — this is a diff, not a snapshot.","oneOf":[{"type":"object","properties":{"mode":{"type":"string","const":"idle"},"days":{"type":"integer","minimum":1,"maximum":365,"description":"Days of disuse before the key retires itself. Every use pushes the date out again, up to one year after the key was created."}},"required":["mode","days"],"description":"Sliding: a key in use never expires, a key nobody touches dies on its own."},{"type":"object","properties":{"mode":{"type":"string","const":"absolute"},"expires_at":{"type":"string","description":"The exact moment the key stops authenticating. It does not move."}},"required":["mode","expires_at"],"description":"Fixed: the key dies on this date whether or not it is in use."},{"type":"object","properties":{"mode":{"type":"string","const":"never"}},"required":["mode"],"description":"No expiry — standing access, so it is asked for rather than reached by omission."}]},"scopes":{"description":"Replace what this key may do. Omitted leaves it alone — this is a diff, not a snapshot; null makes the key unscoped again.","anyOf":[{"minItems":1,"type":"array","items":{"type":"string","enum":["schema:read","schema:write","data:read","data:write"]}},{"type":"null"}]}}},"post_v1_me_claim_email_Body":{"type":"object","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,}$"},"password":{"type":"string","minLength":1}},"required":["email","password"]},"post_v1_me_confirm_email_claim_Body":{"type":"object","properties":{"token":{"type":"string","minLength":1}},"required":["token"]},"post_v1_me_confirm_erasure_Body":{"type":"object","properties":{"token":{"type":"string","minLength":1}},"required":["token"]},"post_v1_approval_requests_locked_record_change_Body":{"type":"object","properties":{"table_id":{"type":"string"},"record_id":{"type":"string"},"changes":{"minItems":1,"type":"array","items":{"type":"object","properties":{"field_key":{"type":"string"},"new_value":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"type":"string"}},{"type":"null"}]}},"required":["field_key","new_value"]}},"reason":{"type":"string","minLength":1,"maxLength":10000}},"required":["table_id","record_id","changes","reason"]},"post_v1_approval_requests_approval_request_id_respond_Body":{"type":"object","properties":{"decision":{"type":"string","enum":["approved","rejected"]},"comment":{"type":"string","maxLength":10000}},"required":["decision"]},"put_v1_agent_context_activations_resource_type_resource_id_Body":{"type":"object","properties":{"enabled":{"type":"boolean"}},"required":["enabled"]},"post_v1_voice_sessions_init_Body":{"type":"object","properties":{"mime_type":{"type":"string","enum":["audio/webm","audio/mp4"]},"audio_source":{"type":"string","enum":["microphone","system","system_video"]},"capture_audio":{"type":"string","enum":["mic","system","both"]},"capture_screen":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"chat_session_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"video":{"type":"object","properties":{"mime_type":{"type":"string","enum":["video/webm","video/mp4"]},"quality":{"type":"string","enum":["original","1080p","720p","480p"]}},"required":["mime_type","quality"]}},"required":["mime_type"]},"post_v1_voice_sessions_session_id_complete_Body":{"type":"object","properties":{"chunk_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"duration_seconds":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"video_chunk_count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"video_width":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"video_height":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"video_frame_rate":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"display_surface":{"type":"string","enum":["browser","window","monitor"]}},"required":["duration_seconds"]},"post_v1_voice_sessions_session_id_urls_Body":{"type":"object","properties":{"next_index":{"type":"number"},"kind":{"type":"string","enum":["audio","video"]}},"required":["next_index"]},"post_v1_apps_app_id_recordings_Body":{"type":"object","properties":{"mime_type":{"type":"string","enum":["audio/webm","audio/mp4"]},"capture_audio":{"type":"string","enum":["mic","system","both"]},"capture_screen":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"video":{"type":"object","properties":{"mime_type":{"type":"string","enum":["video/webm","video/mp4"]},"quality":{"type":"string","enum":["original","1080p","720p","480p"]}},"required":["mime_type","quality"]},"alias":{"type":"string","description":"The receiving workflow, by the alias the app's deployed version binds it under."},"inputs":{"description":"The recording act's own inputs (e.g. the record it is about), validated against the workflow's contract without `recording`.","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["mime_type","capture_audio","capture_screen","alias"]},"put_v1_billing_party_Body":{"type":"object","properties":{"party":{"type":"object","properties":{"legal_name":{"type":"string","minLength":1,"maxLength":300},"tax_id":{"type":"string","minLength":1,"maxLength":50},"address":{"type":"string","minLength":1,"maxLength":500},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]}},"required":["legal_name","tax_id","address","email"]}},"required":["party"]},"post_v1_cli_login_requests_Body":{"type":"object","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,}$"}},"required":["email"]},"post_v1_cli_login_requests_request_id_approve_Body":{"type":"object","properties":{"organization_id":{"type":"string"}},"required":["organization_id"]},"put_v1_iam_me_absence_Body":{"type":"object","properties":{"starts_on":{"type":"string","format":"date","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])))$","description":"The first day away, in the calendar of the workspace an act runs in."},"ends_on":{"type":"string","format":"date","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])))$","description":"The last day away — it counts. At most 60 days from the first, both counted."},"stand_in_member_id":{"type":"string","description":"The member who, on every day away, may also do each stage the member away owns."}},"required":["starts_on","ends_on","stand_in_member_id"]},"Error":{"type":"object","description":"Error body returned by every non-2xx response. Branch on `code`, which is stable; `message` is human prose and may be reworded.","properties":{"code":{"type":"string","description":"Stable machine-readable error class, e.g. `not_found`, `forbidden`, `rate_limited`."},"message":{"type":"string","description":"Human-readable explanation of what failed."},"hint":{"type":"string","description":"Actionable next step, when the failure has one. Absent otherwise."}},"required":["code","message"]}}}}