{"id":42283,"date":"2026-01-29T08:10:00","date_gmt":"2026-01-29T07:10:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=42283"},"modified":"2026-02-17T21:00:47","modified_gmt":"2026-02-17T20:00:47","slug":"goldengate-rest-api-basics-with-python","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/","title":{"rendered":"GoldenGate REST API basics with Python"},"content":{"rendered":"\n<p>Oracle GoldenGate REST API has been around for quite some time now, but I&#8217;ve yet to see it used in practice at customers. Every time I tried to introduce it, it was some sort of novelty. Mainly because DBAs tend to dislike automation, but also for technical reasons. Even though <strong>the REST API was introduced in GoldenGate 12c<\/strong> with the Microservices Architecture, some customers are still stuck with the Classic Architecture. As a reminder, the classic architecture is now completely absent from the 23ai version (<a href=\"https:\/\/www.dbi-services.com\/blog\/planning-goldengate-migration-before-premier-support-expires\/\" target=\"_blank\" rel=\"noreferrer noopener\">plan your migration<\/a> now !).<\/p>\n\n\n\n<p>That being said, <strong>where to start<\/strong> when using the GoldenGate REST API? Oracle has some <a href=\"https:\/\/docs.oracle.com\/en\/database\/goldengate\/core\/26\/coredoc\/upgrading-oracle-goldengate-microservices-rest-api.html\" target=\"_blank\" rel=\"noreferrer noopener\">basic documentation<\/a> using <code>curl<\/code>, but I want to take things a bit further by <strong>leveraging the power of Python<\/strong>, starting with basic requests.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-make-your-first-request-to-the-goldengate-rest-api\">Make your first request to the GoldenGate REST API<\/h2>\n\n\n\n<p>If you really have no idea what a REST API is, there are tons of excellent articles online for you to get into it. Getting back to the basics, in Python, the <code>requests<\/code> module will <strong>handle the API calls<\/strong> for us.<\/p>\n\n\n\n<p>The most basic REST API call would look like what I show below. Adapt the credentials, and the service manager host and port.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport requests\n\nurl = &quot;http:\/\/vmogg:7809\/services&quot;\nauth = (&quot;ogg_user&quot;, &quot;ogg_password&quot;)\nresult = requests.get(url, auth=auth)\n<\/pre><\/div>\n\n\n<p>Until now, nothing fascinating, but with the 200 return code below, we know that the call succeeded. The <code>ok<\/code> flag gives us the <strong>status of the call<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; result\n&lt;Response &#091;200]&gt;\n&gt;&gt;&gt; result.ok\nTrue<\/code><\/pre>\n\n\n\n<p>And to <strong>get the real data<\/strong> returned by the API, use the <code>json<\/code> method.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; result.json()\n{'$schema': 'api:versions', 'links': &#091;{'rel': 'current', 'href': 'http:\/\/vmogg:7809\/services\/v2', 'mediaType': 'application\/json'}, {'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services', 'mediaType': 'application\/json'}, {'rel': 'self', 'href': 'http:\/\/vmogg:7809\/services', 'mediaType': 'application\/json'}], 'items': &#091;{'$schema': 'api:version', 'version': 'v2', 'isLatest': True, 'lifecycle': 'active', 'catalog': {'links': &#091;{'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services\/v2\/metadata-catalog', 'mediaType': 'application\/json'}]}}]}<\/code><\/pre>\n\n\n\n<p>Up until that point, you are successfully making API connections to your GoldenGate service manager, but nothing more. What you need to change is the URL, and more specifically the endpoint.<\/p>\n\n\n\n<p><code>\/services<\/code> is called an <em>endpoint<\/em>, and the <strong>full list of endpoints<\/strong> can be found in the <a href=\"https:\/\/docs.oracle.com\/en\/middleware\/goldengate\/core\/23\/oggra\/rest-endpoints.html\" target=\"_blank\" rel=\"noreferrer noopener\">GoldenGate documentation<\/a>. Not all of them are useful, but when looking for a specific GoldenGate action, this endpoint library is a good starting point.<\/p>\n\n\n\n<p>For instance, to get the <strong><a href=\"https:\/\/docs.oracle.com\/en\/database\/goldengate\/core\/26\/oggra\/op-services-version-deployments-get.html\" target=\"_blank\" rel=\"noreferrer noopener\">list of all the deployments<\/a><\/strong> associated with your service manager, use the <code>\/services\/v2\/deployments<\/code> endpoint. If you get an <code>OGG-12064<\/code> error, it means that the credentials are not correct (they were technically not needed for the first example).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; url = \"http:\/\/vmogg:7809\/services\/v2\/deployments\"\n&gt;&gt;&gt; requests.get(url, auth=auth).json()\n{\n    '$schema': 'api:standardResponse',\n    'links': &#091;\n        {'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments', 'mediaType': 'application\/json'},\n        {'rel': 'self', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments', 'mediaType': 'application\/json'},\n        {'rel': 'describedby', 'href': 'http:\/\/vmogg:7809\/services\/v2\/metadata-catalog\/versionDeployments', 'mediaType': 'application\/schema+json'}\n    ],\n    'messages': &#091;],\n    'response': {\n        '$schema': 'ogg:collection',\n        'items': &#091;\n            {'links': &#091;{'rel': 'parent', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments', 'mediaType': 'application\/json'}, {'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments\/ServiceManager', 'mediaType': 'application\/json'}], '$schema': 'ogg:collectionItem', 'name': 'ServiceManager', 'status': 'running'},\n            {'links': &#091;{'rel': 'parent', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments', 'mediaType': 'application\/json'}, {'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments\/ogg_test_01', 'mediaType': 'application\/json'}], '$schema': 'ogg:collectionItem', 'name': 'ogg_test_01', 'status': 'running'},\n            {'links': &#091;{'rel': 'parent', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments', 'mediaType': 'application\/json'}, {'rel': 'canonical', 'href': 'http:\/\/vmogg:7809\/services\/v2\/deployments\/ogg_test_02', 'mediaType': 'application\/json'}], '$schema': 'ogg:collectionItem', 'name': 'ogg_test_02', 'status': 'running'}\n        ]\n    }\n}<\/code><\/pre>\n\n\n\n<p>Already, we&#8217;re starting to get a bit lost in the output (even though I cleaned it for you). Without going too much into the details, when the call succeeds, we are interested in the <code>response.items<\/code> object, discarding <code>$schema<\/code> and <code>links<\/code> objects. When the call fails, let&#8217;s just display the output for now.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef parse(response):\n    try:\n        return response.json()\n    except ValueError:\n        return response.text\n\ndef extract_main(result):\n    if not isinstance(result, dict):\n        return result\n    resp = result.get(&quot;response&quot;, result)\n    if &quot;items&quot; not in resp:\n        return resp\n    exclude = {&quot;links&quot;, &quot;$schema&quot;}\n    return &#x5B;{k: v for k, v in i.items() if k not in exclude} for i in resp&#x5B;&quot;items&quot;]]\n\nresult = requests.get(url, auth=auth)\nif result.ok:\n    response = parse(result)\n    main_response = extract_main(response)\n<\/pre><\/div>\n\n\n<p>We now have a more human-friendly output for our API calls ! For this specific example, we only retrieve the deployment names and their status.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; main_response\n&#091;{'name': 'ServiceManager', 'status': 'running'}, {'name': 'ogg_test_01', 'status': 'running'}, {'name': 'ogg_test_02', 'status': 'running'}]<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-goldengate-post-api-calls\">GoldenGate POST API calls<\/h2>\n\n\n\n<p>Some API calls require you to <strong>send data<\/strong> instead of just receiving it. A common example is the <strong>creation of a GoldenGate user<\/strong>. Both the role and the username are part of the endpoint. Using the <code>post<\/code> method instead of <code>get<\/code>, we will give the user settings (the password, essentially) in the <code>params<\/code> argument:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport requests\n\nrole = &quot;User&quot;\nuser = &quot;ogg_username&quot;\nurl = f&quot;http:\/\/vmogg:7809\/services\/v2\/authorizations\/{role}\/{user}&quot;\nauth = (&quot;ogg_user&quot;, &quot;ogg_password&quot;)\ndata = {\n    &quot;credential&quot;: &quot;your_password&quot;\n}\n\nresult = requests.post(url, auth=auth, json=data)\n<\/pre><\/div>\n\n\n<p>To check if the user was created, you can go to the Web UI or check the <code>ok<\/code> flag again.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; result.ok\nTrue<\/code><\/pre>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"263\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-1024x263.png\" alt=\"\" class=\"wp-image-42537\" style=\"aspect-ratio:3.8936771203012963;width:556px;height:auto\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-1024x263.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-300x77.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-768x197.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui.png 1284w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<p>Here, the API doesn&#8217;t provide us with much information when the call succeeds:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; result.text\n'{\"$schema\":\"api:standardResponse\",\"links\":&#091;{\"rel\":\"canonical\",\"href\":\"http:\/\/vmogg:7809\/services\/v2\/authorizations\/User\/ogg_username\",\"mediaType\":\"application\/json\"},{\"rel\":\"self\",\"href\":\"http:\/\/vmogg:7809\/services\/v2\/authorizations\/User\/ogg_username\",\"mediaType\":\"application\/json\"}],\"messages\":&#091;]}'<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-fully-working-oggrestapi-python-class\">A fully working <code>OGGRestAPI<\/code> Python class<\/h2>\n\n\n\n<p>When dealing with the REST API, you will quickly feel the need for a standard client object that will handle everything for you. A very basic <code>ogg_rest_api.py<\/code> script class will look like this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import requests\nimport urllib3\n\n\nclass OGGRestAPI:\n    def __init__(self, url, username=None, password=None, ca_cert=None, verify_ssl=True,\n                 test_connection=False, timeout=None):\n        \"\"\"\n        Initialize Oracle GoldenGate REST API client.\n\n        :param url: Base URL of the OGG REST API. It can be:\n                    'http(s):\/\/hostname:port' without NGINX reverse proxy,\n                    'https:\/\/nginx_host:nginx_port' with NGINX reverse proxy.\n        :param username: service username\n        :param password: service password\n        :param ca_cert: path to a trusted CA cert (for self-signed certs)\n        :param verify_ssl: bool, whether to verify SSL certs\n        :param test_connection: if True, will attempt to retrieve API versions on init\n        :param timeout: request timeout in seconds\n        \"\"\"\n        self.base_url = url\n        self.username = username\n        self.swagger_version = '2026.01.27'\n        self.auth = (self.username, password)\n        self.headers = {'Accept': 'application\/json', 'Content-Type': 'application\/json'}\n        self.verify_ssl = ca_cert if ca_cert else verify_ssl\n        self.timeout = timeout\n        self.session = requests.Session()\n        self.session.auth = self.auth\n        self.session.headers.update(self.headers)\n\n        if not verify_ssl and self.base_url.startswith('https:\/\/'):\n            # Disable InsecureRequestWarning if verification is off\n            urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)\n\n        # Optional connection check\n        if test_connection:\n            try:\n                self._request('GET', '\/services', extract=False)\n                print(f'Connected to OGG REST API at {self.base_url}')\n            except Exception as e:\n                print(f'Error connecting to OGG REST API: {e}')\n                raise\n\n    def _request(self, method, path, *, params=None, data=None, extract=True):\n        url = f'{self.base_url}{path}'\n        response = self.session.request(\n            method,\n            url,\n            auth=self.auth,\n            headers=self.headers,\n            params=params,\n            json=data,\n            verify=self.verify_ssl,\n            timeout=self.timeout\n        )\n        self._check_response(response)\n        result = self._parse(response)\n        return self._extract_main(result) if extract else result\n\n    def _build_path(self, template, path_params=None):\n        path_params = path_params or {}\n        return template.format(**path_params)\n\n    def _call(self, method, template, *, path_params=None, params=None, data=None, extract=True):\n        path = self._build_path(template, path_params=path_params)\n        result = self._request(method, path, params=params, data=data, extract=False)\n        if extract:\n            return self._extract_main(result)\n        return result\n\n    def _get(self, path, params=None, extract=True):\n        return self._request('GET', path, params=params, extract=extract)\n\n    def _post(self, path, data=None, extract=True):\n        return self._request('POST', path, data=data, extract=extract)\n\n    def _put(self, path, data=None, extract=True):\n        return self._request('PUT', path, data=data, extract=extract)\n\n    def _patch(self, path, data=None, extract=True):\n        return self._request('PATCH', path, data=data, extract=extract)\n\n    def _delete(self, path, extract=True):\n        return self._request('DELETE', path, extract=extract)\n\n    def _check_response(self, response):\n        if not response.ok:\n            if 'messages' in response.json():\n                messages = response.json().get('messages', &#091;])\n                raise Exception(\n                    ' ; '.join(&#091;f\"{message&#091;'severity']}: {message&#091;'title']}\" for message in messages])\n                )\n            else:\n                print(f'HTTP {response.status_code}: {response.text}')\n                response.raise_for_status()\n\n    def _parse(self, response):\n        try:\n            return response.json()\n        except ValueError:\n            return response.text\n\n    def close(self):\n        self.session.close()\n\n    def _extract_main(self, result):\n        if not isinstance(result, dict):\n            return result\n\n        resp = result.get('response', result)\n        if 'items' not in resp:\n            return resp\n\n        exclude = {'links', '$schema'}\n        return &#091;{k: v for k, v in i.items() if k not in exclude} for i in resp&#091;'items']]<\/code><\/pre>\n\n\n\n<p>With this, we can connect to the API and generate the same <code>GET<\/code> query as before to retrieve all deployments. This time, we only provide the endpoint, and not the whole URL.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; from ogg_rest_api import OGGRestAPI\n&gt;&gt;&gt; client_blog = OGGRestAPI(url=\"http:\/\/vmmogg:7809\", username=\"ogg\", password=\"ogg\")\n&gt;&gt;&gt; client_blog._get(\"\/services\/v2\/deployments\")\n&#091;{'name': 'ServiceManager', 'status': 'running'}, {'name': 'ogg_test_01', 'status': 'running'}, {'name': 'ogg_test_02', 'status': 'running'}]<\/code><\/pre>\n\n\n\n<p>As you can imagine, all GoldenGate API functionalities can be integrated in this class, enhancing GoldenGate management and monitoring. Next time you want to automate your GoldenGate processes, please consider using this REST API !<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-rest-api-calls-to-a-secured-goldengate-deployment\">REST API calls to a secured GoldenGate deployment<\/h2>\n\n\n\n<p>If your GoldenGate deployment is secure, you can still use this Python class. The requests module will handle it for you. I give two examples below for a secured deployment using a self-signed certificate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Checking CA automatically (Trusted CA)\n&gt;&gt;&gt; client_blog = OGGRestAPI(url=\"https:\/\/vmogg:7809\", username=\"ogg\", password=\"ogg\")\n\n# Providing RootCA (self-signed certificate)\n&gt;&gt;&gt; client_blog = OGGRestAPI(url=\"https:\/\/vmogg:7809\", username=\"ogg\", password=\"ogg\", ca_cert=\"\/path\/to\/RootCA_cert.pem\", verify_ssl=True)\n\n# Disabling verification\n&gt;&gt;&gt; client_blog = OGGRestAPI(url=\"https:\/\/vmogg:7809\", username=\"ogg\", password=\"ogg\", verify_ssl=False)<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oracle GoldenGate REST API has been around for quite some time now, but I&#8217;ve yet to see it used in practice at customers. Every time I tried to introduce it, it was some sort of novelty. Mainly because DBAs tend to dislike automation, but also for technical reasons. Even though the REST API was introduced [&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":""},"categories":[3787,59],"tags":[3182,3560,3827,3804,979,708,328,3229,1089,1521,3767],"type_dbi":[3826,3406,3828,3823,3740,3768,3800,3349],"class_list":["post-42283","post","type-post","status-publish","format-standard","hentry","category-goldengate","category-oracle","tag-3182","tag-23ai","tag-3827","tag-26ai","tag-api","tag-automation","tag-goldengate","tag-microservices","tag-python","tag-rest","tag-restapi","type-3826","type-23ai","type-3828","type-26ai","type-goldengate","type-python","type-rest","type-rest-api"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>GoldenGate REST API basics with Python - dbi Blog<\/title>\n<meta name=\"description\" content=\"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !\" \/>\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\/goldengate-rest-api-basics-with-python\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GoldenGate REST API basics with Python\" \/>\n<meta property=\"og:description\" content=\"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-29T07:10:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-17T20:00:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1284\" \/>\n\t<meta property=\"og:image:height\" content=\"330\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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=\"4 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\\\/goldengate-rest-api-basics-with-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/\"},\"author\":{\"name\":\"Julien Delattre\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"headline\":\"GoldenGate REST API basics with Python\",\"datePublished\":\"2026-01-29T07:10:00+00:00\",\"dateModified\":\"2026-02-17T20:00:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/\"},\"wordCount\":660,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/01\\\/ogg_blog_restapi_user_creation_webui-1024x263.png\",\"keywords\":[\"23\",\"23ai\",\"26\",\"26ai\",\"api\",\"Automation\",\"GoldenGate\",\"microservices\",\"Python\",\"rest\",\"restapi\"],\"articleSection\":[\"GoldenGate\",\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/\",\"name\":\"GoldenGate REST API basics with Python - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/01\\\/ogg_blog_restapi_user_creation_webui-1024x263.png\",\"datePublished\":\"2026-01-29T07:10:00+00:00\",\"dateModified\":\"2026-02-17T20:00:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/764ab019cc9dec42655b4c6b9b8e474e\"},\"description\":\"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/01\\\/ogg_blog_restapi_user_creation_webui.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2026\\\/01\\\/ogg_blog_restapi_user_creation_webui.png\",\"width\":1284,\"height\":330},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/goldengate-rest-api-basics-with-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GoldenGate REST API basics with Python\"}]},{\"@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":"GoldenGate REST API basics with Python - dbi Blog","description":"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !","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\/goldengate-rest-api-basics-with-python\/","og_locale":"en_US","og_type":"article","og_title":"GoldenGate REST API basics with Python","og_description":"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !","og_url":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/","og_site_name":"dbi Blog","article_published_time":"2026-01-29T07:10:00+00:00","article_modified_time":"2026-02-17T20:00:47+00:00","og_image":[{"width":1284,"height":330,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui.png","type":"image\/png"}],"author":"Julien Delattre","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Julien Delattre","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/"},"author":{"name":"Julien Delattre","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"headline":"GoldenGate REST API basics with Python","datePublished":"2026-01-29T07:10:00+00:00","dateModified":"2026-02-17T20:00:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/"},"wordCount":660,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-1024x263.png","keywords":["23","23ai","26","26ai","api","Automation","GoldenGate","microservices","Python","rest","restapi"],"articleSection":["GoldenGate","Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/","url":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/","name":"GoldenGate REST API basics with Python - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui-1024x263.png","datePublished":"2026-01-29T07:10:00+00:00","dateModified":"2026-02-17T20:00:47+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/764ab019cc9dec42655b4c6b9b8e474e"},"description":"Take the most out of your GoldenGate setup by leveraging the power of the REST API in Python !","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2026\/01\/ogg_blog_restapi_user_creation_webui.png","width":1284,"height":330},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/goldengate-rest-api-basics-with-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GoldenGate REST API basics with Python"}]},{"@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\/42283","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=42283"}],"version-history":[{"count":29,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42283\/revisions"}],"predecessor-version":[{"id":42981,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/42283\/revisions\/42981"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=42283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=42283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=42283"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=42283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}