Persona
The shaped persona wire form (cloud `PersonaResponse` parity). Secrets collapse to `has_*` booleans plus `linked_secrets` names; cloud-only columns (mailbox, relay minting, preferred agent) are always null locally. A vault-linked username (`{{vault:…}}` template) is surfaced as null here — the link appears in `linked_secrets` instead.
Properties
| Name | Type | Description |
|---|---|---|
| id | integer | |
| name | string | |
| description | stringnull | |
| target_domain | stringnull | |
| login_username | stringnull | |
| has_password | boolean | |
| twofa_method | string | |
| has_totp_seed | boolean | |
| email_otp_mode | stringnull | `oauth_mailbox` | `relay` | null. |
| mail_connection_id | null | Cloud-only; always null locally. |
| connected_mailbox | null | Cloud-only; always null locally. |
| relay_address | stringnull | |
| relay_token | null | Cloud-only; always null locally. |
| relay_inbound_address | null | Cloud-only; always null locally. |
| relay_inbound_url | null | Cloud-only; always null locally. |
| has_fingerprint | boolean | |
| preferred_agent_id | null | Cloud-only; always null locally. |
| has_proxy | boolean | |
| proxy_lawful_use_ack_at | null | Cloud-only; always null locally. |
| is_active | boolean | |
| validation_status | string | |
| has_warm_session | boolean | |
| session_expires_at | stringnull | |
| last_login_at | stringnull | |
| last_used_at | stringnull | |
| created_at | string | |
| updated_at | stringnull | |
| linked_workflows | array | Workflows pinned to this persona via `default_persona_id`. |
| linked_secrets | object | `{credential_field: vault secret base name}` for values stored as `{{vault:…}}` templates. Names only — never values. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/usewrit-app/json-schema/usewrit-app-persona-schema.json",
"title": "Persona",
"description": "The shaped persona wire form (cloud `PersonaResponse` parity). Secrets collapse to `has_*` booleans plus `linked_secrets` names; cloud-only columns (mailbox, relay minting, preferred agent) are always null locally. A vault-linked username (`{{vault:…}}` template) is surfaced as null here — the link appears in `linked_secrets` instead.",
"x-generated": "2026-10-31",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/writ-agent.yaml#/components/schemas/Persona",
"type": "object",
"required": [
"id",
"name",
"description",
"target_domain",
"login_username",
"has_password",
"twofa_method",
"has_totp_seed",
"email_otp_mode",
"mail_connection_id",
"connected_mailbox",
"relay_address",
"relay_token",
"relay_inbound_address",
"relay_inbound_url",
"has_fingerprint",
"preferred_agent_id",
"has_proxy",
"proxy_lawful_use_ack_at",
"is_active",
"validation_status",
"has_warm_session",
"session_expires_at",
"last_login_at",
"last_used_at",
"created_at",
"updated_at",
"linked_workflows",
"linked_secrets"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"target_domain": {
"type": [
"string",
"null"
]
},
"login_username": {
"type": [
"string",
"null"
]
},
"has_password": {
"type": "boolean"
},
"twofa_method": {
"type": "string",
"enum": [
"none",
"totp",
"email_otp",
"sms"
]
},
"has_totp_seed": {
"type": "boolean"
},
"email_otp_mode": {
"type": [
"string",
"null"
],
"description": "`oauth_mailbox` | `relay` | null."
},
"mail_connection_id": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"connected_mailbox": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"relay_address": {
"type": [
"string",
"null"
]
},
"relay_token": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"relay_inbound_address": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"relay_inbound_url": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"has_fingerprint": {
"type": "boolean"
},
"preferred_agent_id": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"has_proxy": {
"type": "boolean"
},
"proxy_lawful_use_ack_at": {
"type": "null",
"description": "Cloud-only; always null locally."
},
"is_active": {
"type": "boolean"
},
"validation_status": {
"type": "string"
},
"has_warm_session": {
"type": "boolean"
},
"session_expires_at": {
"type": [
"string",
"null"
]
},
"last_login_at": {
"type": [
"string",
"null"
]
},
"last_used_at": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
},
"updated_at": {
"type": [
"string",
"null"
]
},
"linked_workflows": {
"type": "array",
"description": "Workflows pinned to this persona via `default_persona_id`.",
"items": {
"type": "object",
"required": [
"id",
"name"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"name": {
"type": "string"
}
}
}
},
"linked_secrets": {
"type": "object",
"description": "`{credential_field: vault secret base name}` for values stored as `{{vault:…}}` templates. Names only — never values.",
"additionalProperties": {
"type": "string"
}
}
}
}
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
curl "https://apis.io/api/v1/json-schemas/usewrit-app-persona"
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.