Use /sdk/gafaig.v1.js as the primary production integration. Use /widget/gafaig-widget.v1.js and /widget/gafaig-verify.v1.js only for direct or advanced embeds.
Integrate independently verifiable AI governance
GAFAIG provides a verification-first trust surface for AI governance. Developers can fetch certified public records, inspect signed proof, and independently validate payload integrity using GAFAIG’s verification endpoint and public key.
The SDK is the canonical integration surface for GAFAIG trust signals. Badges, widgets, and verification modals are render layers over the public verification endpoint. Internal governance records remain private; external systems validate only the certified outcome, canonical messageString, signature, and public key.
Jump to a developer surface
This page is intentionally comprehensive. Use these shortcuts to move directly to the live console, install snippets, proof rules, widgets, API contracts, and failure-state guidance.
Use versioned SDK and widget files
Production integrations should use versioned GAFAIG files. Versioned files are pinned production contracts. Latest aliases are convenience entry points that may evolve. Use v1 files for any external customer, partner, or production website.
Add a badge, widget, or verification modal using a REGISTRY_ID issued by GAFAIG.
Use the verification endpoint, exact messageString, signature, and public key to validate the public record.
Use versioned files for production embeds. v1 files are behavior-stable for existing integrations. Bug fixes may be applied, but external production integrations should pin to v1 until a future version is explicitly released.
The unversioned files remain available as latest builds. They may receive newer behavior before a future pinned version is introduced. Do not rely on latest aliases for third-party production stability.
Production-stable versioned files:
Primary SDK:
https://www.gafaig.com/sdk/gafaig.v1.js
Optional advanced UI runtimes:
https://www.gafaig.com/widget/gafaig-widget.v1.js
https://www.gafaig.com/widget/gafaig-verify.v1.js
Use the SDK as the recommended production entry point. Use the widget and modal runtime files only for direct or advanced embeds.Latest aliases:
https://www.gafaig.com/sdk/gafaig.js
https://www.gafaig.com/widget/gafaig-widget.js
https://www.gafaig.com/widget/gafaig-verify.js
These aliases point to the latest build and may change behavior. Use for testing, internal previews, or controlled rollouts only.The verification endpoint remains the canonical public trust authority.
The versioned SDK is the recommended production integration file.
Every public proof is signed and can be validated with the public key endpoint.
Live API console for GAFAIG records
Enter a registry ID, call the public verification endpoint, inspect the certified record, review the signed payload, and copy production integration code.
See the versioned embed working live
This preview uses the production-stable versioned widget file. The widget renders the public verification response for the demo GAFAIG registry record and does not compute trust in the browser.
What this live widget proves
The widget is a display layer only. It does not compute trust. It renders the public verification response returned by GAFAIG.
This record is published and valid in the GAFAIG registry.
The cryptographic signature matches the published public key.
The signed payload has not been altered before display.
External systems can independently verify the record using the exact messageString returned by /api/verify.
- /api/verify returns the canonical record and proof.
- proof.messageString is the exact signed payload.
- proof.signature is the cryptographic signature.
- /api/.well-known/gafaig-public-key exposes the verification key.
Verification MUST use the exact messageString returned by the API. Never reconstruct it.
Verify the exact messageString. Never reconstruct it.
The signed payload is proof.messageString. It must be copied and verified exactly as returned by /api/verify. Reconstructing payloads from record fields, proof.message, UI values, or reordered JSON will invalidate verification.
Fetch /api/verify/[registryId], read proof.messageString, read proof.signature, fetch the public key, and verify the exact messageString bytes against the signature.
Do not rebuild the payload from JSON fields, change timestamp formats, stringify proof.message yourself, reorder keys, or normalize the string before verification.
Verification MUST use proof.messageString exactly as returned.
Do not:
- rebuild messageString from record fields
- stringify proof.message yourself
- reorder JSON keys
- change timestamp formats
- trim or normalize the payload before verification
Use:
- proof.messageString
- proof.signature
- public key from proof.verificationKeyUrlInstall the GAFAIG SDK (recommended)
Start with the versioned SDK. This is the ONLY recommended production integration path. All widgets, badges, and modals should be used through the SDK unless you have a specific advanced requirement.
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>Optional runtime files (advanced use only)
These files are not required for most integrations. Only use them if you are building custom UI layers outside the SDK.
Direct widget and modal runtime files bypass the SDK abstraction layer. This increases integration complexity and should only be used in controlled or custom environments.
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<script src="https://www.gafaig.com/widget/gafaig-verify.v1.js"></script>Render a GAFAIG badge
The badge is a lightweight trust signal that links to the verification page. It respects lifecycle and badge eligibility from the public badge API.
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<div data-gafaig-badge="GAFAIG-00363095"></div><script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<div id="gafaig-badge-target"></div>
<script>
gafaig.badge("#gafaig-badge-target", {
registryId: "GAFAIG-00363095",
baseUrl: "https://www.gafaig.com"
});
</script><script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<script>
gafaig
.getBadge("GAFAIG-00363095", {
baseUrl: "https://www.gafaig.com"
})
.then(console.log);
</script>Render the full trust widget
The widget is a richer trust surface. It fetches the verify endpoint, renders record status, signature state, payload integrity, and links to the registry and raw verification JSON.
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<div data-gafaig-id="GAFAIG-00363095"></div><script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<div
data-gafaig-id="GAFAIG-00363095"
data-mode="badge"
></div>Open verification modal (SDK-controlled)
The verification modal allows third-party sites to show GAFAIG verification details without navigating away from the page.
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<script src="https://www.gafaig.com/widget/gafaig-verify.v1.js"></script>
<button data-gafaig-open-verify="GAFAIG-00363095">
Verify this GAFAIG record
</button>
<script>
gafaig.init();
</script><script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<script src="https://www.gafaig.com/widget/gafaig-verify.v1.js"></script>
<button id="open-gafaig-verify">
Verify this GAFAIG record
</button>
<script>
document
.getElementById("open-gafaig-verify")
.addEventListener("click", function () {
gafaig.openVerify("GAFAIG-00363095", {
baseUrl: "https://www.gafaig.com"
});
});
</script>Test GAFAIG on a third-party page
This minimal HTML file simulates an external website using GAFAIG’s versioned SDK and modal runtime.
<!DOCTYPE html>
<html>
<body>
<h1>GAFAIG External Embed Test</h1>
<div data-gafaig-badge="GAFAIG-00363095"></div>
<button data-gafaig-open-verify="GAFAIG-00363095">
Open Verification Modal
</button>
<script src="https://www.gafaig.com/sdk/gafaig.v1.js"></script>
<script src="https://www.gafaig.com/widget/gafaig-verify.v1.js"></script>
<script>
gafaig.init({
baseUrl: "https://www.gafaig.com"
});
</script>
</body>
</html>What the public layer exposes
GAFAIG exposes only the certification outcome, public record fields, lifecycle and eligibility flags, and verification proof. Internal scoring, workflow, decision, and reviewer materials are not part of the public contract.
registryId, registrySnapshotId, applicationId, caseId, entityName, entityType, country, certificationStatus, lifecycleStatus, visibilityStatus, verificationEligible, badgeEligible, validFrom, validTo, certifiedAt, publishedAt, and proof.
Raw score, scoring breakdowns, reviewer materials, internal workflow state, raw findings, and evidence do not belong in the public trust layer.
Use the verify, badge, and public key endpoints directly
For advanced integrations, call the public API endpoints directly. The SDK and widget are convenience layers on top of the same public contracts.
curl https://www.gafaig.com/api/verify/GAFAIG-00363095curl https://www.gafaig.com/api/badge/GAFAIG-00363095curl https://www.gafaig.com/api/.well-known/gafaig-public-keyconst response = await fetch(
"https://www.gafaig.com/api/verify/GAFAIG-00363095",
{ cache: "no-store" }
);
const data = await response.json();
const messageString = data.proof.messageString;
const signature = data.proof.signature;
const publicKeyUrl = data.proof.verificationKeyUrl;
console.log(messageString);
console.log(signature);
console.log(publicKeyUrl);The signed payload you verify
The record object is for display. The proof object is the trust layer. Signature validation depends on messageString, signature, key ID, algorithm, and the public key endpoint.
{
"ok": true,
"verified": true,
"registryId": "GAFAIG-00363095",
"record": {
"registryId": "GAFAIG-00363095",
"registrySnapshotId": "REG-SNAP-...",
"applicationId": "APP-DEMO-0001",
"caseId": "CASE-0001",
"entityName": "OpenAI Enterprise Demo Org",
"entityType": "company",
"country": "United States",
"certificationStatus": "CERTIFIED",
"certifiedAt": "2026-04-21T12:37:57.000Z",
"validFrom": "2026-04-15T00:00:00.000Z",
"validTo": "2027-04-15T10:20:24.000Z",
"lifecycleStatus": "active",
"visibilityStatus": "public",
"verificationEligible": true,
"badgeEligible": true
},
"proof": {
"alg": "Ed25519",
"kid": "gafaig-ed25519-2026-01",
"signature": "<base64-signature>",
"signedAt": "<iso-timestamp>",
"verificationKeyUrl": "https://www.gafaig.com/api/.well-known/gafaig-public-key",
"message": {
"registryId": "GAFAIG-00363095",
"entityName": "OpenAI Enterprise Demo Org",
"certificationStatus": "CERTIFIED",
"certifiedAt": "2026-04-21T12:37:57.000Z",
"validFrom": "2026-04-15T00:00:00.000Z",
"validTo": "2027-04-15T10:20:24.000Z"
},
"messageString": "{\"registryId\":\"GAFAIG-00363095\",...}"
}
}Handle invalid and unavailable verification states explicitly
A professional trust integration must fail safely. GAFAIG surfaces invalid, unavailable, expired, and revoked states so downstream systems do not mistake UI availability for trust.
Failure modes external systems must handle:
1. Missing messageString
Treat as invalid. Do not reconstruct the payload.
2. Missing signature
Treat as invalid. No cryptographic proof is available.
3. Public key unavailable
Treat as verification unavailable.
4. Signature mismatch
Treat as invalid. Payload integrity failed.
5. Expired certification
Verification may still prove authenticity, but the lifecycle state must be displayed as expired.
6. Revoked certification
Verification may still prove authenticity, but the lifecycle state must be displayed as revoked.Choose the trust surface you need
GAFAIG supports multiple ways to distribute trust depending on your product, audience, and verification needs.
A lightweight trust signal for external pages, partner sites, and product footers.
A richer public trust panel with record status, signature state, payload integrity, and verification links.
Inline verification without sending users away from a third-party page.
Raw machine-readable record and proof data for custom integrations.
Verification without private disclosure
GAFAIG enables organizations to prove certified AI governance without exposing internal systems. This makes trust portable while preserving confidentiality.