Amigo · Schema
TurnResponse
CompanyArtificial IntelligenceHealthcareAI AgentsVoiceClinicalConversational AIFHIRElectronic Health RecordsHIPAA
Properties
| Name | Type | Description |
|---|---|---|
| turn_id | object | Identifier of the user exchange this turn created — or, for ``poll=true`` and greeting-kickoff turns (empty ``message``), the latest exchange the returned messages attach to. Deterministic: matches th |
| input | object | |
| output | array | |
| tool_calls | array | |
| conversation | object | |
| background_pending | boolean | Whether this turn's ``output`` is the final answer, or only an acknowledgement that work is still running in the background. ``false`` (default): ``output`` is the complete agent response for this tur |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/amigo/main/json-schema/amigo-turn-response-schema.json",
"title": "TurnResponse",
"x-generated": "2026-10-12",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/amigo-conversations-api-openapi.yml#/components/schemas/TurnResponse",
"properties": {
"turn_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Turn Id",
"description": "Identifier of the user exchange this turn created — or, for ``poll=true`` and greeting-kickoff turns (empty ``message``), the latest exchange the returned messages attach to. Deterministic: matches the ``turn_id`` on this conversation's history turns, so it can anchor durable per-turn artifacts (e.g. feedback) across page reloads. Null only when the conversation has no user exchange yet (a poll or kickoff before the first user message)."
},
"input": {
"$ref": "#/$defs/ConversationTurn"
},
"output": {
"items": {
"$ref": "#/$defs/ConversationTurn"
},
"type": "array",
"title": "Output"
},
"tool_calls": {
"items": {
"$ref": "#/$defs/ConversationToolCallDetail"
},
"type": "array",
"title": "Tool Calls",
"default": []
},
"conversation": {
"$ref": "#/$defs/TurnConversationSnapshot"
},
"background_pending": {
"type": "boolean",
"title": "Background Pending",
"description": "Whether this turn's ``output`` is the final answer, or only an acknowledgement that\nwork is still running in the background.\n\n``false`` (default): ``output`` is the complete agent response for this turn.\n\n``true``: a tool crossed the server's blocking window and was handed to a background\ntask, so ``output`` is NOT the final answer — the definitive assistant answer is\nproduced later, out-of-band. It is **durable on the conversation**: drain it by\nre-issuing ``POST …/turns`` with ``poll=true`` (a no-message drain-and-report), by\nsending the next user turn, or by reading the conversation back\n(``GET …/conversations/{id}``). This is the per-conversation delivery contract — see\nthe web-integration paved path. (The workspace observer bus,\n``GET /v1/{workspace_id}/events/stream``, mirrors this activity as ``text.agent_message``\n/ ``text.tool_started`` / ``text.background_result`` for *dashboards* watching many\nconversations, but is not the per-chat delivery path.) A client that treats a\n``background_pending=true`` turn as complete without draining will miss the final answer.",
"default": false
}
},
"type": "object",
"required": [
"turn_id",
"input",
"output",
"conversation"
],
"$defs": {
"Action": {
"properties": {
"description": {
"type": "string",
"title": "Description"
},
"filler_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Filler Hint"
}
},
"type": "object",
"required": [
"description"
],
"title": "Action",
"description": "A single action the agent can take within a state."
},
"ActionState-Output": {
"properties": {
"type": {
"type": "string",
"const": "action",
"title": "Type"
},
"name": {
"type": "string",
"title": "Name"
},
"objective": {
"type": "string",
"title": "Objective"
},
"actions": {
"items": {
"$ref": "#/$defs/Action"
},
"type": "array",
"title": "Actions"
},
"intra_state_navigation_guidelines": {
"items": {
"type": "string"
},
"type": "array",
"title": "Intra State Navigation Guidelines"
},
"action_guidelines": {
"items": {
"type": "string"
},
"type": "array",
"title": "Action Guidelines"
},
"boundary_constraints": {
"items": {
"type": "string"
},
"type": "array",
"title": "Boundary Constraints"
},
"exit_conditions": {
"items": {
"$ref": "#/$defs/ExitCondition"
},
"type": "array",
"title": "Exit Conditions"
},
"action_tool_call_specs": {
"items": {
"$ref": "#/$defs/ToolCallSpec"
},
"type": "array",
"title": "Action Tool Call Specs",
"default": []
},
"exit_condition_tool_call_specs": {
"items": {
"$ref": "#/$defs/ToolCallSpec"
},
"type": "array",
"title": "Exit Condition Tool Call Specs",
"default": []
},
"wait_for": {
"anyOf": [
{
"type": "string",
"enum": [
"surface_submission",
"human_approval"
]
},
{
"type": "null"
}
],
"title": "Wait For"
},
"guardrails": {
"items": {
"$ref": "#/$defs/Guardrail"
},
"type": "array",
"title": "Guardrails",
"default": []
},
"channel_overrides": {
"additionalProperties": {
"$ref": "#/$defs/ChannelOverride"
},
"type": "object",
"title": "Channel Overrides"
},
"surface_spec_template": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Surface Spec Template"
},
"turn_policy": {
"anyOf": [
{
"$ref": "#/$defs/TurnPolicy"
},
{
"type": "null"
}
]
},
"preload": {
"items": {
"$ref": "#/$defs/PreloadSpec"
},
"type": "array",
"maxItems": 20,
"title": "Preload"
}
},
"type": "object",
"required": [
"type",
"name",
"objective",
"actions",
"intra_state_navigation_guidelines",
"action_guidelines",
"boundary_constraints",
"exit_conditions"
],
"title": "ActionState",
"description": "User-facing engagement state with actions and exit conditions."
},
"AnnotationState": {
"properties": {
"type": {
"type": "string",
"const": "annotation",
"title": "Type"
},
"name": {
"type": "string",
"title": "Name"
},
"inner_thought": {
"type": "string",
"title": "Inner Thought"
},
"next_state": {
"type": "string",
"title": "Next State"
}
},
"type": "object",
"required": [
"type",
"name",
"inner_thought",
"next_state"
],
"title": "AnnotationState",
"description": "Injects a hardcoded inner thought (no LLM call)."
},
"ChannelKind": {
"type": "string",
"enum": [
"voice",
"sms",
"whatsapp",
"email",
"web",
"imessage"
],
"title": "ChannelKind",
"description": "HSM execution channel type.\n\nDetermines how the HSM engine communicates with end users.\nEach kind maps to one or more providers."
},
"ChannelOverride": {
"properties": {
"objective": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Objective"
},
"action_guidelines": {
"items": {
"type": "string"
},
"type": "array",
"title": "Action Guidelines",
"default": []
},
"progress": {
"anyOf": [
{
"$ref": "#/$defs/ProgressHint"
},
{
"type": "null"
}
]
}
},
"type": "object",
"title": "ChannelOverride",
"description": "Per-channel behavior override for a state."
},
"CollectionField": {
"properties": {
"key": {
"type": "string",
"title": "Key"
},
"type": {
"type": "string",
"title": "Type"
},
"label": {
"type": "string",
"title": "Label"
},
"required": {
"type": "boolean",
"title": "Required",
"default": true
},
"options": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Options"
},
"validation": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Validation"
},
"ask_prompt": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ask Prompt"
},
"fhir_path": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Fhir Path"
}
},
"type": "object",
"required": [
"key",
"type",
"label"
],
"title": "CollectionField",
"description": "A single field to collect during a data collection state."
},
"ContentPartPayload": {
"properties": {
"type": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"pattern": "^[a-z][a-z0-9._-]*$",
"title": "Type",
"default": "text"
},
"text": {
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "null"
}
],
"title": "Text"
},
"url": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
],
"title": "Url"
},
"media_type": {
"anyOf": [
{
"type": "string",
"maxLength": 128
},
{
"type": "null"
}
],
"title": "Media Type"
},
"provider_id": {
"anyOf": [
{
"type": "string",
"maxLength": 256
},
{
"type": "null"
}
],
"title": "Provider Id"
},
"metadata": {
"additionalProperties": true,
"type": "object",
"maxProperties": 50,
"title": "Metadata"
}
},
"type": "object",
"title": "ContentPartPayload",
"description": "HTTP/WebSocket shape for a modality-neutral conversation content part."
},
"ContextGraphState-Output": {
"oneOf": [
{
"$ref": "#/$defs/ActionState-Output"
},
{
"$ref": "#/$defs/DecisionState-Output"
},
{
"$ref": "#/$defs/AnnotationState"
},
{
"$ref": "#/$defs/DataCollectionState-Output"
}
]
},
"ConversationToolCallDetail": {
"properties": {
"tool_name": {
"type": "string",
"title": "Tool Name"
},
"call_id": {
"type": "string",
"title": "Call Id"
},
"input": {
"additionalProperties": true,
"type": "object",
"title": "Input"
},
"result": {
"type": "string",
"title": "Result",
"default": ""
},
"succeeded": {
"type": "boolean",
"title": "Succeeded",
"default": true
},
"duration_ms": {
"anyOf": [
{
"type": "number",
"maximum": 3600000.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Duration Ms",
"description": "Wall-clock tool execution time in milliseconds, measured at the engage_step call site. Omitted (null) on legacy turns that did not capture timing."
},
"error_message": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error Message",
"description": "Failure detail recorded for the tool call when ``succeeded`` is false. Null on successful calls or when no message was captured."
}
},
"type": "object",
"required": [
"tool_name",
"call_id"
],
"title": "ConversationToolCallDetail"
},
"ConversationTurn": {
"properties": {
"turn_id": {
"anyOf": [
{
"type": "string",
"format": "uuid"
},
{
"type": "null"
}
],
"title": "Turn Id",
"description": "Stable identifier of the user exchange this message belongs to, derived deterministically from (conversation_id, turn_index) — identical across ``POST /turns`` responses and re-reads of the conversation history. User and agent messages from the same exchange share this value. Null on messages that precede the first user turn (proactive greetings, channel-event preludes)."
},
"turn_index": {
"anyOf": [
{
"type": "integer",
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Turn Index",
"description": "Zero-based ordinal of the user exchange this message belongs to (0 = first user turn). Derived server-side from the conversation's user-turn count — never stored. Null exactly when ``turn_id`` is null."
},
"role": {
"type": "string",
"enum": [
"agent",
"user",
"system"
],
"title": "Role"
},
"text": {
"type": "string",
"title": "Text"
},
"timestamp": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Timestamp"
},
"channel": {
"anyOf": [
{
"$ref": "#/$defs/ChannelKind"
},
{
"type": "null"
}
],
"description": "Channel this turn occurred on. A conversation that switched channels has a self-describing per-turn history; null on turns written before per-turn attribution or on channel-less internal turns."
},
"content": {
"items": {
"$ref": "#/$defs/ContentPartPayload"
},
"type": "array",
"title": "Content",
"default": []
},
"tool_calls": {
"items": {
"$ref": "#/$defs/ConversationToolCallDetail"
},
"type": "array",
"title": "Tool Calls",
"description": "Tool calls executed during this (agent) turn. Populated only when the request opts in via ``include_tool_calls=true``; empty otherwise and on turns that did not invoke tools.",
"default": []
},
"selected_action_description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Selected Action Description",
"description": "Description of the context-graph action selected for this turn. Null means no action was selected or no selected action was recorded."
},
"state_transition": {
"anyOf": [
{
"$ref": "#/$defs/ConversationTurnStateTransition"
},
{
"type": "null"
}
],
"description": "Context-graph state transition that occurred during this turn. Null means no transition took place or no transition was recorded. Deprecated: use state_transitions instead. If multiple transitions were recorded, this field reports the first source state and final destination state.",
"deprecated": true
},
"state_transitions": {
"items": {
"$ref": "#/$defs/ConversationTurnStateTransition"
},
"type": "array",
"title": "State Transitions",
"description": "Ordered context-graph state transitions that occurred during this turn.",
"default": []
},
"available_actions": {
"items": {
"$ref": "#/$defs/ConversationTurnAvailableAction"
},
"type": "array",
"title": "Available Actions",
"description": "Action choices available in the turn's resolved context-graph state. Empty when actions cannot be resolved or the resolved state is not an action state.",
"default": []
}
},
"type": "object",
"required": [
"role",
"text"
],
"title": "ConversationTurn"
},
"ConversationTurnAvailableAction": {
"properties": {
"description": {
"type": "string",
"title": "Description",
"description": "Human-readable description of an action available in the turn's state."
}
},
"type": "object",
"required": [
"description"
],
"title": "ConversationTurnAvailableAction"
},
"ConversationTurnStateTransition": {
"properties": {
"from": {
"type": "string",
"title": "From",
"description": "Source context-graph state before the turn's state transition."
},
"to": {
"type": "string",
"title": "To",
"description": "Destination context-graph state after the turn's state transition."
}
},
"type": "object",
"required": [
"from",
"to"
],
"title": "ConversationTurnStateTransition"
},
"DataCollectionState-Output": {
"properties": {
"type": {
"type": "string",
"const": "data_collection",
"title": "Type"
},
"name": {
"type": "string",
"title": "Name"
},
"objective": {
"type": "string",
"title": "Objective"
},
"fields": {
"items": {
"$ref": "#/$defs/CollectionField"
},
"type": "array",
"title": "Fields"
},
"on_complete": {
"type": "string",
"title": "On Complete"
},
"action_guidelines": {
"items": {
"type": "string"
},
"type": "array",
"title": "Action Guidelines",
"default": []
},
"boundary_constraints": {
"items": {
"type": "string"
},
"type": "array",
"title": "Boundary Constraints",
"default": []
},
"surface_fallback": {
"type": "boolean",
"title": "Surface Fallback",
"default": false
},
"surface_fallback_after_turns": {
"type": "integer",
"title": "Surface Fallback After Turns",
"default": 6
},
"max_turns": {
"type": "integer",
"title": "Max Turns",
"default": 10
},
"guardrails": {
"items": {
"$ref": "#/$defs/Guardrail"
},
"type": "array",
"title": "Guardrails",
"default": []
},
"channel_overrides": {
"additionalProperties": {
"$ref": "#/$defs/ChannelOverride"
},
"type": "object",
"title": "Channel Overrides"
},
"turn_policy": {
"anyOf": [
{
"$ref": "#/$defs/TurnPolicy"
},
{
"type": "null"
}
]
},
"tool_call_specs": {
"items": {
"$ref": "#/$defs/ToolCallSpec"
},
"type": "array",
"title": "Tool Call Specs",
"default": []
}
},
"type": "object",
"required": [
"type",
"name",
"objective",
"fields",
"on_complete"
],
"title": "DataCollectionState",
"description": "Structured voice/text data collection with field tracking.\n\nThe engine presents fields conversationally, tracks completion, and\noptionally falls back to a Surface form after N turns. Each collected\nfield produces a world.event with confidence 0.5."
},
"DecisionState-Output": {
"properties": {
"type": {
"type": "string",
"const": "decision",
"title": "Type"
},
"name": {
"type": "string",
"title": "Name"
},
"objective": {
"type": "string",
"title": "Objective"
},
"exit_conditions": {
"items": {
"$ref": "#/$defs/ExitCondition"
},
"type": "array",
"title": "Exit Conditions"
},
"decision_guidelines": {
"items": {
"type": "string"
},
"type": "array",
"title": "Decision Guidelines",
"default": []
},
"tool_call_specs": {
"items": {
"$ref": "#/$defs/ToolCallSpec"
},
"type": "array",
"title": "Tool Call Specs",
"default": []
},
"wait_for": {
"anyOf": [
{
"type": "string",
"enum": [
"surface_submission",
"human_approval"
]
},
{
"type": "null"
}
],
"title": "Wait For"
},
"guardrails": {
"items": {
"$ref": "#/$defs/Guardrail"
},
"type": "array",
"title": "Guardrails",
"default": []
},
"channel_overrides": {
"additionalProperties": {
"$ref": "#/$defs/ChannelOverride"
},
"type": "object",
"title": "Channel Overrides"
},
"turn_policy": {
"anyOf": [
{
"$ref": "#/$defs/TurnPolicy"
},
{
"type": "null"
}
]
}
},
"type": "object",
"required": [
"type",
"name",
"objective",
"exit_conditions"
],
"title": "DecisionState",
"description": "Passthrough routing state — Agent picks an exit condition, no user interaction."
},
"ExitCondition": {
"properties": {
"description": {
"type": "string",
"title": "Description"
},
"next_state": {
"type": "string",
"title": "Next State"
},
"filler_hint": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Filler Hint"
}
},
"type": "object",
"required": [
"description",
"next_state"
],
"title": "ExitCondition"
},
"FailureClass": {
"type": "string",
"enum": [
"timeout",
"input_rejected",
"rounds_exhausted",
"generic"
],
"title": "FailureClass",
"description": "Why a tool result is a failure — produced by the executor at RUN time.\n\nUnlike ``ResultDelivery`` (a fixed config-time axis), this is a runtime\nclassification the executor knows at the moment of failure. It flavors the\nagent-facing failure wording and the world-event / status-tool observability,\nand it is ALSO an optional routing key: a state x tool binding may set\n``ToolCallSpec.failure_delivery_by_class`` to deliver differently per class\n(e.g. interrupt on timeout, queue on a generic error). With no per-class map\n(the default), failed results route by the ``failure_delivery`` floor,\nunchanged. Add a member only in the same change that wires a producer for it —\nadding one also widens the per-class routing surface, so it must be a\ndeliberate, produced class."
},
"Guardrail": {
"properties": {
"name": {
"type": "string",
"maxLength": 128,
"title": "Name"
},
"description": {
"type": "string",
"maxLength": 1000,
"title": "Description"
},
"enforcement": {
"type": "string",
"enum": [
"hard",
"soft"
],
"title": "Enforcement",
"default": "hard"
}
},
"type": "object",
"required": [
"name",
"description"
],
"title": "Guardrail",
"description": "Typed safety rule enforced per-state (not just global freetext guidelines)."
},
"PreloadSpec": {
"properties": {
"tool_id": {
"type": "string",
"maxLength": 256,
"title": "Tool Id"
},
"params": {
"additionalProperties": true,
"type": "object",
"maxProperties": 20,
"title": "Params"
}
},
"type": "object",
"required": [
"tool_id"
],
"title": "PreloadSpec",
"description": "A tool call executed deterministically by the engine on state entry.\n\nUnlike LLM-driven tool calls, preloads run before any LLM turn —\nthe results appear in the interaction log so the engage LLM sees\nthem as pre-loaded context. All preloads in a state execute in\nparallel. Param values support ``{caller_mrn}`` and ``{entity_id}``\ntemplate variables resolved from the session's caller context."
},
"ProgressHint": {
"properties": {
"deterministic": {
"type": "boolean",
"title": "Deterministic",
"default": false
},
"phrases": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array",
"maxItems": 10,
"minItems": 1,
"description": "Filler phrases. deterministic=true: played verbatim in order. deterministic=false: used as hints for early attempts."
},
{
"type": "null"
}
],
"title": "Phrases"
},
"trigger_delay_ms": {
"anyOf": [
{
"type": "integer",
"maximum": 30000.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Trigger Delay Ms"
},
"interval_ms": {
"anyOf": [
{
"type": "integer",
"maximum": 30000.0,
"minimum": 100.0
},
{
"type": "null"
}
],
"title": "Interval Ms"
},
"mode": {
"type": "string",
"enum": [
"auto",
"silent",
"backchannel",
"verbal"
],
"title": "Mode",
"default": "auto"
},
"progress_class": {
"anyOf": [
{
"type": "string",
"enum": [
"lookup",
"write",
"external_call",
"compute",
"multi_step"
]
},
{
"type": "null"
}
],
"title": "Progress Class"
},
"expected_latency_ms": {
"anyOf": [
{
"type": "integer",
"maximum": 60000.0,
"minimum": 0.0
},
{
"type": "null"
}
],
"title": "Expected Latency Ms"
},
"custom_phrase": {
"anyOf": [
{
"type": "string",
"maxLength": 500,
"description": "Legacy: use phrases instead."
},
{
"type": "null"
}
],
"title": "Custom Phrase"
}
},
"additionalProperties": false,
"type": "object",
"title": "ProgressHint",
"description": "How the agent narrates waiting on a tool.\n\n``deterministic=true``: scripted — ``phrases`` play verbatim in order.\n``deterministic=false``: engine picks — ``phrases`` are hints.\n``trigger_delay_ms``: milliseconds before first filler (0 = immediate).\n``interval_ms``: milliseconds between subsequent fillers."
},
"ToolCallSpec": {
"properties": {
"tool_id": {
"type": "string",
"title": "Tool Id"
},
"additional_instruction": {
"type": "string",
"title": "Additional Instruction",
"default": ""
},
"navigate_on_completion": {
"type": "boolean",
"title": "Navigate On Completion",
"default": false
},
"progress": {
"anyOf": [
{
"$ref": "#/$defs/ProgressHint"
},
{
"type": "null"
}
]
},
"result_persistence": {
"type": "string",
"enum": [
"accumulate",
"override"
],
"title": "Result Persistence",
"default": "accumulate"
},
"delivery": {
"type": "string",
"enum": [
"interrupt",
"queue"
],
"title": "Delivery",
"default": "interrupt"
},
"failure_delivery": {
"anyOf": [
{
"type": "string",
"enum": [
"interrupt",
"queue"
]
},
{
"type": "null"
}
],
"title": "Failure Delivery"
},
"failure_delivery_by_class": {
"anyOf": [
{
"additionalProperties": {
"type": "string",
"enum": [
"interrupt",
"queue"
]
},
"propertyNames": {
"$ref": "#/$defs/FailureClass"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Failure Delivery By Class"
},
"execution": {
"type": "string",
"enum": [
"blocking",
"background"
],
"title": "Execution",
"default": "blocking"
},
"lifecycle": {
"type": "string",
"enum": [
"coupled",
"independent"
],
"title": "Lifecycle",
"default": "independent"
},
"audio_fillers": {
"anyOf": [
{
"items": {
"type": "str
# --- truncated at 32 KB (35 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/amigo/refs/heads/main/json-schema/amigo-turn-response-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/amigo-turn-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.