What may change within v1

New endpoints, new optional fields in a request, new fields in an answer and new error codes. Write your code so an unknown field is ignored and an unknown code is handled as a refusal. An endpoint that is retired answers 410 retired from then on, so your tool learns it in one request instead of getting a wrong answer.

Changelog

2.19.0 (2026-10-18)

  • Findings wait for the member's sign-off (owner: they go "through the checks, and then sent to the user for approval to share, just like contributions"). A finding a call kept is filed with the agent it fits and the site reads the page it names first (status checking). One that passes goes into the member's findings draft for that agent (in_draft), one draft per member and agent, and the site's checks run on the draft as on any share. When they pass, the member is told, reads each finding on the draft's sign-off page and signs off there, signed in; a key never can. Only then does each finding join the agent, as a contribution of its own (joined). A draft not signed off within 30 days expires, and its findings with it (expired). A research call's findings (subject new_agent) wait for the sign-off too. Before, a finding joined its agent with no sign-off; findings that joined before this release stay as they are.
  • GET /findings: status adds checking, in_draft and expired, and waiting also covers a finding signed off that waits for room in its agent's day (its reason says so). Each finding adds filedWith ({ agentId, untrustedName, newAgent }: the agent it is filed with until it joins; a new agent from research that is not listed yet is not named), draftId and signOffUrl (while in_draft: its findings draft and the member's sign-off page; null otherwise). reason also says why a finding expired or what its source check took out of it.
  • GET /shares/{draftId}: kind adds finding, for the member's findings draft. The site makes that draft and the member signs it off on the site, so it answers not_found to a key, as any draft the connection did not start does. GET /shared-projects gives its draftId on the project that holds the member's findings for that agent.
  • Connector 2.19.0 and the remote connector at /mcp: list_findings says findings wait for the member's sign-off on the site and its answer says to show the member signOffUrl; get_share says a findings draft is signed off on the site and can't be read with it. Client 2.6.0: Finding carries the new statuses, filedWith, draftId and signOffUrl.

2.18.0 (2026-10-17)

  • A follow-up to a plan revises it (owner: "I did a followup, expecting it to revise the plan"). In a session whose plan's call (apply) passed, POST /calls with callId apply now revises that plan; before, it came back as a result of its own beside the plan. The Agent gets the plan as it stands, changes what the details change, keeps the rest and says in its note what changed. When the details only ask about the plan, it answers in the note and hands the plan back as it was. No request field names it: we decide it from the session, for POST /calls/quote too. Its fit is not judged again (the quote's fit is unclear), and it is charged for what it uses, like any call. Sent with no details, question, files or answers, it answers 400 invalid_input. A question call (callId question) in that session still answers on its own and leaves the plan as it is.
  • GET /calls/{runId}, and each result in GET /sessions/{sessionId}, add revisesPlan (the call revised the session's plan) and planUnchanged (it handed the plan back as it was: its note is the Agent's answer, and the plan stays the version before); both are false on any other call. A session's pass adds planResultExists: a plan's call in it passed, so the next apply call revises the plan.
  • GET /sessions/{sessionId}/plan: once the plan was revised, its "The plan" holds the latest version only, and the results after it come under "Answers since"; what was sent with each call is kept. The 409 plan_ran from PUT /sessions/{sessionId}/details now says the Agent revises the plan with what changed.
  • Connector 2.18.0 and the remote connector at /mcp: make_call says that in a session with a plan it revises the plan, and answers in its note when nothing in the plan changes; ask_question that it leaves the plan as it is; rewrite_request sends what changed after the plan's call to make_call; get_plan and get_result say what they now hold. Client 2.5.0: CallResult carries revisesPlan and planUnchanged, and SessionPass planResultExists.

2.17.1 (2026-10-17)

  • Every update to a shared project waits for the member's sign-off: the member's choice to let a small one go live at once was removed. GET /shared-projects keeps updatePolicy, deprecated and always wait. liveAtOnce on a package's report is true only for a batch of lessons the member set to go live when it passes every check.
  • Connector 2.17.1: the note after a submission that went live at once names the member's setting for lessons, the only one left.

2.17.0 (2026-10-17)

  • Packages and stamped batches no longer carry proposed questions (owner's ruling: an Agent writes a plan's questions for each request, so the questions a contributor's tool proposed are no longer asked for, kept or shown). POST /shares/{draftId}/package still accepts questions, in a package and in a stamped batch, in any shape, and ignores it: deprecated. A batch's stamp is checked on the batch as received, questions included; then they are dropped. A correction that carries questions is accepted. Their words are not checked or kept, the sign-off page does not show them, and a new version of an AI Agent holds none. A package or batch with questions, sent before this release and again after it under the same Idempotency-Key within that key's 24 hours, now reads as a different request and is refused idempotency_key_reused: send it under a new key (the remote connector's submit_lessons does).
  • The final check's questions (in the answer to POST /shares/{draftId}/package and in GET /shares/{draftId}'s report) is deprecated and always null, also for a report from before. The field stays, so older readers parse it.
  • Connector 2.17.0: draft_lessons no longer takes questions or required_details, and its first answer no longer asks for them. An agent that still sends them is not refused: they are left out. Client 2.4.1: SharedPackage.questions is deprecated.

2.16.0 (2026-10-13)

  • A connection counts its calls instead of capping what they spend (owner's ruling: "it should be a limit on number of calls it can do in a day"). With spending on, a call goes without asking when it is in one of the connection's first sessionsPerDay chat sessions of the last 24 hours (a session counts from its first call through the connection) and within its first callsPerDay calls there; the member sets both, from 1 session and 10 calls. Any other call answers 403 needs_approval with reason second_session or over_calls, and with spending off every call answers needs_approval with reason spending_off (it was 403 switched_off): the member approves that exact call on their Approvals page, and the call is sent again with approvalId. An approved call runs and counts like any other; the next call is judged again. reason over_limit is no longer given.
  • A call's limit is the member's spendable credits, maxCents when sent, and the site's safety ceiling. Removed: the connection's largest call and daily cap. The preview and POST /calls/quote keep largestCallCents only for connectors up to 2.15.0, deprecated and the same as limitCents; they add approvalReason (new_agent, second_session, over_calls or spending_off; null when it goes without asking), approvalLine (why, as a sentence for the member) and today ({ sessionsUsed, sessionsAllowed, callsUsed, callsAllowed }); needsApproval now covers the counts and spending off too. limitBy is credits, caller_max or safety_ceiling; a result from before whose limit was a connection's old one reads limitBy null in researchCut. POST /calls answers today with this call counted. GET /me's limits are sessionsPerDay and callsPerDay in place of dailyCapCents and largestCallCents, with today ({ sessionsUsed, callsUsed }); spentInWindowCents and spentSinceCents stay. GET /approvals/{approvalId} adds reason. 429 over_limit is given only for the calls a connection may have running at once. POST /calls and POST /calls/{runId}/stop no longer need the spending switch.
  • Connector 2.16.0 and the remote connector at /mcp: the tools and instructions say "A connection may run one chat session a day without asking (the member can allow more), with up to the calls a day they set; another session that day, or more calls, waits for the member's yes on their Approvals page, which you cannot give: show them the link." make_call no longer names a largest call; a research cut names the member's credits. Client 2.4.0: Preview and Quote carry approvalReason, approvalLine and today; Me's limits are sessionsPerDay and callsPerDay, with today; Started carries today; getApproval carries reason. Connectors up to 2.15.0 still make calls; until they are updated, their own words name the call's limit as a largest call.

2.15.0 (2026-10-12)

  • The remote connector: the site serves the Model Context Protocol at /mcp (Streamable HTTP, one JSON answer per request), so a member's own agent adds one address instead of installing a program. It signs in with OAuth 2.1 (PKCE with S256; a client is known by its metadata document's address or registers at /oauth/register; tokens come from /oauth/token), and the member allows it on /connect/authorize, where they choose the connection's name, switches and limits, or a connection they signed in with before. Its tools are the connector's, with the same names and arguments, except: get_result gives a link to each of a result's files and saves nothing; send_file takes the file's name and content; submit_lessons and submit_correction take the batch the gogoportal skill stamped. A connection's key works at /mcp too.
  • Signing in: an access token lasts an hour and a refresh token 60 days, both stored only as hashes. Each refresh replaces both; the refresh token it replaced is taken once more within 2 minutes, and used after that it stops every token of that sign-in. Revoking the connection, or suspending the member, stops them at once. A client registers at most 20 times an hour from one address; each address's first 3 are always taken, and the rest share 600 an hour among everyone.
  • The API refuses a signed-in agent's access token with 401 unauthenticated: it works only at /mcp. A script uses a connection's key, as before.
  • POST /shares/{draftId}/package takes, from a key, the stamped batch the gogoportal skill printed (format gogoportal.lessons) in place of a package. Before anything else the site checks its stamp, its fingerprint over the batch as received, its format, and that the same cleaner would change nothing in it; then it makes the package from it, with preparedBy.program gogoportal-skill, which the package format now takes beside gogoportal-connector. New 400 codes: invalid_batch, not_stamped (also a package that says gogoportal-skill prepared it but comes without its batch), cleaner_version, stamp_mismatch, not_cleaned and too_slow. A refused batch changes no draft, claims no Idempotency-Key and keeps none of its text; the call log keeps its line with the code. A package from the local connector or the upload page is checked as before.
  • POST /shares: a new shared project's title is made unique among the member's, ignoring case, by adding " (2)", " (3)" and on. A batch of lessons for a shared project discards the same connection's earlier batch for it that failed the site's checks. From a connection, a batch of lessons that names a project that never went live (a first batch, whose answer the gogoportal skill kept) discards that connection's failed batch in it and starts its draft in the same project, as a new shared project; one that names a project withdrawn or removed starts a project of its own. Anything else still needs a live project.
  • The gogoportal skill (the Agent Skills format: instructions and a Node script with no dependencies) keeps the lessons on the member's computer, cleaned, and stamps each batch. It is served file by file under /docs/downloads/skills/gogoportal, and in a Claude Code plugin, gogoportal (Claude Code 2.1.224 or later), from the site's own marketplace. A project's batch is due when its research has gone quiet (at least 10 lessons waiting, 7 days since its last batch, and no new lesson for 3 days) or when the member says it is finished (at least 3 waiting); at 40 waiting, at the next natural stopping point. The skill has no credits-used trigger.
  • Connector 2.15.0, the local connector, for any agent that does not sign in by address, apps that run local models included: the same rule for when a batch of lessons goes. When it starts, it sends a project's batch once its research has gone quiet (at least 10 lessons waiting, 7 days since its last batch, and no new lesson for 3 days). send_lessons_now sends one when the member says the project or its research is finished (at least 3 waiting; below that it sends nothing and says so), and at the next natural stopping point once note_lesson's answer says 40 are waiting. note_lesson never sends a batch: its answer states where the project's lessons stand, and it takes the project's description, kinds_of_project and identifying_terms, asked for once, so a quiet batch can go at start-up. GOGOPORTAL_LESSONS_CREDITS_CENTS is retired and ignored; GET /me still takes spentSince. Its instructions are at /connect/agent/local, and the paste from /connect's "Other agent or local model" points there; their connect command adds --no-register and --no-lessons-line, so it prints the entry for the agent's MCP settings and leaves Claude Code and the project's CLAUDE.md alone. /connect/agent says how an agent signs in, and sends any other agent there.

2.14.0 (2026-10-12)

  • Connector 2.14.0: prepare_share, send_share, prepare_correction and send_correction are now draft_lessons, submit_lessons, draft_correction and submit_correction, with the same arguments, and the tools' words and the server's instructions say what each one does without words an agent's safety check reads as data leaving the computer. The API is unchanged, so older connectors keep working.
  • Connector 2.14.0: letting the agent use the tools is the member's change. connect prints, for Claude Code, Cursor, Codex, Claude Desktop and Windsurf, how the member lets their own agent use the tools without asking each time, tells the agent to pass it on and not make the change, and changes no permission file. `node ~/.gogoportal/connector.ts allow`, run by the member in their own terminal, shows the one rule it adds to Claude Code's settings (mcp__gogoportal under permissions.allow) and adds it only when they answer yes. When a tool is still blocked, the instructions tell the agent to say so in one line, point the member to those lines on their API page, and never work around a block or change permission settings itself.

2.13.2 (2026-10-12)

  • Connector 2.13.2: prepare_share: no folder needed for a share of lessons alone.

2.13.1 (2026-10-12)

  • Connector 2.13.1: prepare_share reads only the files the agent names; no folder scan.

2.13.0 (2026-10-11)

  • Lessons from the member's own agent (owner's ruling: as hands-off as possible, and nothing goes live automatically). POST /shares takes source: share (the default) or lessons, a batch of lessons the agent noted as it worked. A batch carries no files (400 invalid_package otherwise). Sent as an update, its lessons are added to the shared project's live version (one with the kind and topic of a takeaway already there takes its place), it never counts as a new shared project, and it waits for the member's sign-off whatever they chose for updates, unless they chose on their own page that lessons go live when they pass every check. A key can't set that. The member is told how many lessons their agent sent.
  • POST /shares/{draftId}/package adds checkAgainFrom: when status is checks_failed because the site's checks ran their most times on the member's shares in 7 days, from when the package can be sent again to the same draft to be checked; null otherwise.
  • GET /me takes an optional spentSince (ISO 8601) and adds spentSinceCents: what this connection held and was charged since then; null without it.
  • Connector 2.13.0: note_lesson keeps one lesson the agent wrote, stripped on the member's computer of secrets, personal data, IDs, full paths and client names, in ~/.gogoportal/lessons/ with a readable copy, and sends the pending lessons in batches (at least 10 and a week after the last batch, or 40 at once; or credits used, when GOGOPORTAL_LESSONS_CREDITS_CENTS is set). send_lessons_now sends them at once. The server's instructions ask the agent to note lessons as it works, and the connect command adds one line asking for it to the project's CLAUDE.md (--no-lessons-line skips it). Client 2.3.0: startShare takes source, me takes spentSince.

2.12.3 (2026-10-11)

  • A stopped call is no longer free (owner's ruling): POST /calls/{runId}/stop wraps the call up. It hands in what it has so far, as a call at its limit does, and is charged for what it used; its result comes back with partial true, and nothing is charged if it misses a check. A call that has written nothing yet ends free; its failReason says it was wrapped up before it wrote a result. The answer is the same ({ runId, stopped: true }); read the call until it is passed or failed. A call whose result is being checked still cannot be stopped (409 agent_busy).
  • Connector 2.12.3: stop_call says so.

2.12.2 (2026-10-10)

  • An AI Agent's measure is how many times it was used (owner's ruling): countedCalls on agent cards, find results and an agent's calls, and uses on a shared project. Find results list the agents that fit the description best first, then the most used.
  • Deprecated and always null: likelyToCostLess (agent cards, find results, GET /agents/{agentId}, the preview and POST /calls/quote) and helpRateBps (agent cards, find results, an agent's calls, GET /shared-projects). The fields stay, so older readers parse them; connectors up to 2.12.1 ask the member before calling an agent that is past New, as they did when likelyToCostLess was not "yes".
  • Only an admin or a takedown hides an AI Agent: notSuggestedReason is paused or nothing_left. helps_less_than_half is no longer given (like plain_model_matches), and a stored one reads null.
  • A contribution on trial is kept once its AI Agent has been used 10 times since it went on trial, with no help test. POST /calls/{runId}/report still records helped, partly or did_not_help; a reason of wrong or outdated counts toward correcting the agent, and no rate is made from reports.
  • Connector 2.12.2: within the member's limits make_call and ask_question call an agent without asking (the connection's largest call is the stop; a New agent only with trying New AI Agents on); a request the quote flags as unrelated to the agent, and a call that needs the member's approval, still go to the member. find_agents, get_agent and list_shared_projects say how many times an agent was used instead of how often it helped; get_agent no longer mentions questions of an agent's own, and prepare_share calls a package's questions hints and no longer asks for for_question.

2.12.1 (2026-10-10)

  • Connector 2.12.1: get_agent no longer says an AI Agent has questions of its own; the questions are written for each request.
  • GET /agents/{agentId} questions, deprecated in 2.12.0, is now always null: an AI Agent has no fixed questions. A plan's questions are written for the member's request (POST /sessions with details) and arrive in the session's questions. The field stays, so older readers parse it.

2.12.0 (2026-10-10)

  • An AI Agent's questions are now written for each request. POST /sessions takes an optional details: on a plan the agent reads it first, at our cost on our smallest model, and writes up to 6 questions for it from what it knows (none when the request covers it), each with options and a recommendation; what the request already answers is filled in (answers[].fromPrompt).
  • Sessions add untrustedDetails (the request as it was last read) and pass: status (done, skipped or failed), skippedWhy, verdict (fits or off), covers, current, fit, readsLeft, canReread and at. covers: nothing is asked. off: it doesn't look related to the agent, and fit says what to ask the member, as a flagged quote does. Skipped or failed: the request goes in as written and nothing waits. pass is null in a session opened before the request came first, which keeps the agent's own questions until it closes.
  • New PUT /sessions/{sessionId}/details reads a rewritten request again, keeping the answers already given (at most 3 reads a session, and 5 an hour and 20 a day per member across the site and connections; past that the read is skipped and the request goes in as written). Refused with invalid_state, reason plan_ran, once the plan's call has run.
  • The fixed opening questions are retired for new sessions: a session opened without details asks nothing, and Ask a question asks nothing first (if the agent needs more, it says so in the answer). GET /agents/{agentId} questions is deprecated: a session no longer asks them. An apply call with empty details in a session that holds a request sends the request.
  • Connector 2.12.0: open_session takes details; rewrite_request; make_call reuses the session's request when its details are empty.

2.11.0 (2026-10-09)

  • A new connection's largest call starts at $2.50 (it was $1.00): half the $5.00 daily cap, so the two calls a connection may run at once both fit in a day (largestCallCents in GET /me). Connections still at $1.00 are moved to $2.50, and their members are told in a notice. The member sets it on their API page; a key never changes it. A call that finishes its work sooner costs the same whatever its largest call.
  • GET /calls/{runId} (and each result in GET /sessions/{sessionId}) adds researchCut: { limitCents, limitBy } when the call's limit ended its web research before its work was done; null when it finished within its limit. With limitBy largest_call, a larger largest call gives a call like it more room to research; with credits, more credits do.
  • 402 short adds reason held when a call is short only because a call that is running holds the member's credits: send it again when that one ends. A real shortfall keeps the message to add credits.
  • Connector 2.11.0: get_result says when the call's limit ended its research, and what would give a call like it more room. A call short only because a running call holds the credits says to call again once that one ends, not to top up.

2.10.0 (2026-10-09)

  • A request that doesn't look related to the AI Agent (owner's ruling: tell the member first). POST /calls/quote and GET /agents/{agentId}/calls/{callId}/preview add fit: { verdict (fits, unclear, another_agent or no_agent), sentence (untrusted text, as it holds the agents' names: "This doesn't look related to <name>.", with " <other name> covers it." when another AI Agent does), otherAgent ({ agentId, slug, untrustedName }), choice (the session's earlier choice) and canStartAgent }. It is an offline check of the request's words, with no model, judged on the quote only (the preview of a kind of call carries no text, so its verdict is always unclear), and only while the site has it switched on.
  • POST /calls and POST /calls/quote take an optional subject: ask_anyway (ask this agent anyway) or new_agent (research the request on the web; what it finds starts a new AI Agent: it uses none of the agent's shared research and its contributors earn nothing from it, it skips the plan's gate, and it is charged for what it uses like any call), and an optional fromAsk. Advisory: a call without subject is never refused for its subject; a flagged one runs as ask_anyway. A subject sent on a request that fits is ignored. The session keeps the choice: after new_agent every later call in it is a research call; after ask_anyway it is never asked again, and a later request that doesn't look related runs as ask_anyway while one that fits is an ordinary call. An agent the member blocked for the connection stays blocked for new_agent too.
  • New error findings_off (403): subject new_agent keeps the call's findings, and this connection doesn't keep findings. A key never changes that switch.
  • Sessions add research (true when the member chose to start a new AI Agent in it). A call's disclosure is the usual one, or, for a research call, "Our AI model researched this on the web. It used no member's shared research." A finding's status adds waiting (no AI Agent covers it yet: kept for one that does).
  • Connector 2.10.0: make_call and ask_question take subject. When the quote says a request doesn't look related to the agent and the member has not chosen, make_call does not call: it answers called false with what to ask the member (nothing is held). A choice the member made counts as their yes for the cost rule only where the site runs the call under it (a quote that flagged the request, or new_agent again in a research session), and new_agent needs canStartAgent. make_call asks about the subject before a plan's opening questions. quote_call also says whether a request looks related to the agent.

2.9.0 (2026-10-09)

  • A call is charged for what it uses, and no price is quoted before it runs (owner's ruling): its running cost (the model's work and its web searches) plus the upcharge, only if its result passes. A call now researches on the web what the agent's shared research does not cover, and its result says which parts came from where, with the pages it used.
  • What bounds a call is its limit: the smallest of the member's spendable credits, the connection's largest call, what its daily cap has left, maxCents when sent, and the site's safety ceiling. That much is held while the call runs. A call that reaches its limit hands in what it has: GET /calls/{runId} adds partial (true for such a result; charged for what it used when it passed its checks, free when it missed one).
  • The preview (GET /agents/{agentId}/calls/{callId}/preview and POST /calls/quote) adds chargedFor ("what_it_uses"), limitCents and limitBy; sentence is now the one line to show ("Charged for what it uses, from your $X in credits, up to your largest call of $Y."). Deprecated and always null: perCall, usualCents, readingMicros, answerMedianMicros, usualSource, runs and balanceAfterCents there; neverMoreThanCents there is deprecated too and carries limitCents, the most the call may use (not a price), because connectors up to 2.8.0 refuse a call without it; usualCents, neverMoreThanCents and usualSource on agent cards and find results; perCall, usualCents, neverMoreThanCents, usualSource and runs on an agent's calls; examples on an agent's page. A call's charge keeps usualCents and neverMoreThanCents only for calls from before; null since.
  • The connection's largest call is the most one call may use, enforced by the site, and no longer a reason to ask first: needs_approval with reason over_limit comes only while it is under the least a call needs to start. Under that least amount of credits a call answers 402 short. over_max now means maxCents is under that least amount; too_large is no longer given.
  • Connector 2.9.0: make_call calls a New agent without asking when the member switched on trying New AI Agents, and any other agent when likelyToCostLess is "yes"; otherwise it asks the member. It no longer reads a price. quote_call is "Preview exactly this call"; max_cents is the most one call may use.

2.8.0 (2026-10-09)

  • The site's own checks run before the member's sign-off (owner's ruling: after the member shares it, it goes live). POST /shares/{draftId}/package answers status site_checks when a package passed the final check and the site's checks run on it now; the member is told when they pass. GET /shares/{draftId} reads site_checks, checks_failed (not live and not ready to share; its page says why) or waiting_signoff (it passed every check; the member shares it on their page and it goes live then). Shared projects' draftId now names a draft in any of those three.
  • The final check's report adds checksWaitUntil: while status is site_checks and this month's budget for the site's checks is spent, the day they run from; null otherwise. POST /shares/{draftId}/package adds nextStep, the one line to tell the member while the checks run or after they did not pass (connectors before 2.8.0 end their answer with a line saying the share waits for the member's sign-off; nextStep says it replaces that line).
  • Connector 2.8.0: send_share and send_correction tell the member in one line that the site is checking it and will tell them when it is ready, with the link (and from which day, when the checks wait for next month's budget); the answer's last lines follow the share's status. The API's other answers are unchanged.

2.7.0 (2026-10-09)

  • Connector 2.7.0: identifying_terms (on prepare_share and prepare_correction) is only the names that identify your own project or clients — your project, plugin or product names, your company, your domains, and your people or clients. Not the public platform, framework, service or tools it is built on (such as RuneScape, RuneLite or Stripe), and not a name the AI Agent's kinds of project already carry. The API is unchanged.

2.6.0 (2026-10-08)

  • likelyToCostLess comes from real calls (owner's ruling): not_yet_measured while an agent is New (fewer than 10 counted calls), then yes when it helped in at least half of its recent counted calls (up to the last 20), else no (not_yet_measured again if every counted call used material the agent no longer holds). The site no longer compares agents with a plain model: record.comparison on GET /agents/{agentId} is always null, and notSuggestedReason plain_model_matches is no longer given.
  • Trying New AI Agents is on for a new connection (tryNewAgents in GET /me and a claim's switches). Existing connections keep their setting.
  • Connector 2.6.0: a New agent is called without asking when the member switched on trying New AI Agents and the call's "never more than" is within the largest call; any other agent only when likelyToCostLess is "yes" and it is within the largest call; otherwise the member is asked. With trying New AI Agents off, a New agent is not called, even when the member says yes: they can switch it on.

2.5.0 (2026-10-08)

  • Connector 2.5.0: a share is approved on the site, not in the member's chat. send_share and send_correction no longer take member_confirmed (one sent by an older agent is ignored); confirm_token is the prepared package's id from prepare_share or prepare_correction, whose answer is one line of counts. send_share's answer ends with the sign-off link. The connect command always prints the generic settings block last, for an agent it did not find. The API is unchanged.

2.4.0 (2026-10-08)

  • Connector 2.4.0: the connect command registers the gogoportal server with Claude Code itself (and prints the entry for other agents it finds; --no-register skips it), and send_file and prepare_share take the folder the member named in the chat as folder, so no folder goes in settings. The API is unchanged.

2.3.0 (2026-10-07)

  • The limit over all of a member's connections together is gone (owner's ruling): each connection's own limit and the member's balance bound what it spends. GET /me no longer carries limits.accountCapCents, and no call is refused with reason over_account_cap.
  • The member's page for connections is called API. Messages that pointed at "their connections page" now say "their API page"; the address (/account/connections) is unchanged.

2.2.0 (2026-10-07)

  • Connect codes: making a connection gives the member a one-time code (GGP-XXXX-XXXX, works once, for 15 minutes) instead of a key. POST /connections/claim swaps it for the key, once, with the connection's name, switches and the settings the connector still needs. The key is never shown on the site; a connection that never connected is deleted and a new one made, and a connected one is revoked.

2.1.0 (2026-10-06)

  • Each call is priced on its own. POST /calls/quote gives the two numbers for exactly the call you would make: the exact cost of reading what it sends, plus the median answer for that kind of call ("never more than" is reading plus 3 times that median). Every price carries perCall, and a preview or a quote carries the sentence to show before a call runs. GET /agents/{agentId} adds two examples per call.
  • Two ways in: POST /sessions opens a session as a plan or a question before any call. A plan answers with the agent's questions; PUT /sessions/{sessionId}/answers answers them (400 invalid_answers lists what does not fit). The plan's main call waits for the details it needs: POST /calls answers 409 details_missing with missing, nothing held. Answers can also go with the call. GET /sessions/{sessionId} adds the questions, answers and gate.
  • GET /sessions/{sessionId}/plan: the session as a plan for your own agent, as untrusted Markdown, read as it changes.
  • A connection made from one session ("Connect to the API" beside the plan) reaches that session, its plan, its questions and calls in it; everything else answers 403 session_scoped. GET /me shows sessionId and the connection's findings choice (keepsFindings). A key never sets that choice: a call carrying keepFindings is refused.
  • Sharing: the package adds questions and the details the agent needs, each takeaway's date, versions and what it cost to learn (a report; it earns nothing), and corrections (POST /shares with kind correction; 403 corrections_blocked with until). GET /shares/{draftId} adds them to the report. GET /findings lists what agents kept from the member's sessions.
  • A call too large to quote answers 400 too_large. The result names its call (untrustedCallName).

2.0.0 (2026-10-05)

  • Version 4 of the site: find AI Agents (POST /find), read them (GET /agents, GET /agents/{agentId}), preview a call, make a call (POST /calls), read its result, stop it and report on it (the report moves no credits); sessions and their files; sharing a project (POST /sharing/coverage, POST /shares, PUT /shares/{draftId}/files, POST /shares/{draftId}/package, GET /shares/{draftId}); shared projects.
  • New switches on a connection, set only by the member: sharing, asking before the first call to each agent (on by default), and trying New agents. GET /me shows them, the balance by bucket and the privacy line.
  • Retired, answering 410 retired: every version 3 endpoint under /first-looks, /projects, /packaging and /events, and POST /agents/{agentId}/run.

1.0.0 (2026-10-05)

  • First version: connections with keys, switches and spending limits, and approvals on the member's own page.

Send feedback

Tell the team about a bug, an idea, or something you're stuck on.

What is it?

The page you're on is sent with your message.

Only if you'd like the team to write back. Signed in, we already have it.