{"id":46781,"date":"2026-09-07T08:13:00","date_gmt":"2026-09-07T06:13:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=46781"},"modified":"2026-09-04T16:16:11","modified_gmt":"2026-09-04T14:16:11","slug":"the-goldengate-rest-api-python-client-is-now-on-pip","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/","title":{"rendered":"The GoldenGate REST API Python client is now on pip"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In a <a href=\"https:\/\/www.dbi-services.com\/blog\/production-ready-goldengate-rest-client-in-python\/\" target=\"_blank\" rel=\"noopener noreferrer\">previous post<\/a>, I shared the <code>OGGRestAPI<\/code> Python client I built for the GoldenGate REST API. Since then, I kept using it on production deployments, fixing it and adding new features along the way. It felt like the right time to stop asking people to copy a <code>.py<\/code> file into their project, so I published it to PyPI. You can now install it with a single command.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ pip install oggrestapi\nCollecting oggrestapi\n  Using cached oggrestapi-1.0.2-py3-none-any.whl (46 kB)\nCollecting urllib3\n  Using cached urllib3-2.6.3-py3-none-any.whl (131 kB)\nCollecting requests\n  Using cached requests-2.32.5-py3-none-any.whl (64 kB)\nCollecting charset_normalizer&lt;4,&gt;=2\n  Using cached charset_normalizer-3.5.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (262 kB)\nCollecting certifi&gt;=2017.4.17\n  Using cached certifi-2026.7.22-py3-none-any.whl (136 kB)\nCollecting idna&lt;4,&gt;=2.5\n  Using cached idna-3.19-py3-none-any.whl (68 kB)\nInstalling collected packages: urllib3, idna, charset-normalizer, certifi, requests, oggrestapi\nSuccessfully installed certifi-2026.7.22 charset-normalizer-3.5.1 idna-3.19 oggrestapi-1.0.2 requests-2.32.5 urllib3-2.6.3<\/code><\/pre>\n\n\n\n<h2 id=\"one-package-for-every-goldengate-version\" class=\"wp-block-heading\">One package for every GoldenGate version<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest change is not the packaging itself, though. Until now, the repository held one <code>oggrestapi.py<\/code> per GoldenGate version (19c, 23ai, 26ai), each generated separately from that version\u2019s <code>swagger.json<\/code>. But after thorough tests, I realized that most of the differences came from typos or inconsistencies in the swaggers with no functional differences in the API. The PyPI package now merges all of that into a single <code>OGGRestAPI<\/code> class that works against any of these versions. You can import the same class regardless of the GoldenGate release you are working with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from oggrestapi import OGGRestAPI<\/code><\/pre>\n\n\n\n<h2 id=\"what-changed-since-the-last-post\" class=\"wp-block-heading\">What changed since the last post<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A few things arrived in the client between the previous post and this release:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Auto-discovery mode<\/strong> &#8211; A new <code>auto_discovery<\/code> option lets the client reach every microservice of a deployment (Administration Service, Distribution Service, etc.) from a single connection to the Service Manager, without setting up an NGINX reverse proxy first. The client looks up each service\u2019s own port the first time it is needed.<\/li>\n\n\n\n<li><strong>New methods<\/strong> &#8211; <code>restart_deployment<\/code>, <code>restart_extract<\/code>, <code>restart_replicat<\/code>, <code>restart_service<\/code> and <code>restart_all_extracts<\/code> \/ <code>restart_all_replicats<\/code> methods, on top of the existing start\/stop ones. <code>kill*<\/code> methods were also added for extracts and replicats.<\/li>\n\n\n\n<li><strong>Context manager support<\/strong> &#8211; <code>with OGGRestAPI(...) as ogg_client:<\/code> now closes the underlying HTTP session for you.<\/li>\n\n\n\n<li><strong>Deployment patching helpers<\/strong> &#8211; Useful when patching the OGG home of a deployment (or every deployment at once) and optionally restart it, with or without an NGINX reverse proxy.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"auto-discovery-in-practice\" class=\"wp-block-heading\">Auto-discovery in practice<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pointing the client at the Service Manager with <code>auto_discovery=True<\/code> and a deployment name is enough to access the administration service, for instance, without ever touching a reverse proxy configuration. Of course, this only <strong>works if the credentials are the same<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; ogg_client = OGGRestAPI(\n...     url=\"https:\/\/vmogg:7809\",  # Port to the Service Manager\n...     username=\"ogg\",\n...     password=\"ogg\",\n...     deployment=\"ogg_test_01\",\n...     auto_discovery=True\n... )\n&gt;&gt;&gt; ogg_client.list_extracts()  # Administration Service endpoint. Would normally fail if queried against the Service Manager's port.\n&#091;{'name': 'EPARTV2', 'status': 'running'}, {'name': 'EVTEXT', 'status': 'running'}, {'name': 'EXTC2', 'status': 'stopped'}, {'name': 'EXTCX', 'status': 'stopped'}, {'name': 'EXTCZ', 'status': 'stopped'}, {'name': 'EXTDB04', 'status': 'running'}, {'name': 'EXTI', 'status': 'stopped'}, {'name': 'EXTPL', 'status': 'stopped'}, {'name': 'EXTPP', 'status': 'running'}, {'name': 'EXTPT', 'status': 'running'}]\n&gt;&gt;&gt; ogg_client.list_replicats()\n&#091;{'name': 'REPC2', 'status': 'running'}, {'name': 'REPCX', 'status': 'running'}, {'name': 'REPCZ', 'status': 'running'}, {'name': 'REPPL', 'status': 'running'}, {'name': 'REPPT', 'status': 'running'}]<\/code><\/pre>\n\n\n\n<h2 id=\"where-to-find-it\" class=\"wp-block-heading\">Where to find it<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The package is on <a href=\"https:\/\/pypi.org\/project\/oggrestapi\/\" target=\"_blank\" rel=\"noopener noreferrer\">PyPI<\/a> and the source is still on <a href=\"https:\/\/github.com\/juliendlttr\/ogg\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>pip install oggrestapi<\/code> is now all it takes to get started, on any GoldenGate version.<\/li>\n\n\n\n<li>Of course, you can still download the <code>oggrestapi.py<\/code> separately, if you cannot run <code>pip install<\/code> commands against your environment.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In a previous post, I shared the OGGRestAPI Python client I built for the GoldenGate REST API. Since then, I kept using it on production deployments, fixing it and adding new features along the way. It felt like the right time to stop asking people to copy a .py file into their project, so I [&hellip;]<\/p>\n","protected":false},"author":152,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[1],"tags":[3560,3804,979,708,1257,328,3229,4203,4204,1089,1521,3767],"type_dbi":[],"class_list":["post-46781","post","type-post","status-publish","format-standard","hentry","category-non-classifiee","tag-23ai","tag-26ai","tag-api","tag-automation","tag-client","tag-goldengate","tag-microservices","tag-pip","tag-pypi","tag-python","tag-rest","tag-restapi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>The GoldenGate REST API Python client is now on pip - dbi Blog<\/title>\n<meta name=\"description\" content=\"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The GoldenGate REST API Python client is now on pip\" \/>\n<meta property=\"og:description\" content=\"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-07T06:13:00+00:00\" \/>\n<meta name=\"author\" content=\"Julien Delattre\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Julien Delattre\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/\"},\"author\":{\"name\":\"Julien Delattre\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"headline\":\"The GoldenGate REST API Python client is now on pip\",\"datePublished\":\"2026-09-07T06:13:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/\"},\"wordCount\":389,\"commentCount\":0,\"keywords\":[\"23ai\",\"26ai\",\"api\",\"Automation\",\"Client\",\"GoldenGate\",\"microservices\",\"pip\",\"pypi\",\"Python\",\"rest\",\"restapi\"],\"articleSection\":[\"Non classifi\u00e9(e)\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/\",\"name\":\"The GoldenGate REST API Python client is now on pip - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-09-07T06:13:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"description\":\"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/the-goldengate-rest-api-python-client-is-now-on-pip\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The GoldenGate REST API Python client is now on pip\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\",\"name\":\"Julien Delattre\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g\",\"caption\":\"Julien Delattre\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/juliendelattre\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The GoldenGate REST API Python client is now on pip - dbi Blog","description":"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/","og_locale":"en_US","og_type":"article","og_title":"The GoldenGate REST API Python client is now on pip","og_description":"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.","og_url":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/","og_site_name":"dbi Blog","article_published_time":"2026-09-07T06:13:00+00:00","author":"Julien Delattre","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Delattre","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/"},"author":{"name":"Julien Delattre","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"headline":"The GoldenGate REST API Python client is now on pip","datePublished":"2026-09-07T06:13:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/"},"wordCount":389,"commentCount":0,"keywords":["23ai","26ai","api","Automation","Client","GoldenGate","microservices","pip","pypi","Python","rest","restapi"],"articleSection":["Non classifi\u00e9(e)"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/","url":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/","name":"The GoldenGate REST API Python client is now on pip - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2026-09-07T06:13:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"description":"The oggrestapi Python client for the GoldenGate REST API is now installable with pip and works across every GoldenGate version.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/the-goldengate-rest-api-python-client-is-now-on-pip\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The GoldenGate REST API Python client is now on pip"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e","name":"Julien Delattre","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a97d00e680bbf237126e24b65281cbcb66cd20bd1ed2d14bf928991b2bf68eb5?s=96&d=mm&r=g","caption":"Julien Delattre"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/juliendelattre\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46781","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/152"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=46781"}],"version-history":[{"count":4,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46781\/revisions"}],"predecessor-version":[{"id":46788,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/46781\/revisions\/46788"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=46781"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=46781"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=46781"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=46781"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}