Create ideas

Appends conception entries.

POST /v1/patent/ideas

Addresshttps://api.hanzo.ai/v1/patent/ideas
MethodPOST
Operationpost_patent_ideas
AuthAuthorization: Bearer $HANZO_API_KEY

Appends conception entries. A write states the idea and nothing else: the project, the author, the clock, the append order and the content digest are all the server's, and a correction appends a version rather than editing the entry — which is the property that makes any of it usable as evidence at all.

Request

24 fields, body application/json (required).

FieldInTypeRequiredDescription
ideasbodypatent.PatentIdea[]—Ideas are the entries to append, at most 2000.
ideas[].alternativesbodypatent.PatentRejectedAlternative[]—Alternatives are the routes considered and rejected, each with its reason.
ideas[].alternatives[].optionbodystring—Option is the approach, in the author's words.
ideas[].alternatives[].reasonbodystring—Reason is why it was rejected — the constraint or failure that decided it.
ideas[].authored_bybodystring—AuthoredBy is the validated principal who recorded this version — an IAM subject, never a body field.
ideas[].canonicalbodyboolean—Canonical is DERIVED on read: a version is canonical when it is the latest-appended non-retracted version of its id.
ideas[].content_hashbodystring—ContentHash is the SERVER's digest of the recorded content and this version's identity.
ideas[].idbodystring—ID is the entry's stable id, the key its versions accrue under: lowercase, terse, and named for the idea rather than the file — latency-aware-request-routing.
ideas[].kindbodystring—Kind is what kind of conception this is: problem, alternative, architecture, mechanism, decision or rejection.
ideas[].notesbodystring—Notes is anything a later reader needs that the fields above cannot carry.
ideas[].prior_artbodystring—PriorArt is what the author knows already existed, named as the author knows it.
ideas[].problembodystring—Problem is the technical problem being solved, and why the existing approaches fail at it.
ideas[].projectbodystring—Project is the sub-scope inside the org this entry is filed under.
ideas[].recorded_atbodystring—RecordedAt is when this store accepted the version, RFC3339, from the server clock.
ideas[].revisionbodystring—Revision is the producer's declared kind of this version: original, corrected or retracted.
ideas[].seqbodyinteger (int64)—Seq is this version's place in the store's append order.
ideas[].signaturebodypatent.PatentSignature—
ideas[].signature.algobodystring—Algo names the scheme, e.g. ed25519.
ideas[].signature.key_idbodystring—KeyID names the key that signed.
ideas[].signature.valuebodystring—Value is the signature, base64.
ideas[].signature.verifiedbodyboolean—Verified is the SERVER's answer to whether it checked this signature.
ideas[].statementbodystring—Statement is the operative idea in the author's own prose — definite enough that a reader could implement it from this alone.
ideas[].titlebodystring—Title is the one-line name of the entry.
ideas[].visibilitybodystring—Visibility is private, org or public.

Response

StatusBodyMeaning
200patent.patentWriteOutok
defaultproblem-detailsrefused

200 body — 3 fields.

FieldInTypeAlwaysDescription
canonicalbodyinteger (int64)—Canonical is how many entries the org's log now holds for this kind.
projectbodystring—Project is the scope the batch was filed under, as the server decided it.
recordedbodyinteger (int64)—Recorded is how many new versions this call appended.

Failure carries the platform error shape — see Errors.

Examples

hanzo patent ideas create
import { Configuration, PatentApi } from 'hanzoai';

const api = new PatentApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postPatentIdeas({ ideas: [{"alternatives":[{"option":null,"reason":null}],"authored_by":"<authored_by>","canonical":false,"content_hash":"<content_hash>"}] });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import PatentApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = PatentApi(client).post_patent_ideas(ideas=[{"alternatives":[{"option":null,"reason":null}],"authored_by":"<authored_by>","canonical":false,"content_hash":"<content_hash>"}])
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.PatentAPI.PostPatentIdeas(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, patent_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = patent_api::post_patent_ideas(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.PatentApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new PatentApi(client).postPatentIdeas();

The method above is the one at the current release of the document. [email protected] (npm) and [email protected] (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. SDKs →

curl -X POST https://api.hanzo.ai/v1/patent/ideas \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "ideas": [
         {
           "alternatives": [
             {
               "option": null,
               "reason": null
             }
           ],
           "authored_by": "<authored_by>",
           "canonical": false,
           "content_hash": "<content_hash>"
         }
       ]
     }'

MCP reaches patent through the patent tool, which names its 12 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_patent_approvals"
         }
       }
     }'

Patent API · All Hanzo APIs · Interactive reference

Was this page useful?
Broken link or missing step? Drop it in #docs on Discord or open a PR.