{"openapi":"3.1.1","info":{"title":"MyLegend public agent API","version":"1.0.0","description":"Resolve a published person, read their card and ask about owner-approved public information. Publication is not independent verification. No private records or delegated actions. Search and answers are not cached. Only public questions belong in GET URLs."},"servers":[{"url":"https://mylegend.id"}],"security":[],"externalDocs":{"url":"https://mylegend.id/connect","description":"Browser cards, HTTP and MCP connection options"},"paths":{"/api/people":{"get":{"operationId":"findPublicPerson","summary":"Find published profiles by name or organisation","description":"At most ten matches. Compare returned organisation and location before choosing; never silently select an ambiguous namesake. Search fields are name, headline, job title and organisation, not location.","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":120},"example":"Danny Griffin"}],"responses":{"200":{"description":"An object with query and people. Each match has slug, approved identity context, profileUrl, cardUrl, dataUrl, cardDataUrl, askUrl, publishedAt and verification.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing, duplicate or invalid input."},"404":{"description":"No published profile found."},"429":{"description":"Public access limit; respect the Retry-After header."},"503":{"description":"Public service temporarily unavailable."}}}},"/api/people/{slug}":{"get":{"operationId":"getPublicProfile","summary":"Read a person's approved public profile","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"example":"danny-griffin"}],"responses":{"200":{"description":"Approved profile, provenance, revision and discovery links.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing, duplicate or invalid input."},"404":{"description":"No published profile found."},"429":{"description":"Public access limit; respect the Retry-After header."},"503":{"description":"Public service temporarily unavailable."}}}},"/api/people/{slug}/card":{"get":{"operationId":"getPublicCard","summary":"Read data for a host-generated profile card","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"example":"danny-griffin"}],"responses":{"200":{"description":"Versioned card data: portrait, optional gallery with captions and a section title/description, labelled links, roles, expertise, presentation, suggested questions, actions and provenance. Only show a live Ask control if the host can execute its advertised action.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing, duplicate or invalid input."},"404":{"description":"No published profile found."},"429":{"description":"Public access limit; respect the Retry-After header."},"503":{"description":"Public service temporarily unavailable."}}}},"/api/people/{slug}/ask":{"get":{"operationId":"browsePublicAnswer","summary":"Read a bounded public answer through a URL","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"example":"danny-griffin"},{"name":"question","in":"query","required":true,"schema":{"type":"string","minLength":3,"maxLength":500},"example":"What do you do?"},{"name":"previousQuestion","in":"query","schema":{"type":"string","maxLength":500}}],"responses":{"200":{"description":"The same answer contract as POST: name, answer, answered, profileUrl, revision, publishedAt, usedFactIds and note. answered=false means there is no approved answer or disclosure is refused.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing, duplicate or invalid input."},"404":{"description":"No published profile found."},"429":{"description":"Public access limit; respect the Retry-After header."},"503":{"description":"Public service temporarily unavailable."}}},"post":{"operationId":"askPublicPerson","summary":"Ask a bounded question without putting it in a URL","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","maxLength":80},"example":"danny-griffin"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["question"],"properties":{"question":{"type":"string","minLength":3,"maxLength":500},"previousQuestion":{"type":"string","maxLength":500}}},"example":{"question":"What do you do?"}}}},"responses":{"200":{"description":"A bounded, owner-approved answer using the same disclosure rules as MCP ask_person.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Missing, duplicate or invalid input."},"404":{"description":"No published profile found."},"429":{"description":"Public access limit; respect the Retry-After header."},"503":{"description":"Public service temporarily unavailable."}}}}}}