Access API Contract / 2026-08-10

GCA Access API Contract

This page defines the controlled HTTPS API contract for the GCA account path. It covers email-only user registration, member account intake, read-only wallet verification, credit ledger records, GCA Member records, and support review statuses.

The Workers + D1 backend exposes live public routes for member access, redacted device-key account status, device-key protected service requests and follow-ups, queued-request cancellation, request history, safe key rotation, wallet verification, and registered-email recovery. Token-protected operator routes handle append-only service decisions, private follow-up response reads, approved manual delivery, one-time credit settlement, GCA Member decisions, holding evidence, and verified evidence for already-completed member-benefit transfers.

The 10,000 GCA member benefit remains a manual reserve-wallet process. The production evidence route verifies a successful safe-block receipt from the official reserve to the approved member wallet and records it; no API route signs, authorizes, or broadcasts a token transfer.

The backend is deployed on Cloudflare Workers + D1 at https://gca-registration-api.gcagochina.workers.dev, so the public registration and member access pages can write directly to D1. Source remains in cloudflare/gca-registration-worker/. A future api.gcagochina.com custom domain still requires Cloudflare access to the account that owns the gcagochina.com zone.

A local operator backend is also available for localhost testing, evidence export, read-only GCA balance checks, and operator review workflows. Implementation details are listed below in the endpoint contract and technical evidence sections.

Current Stage public follow-up and reviewed settlement live
Public Endpoint Account + redacted review history live
Local Backend tools/gca_member_backend.py
Local Console operator.html
Account UI /gca/member-access/ live
Production Email API Cloudflare Workers + D1 live
API Base https://gca-registration-api.gcagochina.workers.dev
Admin Read Token protected
Admin Export tools/export_cloudflare_email_registrations.py
API Smoke Check tools/check_gca_registration_api.py
Public API Status api-status.html
Public API CI Check .github/workflows/check-gca-registration-api.yml
Local Ledger Sync tools/sync_cloudflare_email_registrations.py
Contact CSV Export tools/export_gca_email_contacts.py
Registration Ops tools/run_gca_registration_ops.py
Contact Suppression tools/suppress_gca_contact.py
Contact Suppression API /gca/contact-suppressions
Suppression Packet gca_contact_suppression_v1
Suppression Sync tools/sync_cloudflare_contact_suppressions.py
Suppression Migration cloudflare/gca-registration-worker/migrations/0002_contact_suppressions.sql
Future API Domain api.gcagochina.com pending zone access
Balance Read eth_call balanceOf
Member Access Version gca_member_access_v2
Legacy Member Access gca_member_access_v1 accepted for unprotected legacy intake
Account Status Version gca_account_status_v1
Account Status Access Read-only device key; SHA-256 stored
Account Status Migration cloudflare/gca-registration-worker/migrations/0009_account_status_access.sql
Device Key Rotation gca_account_status_rotation_v1 / 15-minute same-rotation retry
Rotation Migration cloudflare/gca-registration-worker/migrations/0010_account_status_rotation.sql
Device Key Recovery registered-email review + single-use credential live
Recovery Migration cloudflare/gca-registration-worker/migrations/0011_account_status_recovery.sql
Recovery Operator Tool tools/approve_cloudflare_account_recovery.py
Member Review Version gca_member_review_v1
Holding Verification Version gca_holding_verification_v1
Member Review Token-protected operator route live
Automatic Member Activation Disabled
Member Review Migration cloudflare/gca-registration-worker/migrations/0006_member_reviews.sql
Holding Verification Migration cloudflare/gca-registration-worker/migrations/0007_holding_history_verifications.sql
Member Review Tool tools/review_cloudflare_member.py
Service Request Version gca_service_request_v1
Account Service Request gca_account_service_request_v1 live
Account Request History gca_account_service_request_status_v1 live
Service Request Migration cloudflare/gca-registration-worker/migrations/0005_service_requests.sql
Service Review Version gca_service_request_review_v1 live
Service Review Migration cloudflare/gca-registration-worker/migrations/0012_service_request_reviews.sql
Account Service Follow-Up gca_account_service_request_followup_v1 live
Service Follow-Up Migration cloudflare/gca-registration-worker/migrations/0015_service_request_followups.sql
Delivery Receipt gca_account_service_delivery_receipt_v1 live
Delivery Receipt Migration cloudflare/gca-registration-worker/migrations/0013_service_delivery_receipts.sql
Account Request Cancellation gca_account_service_request_cancellation_v1 live
Request Cancellation Migration cloudflare/gca-registration-worker/migrations/0014_service_request_cancellations.sql
Service Review Operator tools/review_cloudflare_service_request.py

Endpoint Contract

POST /gca/email-registrations

Live Cloudflare Workers + D1 email registration intake for the GCA user list. It requires an email and safety acknowledgements only; it does not request a wallet, signature, private key, seed phrase, payment, or exchange API secret.

GET /gca/email-registrations

Token-protected admin read for operator review. Public visitors cannot read the registration ledger.

POST /gca/contact-suppressions

Live public email do-not-contact request using gca_contact_suppression_v1. It records only an email, reason, source, and safety acknowledgements; no wallet, signature, transaction, private key, seed phrase, payment, or exchange API secret is requested.

GET /gca/contact-suppressions

Token-protected admin read for local suppression sync. Operators use tools/sync_cloudflare_contact_suppressions.py and the local ops pipeline before contact CSV export.

GET /gca/access-config

Live public access configuration for GCA thresholds, chain ID, contract address, ledger boundaries, and safety rules.

POST /gca/member-access

Live account intake for gca_member_access_v2. The browser submits a random device status key, while D1 stores only its SHA-256 hash. The route stores account fields, verifies the current Base wallet balance, writes eligible credit records, and queues qualifying GCA Member evidence. A user-submitted date or transaction hash never activates membership automatically.

POST /gca/account-status

Live read-only lookup for gca_account_status_v1. A matching unexpired device key returns a redacted account, wallet-verification, credits, member-review, and member-benefit snapshot. The response excludes email, email hash, full wallet address, device key, administrator data, operator notes, IP data, and user-agent data.

POST /gca/account-status/rotate

Live credential-only rotation for gca_account_status_rotation_v1. The current valid key is replaced by a new browser-generated key; only SHA-256 hashes are stored. The old key cannot read status and can only retry the same completed rotation for 15 minutes. No account, ledger, wallet, or token record changes.

POST /gca/account-status/recovery-requests

Live public request for gca_account_status_recovery_request_v1. The browser pre-commits a new random device key and the API always returns the same pending response without revealing whether the email and Base wallet match an account.

GET / POST /gca/account-status/recovery-requests + /recovery-approvals

Live ADMIN_READ_TOKEN-protected review and approval routes. An operator must verify control of the registered mailbox before issuing a 24-hour credential. D1 stores only hashes; the credential is returned once.

POST /gca/account-status/recover

Live completion for gca_account_status_recovery_v1. A matching single-use credential activates the pre-committed new key and immediately invalidates the old key. Account, wallet, credits, member records, GCA balances, and on-chain assets are unchanged.

POST /gca/account-service-requests

Live account request route for gca_account_service_request_v1. An active device key identifies the account; the server selects the catalog credit unit, applies account-scoped idempotency and a five-request daily limit, then queues manual review without reserving or deducting credits.

POST /gca/account-service-requests/status

Live redacted history for gca_account_service_request_status_v1. It returns the matched account's latest 25 requests, latest public prompt, follow-up time and count, delivery state, credits used, and remaining balance. Email, full wallet, keys, full request and response bodies, reviewer identity, and operator notes are omitted.

POST /gca/account-service-requests/follow-ups

Live gca_account_service_request_followup_v1 response for the matching device-key account after a more-information review. Responses are append-only, account-scoped, limited to five per request, and idempotent; submission returns the request to manual review without changing credits, wallets, tokens, or trading permission.

POST /gca/account-service-requests/delivery-receipts

Live gca_account_service_delivery_receipt_v1 confirmation for the matching device-key account after completed delivery. It writes one idempotent receipt marker and does not refund or deduct credits, connect a wallet, request a signature, send a transaction, transfer tokens, or create trading permission.

POST /gca/account-service-requests/cancellations

Live gca_account_service_request_cancellation_v1 cancellation for the matching device-key account. It is permanent, account-scoped, idempotent, and accepted only while the request remains queued with no operator review. It changes no credits, wallet, token, member, or trading-permission state and keeps the audit record.

POST /gca/wallet-verifications

Live read-only GCA balance checks using Base Mainnet eth_call and ERC-20 balanceOf.

GET /gca/credit-ledger

Token-protected admin read for account-level 100 GCA AI Quant Access credits records.

POST / GET /gca/service-requests

Live token-protected operator queue for requested GCA AI Quant Access service scope before delivery. The latest public and admin read-only smoke checks passed on 2026-08-10 UTC. Anonymous reads return HTTP 401. Queueing does not deduct credits, connect wallets, request signatures, send tokens, or create trading permission.

POST / GET /gca/service-request-reviews

Live ADMIN_READ_TOKEN-protected append-only review and delivery route for gca_service_request_review_v1. More-information decisions require a public non-sensitive memberPrompt. Delivery requires prior approval and a non-sensitive deliveryReference; retries cannot deduct twice.

GET /gca/service-request-followups

Live token-protected operator read for append-only follow-up responses. Authorized operators can read the response for manual review; public account history exposes only the prompt, submission time, and count.

POST / GET /gca/credit-usage

Live token-protected operator ledger for reviewed service-level credit usage. Initial migration and deploy passed on 2026-07-23 UTC; the latest public and admin read-only smoke checks passed on 2026-07-27 UTC. Anonymous reads return HTTP 401. It records service ID, credits used, before/after balance, and status; it never connects wallets, requests signatures, sends tokens, or creates trading permission.

GET /gca/member-ledger

Token-protected admin read for GCA Member ledger state, holding-period review, 10,000 GCA member benefit status, next refresh due date, and status.

POST / GET /gca/member-reviews

Production-live, ADMIN_READ_TOKEN-protected operator route for append-only member review decisions. Approval refreshes the balance at a safe Base block and requires a 1,000,000 GCA balance, supporting 30-day evidence, explicit operator acknowledgements, and a complete observed 30-day transfer-history reconstruction whose minimum balance is at least 1,000,000 GCA. It never signs, sends GCA, or authorizes the 10,000 GCA benefit transfer.

GET /gca/holding-verifications

Production-live, ADMIN_READ_TOKEN-protected read for append-only observed holding evidence written during successful member approval. It includes the safe snapshot block, current and minimum balances, event counts, history completeness, reconstruction consistency, and provider. It is not a third-party audit or a future holding guarantee.

POST /gca/support-review

Creates or updates support review records for manual review workflows.

GET /gca/member-review

Reads review status for the authenticated account after the controlled account UI exists.

POST /gca/member-review

Local-only operator path to append a manual support review status update. It writes to the local JSONL ledger only and never sends replies, writes production data, calls wallets, requests signatures, or transfers GCA.

POST / GET /gca/member-benefit-transfers

Production-live and ADMIN_READ_TOKEN-protected. After a manual reserve-wallet transfer exists, operators use tools/record_cloudflare_member_benefit_transfer.py to submit its public hash. The route verifies a successful receipt at or below the Base safe block, the official reserve sender, the approved member recipient, the GCA contract, and exactly 10,000 GCA. It records gca_member_benefit_transfer_v1 evidence and never signs or sends tokens.

GET /gca/operator-summary

Local-only console summary for email registration, pre-registration, wallet verification, credit ledger, member ledger, member benefit transfer, and support review counts. The localhost backend writes local JSONL ledger records for testing only.

GET /gca/operator-digest

Local-only redacted daily digest view created by tools/run_gca_daily_ops.py --build-digest. It returns public health, BaseScan preflight status, member ops counts, support queue counts, holding evidence counts, and next actions without user records, emails, admin tokens, signatures, or automatic transfers.

GET /gca/operator-action-plan

Local-only manual checklist derived from local ledger counts and the redacted operator digest. It ranks next actions and shows a redacted support preview; it never sends replies, writes production data, connects wallets, or transfers GCA.

GET /gca/review-package

Local-only reviewer evidence export for support and platform follow-up. It includes local ledger totals, latest records, recordManifest, packageDigestSha256, public reference links, and safety boundaries. Use ?redact=public before external sharing, tools/export_gca_review_package.py to export from local JSONL data without running the server, and tools/verify_gca_review_package.py to verify the digest.

Required Request Fields

Member accesspacketVersion, email, walletAddress, statusAccessToken, termsAccepted, no-secrets acknowledgement
Account statusgca_account_status_v1 and an unexpired device status key
Recovery requestregistered email, Base wallet, browser-generated new device key, recovery acknowledgements
Recovery completionrequest ID, one-time credential, and the exact pre-committed new device key
Account service requestdevice key, client request ID, catalog service, title, summary, language, and three safety acknowledgements
Account request historydevice key only; response is account-scoped and redacted
Email registrationemail, contact consent, no-secrets acknowledgement
Contact suppressionemail, contactSuppressionRequested, no-secrets acknowledgement
Member evidencememberBenefitReviewEvidence, holdingStartDate, evidenceTxHash, evidenceTxHashFormatOk
Wallet verificationregistrationId, walletAddress, chainId, contractAddress
Service requestemail, serviceId, no-secrets acknowledgement, manual-review acknowledgement
Service reviewserviceRequestId, clientReviewId, decision, reasonCode, reviewerId, manual-review acknowledgements, admin token; delivery also confirms completion and credit settlement
Credit usagecreditLedgerId, serviceId, creditAmountUsed, admin token
Member reviewmemberLedgerId, decision, reasonCode, reviewerId, manual-evidence acknowledgement, no-transfer acknowledgement, admin token
Holding evidence readADMIN_READ_TOKEN; optional walletAddress, memberLedgerId, or status filter
Member benefit evidencepacketVersion, memberLedgerId, transactionHash, reviewerId, reasonCode, three explicit acknowledgements, admin token
Support reviewstatus, nextStep, reviewId or memberLedgerId / walletAddress
Ledger readsADMIN_READ_TOKEN protected operator read

Allowed Statuses

Intakereceived, wallet_pending, needs_more_information
Email registrationreceived
Contact suppressionsuppressed
Account status accessactive device key, expired, revoked, or support recovery required
Wallet checkverified, below_threshold, failed, expired
Credit ledgerqueued, ledger_recorded, partially_used, used, expired, revoked
Service requestqueued_operator_review, queued_missing_credit_ledger, queued_insufficient_credits, queued_expired_credit_ledger, approved_operator_review, needs_more_information, rejected_operator_review, delivered
Service review decisionapproved, needs_more_information, rejected, delivered
Credit usageusage_recorded, exhausted
Member ledgerqueued, active, review_rejected, needs_refresh, below_threshold, paused, revoked
Member review decisionapproved, rejected, needs_more_information
Holding verificationobserved_eligible, observed_below_threshold
Member benefit10,000 GCA after 30-day hold review
Evidence reviewuser_supplied_pending_review, needs_more_information, eligible, transferred, contacted, waiting_for_user_evidence, closed

Required Controls

  • controlled HTTPS origin
  • public email registration and unsubscribe routes require only form acknowledgements
  • member intake v2 generates a 256-bit browser device key and stores only its SHA-256 hash in D1
  • account-status reads require the matching unexpired device key and return a redacted record only
  • lost, expired, or revoked access uses a generic public request, registered-email support review, and a single-use 24-hour recovery credential
  • recovery invalidates the old device key but does not modify account, credit, member, wallet, token, or on-chain records
  • account service requests require the device key, take service units from the server catalog, and do not reserve or deduct credits on submission
  • service reviews are append-only, require administrator authorization, and require approval before delivery
  • completed delivery settles the server catalog credit unit at most once in a D1 batch
  • account history omits reviewer identity and operator notes
  • token-protected admin reads for Cloudflare registration and suppression records
  • token-protected admin reads for account-level ledger routes
  • token-protected POST and GET for append-only production member review decisions
  • successful approval requires and stores a complete observed 30-day GCA transfer-history reconstruction
  • token-protected GET for append-only holding verification evidence
  • token-protected POST and GET for verified gca_member_benefit_transfer_v1 evidence
  • member-benefit evidence requires an existing successful receipt at or below the Base safe block, the official reserve sender, approved recipient, and exactly 10,000 GCA
  • no GCA Member activation from a user-submitted holding date or transaction-hash format check alone
  • CSRF protection for state-changing routes
  • website / company / homepage honeypot bot-trap fields on public forms
  • rate limits on pre-registration and wallet verification
  • structured audit logs for status changes
  • server-side validation of chain ID 8453 and the GCA contract address

Do Not Collect

  • Private key or seed phrase.
  • Exchange API secret.
  • Withdrawal permission.
  • Custody request or fund-transfer request.
  • One-time code or recovery phrase.
  • Device status key in email, support tickets, or public review packets.
  • Any permission that bypasses risk controls.

API References

Use the readable API, review queue, operations, and ledger pages first. The user-facing production path is /gca/member-access/.

Canonical Identity

NetworkBase Mainnet / chainId 8453
Contract0x3197c42f4a06f7be32a9a742ac2a766f0ff682c6
Official poolGCA/USDT
Pool address0xfe6a598bf738d7eec9640897064ca3a490128d3d447ced96077aef8e9dd1c1d0
Quote assetBase USDT / 0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2