Git Gazette API for Agents
Get AI-generated repository articles via x402 payment.
No API keys. No accounts. Just pay and receive.
Quick Start
Install the x402 fetch wrapper to handle payment automatically:
npm install x402-fetch viemimport { wrapFetchWithX402 } from "x402-fetch";
import { createWalletClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";
import { base } from "viem/chains";
const account = privateKeyToAccount(PRIVATE_KEY);
const wallet = createWalletClient({
account,
chain: base,
transport: http(),
});
const fetchWithPayment = wrapFetchWithX402(fetch, wallet);
const res = await fetchWithPayment(
"https://gitgazette.com/api/x402/article",
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
repo: "facebook/react",
language: "en",
columnist: "rita",
}),
}
);
const article = await res.json();Endpoint
https://gitgazette.com/api/x402/article$0.02 USDC on Base mainnet
x402 (HTTP 402 Payment Required)
application/json
Request Parameters
| Field | Type | Required | Description |
|---|---|---|---|
| repo | string | yes | GitHub repo URL or owner/repo shorthand (e.g. "facebook/react") |
| language | string | yes | "en", "es", or "fr" |
| columnist | string | yes | See Columnists table below |
Repo accepts these formats: "facebook/react", "https://github.com/facebook/react". Activity window is fixed at 7 days.
Columnists
| Value | Name | Covers |
|---|---|---|
| rita | Rita Conflictson | Issue drama & debates |
| preston | Preston Mergington III | PR reviews & code quality |
| semver | Captain Semver | Releases & deploys |
| flo | Flo Stargazer | Community & contributors |
| patch | Patch Wiresec | Security advisories & CVEs |
"max" (Max Summarino / TL;DR) is not available via this endpoint. The TL;DR column requires all other articles as context.
Response
Successful requests return HTTP 200 with the following JSON:
{
"article": {
"headline": "React's PR Queue Erupts in a Merge Conflict Telenovela",
"body": "## The Drama\n\nThis week in React...",
"author_name": "Rita Conflictson",
"column_name": "The Drama Desk",
"sources": ["#28734", "#28691"],
"language": "en"
},
"metadata": {
"repo": "facebook/react",
"provider": "github",
"repo_url": "https://github.com/facebook/react",
"columnist": "rita",
"generated_at": "2026-03-27T14:30:00.000Z",
"cached": false,
"time_window_days": 7
}
}Patch Wiresec: Security Metadata
When columnist is "patch", the metadata includes a security object:
"security": {
"status": "warning",
"advisory_count": 2,
"has_security_policy": true
}No Security Issues (Patch)
When requesting Patch and no issues are found, the response returns article: null:
{
"article": null,
"security_status": "clear",
"message": "No security issues found for this repository in the last 7 days.",
"metadata": {
"repo": "facebook/react",
"provider": "github",
"columnist": "patch",
"security": { "status": "clear", "advisory_count": 0 }
}
}Errors
| Status | Code | Description |
|---|---|---|
| 400 | invalid_body | Request body is not valid JSON |
| 400 | missing_repo | repo field is empty or missing |
| 400 | invalid_language | Language not in allowed list (en, es, fr) |
| 400 | invalid_columnist | Columnist name not recognized |
| 400 | max_not_available | Max Summarino (TL;DR) cannot be requested individually |
| 400 | invalid_repo_url | Could not parse the repository URL |
| 402 | (x402) | Payment Required — standard x402 response with payment details |
| 403 | repo_not_eligible | Repository blocked by content filter |
| 403 | injection_detected | Repository contains unsafe content patterns |
| 429 | rate_limited | Rate limit reached. Includes Retry-After header (seconds) |
| 500 | generation_failed | Article generation failed |
Caching
Articles are cached for 7 days. If the same repo + columnist + language combination was recently generated, the cached version is returned instantly.
You still pay $0.02 for cached responses — the payment is for access, not generation.
If an article exists in a different language, it may be translated rather than regenerated (faster, same cost).
Rate Limits
Rate limits are applied per wallet address. The price stays flat at $0.02 regardless of usage.
- 10 requests per 5 minutes per wallet
- 50 requests per day per wallet
When rate limited, the endpoint returns 429 with a Retry-After header (seconds until the limit resets). You are not charged for 429 responses.
Network Details
Base mainnet (eip155:8453)
USDC
$0.02 per request
CDP (api.cdp.coinbase.com)
x402 v2