{"id":41097438,"url":"https://github.com/goperigon/perigon-python","last_synced_at":"2026-01-22T14:59:51.578Z","repository":{"id":291186182,"uuid":"976844895","full_name":"goperigon/perigon-python","owner":"goperigon","description":"Perigon Python SDK generated with openapi-generator","archived":false,"fork":false,"pushed_at":"2025-10-15T16:26:14.000Z","size":301,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-16T12:43:38.418Z","etag":null,"topics":["news","news-api","perigon","python","sdk","sdk-python"],"latest_commit_sha":null,"homepage":"https://docs.perigon.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/goperigon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-02T21:24:26.000Z","updated_at":"2025-10-15T16:23:24.000Z","dependencies_parsed_at":"2025-09-26T17:15:59.245Z","dependency_job_id":"55f7352f-54db-46b3-8f67-4a4b241d6a4d","html_url":"https://github.com/goperigon/perigon-python","commit_stats":null,"previous_names":["goperigon/perigon-python"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/goperigon/perigon-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goperigon%2Fperigon-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goperigon%2Fperigon-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goperigon%2Fperigon-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goperigon%2Fperigon-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/goperigon","download_url":"https://codeload.github.com/goperigon/perigon-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/goperigon%2Fperigon-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28664826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T14:01:31.714Z","status":"ssl_error","status_checked_at":"2026-01-22T13:59:23.143Z","response_time":144,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["news","news-api","perigon","python","sdk","sdk-python"],"created_at":"2026-01-22T14:59:50.548Z","updated_at":"2026-01-22T14:59:51.570Z","avatar_url":"https://github.com/goperigon.png","language":"Python","readme":"\u003c!-- ----------  Header  ---------- --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://goperigon.com/favicon.ico\" width=\"120\" alt=\"Perigon logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003ePerigon\u0026nbsp;Python\u0026nbsp;SDK\u003c/h1\u003e\n\u003cp align=\"center\"\u003ePython client for the \u003cstrong\u003ePerigon\u0026nbsp;API\u003c/strong\u003e\u003c/p\u003e\n\n\u003c!-- ----------  Badges  ---------- --\u003e\n\u003cp align=\"center\"\u003e\n  \u003c!-- PyPI --\u003e\n  \u003ca href=\"https://pypi.org/project/perigon\"\u003e\n    \u003cimg src=\"https://img.shields.io/pypi/v/perigon?style=for-the-badge\" alt=\"pypi version\"\u003e\n  \u003c/a\u003e\n  \u003c!-- Python versions --\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/pyversions/perigon?style=for-the-badge\" alt=\"python versions\"\u003e\n  \u003c!-- downloads --\u003e\n  \u003cimg src=\"https://img.shields.io/pypi/dm/perigon?style=for-the-badge\" alt=\"pypi downloads\"\u003e\n  \u003c!-- tests --\u003e\n  \u003ca href=\"https://github.com/goperigon/perigon-python/actions/workflows/test.yml\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/goperigon/perigon-python/test.yml?label=test%20%E2%9C%85\u0026style=for-the-badge\" alt=\"tests status\"\u003e\n  \u003c/a\u003e\n  \u003c!-- docs --\u003e\n  \u003ca href=\"https://docs.perigon.io\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/docs-perigon.io-informational?style=for-the-badge\u0026logo=readthedocs\" alt=\"documentation\"\u003e\n  \u003c/a\u003e\n  \u003c!-- license --\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/goperigon/perigon-python?style=for-the-badge\" alt=\"license\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\nA modern, fully‑typed Python SDK for the Perigon API, generated from the official OpenAPI specification.  \nWorks in **CPython 3.8+**, **PyPy**, serverless runtimes, notebooks, and async frameworks.\n\n## Table\u0026nbsp;of\u0026nbsp;Contents\n\u003c!-- START doctoc --\u003e\n\u003c!-- END doctoc --\u003e\n\n---\n\n## ✨ Features\n\n- **Type‑hinted** request/response models powered by Pydantic\n- **Async and sync support** - choose the right approach for your application\n- Ships with **PEP 561 type hints** for excellent IDE integration\n- Generated directly from \u003chttps://docs.perigon.io\u003e, so it's always in sync\n\n---\n\n## 📦 Installation\n\n```bash\npip install perigon\n# poetry add perigon\n# pipx install perigon\n```\n\n---\n\n## 🚀 Quick start\n\n### 1. Instantiate the client\n\n```python\nfrom perigon import V1Api, ApiClient\n\n# Create client with API key\napi = V1Api(ApiClient(api_key=\"YOUR_API_KEY\"))\n\n# Alternative: environment variable or callable\n# api = V1Api(ApiClient(api_key=os.environ[\"PERIGON_API_KEY\"]))\n# api = V1Api(ApiClient(api_key=lambda: get_api_key_from_vault()))\n```\n\n### 2. Make calls\n\n```python\n# 🔍 Search recent news articles (sync)\narticles = api.search_articles(q=\"artificial intelligence\", size=5)\nprint(articles.num_results, articles.articles[0].title)\n\n# 👤 Look up a journalist by ID (sync)\njournalist = api.get_journalist_by_id(id=\"123456\")\nprint(journalist.name)\n\n# 🔄 Use async variant for async applications\nimport asyncio\n\nasync def fetch_data():\n    # Search articles asynchronously \n    articles = await api.search_articles_async(q=\"technology\", size=5)\n    \n    # Look up journalist asynchronously\n    journalist = await api.get_journalist_by_id_async(id=\"123456\")\n    \n    return articles, journalist\n\n# Run in async context\narticles, journalist = asyncio.run(fetch_data())\n```\n\n\u003e All methods return **typed objects** with full IDE autocompletion support.\n\n---\n\n## 🧑‍💻 Endpoint examples\n\n### Articles – search and filter news (`/v1/all`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/overview](https://docs.perigon.io/docs/overview)\n\n```python\n# Simple query\narticles = api.search_articles(q=\"technology\", size=5)\n\n# With date range\narticles = api.search_articles(\n    q=\"business\", \n    var_from=\"2025-04-01\",  # Note: 'from' is a reserved keyword in Python\n    to=\"2025-04-08\"\n)\n\n# Restrict to specific sources\narticles = api.search_articles(source=[\"nytimes.com\"])\n```\n\n### Companies – fetch structured company data (`/v1/companies`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/company-data](https://docs.perigon.io/docs/company-data)\n\n```python\nresults = api.search_companies(name=\"Apple\", size=5)\n```\n\n### Journalists – search and detail look‑up (`/v1/journalists`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/journalist-data](https://docs.perigon.io/docs/journalist-data)\n\n```python\n# Search for journalists\nresults = api.search_journalists1(name=\"Kevin\", size=1)\n\n# Get detailed information\njournalist = api.get_journalist_by_id(id=results.journalists[0].id)\n```\n\n### Stories – discover related article clusters (`/v1/stories`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/stories-overview](https://docs.perigon.io/docs/stories-overview)\n\n```python\nstories = api.search_stories(q=\"climate change\", size=5)\n```\n\n### Vector search – semantic retrieval (`/v1/vector`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/vector-endpoint](https://docs.perigon.io/docs/vector-endpoint)\n\n```python\nfrom perigon.models.article_search_params import ArticleSearchParams\n\nresults = api.vector_search_articles(\n    article_search_params=ArticleSearchParams(\n        prompt=\"Latest advancements in artificial intelligence\",\n        size=5\n    )\n)\n```\n\n### Summarizer – generate an instant summary (`/v1/summarizer`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/search-summarizer](https://docs.perigon.io/docs/search-summarizer)\n\n```python\nfrom perigon.models.summary_body import SummaryBody\n\nsummary = api.search_summarizer(\n    summary_body=SummaryBody(prompt=\"Key developments\"),\n    q=\"renewable energy\", \n    size=10\n).summary\n\nprint(summary)\n```\n\n### Topics – explore taxonomy (`/v1/topics`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/topics](https://docs.perigon.io/docs/topics)\n\n```python\ntopics = api.search_topics(size=10)\n```\n\n### Wikipedia – search and filter pages (`/v1/wikipedia`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/wikipedia](https://docs.perigon.io/docs/wikipedia)\n\n```python\n# Search Wikipedia pages\nwikipedia_result = api.search_wikipedia(\n    q=\"machine learning\",\n    size=3,\n    sort_by=\"relevance\"\n)\n\n# Filter by specific criteria\nwikipedia_result = api.search_wikipedia(\n    q=\"artificial intelligence\",\n    pageviews_from=100,  # Only popular pages\n)\n```\n\n### Wikipedia vector search – semantic retrieval (`/v1/vector/wikipedia`)\u003cbr\u003e\n\n**Docs →** [https://docs.perigon.io/docs/vector-wikipedia](https://docs.perigon.io/docs/vector-wikipedia)\n\n```python\nfrom perigon.models.wikipedia_search_params import WikipediaSearchParams\n\nresults = api.vector_search_wikipedia(\n    wikipedia_search_params=WikipediaSearchParams(\n        prompt=\"artificial intelligence and neural networks in computing\",\n        size=3,\n        pageviews_from=100\n    )\n)\n```\n\n| Action | Code Example |\n| --- | --- |\n| Filter by source | `api.search_articles(source=[\"nytimes.com\"])` |\n| Limit by date range | `api.search_articles(q=\"business\", var_from=\"2025-04-01\", to=\"2025-04-08\")` |\n| Company lookup | `api.search_companies(name=\"Apple\", size=5)` |\n| Summarize any query | `api.search_summarizer(summary_body=SummaryBody(prompt=\"Key points\"), q=\"renewable energy\", size=20)` |\n| Semantic / vector search | `api.vector_search_articles(article_search_params=ArticleSearchParams(prompt=\"advancements in AI\", size=5))` |\n| Retrieve available taxonomic topics | `api.search_topics(size=10)` |\n| Search Wikipedia pages | `api.search_wikipedia(q=\"machine learning\", size=3, sort_by=\"relevance\")` |\n| Wikipedia semantic search | `api.vector_search_wikipedia(wikipedia_search_params=WikipediaSearchParams(prompt=\"artificial intelligence\", size=3))` |\n\n---\n\n## 🔄 Async Support\n\nAll methods have async counterparts with the `_async` suffix:\n\n```python\nimport asyncio\nfrom perigon import V1Api, ApiClient\n\nasync def main():\n    api = V1Api(ApiClient(api_key=\"YOUR_API_KEY\"))\n    \n    # Concurrent API calls\n    articles_task = api.search_articles_async(q=\"technology\", size=5)\n    journalist_task = api.get_journalist_by_id_async(id=\"123456\")\n    \n    # Gather results\n    articles, journalist = await asyncio.gather(articles_task, journalist_task)\n    \n    return articles, journalist\n\n# Run the async function\narticles, journalist = asyncio.run(main())\n```\n\n---\n\n## 🪪 License\n\nMIT © Perigon","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoperigon%2Fperigon-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoperigon%2Fperigon-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoperigon%2Fperigon-python/lists"}