Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.go.gbgplc.com/llms.txt

Use this file to discover all available pages before exploring further.

This quickstart guides you through your first API-first integration with GBG GO. Authenticate, start a journey, fetch the first interaction, submit data, and poll for completion.

Before you start

Before running this quickstart, make sure you have:
  • A published journey with the journey resource ID and version number copied from the GBG GO dashboard.
  • API credentials provided by your GBG account manager:
    • client_id: Your unique API client identifier.
    • client_secret: Your secret key for API authentication.
    • username: Your API username.
    • password: Your API password.
  • Your password reset from the temporary one provided at account creation.
  • A tool capable of making HTTP requests, for example, curl or Postman.
API credentials are different from your GBG GO platform login. They are specifically for programmatic access.

Step 1: Set up your journey

Before making API calls, you need a published journey with the Age Verification module. Follow the steps in Option 2: Create a journey from scratch of the Platform quickstart to add the Age Verification module to your journey and publish it. Once your journey is published to preview, copy the Resource ID and version from the Dashboard. You need these to start the journey through the API.

Step 2: Authenticate

Send a POST request to get your Bearer token:
cURL
curl --request POST \
  --url https://api.auth.gbgplc.com/as/token.oauth2 \
  --header 'accept: application/json' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data 'client_id=your-client-id&client_secret=your-client-secret&username=your-username&password=your-password&grant_type=password'
A successful response returns an access token:
JSON
{
  "access_token": "your-access-token",
  "token_type": "Bearer",
  "expires_in": 3600
}
Use it to authenticate subsequent API calls by including it in the Authorization header.
Store the access_token securely. Don’t share it in emails, chat messages, client-side code, or publicly accessible locations.

Step 3: Start a journey

Use your access token, journey resource ID and version to start a journey instance. Set context.config.delivery to "api" for API-first journeys.

Non-prefill mode

Start with an empty subject. The end user provides all data through interactions:
cURL
curl --request POST \
  --url https://eu.platform.go.gbgplc.com/v2/captain/journey/start \
  --header 'Authorization: Bearer your_access_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "resourceId": "97c8b0c5272ba450c48899cc78f6e3f3ba89b5d131c42f7ea972588bd8213b3e@y5z6bj7o",
    "context": {
      "config": { "delivery": "api" },
      "subject": {}
    }
  }'
The @5z6bj7o suffix in the resource ID represents the journey version. Replace it with your specific version for production integrations. Using @latest can introduce a small delay in processing. Usually less than 10 seconds.

Partial pre-fill mode

If you already have some user data, include it in context.subject. Remove the corresponding domain elements from the Interaction Group panel so the journey doesn’t collect them again:
cURL
curl --request POST \
  --url https://eu.platform.go.gbgplc.com/v2/captain/journey/start \
  --header 'Authorization: Bearer your_access_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "resourceId": "97c8b0c5272ba450c48899cc78f6e3f3ba89b5d131c42f7ea972588bd8213b3e@y5z6bj7o",
    "context": {
      "config": { "delivery": "api" },
      "subject": {
        "identity": {
          "firstName": "Jane",
          "lastNames": ["Doe"],
          "dateOfBirth": "1992-10-01"
        }
      }
    }
  }'
A successful response returns an instanceId:
JSON
{
  "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu",
  "status": "started",
  "message": "Journey Pq_hhIX6-sHUy9FLSDzPLu started successfully"
}
Save the instanceId — you need it for all subsequent API calls in this journey.
Replace @latest with your specific journey version for production integrations. Using @latest can introduce a small delay in processing.

Step 4: Fetch the interaction

Poll /journey/interaction/fetch to retrieve the current interaction and discover what data the end user must provide:
cURL
curl --request POST \
  --url https://eu.platform.go.gbgplc.com/v2/captain/journey/interaction/fetch \
  --header 'Authorization: Bearer your_access_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu"
  }'
The response includes the interaction definition and the domain elements that need to be collected:
JSON
{
  "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu",
  "interactionId": "grn:::gbg:design:interaction:identity-form@latest",
  "journey": { "status": "InProgress" },
  "interaction": {
    "collects": [
      { "ref": "FullName", "spec": "required" },
      { "ref": "DateOfBirth", "spec": "required" },
      { "ref": "PrimaryDocument", "spec": "required" }
    ]
  },
  "outstanding": ["FullName", "DateOfBirth", "PrimaryDocument"]
}
Use this information to build your front-end data collection forms and guide end users through the required steps.
If no interactionId is returned yet, the platform is still processing. Keep polling until an interactionId appears or journey.status changes from InProgress.

Step 5: Submit interaction data

Once you’ve collected data from the end user, submit it using the interactionId from the fetch response:
cURL
curl --request POST \
  --url https://eu.platform.go.gbgplc.com/v2/captain/journey/interaction/submit \
  --header 'Authorization: Bearer your_access_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu",
    "interactionId": "grn:::gbg:design:interaction:identity-form@latest",
    "participants": [
      { "domainElementId": "FullName" },
      { "domainElementId": "DateOfBirth" }
    ],
    "context": {
      "subject": {
        "identity": {
          "firstName": "Jane",
          "lastNames": ["Doe"],
          "dateOfBirth": "1992-10-01"
        }
      }
    }
  }'
A successful response:
JSON
{
  "status": "success"
}
Now, the GO platform processes the submitted data. Poll /journey/interaction/fetch again to get the next interaction or check if the journey is complete.
You don’t need to submit all required domain elements at once. Submit a subset and call the submit endpoint again with the remaining elements. Check the outstanding field in the fetch response to see what still needs to be provided.

Step 6: Fetch journey state

Once all interactions are submitted, poll /journey/state/fetch to detect completion and retrieve verification results:
cURL
curl --request POST \
  --url https://eu.platform.go.gbgplc.com/v2/captain/journey/state/fetch \
  --header 'Authorization: Bearer your_access_token' \
  --header 'Content-Type: application/json' \
  --data '{
    "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu"
  }'
Poll until status is no longer InProgress:
JSON
{
  "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu",
  "status": "Completed",
  "context": {
    "subject": {
      "identity": {
        "lastNames": [
          "Doe"
        ],
        "dateOfBirth": "1982-09-27",
        "phones": [
          {
            "type": "mobile",
            "number": ""
          }
        ],
        "currentAddress": {
          "lines": [
            "New Orleans, Louisiana, U.S."
          ],
          "locality": "New Orleans",
          "postalCode": "900010",
          "country": "US"
        },
        "firstName": "John",
        "middleNames": [
          "Michael"
        ]
      }
    },
    "result": {
      "advice": {},
      "status": "complete"
    },
    "process": {
      "instance": {
        "id": "Pq_hhIX6-sHUy9FLSDzPLu",
        "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu"
      },
      "journey": {
        "id": "9dcd95e06495ec32c9ad149283a935548e4a380461b9ee6981af0fef5c70c8c3",
        "version": "5f7yigc4",
        "name": "Age verification",
        "endedAt": "2026-03-16T23:57:38.417Z",
        "durationMilliSec": 94320,
        "terminateInteraction": {
          "grId": "grn:::gbg:design:interaction:end@latest",
          "resource": {
            "id": "end",
            "name": "interactionEnd",
            "version": "latest",
            "type": "interaction",
            "data": {
              "pages": [
                {
                  "id": "pagesForEnd",
                  "cards": [
                    {
                      "id": "AllDoneCard"
                    }
                  ]
                }
              ]
            }
          },
          "collects": [],
          "consumes": []
        },
        "startedAt": "2026-03-16T23:56:04.097Z"
      },
      "steps": [
        {
          "moduleId": "US_AgeVerification_Source1IncludingDOB",
          "result": {
            "note": {
              "expectid_age": {
                "id_number": "6554532688"
              }
            },
            "advice": {
              "address_risk_capabilities": [],
              "dob_risk_capabilities": [],
              "subject_risk_capabilities": [],
              "alert_list_capabilities": [],
              "acceptance_result_capabilities": [],
              "age_result_capabilities": [
                "resultcode.confirm.age"
              ],
              "trust_usa_risk_capabilities": [],
              "trust_usa_result_capabilities": [],
              "ssn_risk_capabilities": [],
              "age_restricted_capabilities": [],
              "name_risk_capabilities": [],
              "match_result_capabilities": []
            },
            "outcome": "Of Age",
            "status": "complete"
          },
          "subject": {
            "identity": {
              "currentAddress": {
                "locality": "New Orleans",
                "postalCode": "900010",
                "country": "US",
                "lines": [
                  "New Orleans, Louisiana, U.S."
                ]
              },
              "firstName": "John",
              "middleNames": [
                "Michael"
              ],
              "lastNames": [
                "Doe"
              ],
              "dateOfBirth": "1982-09-27",
              "phones": [
                {
                  "number": "",
                  "type": "mobile"
                }
              ]
            }
          },
          "process": {
            "instance": {
              "id": "Pq_hhIX6-sHUy9FLSDzPLu",
              "instanceId": "Pq_hhIX6-sHUy9FLSDzPLu"
            },
            "journey": {
              "id": "9dcd95e06495ec32c9ad149283a935548e4a380461b9ee6981af0fef5c70c8c3",
              "version": "5f7yigc4",
              "name": "Age verification",
              "startedAt": "2026-03-16T23:56:04.097Z"
            }
          }
        }
      ]
    }
  }
}
In the response above, John Doe’s age is verified using the Age Verification module. The result is “Of Age,” and the journey is complete. The response also includes the full subject data and module result details. Next, view verification results, data and outcomes in the Investigation portal in the GBG GO dashboard. Based on the status field, take appropriate actions:
StatusMeaning
InProgressThe journey is still active. Retrieve remaining tasks.
CompletedThe journey is done. No further action is needed.
FailedThe journey encountered an error. Review previous steps or retry.

Next steps