Validate an authorization request
Entry point for the Connect your GC Store flow. Validates the
client_id, redirect_uri, and requested scope and returns the
information the consent page needs to render.
Authentication: None required — this is a public endpoint. Validation errors are returned as JSON error responses, never as redirects (prevents open redirect attacks).
Rate limit: 60 requests/hour and 30 per 10 minutes per IP address.
curl --request GET \
--url https://api.tybritelabs.com/v1/connect/authorizeimport requests
url = "https://api.tybritelabs.com/v1/connect/authorize"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.tybritelabs.com/v1/connect/authorize', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tybritelabs.com/v1/connect/authorize",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tybritelabs.com/v1/connect/authorize"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tybritelabs.com/v1/connect/authorize")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tybritelabs.com/v1/connect/authorize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"valid": true,
"client": {
"client_id": "anvil",
"name": "Anvil",
"description": "AI-powered storefront generation — connect your store to generate a fully functional storefront in minutes.",
"logo_url": "https://anvil.tybritelabs.com/logo.png"
},
"request": {
"redirect_uri": "https://yourapp.com/callback",
"scopes": [
"read",
"orders:read"
],
"state": "a8f3d2e1c9b7",
"environment": "sandbox",
"receives_webhooks": true
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"details": "The 'email' field is required"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}{
"error": {
"code": "server_error",
"message": "An unexpected error occurred"
}
}Query Parameters
Registered client identifier assigned when your application was approved.
Must exactly match one of your application's registered redirect URIs.
Space-separated list of permission scopes your application is requesting. Scopes are
enforced per request — a token is rejected with 403 insufficient_scope if it calls an
endpoint it wasn't granted the matching scope for. Request only what your app needs.
Available scopes: read, write, products:read, categories:read, pricing:read,
orders:read, orders:write, customers:read, customers:write, payments:read,
cart:write, cms:read, shipping:read, reviews:read, reviews:write,
gift_cards:read, messaging:read, messaging:write, returns:read, returns:write,
promotions:read, recommendations:read, search:read, store:read
A random value you generate and store. Galactic Core returns it unchanged in the callback so you can verify it and prevent CSRF attacks.
Whether to connect to the merchant's live store data or test data.
Defaults to sandbox. Pass production once your integration is
ready for live data. Merchants see this clearly on the consent screen.
sandbox, production curl --request GET \
--url https://api.tybritelabs.com/v1/connect/authorizeimport requests
url = "https://api.tybritelabs.com/v1/connect/authorize"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.tybritelabs.com/v1/connect/authorize', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.tybritelabs.com/v1/connect/authorize",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.tybritelabs.com/v1/connect/authorize"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.tybritelabs.com/v1/connect/authorize")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.tybritelabs.com/v1/connect/authorize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"valid": true,
"client": {
"client_id": "anvil",
"name": "Anvil",
"description": "AI-powered storefront generation — connect your store to generate a fully functional storefront in minutes.",
"logo_url": "https://anvil.tybritelabs.com/logo.png"
},
"request": {
"redirect_uri": "https://yourapp.com/callback",
"scopes": [
"read",
"orders:read"
],
"state": "a8f3d2e1c9b7",
"environment": "sandbox",
"receives_webhooks": true
}
}{
"error": {
"code": "invalid_request",
"message": "Invalid request parameters",
"details": "The 'email' field is required"
}
}{
"error": {
"code": "rate_limited",
"message": "Too many requests for this API key. Please slow down and try again shortly.",
"remaining": 0,
"reset": 1706198400
}
}{
"error": {
"code": "server_error",
"message": "An unexpected error occurred"
}
}
