diff --git a/__test__/url-helper.test.ts b/__test__/url-helper.test.ts
new file mode 100644
index 0000000..e3e810b
--- /dev/null
+++ b/__test__/url-helper.test.ts
@@ -0,0 +1,23 @@
+import * as urlHelper from '../src/url-helper'
+
+describe('isGhes tests', () => {
+  it('basics', async () => {
+    expect(urlHelper.isGhes()).toBeFalsy()
+    expect(urlHelper.isGhes('https://github.com')).toBeFalsy()
+    //expect(urlHelper.isGhes('https://api.github.com')).toBeFalsy()
+    expect(urlHelper.isGhes('https://europe.ghe.com')).toBeFalsy()
+    expect(urlHelper.isGhes('https://test.github.localhost')).toBeFalsy()
+    expect(urlHelper.isGhes('https://src.onpremise.customer.com')).toBeTruthy()
+  })
+})
+
+describe('getServerApiUrl tests', () => {
+  it('basics', async () => {
+    expect(urlHelper.getServerApiUrl()).toBe('https://api.github.com')
+    expect(urlHelper.getServerApiUrl('https://github.com')).toBe('https://api.github.com')
+    expect(urlHelper.getServerApiUrl('https://GitHub.com')).toBe('https://api.github.com')
+    expect(urlHelper.getServerApiUrl('https://europe.ghe.com')).toBe('https://api.europe.ghe.com')
+    expect(urlHelper.getServerApiUrl('https://australia.GHE.COM')).toBe('https://api.australia.ghe.com')
+    expect(urlHelper.getServerApiUrl('https://src.onpremise.customer.com')).toBe('https://src.onpremise.customer.com/api/v3')
+  })
+})
diff --git a/src/url-helper.ts b/src/url-helper.ts
index 5ae9ebe..597021d 100644
--- a/src/url-helper.ts
+++ b/src/url-helper.ts
@@ -21,20 +21,32 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
 }
 
 export function getServerUrl(url?: string): URL {
-  let urlValue =
-    url && url.trim().length > 0
-      ? url
-      : process.env['GITHUB_SERVER_URL'] || 'https://github.com'
-  return new URL(urlValue)
+  let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'
+  if (hasContent(url, false)) {
+    resolvedUrl = url!
+  }
+
+  return new URL(resolvedUrl)
 }
 
-export function getServerApiUrl(): string {
+export function getServerApiUrl(url?: string): string {
+  if (hasContent(url, false)) {
+    let serverUrl = getServerUrl(url)
+    if (isGhes(url)) {
+      serverUrl.pathname = "api/v3"
+    } else {
+      serverUrl.hostname = "api." + serverUrl.hostname
+    }
+
+    return pruneSuffix(serverUrl.toString(), '/')
+  }
+
   return process.env['GITHUB_API_URL'] || 'https://api.github.com'
 }
 
-export function isGhes(): boolean {
+export function isGhes(url?: string): boolean {
   const ghUrl = new URL(
-    process.env['GITHUB_SERVER_URL'] || 'https://github.com'
+    url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'
   )
 
   const hostname = ghUrl.hostname.trimEnd().toUpperCase()
@@ -44,3 +56,20 @@ export function isGhes(): boolean {
 
   return !isGitHubHost && !isGheHost && !isLocalHost
 }
+
+
+function pruneSuffix(text: string, suffix: string) {
+  if (hasContent(suffix, true) && text?.endsWith(suffix)) {
+    return text.substring(0, text.length - suffix.length)
+  }
+  return text
+}
+
+function hasContent(text: string | undefined, allowPureWhitespace: boolean): boolean {
+  let refinedText = text ?? ""
+  if (!allowPureWhitespace) {
+    refinedText = refinedText.trim()
+  }
+  return refinedText.length > 0
+}
+