{"openapi":"3.1.0","info":{"title":"Proudli Public API","version":"v1","description":"Read-only access to public Proudli profiles. Proudli is an AI visibility platform for Australian real estate agents: professionals publish case studies of real completed work, and the people involved confirm it (\"vouches\"). AI visibility check reports are private and are not part of this API.\n\nEverything returned here is also shown on the public profile page. No API key is needed.\n\nFacts in case studies are reported by the professional. Vouch counts only include vouches the other person confirmed themselves.\n\nRate limit: 60 requests per 60 seconds per IP address. Responses may be cached for 300 seconds.\n\nProfiles are fetched by slug. To find slugs, read the sitemap or follow links from profile pages. When citing a profile, link to its `url`."},"externalDocs":{"description":"Developer documentation","url":"https://proudli.com.au/developers"},"servers":[{"url":"https://api.proudli.com.au"}],"paths":{"/v1/profiles/{slug}":{"get":{"operationId":"getProfile","summary":"Get a professional’s public profile","description":"Personal details, current agency, career history, years of experience, the Proudli score, vouch count, and summaries of recent case studies and knowledge posts. A renamed slug answers with a 308 redirect to the current one.","parameters":[{"name":"slug","in":"path","required":true,"description":"The profile slug: the last part of a profile URL, e.g. `jane-citizen` in `/pro/jane-citizen`.","schema":{"type":"string"}}],"responses":{"200":{"description":"The profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"308":{"description":"The profile was renamed. Follow the `Location` header."},"404":{"description":"No published profile has this slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/profiles/{slug}/case-studies":{"get":{"operationId":"listCaseStudies","summary":"List a professional’s case studies","description":"Summaries of every published case study, newest first.","parameters":[{"name":"slug","in":"path","required":true,"description":"The profile slug: the last part of a profile URL, e.g. `jane-citizen` in `/pro/jane-citizen`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"One page of case study summaries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaseStudyListResponse"}}}},"404":{"description":"No published profile has this slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/profiles/{slug}/posts":{"get":{"operationId":"listPosts","summary":"List a professional’s knowledge posts","description":"Summaries of every published knowledge post, newest first.","parameters":[{"name":"slug","in":"path","required":true,"description":"The profile slug: the last part of a profile URL, e.g. `jane-citizen` in `/pro/jane-citizen`.","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number, starting at 1.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"One page of post summaries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostListResponse"}}}},"404":{"description":"No published profile has this slug.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests. Wait and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/v1/openapi.json":{"get":{"operationId":"getOpenApiDocument","summary":"This document","responses":{"200":{"description":"The OpenAPI 3.1 document."}}}}},"components":{"schemas":{"ProfileResponse":{"type":"object","properties":{"apiVersion":{"type":"string","const":"v1"},"data":{"type":"object","properties":{"slug":{"type":"string","description":"The profile's identifier in URLs. It can change if renamed."},"url":{"type":"string","format":"uri","description":"The profile's public web page. Link here when citing the profile."},"markdownUrl":{"type":"string","format":"uri","description":"The same profile as Markdown."},"name":{"type":"string"},"headline":{"type":"string"},"bio":{"type":["string","null"]},"photoUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"profession":{"type":"object","properties":{"key":{"type":"string","description":"Stable identifier, e.g. \"real-estate.sales-agent\"."},"label":{"type":"string","description":"Human-readable role, e.g. \"Sales agent\"."}},"required":["key","label"],"additionalProperties":false},"yearsExperience":{"description":"Years working in the profession, as stated by the professional.","type":["number","null"]},"serviceAreas":{"type":"array","items":{"type":"string"},"description":"Suburbs or areas they work in."},"specialisations":{"type":"array","items":{"type":"string"}},"details":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false},"description":"Further profession-specific details shown on the profile, as label and value pairs."},"verified":{"type":"boolean","description":"Whether the profile carries Proudli's Verified badge."},"socialLinks":{"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["facebook","instagram","linkedin","tiktok","twitter","whatsapp"]},"url":{"type":"string","format":"uri"}},"required":["platform","url"],"additionalProperties":false}},"agency":{"anyOf":[{"type":"object","properties":{"name":{"type":"string","description":"The office or business the professional works at."},"brandName":{"description":"The agency brand or franchise group the office belongs to. Null for independents.","type":["string","null"]},"websiteUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}],"description":"The agency brand's website."},"logoUrl":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"address":{"anyOf":[{"type":"object","properties":{"formatted":{"type":"string"},"suburb":{"type":["string","null"]},"state":{"type":["string","null"]},"postcode":{"type":["string","null"]}},"required":["formatted","suburb","state","postcode"],"additionalProperties":false},{"type":"null"}],"description":"The office's address."},"title":{"type":"string","description":"The professional's job title there."},"since":{"type":"string","description":"When they started there. ISO 8601 date-time, UTC."}},"required":["name","brandName","websiteUrl","logoUrl","address","title","since"],"additionalProperties":false},{"type":"null"}],"description":"Where the professional works now. Null if they have no current agency."},"careerHistory":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"brandName":{"type":["string","null"]},"title":{"type":"string"},"startDate":{"type":"string","description":"ISO 8601 date-time, UTC."},"endDate":{"type":"string","description":"ISO 8601 date-time, UTC."}},"required":["name","brandName","title","startDate","endDate"],"additionalProperties":false},"description":"Past agencies, most recent first."},"metrics":{"type":"object","properties":{"proudliScore":{"description":"The Proudli score: points earned from published case studies, confirmed vouches, knowledge posts, profile completeness, shares and referrals. Recent work counts for more than old work, so the score can fall as well as rise. It has no fixed maximum, so it is not a rating out of 100. Null when the score is not shown publicly.","type":["number","null"]},"confirmedVouches":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"How many people (clients and colleagues) have confirmed this professional's work through Proudli. Each vouch is confirmed by the person themselves from their own email or phone."},"publishedCaseStudies":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"publishedPosts":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["proudliScore","confirmedVouches","publishedCaseStudies","publishedPosts"],"additionalProperties":false},"caseStudies":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"url":{"type":"string","format":"uri","description":"Web page listing every case study."},"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri","description":"The case study's public web page."},"markdownUrl":{"type":"string","format":"uri","description":"The same case study in full, as Markdown."},"kind":{"type":"string","description":"The type of job, e.g. \"sale\", \"auction\", \"off_market\"."},"headline":{"type":"string"},"outcome":{"description":"The result of the job, in the professional's own first-person words.","type":["string","null"]},"pullQuote":{"type":["string","null"]},"keyFacts":{"type":"array","items":{"type":"string"},"description":"Short facts about the job, as reported by the professional."},"location":{"description":"Where the property is: the street address only when the professional chose to show it, otherwise the suburb. Null when no property is linked.","type":["string","null"]},"publishedAt":{"type":"string","description":"ISO 8601 date-time, UTC."}},"required":["slug","url","markdownUrl","kind","headline","outcome","pullQuote","keyFacts","location","publishedAt"],"additionalProperties":false,"description":"A summary of one case study (a Proof Story): a completed job, explained by the professional who did it. Facts are reported by the professional."},"description":"The most recent case studies."}},"required":["total","url","items"],"additionalProperties":false,"description":"Use the case-studies endpoint for the full list."},"posts":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"url":{"type":"string","format":"uri","description":"Web page listing every knowledge post."},"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri","description":"The post's public web page."},"markdownUrl":{"type":"string","format":"uri","description":"The same post in full, as Markdown."},"title":{"type":"string"},"excerpt":{"type":["string","null"]},"topics":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","description":"ISO 8601 date-time, UTC."}},"required":["slug","url","markdownUrl","title","excerpt","topics","publishedAt"],"additionalProperties":false,"description":"A summary of one knowledge post: an article the professional wrote about their field."},"description":"The most recent posts."}},"required":["total","url","items"],"additionalProperties":false,"description":"Use the posts endpoint for the full list."},"vouchesUrl":{"type":"string","format":"uri","description":"Web page showing the vouches this professional has received."},"updatedAt":{"type":"string","description":"When the profile's visible content last changed. ISO 8601 date-time, UTC."}},"required":["slug","url","markdownUrl","name","headline","bio","photoUrl","profession","yearsExperience","serviceAreas","specialisations","details","verified","socialLinks","agency","careerHistory","metrics","caseStudies","posts","vouchesUrl","updatedAt"],"additionalProperties":false,"description":"A professional's public Proudli profile. Everything here is also shown on the profile's web page."}},"required":["apiVersion","data"],"additionalProperties":false},"CaseStudyListResponse":{"type":"object","properties":{"apiVersion":{"type":"string","const":"v1"},"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri","description":"The case study's public web page."},"markdownUrl":{"type":"string","format":"uri","description":"The same case study in full, as Markdown."},"kind":{"type":"string","description":"The type of job, e.g. \"sale\", \"auction\", \"off_market\"."},"headline":{"type":"string"},"outcome":{"description":"The result of the job, in the professional's own first-person words.","type":["string","null"]},"pullQuote":{"type":["string","null"]},"keyFacts":{"type":"array","items":{"type":"string"},"description":"Short facts about the job, as reported by the professional."},"location":{"description":"Where the property is: the street address only when the professional chose to show it, otherwise the suburb. Null when no property is linked.","type":["string","null"]},"publishedAt":{"type":"string","description":"ISO 8601 date-time, UTC."}},"required":["slug","url","markdownUrl","kind","headline","outcome","pullQuote","keyFacts","location","publishedAt"],"additionalProperties":false,"description":"A summary of one case study (a Proof Story): a completed job, explained by the professional who did it. Facts are reported by the professional."}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total items across all pages."},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"This page's number, starting at 1."},"pageSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total","page","pageSize"],"additionalProperties":false}},"required":["apiVersion","data"],"additionalProperties":false},"PostListResponse":{"type":"object","properties":{"apiVersion":{"type":"string","const":"v1"},"data":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri","description":"The post's public web page."},"markdownUrl":{"type":"string","format":"uri","description":"The same post in full, as Markdown."},"title":{"type":"string"},"excerpt":{"type":["string","null"]},"topics":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","description":"ISO 8601 date-time, UTC."}},"required":["slug","url","markdownUrl","title","excerpt","topics","publishedAt"],"additionalProperties":false,"description":"A summary of one knowledge post: an article the professional wrote about their field."}},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total items across all pages."},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"This page's number, starting at 1."},"pageSize":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["items","total","page","pageSize"],"additionalProperties":false}},"required":["apiVersion","data"],"additionalProperties":false},"Error":{"type":"object","properties":{"apiVersion":{"type":"string","const":"v1"},"error":{"type":"object","properties":{"code":{"type":"string","enum":["not_found","invalid_request","rate_limited"]},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false}},"required":["apiVersion","error"],"additionalProperties":false}}}}