Oneprofile · Schema
ThumbsDownEventReadSchema
One thumbs down, as the note in place shows it.
Sales OutreachAI ResearchEmail AutomationLinkedIn OutreachCRM Integration
Properties
| Name | Type | Description |
|---|---|---|
| action | object | |
| agent_name | string | |
| created_at | string | |
| earlier_words | object | On a Preview contact's thread: each message as it read before this Needs work rewrote it, so the new words can be shown against them. Null on every other surface, and once the earlier words are no lon |
| id | string | |
| more | array | A table agent's other learnings it wrote, one for each other point the reason made, in order; empty when it made one. Always empty on an outbound message, whose changes `proposal.changes` lists. Undo |
| notes | array | What the person said, oldest first, each note whole: the thumbs down's own, then each later note after it. Empty once its feedback session closed (saved, discarded or undone): the notes go with the se |
| proposal | object | The learning an outbound thumbs down proposed; null for a table agent's. |
| record_ids | array | The rows a thumbs down on cells covered, so the grid shows its note on each; empty on every other surface. |
| redo_detail | object | |
| redo_state | object | |
| restore | object | Where putting the original output back stands after Undo: `none`, `waiting`, `restored` or `left`. |
| restore_detail | object | Why the original was left as the redo left it. |
| rev | integer | The revision of its changes: send it back when changing one, so a change made against an older set is refused. |
| saved_agent_id | object | The saved agent the thumbs down was given to (for an outbound one, its sequence's writer); null for an unlinked column's. |
| status | object | `applied` (its learning is saved), `undone` after Undo, `proposed` while its feedback session (on a sequence's message, a table's cells or a Preview example) waits for a person, `dismissed` once that |
| subject_key | string | What it was given on, as `subject_key` names it: a read of several subjects at once sorts its thumbs downs back to each by this. |
| surface | object | Where it was given. `hand_edit` is a learning a person's own edit proposed (`POST /agent-learnings/hand-edits/`): its card dismisses it (revert) and keeps the edit, and nothing is written again. |
| text_after | object | The learning as the thumbs down wrote it. |
| text_before | object | What an updated learning said before. |
| thread | array | While its session waits (`proposed`): each note, oldest first, with who gave it, the AI's reply and the words it was given on. Empty once the session closed: a session lasts as long as its item waits |
| would_have_written | object | On a sent message: what the agent would have sent instead, once written (`redo_state` `written`); null before then and on every other surface. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/getoneprofile-ai/json-schema/getoneprofile-ai-thumbs-down-event-read-schema-schema.json",
"title": "ThumbsDownEventReadSchema",
"description": "One thumbs down, as the note in place shows it.",
"x-generated": "2026-11-10",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/getoneprofile-ai-agent-learnings-api-openapi.yml#/components/schemas/ThumbsDownEventReadSchema",
"properties": {
"action": {
"$ref": "#/$defs/LearningAction"
},
"agent_name": {
"title": "Agent Name",
"type": "string"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"earlier_words": {
"anyOf": [
{
"items": {
"$ref": "#/$defs/StepWordsReadSchema"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "On a Preview contact's thread: each message as it read before this Needs work rewrote it, so the new words can be shown against them. Null on every other surface, and once the earlier words are no longer kept.",
"title": "Earlier Words"
},
"id": {
"format": "uuid",
"title": "Id",
"type": "string"
},
"more": {
"description": "A table agent's other learnings it wrote, one for each other point the reason made, in order; empty when it made one. Always empty on an outbound message, whose changes `proposal.changes` lists. Undo takes them all back.",
"items": {
"$ref": "#/$defs/LearnedPartReadSchema"
},
"title": "More",
"type": "array"
},
"notes": {
"description": "What the person said, oldest first, each note whole: the thumbs down's own, then each later note after it. Empty once its feedback session closed (saved, discarded or undone): the notes go with the session.",
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
},
"proposal": {
"anyOf": [
{
"$ref": "#/$defs/ProposalReadSchema"
},
{
"type": "null"
}
],
"description": "The learning an outbound thumbs down proposed; null for a table agent's."
},
"record_ids": {
"description": "The rows a thumbs down on cells covered, so the grid shows its note on each; empty on every other surface.",
"items": {
"format": "uuid",
"type": "string"
},
"title": "Record Ids",
"type": "array"
},
"redo_detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Redo Detail"
},
"redo_state": {
"$ref": "#/$defs/RedoState"
},
"restore": {
"$ref": "#/$defs/RestoreState",
"description": "Where putting the original output back stands after Undo: `none`, `waiting`, `restored` or `left`."
},
"restore_detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Why the original was left as the redo left it.",
"title": "Restore Detail"
},
"rev": {
"default": 0,
"description": "The revision of its changes: send it back when changing one, so a change made against an older set is refused.",
"title": "Rev",
"type": "integer"
},
"saved_agent_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "The saved agent the thumbs down was given to (for an outbound one, its sequence's writer); null for an unlinked column's.",
"title": "Saved Agent Id"
},
"status": {
"$ref": "#/$defs/LearningEventStatus",
"description": "`applied` (its learning is saved), `undone` after Undo, `proposed` while its feedback session (on a sequence's message, a table's cells or a Preview example) waits for a person, `dismissed` once that one was thrown away (Undo, a rejection, a discard, or a week unsaved)."
},
"subject_key": {
"description": "What it was given on, as `subject_key` names it: a read of several subjects at once sorts its thumbs downs back to each by this.",
"title": "Subject Key",
"type": "string"
},
"surface": {
"$ref": "#/$defs/LearningSource",
"description": "Where it was given. `hand_edit` is a learning a person's own edit proposed (`POST /agent-learnings/hand-edits/`): its card dismisses it (revert) and keeps the edit, and nothing is written again."
},
"text_after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning as the thumbs down wrote it.",
"title": "Text After"
},
"text_before": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What an updated learning said before.",
"title": "Text Before"
},
"thread": {
"description": "While its session waits (`proposed`): each note, oldest first, with who gave it, the AI's reply and the words it was given on. Empty once the session closed: a session lasts as long as its item waits for a decision.",
"items": {
"$ref": "#/$defs/SessionNoteReadSchema"
},
"title": "Thread",
"type": "array"
},
"would_have_written": {
"anyOf": [
{
"$ref": "#/$defs/WouldHaveWrittenReadSchema"
},
{
"type": "null"
}
],
"description": "On a sent message: what the agent would have sent instead, once written (`redo_state` `written`); null before then and on every other surface."
}
},
"required": [
"id",
"subject_key",
"action",
"text_after",
"text_before",
"status",
"surface",
"restore",
"restore_detail",
"redo_state",
"redo_detail",
"created_at",
"agent_name"
],
"type": "object",
"$defs": {
"ChangeKind": {
"description": "What one change of a feedback session does to the learnings (F2).",
"enum": [
"add",
"update",
"delete",
"keep",
"instruction",
"link",
"fact"
],
"title": "ChangeKind",
"type": "string"
},
"ChangeOutcome": {
"description": "What saving a session did with one of its changes (F2).",
"enum": [
"applied",
"skipped_full",
"skipped_changed",
"pending",
"undo_pending",
"undone",
"left",
"left_out"
],
"title": "ChangeOutcome",
"type": "string"
},
"ChangeVersionReadSchema": {
"description": "How a session's change read before a later note rewrote it.",
"properties": {
"find": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "An instruction edit's words it replaced.",
"title": "Find"
},
"note": {
"description": "The note that made this version.",
"title": "Note",
"type": "integer"
},
"replace_with": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What the instruction edit put in their place.",
"title": "Replace With"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning, link or fact's answer as it read.",
"title": "Text"
}
},
"required": [
"note",
"text",
"find",
"replace_with"
],
"title": "ChangeVersionReadSchema",
"type": "object"
},
"DroppedChangeReadSchema": {
"description": "A change a later note took back.",
"properties": {
"id": {
"description": "The change's id, as it was.",
"title": "Id",
"type": "string"
},
"kind": {
"$ref": "#/$defs/ChangeKind"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What it said.",
"title": "Text"
}
},
"required": [
"id",
"kind",
"text"
],
"title": "DroppedChangeReadSchema",
"type": "object"
},
"LearnState": {
"description": "Whether a session's learner turned its notes into changes (F3, F5).",
"enum": [
"ok",
"failed"
],
"title": "LearnState",
"type": "string"
},
"LearnedPartReadSchema": {
"description": "One more learning a thumbs down wrote, for another point its reason made.",
"properties": {
"action": {
"$ref": "#/$defs/LearningAction",
"description": "`added` a learning, or `updated` one about the same thing."
},
"learning_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning; null once it was deleted.",
"title": "Learning Id"
},
"previous_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What the updated learning said before; null for an added one.",
"title": "Previous Text"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning as the thumbs down wrote it.",
"title": "Text"
}
},
"required": [
"action",
"learning_id",
"text",
"previous_text"
],
"title": "LearnedPartReadSchema",
"type": "object"
},
"LearningAction": {
"description": "What one event did to an agent's learnings.",
"enum": [
"added",
"updated",
"split",
"carried",
"skipped",
"seeded",
"session",
"deleted"
],
"title": "LearningAction",
"type": "string"
},
"LearningEventStatus": {
"description": "Where an event stands.\n\nA thumbs down starts ``proposed``: the learner's learning waits, on the rewritten message\nor on the cells or Preview example it runs again (FS-18), until a person saves it\n(``applied``) or it is thrown away (``dismissed``). Older table learnings, saved at once,\nstay ``applied``.",
"enum": [
"applied",
"undone",
"proposed",
"dismissed"
],
"title": "LearningEventStatus",
"type": "string"
},
"LearningSource": {
"description": "Where a learning came from: the surface a thumbs down was given on, or a release pass.\n\nAlso the ``surface`` of the event that wrote it.",
"enum": [
"table_cells",
"agent_preview",
"task",
"writing_preview",
"reply_draft",
"sent_message",
"hand_edit",
"simplified",
"carried",
"template",
"hand"
],
"title": "LearningSource",
"type": "string"
},
"PointGoesTo": {
"description": "Where one point of a session's notes belongs (F7).",
"enum": [
"rule",
"this_message",
"instruction",
"link",
"fact",
"sender",
"research",
"pending"
],
"title": "PointGoesTo",
"type": "string"
},
"ProposalPointReadSchema": {
"description": "One thing a feedback session's notes ask for, as its learner read them.",
"properties": {
"covered": {
"description": "Whether a change learns it.",
"title": "Covered",
"type": "boolean"
},
"goes_to": {
"$ref": "#/$defs/PointGoesTo",
"description": "Where it belongs: `rule` (a learning), `this_message` (only this message: the rewrite follows it, nothing is kept), `instruction` (a step's or the reply's instruction), `link` (the sequence's call-to-action link), `fact` (the business Q&A), `sender` (a sender's own setting, changed on Senders) or `research` (the sequence's research settings). `sender` and `research` are never written."
},
"note": {
"description": "The note it is in, from 1, oldest first (see `notes`).",
"title": "Note",
"type": "integer"
},
"number": {
"description": "From 1, across every note: what a change's `points` name.",
"title": "Number",
"type": "integer"
},
"quote": {
"description": "The note's own words for it; empty when the learner's quote was not found.",
"title": "Quote",
"type": "string"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Why it is not learned (it names this contact, say); null when it is.",
"title": "Reason"
},
"said": {
"description": "The point in a few words.",
"title": "Said",
"type": "string"
}
},
"required": [
"number",
"note",
"quote",
"said",
"covered",
"reason",
"goes_to"
],
"title": "ProposalPointReadSchema",
"type": "object"
},
"ProposalReadSchema": {
"description": "What a feedback session will learn, before a person saves it.\n\nSaved by Save (POST .../save/), by approving the rewritten task or reply, or by Looks\ngood on the rewritten Preview contact, the cells or the Preview example; thrown away by\nUndo, a rejection or a discard. A table agent's changes are its own, at `sequence` scope.\n`changes` lists every change; the fields beside it describe the first add or rewrite.",
"properties": {
"auto_rewrites": {
"description": "How many messages written ahead (Tasks cards, messages waiting to send on their own, and waiting reply drafts) were written again once it was saved.",
"title": "Auto Rewrites",
"type": "integer"
},
"changes": {
"description": "Every change it makes to the learnings, in the learner's order.",
"items": {
"$ref": "#/$defs/ProposedChangeReadSchema"
},
"title": "Changes",
"type": "array"
},
"learn_detail": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Why it failed, said on the card; null when ok.",
"title": "Learn Detail"
},
"learn_state": {
"$ref": "#/$defs/LearnState",
"description": "`ok`, or `failed` when the learner could not work out what to learn from the last note: nothing new is learned until Retry, and the changes before it stand."
},
"moved_from_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Once saved for every sequence: this sequence's learning it took the place of, which Undo puts back.",
"title": "Moved From Text"
},
"points": {
"description": "What the notes ask for, as its learner read them; each change names its own. Empty once the session closed: they go with its notes.",
"items": {
"$ref": "#/$defs/ProposalPointReadSchema"
},
"title": "Points",
"type": "array"
},
"replaces_scope": {
"anyOf": [
{
"$ref": "#/$defs/ProposedScope"
},
{
"type": "null"
}
],
"description": "Whose learning the first change rewrites: this sequence's, or every sequence's. A rewrite of every sequence's learning kept at `sequence` scope saves a new learning for this sequence instead (Replaces in this sequence)."
},
"replaces_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The saved learning the first change rewrites, as it read when proposed (Replaces: ...); null when it adds one.",
"title": "Replaces Text"
},
"rev": {
"description": "The revision of `changes`: it moves on every refine or edit of them.",
"title": "Rev",
"type": "integer"
},
"saved_learning_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning the first change saved, once saved; null while it waits or once thrown away.",
"title": "Saved Learning Id"
},
"scope": {
"$ref": "#/$defs/ProposedScope",
"description": "The first change's scope. `sequence`: this sequence only (the default). `account`: every sequence's writer, its emails, LinkedIn messages and replies."
},
"text": {
"description": "The first change's learning as it would be saved, one line.",
"title": "Text",
"type": "string"
}
},
"required": [
"changes",
"rev",
"text",
"scope",
"replaces_text",
"replaces_scope",
"saved_learning_id",
"moved_from_text",
"auto_rewrites",
"points",
"learn_state",
"learn_detail"
],
"title": "ProposalReadSchema",
"type": "object"
},
"ProposedChangeReadSchema": {
"description": "One change a feedback session makes: a learning, an instruction, the link or a fact.",
"properties": {
"find": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "An instruction edit's words it replaces.",
"title": "Find"
},
"history": {
"description": "How it read before later notes rewrote it, oldest first.",
"items": {
"$ref": "#/$defs/ChangeVersionReadSchema"
},
"title": "History",
"type": "array"
},
"id": {
"description": "Stable within its session: `c1`, `c2`...",
"title": "Id",
"type": "string"
},
"kind": {
"$ref": "#/$defs/ChangeKind",
"description": "`add` a learning, `update` (rewrite) one, `delete` one, or `keep` one that already says what a point asks (nothing is written); `instruction`: edit a step's or the reply's instruction (`find` becomes `replace_with`); `link`: the sequence's call-to-action link becomes `text`; `fact`: keep `question` and its answer `text` in the business Q&A."
},
"note": {
"description": "The note of the session (`thread[].number`) that last made or rewrote it; 0 for one made before notes were threaded.",
"title": "Note",
"type": "integer"
},
"off": {
"description": "A person left it out: the page's yes saves every change still on, never this one.",
"title": "Off",
"type": "boolean"
},
"outcome": {
"anyOf": [
{
"$ref": "#/$defs/ChangeOutcome"
},
{
"type": "null"
}
],
"description": "Null while it waits. Once saved: `applied`, `skipped_full` (its list was full) or `skipped_changed` (what it changes was edited meanwhile); an instruction, link or fact is `pending` until written, a moment after the save. Once undone: `undo_pending`, then `undone`, or `left` when it was changed since."
},
"points": {
"description": "The numbers of the points it learns (`points`).",
"items": {
"type": "integer"
},
"title": "Points",
"type": "array"
},
"question": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "A fact's question.",
"title": "Question"
},
"replace_with": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What an instruction edit puts in their place; empty removes them.",
"title": "Replace With"
},
"replaces_scope": {
"anyOf": [
{
"$ref": "#/$defs/ProposedScope"
},
{
"type": "null"
}
],
"description": "Whose learning it rewrites: this sequence's, or every sequence's."
},
"replaces_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The saved learning it rewrites or deletes, as it read when proposed; null for an add.",
"title": "Replaces Text"
},
"saved_learning_id": {
"anyOf": [
{
"format": "uuid",
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning it saved, once applied; null for a delete or while it waits.",
"title": "Saved Learning Id"
},
"scope": {
"$ref": "#/$defs/ProposedScope",
"description": "`sequence`: this sequence only. `account`: every sequence's writer. For a delete, whose learning goes."
},
"step_label": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "An instruction edit's step, e.g. \"Step 2 · Follow up\", or \"Replies\"; for an add or an update, the one step the learning holds for, null for every message.",
"title": "Step Label"
},
"text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The learning as it would read; a link change's new link; a fact's answer. Null for a delete, a keep or an instruction edit.",
"title": "Text"
},
"words": {
"description": "How many words its learning has (a learning aims at 5 to 10); 0 for a change with no learning.",
"title": "Words",
"type": "integer"
}
},
"required": [
"id",
"kind",
"text",
"step_label",
"find",
"replace_with",
"question",
"scope",
"replaces_text",
"replaces_scope",
"outcome",
"saved_learning_id",
"points",
"note",
"off",
"history",
"words"
],
"title": "ProposedChangeReadSchema",
"type": "object"
},
"ProposedScope": {
"description": "Which writers a proposed learning reaches once saved.",
"enum": [
"sequence",
"account"
],
"title": "ProposedScope",
"type": "string"
},
"RedoState": {
"description": "How the redo a thumbs down asked for went.",
"enum": [
"none",
"started",
"written",
"refused"
],
"title": "RedoState",
"type": "string"
},
"RestoreState": {
"description": "Where putting an undone event's original output back stands.",
"enum": [
"none",
"waiting",
"restored",
"left"
],
"title": "RestoreState",
"type": "string"
},
"SessionNoteReadSchema": {
"description": "One note of a feedback session and the AI's reply to it.",
"properties": {
"at": {
"description": "When it was given.",
"format": "date-time",
"title": "At",
"type": "string"
},
"dropped": {
"description": "Changes of earlier notes this note took back.",
"items": {
"$ref": "#/$defs/DroppedChangeReadSchema"
},
"title": "Dropped",
"type": "array"
},
"kind": {
"$ref": "#/$defs/ThreadNoteKind",
"description": "`note` a person typed, or `edit`: a person's own edit of the words."
},
"number": {
"description": "From 1, oldest first: what a change's `note` names.",
"title": "Number",
"type": "integer"
},
"reply": {
"description": "The AI's reply: what it changed and what it kept to this item.",
"title": "Reply",
"type": "string"
},
"text": {
"description": "The note; for an edit, the passages changed.",
"title": "Text",
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Who gave it.",
"title": "User Id"
},
"words": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "The words the note was given on, before its rewrite: what the page marks the rewrite against. Null when not kept.",
"title": "Words"
}
},
"required": [
"number",
"kind",
"text",
"user_id",
"at",
"reply",
"words",
"dropped"
],
"title": "SessionNoteReadSchema",
"type": "object"
},
"StepWordsReadSchema": {
"description": "One email or message of a Preview contact's thread, as it read before a Needs work.",
"properties": {
"body": {
"description": "The words.",
"title": "Body",
"type": "string"
},
"step_id": {
"description": "The sequence step it was written for.",
"format": "uuid",
"title": "Step Id",
"type": "string"
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The subject line; null for LinkedIn.",
"title": "Subject"
}
},
"required": [
"step_id",
"subject",
"body"
],
"title": "StepWordsReadSchema",
"type": "object"
},
"ThreadNoteKind": {
"description": "What a note of a feedback session is.",
"enum": [
"note",
"edit"
],
"title": "ThreadNoteKind",
"type": "string"
},
"WouldHaveWrittenReadSchema": {
"description": "What the agent would have sent in place of a sent message, with the proposed learning.",
"properties": {
"body": {
"description": "The words.",
"title": "Body",
"type": "string"
},
"subject": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The subject line; null for LinkedIn.",
"title": "Subject"
}
},
"required": [
"subject",
"body"
],
"title": "WouldHaveWrittenReadSchema",
"type": "object"
}
}
}
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/getoneprofile-ai-thumbs-down-event-read-schema"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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.