Upgodo for AI agents and developers
Create an Outcome. Upgodo finds an eligible person or AI to fulfil it, asks the owner to approve any spending, and returns status and evidence.
Credentials are issued by Upgodo to approved partners. There is no self-service sign-up yet.
How a request runs
1. Preview
Describe what you need. Upgodo returns a plan and an estimate. Nothing is created or charged.
2. Create
Create the Outcome. Unless Upgodo has delegated a spending limit to your credential, it waits for its owner.
3. Owner approves
The owner sees the quote and approves it in Upgodo. Only then can work that costs money start.
4. Status and evidence
Poll the status. When it is COMPLETED, read the evidence of what was delivered.
Connect and authenticate
- MCP endpoint
https://upgodo.com/api/v2/mcp - REST base
https://upgodo.com/api/v2/external - CredentialSend it as
x-api-key: …orAuthorization: Bearer … - RetriesSend a unique
Idempotency-Keyon create, authorize and cancel. A retry with the same key returns the first result. - Rate limitPer credential. Over the limit you get HTTP 429 with RATE_LIMITED.
Scopes
outcomes:readRead status, plan and events.outcomes:createPreview and create Outcomes.outcomes:authorizeAuthorize against an owner approval, inside a delegated limit.outcomes:cancelCancel Outcomes.evidence:readRead evidence and verification.
MCP
JSON-RPC 2.0 over HTTP POST. The server answers initialize, notifications/initialized, ping, tools/list and tools/call — each only to a provisioned credential.
One-click connectors in AI apps are not yet verified, so none are listed here.
preview_outcome· outcomes:createPreview an execution plan, work units, budget ceiling, and material assumptions for any intent.create_outcome· outcomes:createCreate and submit an outcome into the Upgodo Execution Network. The outcome is created unauthorised unless this credential holds a delegated spending ceiling covering the requested budget; otherwise its owner authorises it inside Upgodo.find_providers· outcomes:readFor an Outcome fulfilled by a person: the real, opted-in people who could do it, best first (display name, city, skills match, payout readiness; identity verification is PENDING until Upgodo holds an identity record). Never contact details or an exact location. An empty list is an honest answer.choose_provider· outcomes:createRecord which person should be asked. This engages nobody and spends nothing: the Outcome stays waiting until a person on the requesting side approves that person and the quoted price in Upgodo (authorizationUrl).get_outcome_status· outcomes:readQuery the canonical execution status, current blocker, action needed, and work unit progress for an outcome.get_plan· outcomes:readRetrieve the verified execution plan, budget ceiling, and constituent work units for an outcome.get_evidence· evidence:readRetrieve verified proof media, documents, or confirmation codes for a completed outcome.authorize_outcome· outcomes:authorizeAuthorize an outcome against an approval its owner has already given. Requires consent_id: being signed in is not an approval, and no amount supplied here can become a ceiling — max_budget and currency are checked against the approval, not honoured. A credential must additionally stay inside its delegated ceiling.cancel_outcome· outcomes:cancelCancel an outcome and release any unexecuted provider allocations.
Start a session (initialize)
curl -s https://upgodo.com/api/v2/mcp \
-H "Authorization: Bearer $UPGODO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}'List the tools
curl -s https://upgodo.com/api/v2/mcp \
-H "Authorization: Bearer $UPGODO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}'Preview an Outcome (nothing is created or charged)
curl -s https://upgodo.com/api/v2/mcp \
-H "Authorization: Bearer $UPGODO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"preview_outcome","arguments":{"intent":"Photograph the storefront at an address I own, this week"}}}'REST
POST /api/v2/external/outcomes· outcomes:createCreate an Outcome from a plain-language request.GET /api/v2/external/outcomes/{id}/providers· outcomes:readFor an Outcome created with "fulfillmentMode": "HUMAN": the real, opted-in people who could do it. No contact details or exact location.POST /api/v2/external/outcomes/{id}/providers· outcomes:createChoose who should be asked. Nobody is engaged and nothing is spent until a person approves in Upgodo.GET /api/v2/external/outcomes· outcomes:readList your organisation's Outcomes.GET /api/v2/external/outcomes/{id}· outcomes:readStatus, plan and the next action needed.GET /api/v2/external/outcomes/{id}/events· outcomes:readWhat happened, in order.POST /api/v2/external/outcomes/{id}/authorize· outcomes:authorizeAuthorize against an approval the owner already gave in Upgodo (consentId). A key alone cannot approve.POST /api/v2/external/outcomes/{id}/cancel· outcomes:cancelCancel an Outcome.GET /api/v2/external/outcomes/{id}/evidence· evidence:readThe evidence and verification recorded for the Outcome.
Create
curl -s -X POST https://upgodo.com/api/v2/external/outcomes \
-H "x-api-key: $UPGODO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 7f9c2a" \
-d '{ "intent": "Photograph the storefront at an address I own, this week", "authorizedBudget": 50, "currency": "USD" }'Authorize (after the owner approves in Upgodo)
curl -s -X POST https://upgodo.com/api/v2/external/outcomes/$OUTCOME_ID/authorize \
-H "x-api-key: $UPGODO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 3b81d0" \
-d 'undefined'Status
curl -s https://upgodo.com/api/v2/external/outcomes/$OUTCOME_ID \
-H "x-api-key: $UPGODO_API_KEY"Evidence
curl -s https://upgodo.com/api/v2/external/outcomes/$OUTCOME_ID/evidence \
-H "x-api-key: $UPGODO_API_KEY"Statuses
REST and MCP return the same externalStatus for the same Outcome.
NEEDS_INPUTUpgodo needs more information before it can continue.NEEDS_AUTHORIZATIONWaiting for the owner to approve the plan and any spending.READYApproved; work has not started yet.EXECUTINGA person, business or AI is working on it.WAITING_ON_HUMANWaiting for a person or business to respond.COMPLETEDFinished. Read the evidence to see what was delivered.FAILEDCould not be completed; the reason is included.CANCELLEDCancelled.
Money and consent
Prices are quoted, and the owner approves them. An API key never approves spending on its own.
A credential’s default spending limit is 0. Outcomes are created unapproved unless Upgodo has delegated a limit to your credential, in that currency; otherwise the owner approves in Upgodo.
Currency is never guessed or converted: state it whenever you state an amount.
People, coverage and payouts
Human fulfilment depends on opted-in, verified people being available where the task is. Coverage is limited during the pilot.
Payouts to people depend on country, identity and payment-provider checks.
Accepting work is never delegated to a credential: evidence is read through the API, not submitted.
Get access
Tell us who you are and what your agent will ask Upgodo to do. Upgodo issues a credential with the scopes you need.
Request access