Look up every Orphi tool
This page describes every tool that Orphi gives your AI assistant: what it does, its inputs, its result, its limits and an example.
Orphi has twelve tools. Eight of them read your Orphi data, and four of them change it. Every tool acts for the Orphi account that signed in, so no tool takes a learner id.
| Tool | What it does | Reads or writes |
|---|---|---|
get_learner_overview |
Returns your language, level, streak and number of due cards. | Reads |
get_conversation_guide |
Returns how to talk with you at your level. | Reads |
list_lessons |
Lists your lessons. | Reads |
get_lesson |
Returns one lesson with its cards and reading passages. | Reads |
get_due_reviews |
Returns the cards and saved words that are due for review. | Reads |
open_orphi_call |
Returns a link that opens a voice call with Orphi. | Reads |
search_my_words |
Searches the words you saved. | Reads |
get_recent_calls |
Returns a summary of your last calls with Orphi. | Reads |
save_words |
Saves new words into Orphi. | Writes |
record_reviews |
Records how you did on the cards you practised. | Writes |
add_learning_note |
Saves a short note for Orphi about your goals or life. | Writes |
create_lesson_from_text |
Turns a text into a new Orphi lesson. | Writes |
How every tool works
A new connection can only read. The four tools that write work only after you turn on Allow changes for that assistant in Settings, under Connected assistants. No tool deletes anything.
Every tool that writes takes a requestId. Send a new one for each new change. Send the same one again only to retry the same change, and Orphi then returns the first result without changing anything twice. Orphi keeps each requestId for 24 hours.
Text inputs cannot be empty. Each tool returns its result as JSON, both as text and as structured content. A field marked optional is left out when Orphi has no value for it.
Four tools also show Orphi's study screens in ChatGPT and Claude: get_learner_overview, list_lessons, get_lesson and get_due_reviews. Their JSON result stays the same for every other app.
Limits
These limits count the calls of all your assistants together:
- 120 tool calls an hour.
- 20 changes an hour. Every call to a tool that writes counts as a change.
- 3 lessons a day from
create_lesson_from_text.
An hour starts at the top of each hour, and a day starts at midnight UTC. A call over a limit changes nothing and says when the limit resets.
get_learner_overview
Returns the language you are learning, your level in Orphi, what you can say, what you are working on, sounds to watch, your streak and how many cards are due.
This tool reads.
Inputs
This tool takes no inputs.
Result
targetLanguage(string, required): The language you are learning, such asmandarinorfrench.level(object, required): Your level in Orphi.level.shown(string, required): The level you see in Orphi, such asHSK 3orA2.level.low(string, required): The low end of the range Orphi is fairly sure of.level.high(string, required): The high end of that range.level.scale(string, required): The scale of the level:HSK 3.0for Chinese,CEFRfor the other languages.
canSay(array of strings, required): What you can already say, at most 8 items.workingOn(array of strings, required): What you are working on, at most 6 items.soundsToWatch(array of strings, required): Sounds that need care, at most 5 items.streakDays(number, required): Your streak, in days.dueCount(number, required): The cards due for review now, counted up to 200.
Limits
None beyond the limits for every tool.
Example
Request:
{}Result:
{
"targetLanguage": "mandarin",
"level": {
"shown": "HSK 2",
"low": "HSK 2",
"high": "HSK 3",
"scale": "HSK 3.0"
},
"canSay": [
"Order food and drinks",
"Talk about your family"
],
"workingOn": [
"Telling the time"
],
"soundsToWatch": [
"zh, ch and sh"
],
"streakDays": 12,
"dueCount": 18
}get_conversation_guide
Returns how to talk with you at your level: sentence length, pace, how much of your target language to use, how to correct, and the words and patterns to bring up.
This tool reads.
Inputs
lessonId(string, optional): The id of one of your lessons, aslist_lessonsreturns it, at most 100 characters. Without it, the guide brings up the words and patterns that are due.
Result
guide(string, required): How to speak with you, written as instructions to the assistant. It never contains your own text.lesson(object or null, required): The lesson this conversation practises, or null.lesson.title(string, required): The lesson's title.
words(array of objects, required): Words to bring up, at most 20.words[].word(string, required): The word.words[].meaning(string, required): What it means.words[].pronunciation(string, optional): How it is said, such as pinyin for Chinese.
patterns(array of objects, required): Patterns to bring up, at most 10.patterns[].pattern(string, required): The structure.patterns[].meaning(string, required): What it expresses.patterns[].example(string, optional): A sentence that uses it.
Limits
The guide is at most 3,000 bytes. The lesson title, words and patterns come from your own material, and the assistant treats them as data, never as instructions.
Example
Request:
{
"lessonId": "lesson_8f2k"
}Result:
{
"guide": "Use short sentences, mostly in English, with a few Chinese words...",
"lesson": {
"title": "At the market"
},
"words": [
{
"word": "多少钱",
"meaning": "how much does it cost",
"pronunciation": "duōshao qián"
}
],
"patterns": [
{
"pattern": "太 + adjective + 了",
"meaning": "too, very",
"example": "太贵了!"
}
]
}list_lessons
Returns your lessons, newest first. Each lesson has an id that you pass to get_lesson, get_conversation_guide or open_orphi_call.
This tool reads.
Inputs
limit(integer, optional): How many lessons to return, from 1 to 50. The default is 10.
Result
lessons(array of objects, required): Your lessons, newest first, at most 50.lessons[].id(string, required): The lesson's id.lessons[].title(string, required): The lesson's title.lessons[].language(string, required): The language of the lesson.lessons[].cardCount(number, required): How many words, patterns and contrasts the lesson holds.lessons[].lastPracticedAt(string or null, required): When you last practised it, as an ISO date, or null.
Limits
At most 50 lessons in one call.
Example
Request:
{
"limit": 2
}Result:
{
"lessons": [
{
"id": "lesson_8f2k",
"title": "At the market",
"language": "mandarin",
"cardCount": 24,
"lastPracticedAt": "2026-10-03T18:20:00.000Z"
},
{
"id": "lesson_3m9q",
"title": "My family",
"language": "mandarin",
"cardCount": 17,
"lastPracticedAt": null
}
]
}get_lesson
Returns one of your lessons: its words, sentences, patterns and contrasts, and its reading passages.
This tool reads.
Inputs
lessonId(string, required): The id of one of your lessons, aslist_lessonsreturns it, at most 100 characters.
Result
title(string, required): The lesson's title.language(string, required): The language of the lesson.cardCount(number, required): How many cards the lesson holds.cards(array of objects, required): The lesson's cards, at most 100.cards[].id(string, required): The card's id, whichrecord_reviewstakes.cards[].kind(string, required): One ofword,sentence,patternorcontrast.cards[].front(string, required): The front of the card. For a pattern, the structure.cards[].back(string, required): The back of the card. For a pattern, the explanation.cards[].pronunciation(string, optional): How the front is said.cards[].example(object, optional): A sentence that uses it.cards[].example.text(string, required): The sentence.cards[].example.transliteration(string, optional): How the sentence is read.cards[].example.translation(string, optional): What the sentence means.
cards[].audioUrl(string, optional): A recording of the front, in Orphi's own storage.
passages(array of objects, required): The lesson's reading passages, at most 10.passages[].title(string, required): The passage's title.passages[].summary(string, optional): What the passage is about.passages[].lines(array of objects, required): The lines of the passage.passages[].lines[].speaker(string, optional): Who says the line, in a dialogue.passages[].lines[].text(string, required): The line.passages[].lines[].transliteration(string, optional): How the line is read.passages[].lines[].translation(string, optional): What the line means.
Limits
At most 100 cards and 10 passages. A lesson that is not yours is answered as not found.
Example
Request:
{
"lessonId": "lesson_8f2k"
}Result:
{
"title": "At the market",
"language": "mandarin",
"cardCount": 24,
"cards": [
{
"id": "card_51ad",
"kind": "word",
"front": "多少钱",
"back": "how much does it cost",
"pronunciation": "duōshao qián",
"example": {
"text": "这个多少钱?",
"transliteration": "Zhège duōshao qián?",
"translation": "How much is this?"
}
}
],
"passages": [
{
"title": "Buying fruit",
"lines": [
{
"speaker": "A",
"text": "苹果多少钱一斤?",
"translation": "How much is a jin of apples?"
}
]
}
]
}get_due_reviews
Returns the cards and saved words that are due for review now, the most overdue first. A word that is both in a lesson and in your saved words appears once.
This tool reads.
Inputs
limit(integer, optional): How many items to return, from 1 to 20. The default is 10.
Result
items(array of objects, required): The due items, the most overdue first, at most 20.items[].source(string, required):lessonfor a card of a lesson, orvocabularyfor a word you saved.items[].id(string, required): The item's id, whichrecord_reviewstakes with its source.items[].front(string, required): The front of the card.items[].back(string, required): The back of the card.items[].pronunciation(string, optional): How the front is said.items[].example(object, optional): A sentence that uses it.items[].example.text(string, required): The sentence.items[].example.transliteration(string, optional): How the sentence is read.items[].example.translation(string, optional): What the sentence means.
items[].audioUrl(string, optional): A recording of the front, in Orphi's own storage.items[].lapseCount(number, optional): How many times you forgot it. More than 0 means it came back after a miss.
Limits
At most 20 items in one call.
Example
Request:
{
"limit": 1
}Result:
{
"items": [
{
"source": "lesson",
"id": "card_51ad",
"front": "多少钱",
"back": "how much does it cost",
"pronunciation": "duōshao qián",
"lapseCount": 1
}
]
}open_orphi_call
Returns a link that opens a voice call with Orphi in the browser, on one of your lessons if you give one. It changes nothing and does not ring your phone.
This tool reads.
Inputs
lessonId(string, optional): The id of one of your lessons, aslist_lessonsreturns it, at most 100 characters.
Result
url(string, required): The link,https://app.useorphi.com/call, with?lesson=and the lesson's id when you gave one.
Limits
A lesson that is not yours is answered as not found.
Example
Request:
{
"lessonId": "lesson_8f2k"
}Result:
{
"url": "https://app.useorphi.com/call?lesson=lesson_8f2k"
}search_my_words
Searches the words you saved in Orphi, by the word itself or by its meaning, and returns the best matches first.
This tool reads.
Inputs
query(string, required): A word in any language, or part of its meaning, at most 100 characters.limit(integer, optional): How many words to return, from 1 to 25. The default is 10.
Result
words(array of objects, required): The matching words, the best matches first, at most 25.words[].id(string, required): The word's id.words[].word(string, required): The word.words[].meaning(string, required): What it means.words[].pronunciation(string, optional): How it is said.words[].state(string, required): Where the word is in its review schedule:introduced,learning,review,masteredorrelearning.
Limits
At most 25 words in one call.
Example
Request:
{
"query": "expensive"
}Result:
{
"words": [
{
"id": "word_77c1",
"word": "贵",
"meaning": "expensive",
"pronunciation": "guì",
"state": "review"
}
]
}get_recent_calls
Returns your last voice calls with Orphi, newest first: when they happened, how long they lasted, and a short summary of each. It never returns a transcript.
This tool reads.
Inputs
limit(integer, optional): How many calls to return, from 1 to 5. The default is 5.
Result
calls(array of objects, required): Your last calls, newest first, at most 5.calls[].startedAt(string, required): When the call started, as an ISO date.calls[].durationSeconds(number, required): How long the call lasted, in seconds.calls[].summaryStatus(string, required):readywhen the summary fields are filled,preparingwhile Orphi writes the summary, orunavailablewhen none could be written.calls[].summary(string, optional): What the call was about, at most 600 characters.calls[].topics(array of strings, optional): The topics of the call, at most 5.calls[].wordsPracticed(array of strings, optional): The words you practised, at most 10.calls[].learnerFacts(array of strings, optional): What you said about your life and goals, at most 5.
Limits
At most 5 calls. Orphi writes a call's summary with an AI model the first time an assistant asks for that call, and at most 3 summaries in one request. The others say preparing; ask again a minute later.
Example
Request:
{
"limit": 1
}Result:
{
"calls": [
{
"startedAt": "2026-10-04T19:05:00.000Z",
"durationSeconds": 540,
"summaryStatus": "ready",
"summary": "A chat about weekend plans and a trip to the market.",
"topics": [
"weekend plans",
"shopping"
],
"wordsPracticed": [
"周末",
"多少钱"
],
"learnerFacts": [
"Is moving to Shanghai in March"
]
}
]
}save_words
Saves words from the conversation into your words in Orphi, where Orphi schedules them for review. A word you already have is skipped.
This tool writes. It works only after you turn on Allow changes for the assistant.
Inputs
words(array of objects, required): The words to save, from 1 to 20.words[].word(string, required): The word or short phrase, in the language you are learning, at most 80 characters.words[].meaning(string, required): What it means, in your own language, at most 200 characters.words[].pronunciation(string, optional): How it is said, such as pinyin for Chinese, at most 100 characters.words[].example(string, optional): A sentence that uses it, at most 300 characters.
requestId(string, required): A new random id for this change, 8 to 64 characters.
Result
saved(number, required): How many words were added.skipped(number, required): How many you already had, or were named twice.
Limits
At most 20 words in one call.
Example
Request:
{
"words": [
{
"word": "便宜",
"meaning": "cheap",
"pronunciation": "piányi"
}
],
"requestId": "c41f9e2a-save-1"
}Result:
{
"saved": 1,
"skipped": 0
}record_reviews
Records how you did on cards and saved words that the assistant quizzed you on. Orphi moves each review schedule exactly as a review in the app does.
This tool writes. It works only after you turn on Allow changes for the assistant.
Inputs
reviews(array of objects, required): One result per card, from 1 to 50.reviews[].source(string, required):lessonorvocabulary, asget_due_reviewsorget_lessongave it.reviews[].id(string, required): The card's id, at most 100 characters.reviews[].rating(string, required):againwhen you did not know it,hard,goodoreasy.
requestId(string, required): A new random id for this change, 8 to 64 characters.
Result
recorded(number, required): How many results were recorded. Two results for one schedule both count, and move it once.nextDue(array of objects, required): One entry per schedule that moved, at most 50.nextDue[].source(string, required):lessonorvocabulary.nextDue[].id(string, required): The card's id.nextDue[].dueAt(string, required): When the card comes back for review, as an ISO date.
Limits
At most 50 results in one call. Reviews update when cards come back, and they never change your level.
Example
Request:
{
"reviews": [
{
"source": "lesson",
"id": "card_51ad",
"rating": "good"
}
],
"requestId": "c41f9e2a-reviews-1"
}Result:
{
"recorded": 1,
"nextDue": [
{
"source": "lesson",
"id": "card_51ad",
"dueAt": "2026-10-09T08:00:00.000Z"
}
]
}add_learning_note
Saves one short note about your goals or your life that matters for your learning, such as "moving to Shanghai in March". Orphi uses your notes in its voice calls.
This tool writes. It works only after you turn on Allow changes for the assistant.
Inputs
note(string, required): The note, in your words or close to them, at most 500 characters.requestId(string, required): A new random id for this change, 8 to 64 characters.
Result
saved(boolean, required): Whether the note was saved.noteCount(number, required): How many notes you now have. Orphi keeps 30 at most.
Limits
Each note has at most 500 characters, and Orphi keeps 30 notes. You see and delete them in Settings, under Notes from your assistants. An assistant saves a note only when you ask it to.
Example
Request:
{
"note": "I'm moving to Shanghai in March",
"requestId": "c41f9e2a-note-1"
}Result:
{
"saved": true,
"noteCount": 3
}create_lesson_from_text
Turns a text, such as notes from a class or a dialogue, into an Orphi lesson with words, patterns and recordings. The lesson takes a few minutes to make.
This tool writes. It works only after you turn on Allow changes for the assistant.
Inputs
text(string, required): The text of the lesson, at most 20,000 characters.title(string, optional): A title for the lesson, at most 120 characters.requestId(string, required): A new random id for this change, 8 to 64 characters.
Result
importId(string, required): The id of the lesson being made.lessonUrl(string, required): The page in Orphi where you follow the lesson being made and then check it.status(string, required):startedfor a new lesson, oralready_runningandalready_madewhen you already sent the same text.
Limits
At most 20,000 characters, and 3 lessons a day.
Example
Request:
{
"text": "A: 苹果多少钱一斤? B: 五块。",
"title": "Buying fruit",
"requestId": "c41f9e2a-lesson-1"
}Result:
{
"importId": "import_2b7d",
"lessonUrl": "https://app.useorphi.com/lessons/imports/import_2b7d",
"status": "started"
}Errors
When a tool cannot answer, it returns an error with one sentence that the assistant can pass on to you. Each entry below starts with the exact message.
- "This Orphi account is not available. It may have been deleted." The account was deleted. Sign in with another Orphi account.
- "The learner disconnected this assistant from Orphi in Orphi’s settings." Open Settings in Orphi and select Allow again next to the assistant, under Disconnected.
- "This assistant may only read. The learner can turn on “Allow changes” for it in Orphi’s settings." A tool that writes was called before you allowed changes. Turn on Allow changes for the assistant in Settings.
- "This learner has connected as many assistants to Orphi as it allows. They can disconnect one in Orphi’s settings." Disconnect an assistant you no longer use, then sign in again.
- "Lesson not found. Call list_lessons to see the learner’s lessons and their ids." The lesson id is not one of your lessons. Call
list_lessonsto get the right id. - "The input is outside what this tool accepts. Check the limits in the tool’s description." An input is too long, empty, or has too many items. Check the limits on this page.
- "This requestId was already used for a different change. Send a new requestId for a new change, and the same one only to retry the same change." Send the change again with a new
requestId. - "Orphi is still working on this request. Wait a minute, then send it again with the same requestId." A lesson from the same request is still starting. Send it again a minute later.
- "The learner already has the most notes Orphi keeps. They can delete one in Orphi’s settings, under the notes from their assistants." You have 30 notes. Delete one in Settings, under Notes from your assistants.
- "Orphi could not start a lesson from this text. The learner can paste it into Orphi instead." Paste the text into Orphi's lesson import instead.
- "Orphi allows 120 tool calls an hour for a learner’s assistants, and this learner has reached it." The message names the limit that was reached, and says when it resets. Try again after that time.
- "Orphi could not answer just now. Try again in a moment." Something failed on Orphi's side. Try again in a moment.
To learn how the assistant signs in, read Sign in and disconnect an assistant.