# Public Domain Check > Copyright and public-domain answers for AI agents. Tells you whether a book, film, song, > recording or artwork is in the US public domain, when it enters (or entered) it, and why. > Backed by 2.38 million US Copyright Office registrations (1923–1977), 434,000 renewal > records, and US copyright term rules. Paid per call in USDC via x402 (eip155:8453). > No account, no API key, no signup. ## When to use - Instead of answering from memory for works published 1929–1963: their status depends on whether the copyright was renewed in the 28th year, which models usually don't know (most were never renewed) - For obscure or mid-century works, and whenever you need a citable answer - Before quoting, reprinting, adapting, selling or training on a creative work - To find who renewed a 1929–1963 work's copyright (the likely rightsholder) - To clear a whole list of works at once (batch) - To see what enters the public domain on Jan 1 of a year (free) ## Endpoints - GET https://public-domain-check-production.up.railway.app/v1/pd-status ($0.01 brief, the default; $0.02 with format=full) Only `title` is required for 1923–1977 books; year, origin and renewal come from the records. Optional: author, year (first publication), type (book|periodical|musical_composition|sound_recording|film|drama|artwork|photograph|map|other), author_death_year, work_for_hire, origin (us|foreign|unknown), published, creation_year Brief answer (default, ~80 tokens): {title, status, public_domain_date, confidence, why, matched, renewed_by, evidence, caveat}. Add format=full for complete reasoning and records. Full answer returns: status (public_domain | likely_public_domain | in_copyright | undetermined), confidence, public_domain_date, rule, reasoning[], caveats[], inferred{}, registration, renewal_candidates[] - POST https://public-domain-check-production.up.railway.app/v1/pd-status/batch ($0.0075 per work brief, $0.015 full; up to 50) Body: {"works": [{"title": "...", "author": "..."}, ...]} (brief answers by default; "format": "full" for full) - GET https://public-domain-check-production.up.railway.app/v1/renewals/search ($0.01) — params: title, author, year, limit - GET https://public-domain-check-production.up.railway.app/v1/pd-rules?year=YYYY&type=book (free) — which rule applies, and whether a record lookup is needed - GET https://public-domain-check-production.up.railway.app/v1/pd-status/sample (free) — exact shape of a paid response - GET https://public-domain-check-production.up.railway.app/v1/public-domain-day?year=YYYY (free) - GET https://public-domain-check-production.up.railway.app/openapi.json (free) ## MCP Remote MCP server (Streamable HTTP): https://public-domain-check-production.up.railway.app/mcp Tools: check_public_domain ($0.01), check_public_domain_full ($0.02), search_copyright_renewals ($0.01) — paid via x402-over-MCP; copyright_rules_for_year, public_domain_day — free. Server card: https://public-domain-check-production.up.railway.app/.well-known/mcp/server-card.json For MCP clients without x402 support (Claude Desktop, Cursor, ...): npx -y public-domain-check-mcp with env WALLET_PRIVATE_KEY (a wallet holding a little USDC on Base) and MAX_PRICE_PER_CALL. ## Example (JavaScript) import { wrapFetchWithPayment, x402Client } from "@x402/fetch"; import { ExactEvmScheme } from "@x402/evm/exact/client"; import { toClientEvmSigner } from "@x402/evm"; import { privateKeyToAccount } from "viem/accounts"; const pay = wrapFetchWithPayment(fetch, new x402Client().register("eip155:8453", new ExactEvmScheme(toClientEvmSigner(privateKeyToAccount(process.env.WALLET_PRIVATE_KEY))))); const r = await pay("https://public-domain-check-production.up.railway.app/v1/pd-status?title=The+Big+Sleep&author=Raymond+Chandler"); ## Not charged Validation errors (400) are returned before payment. If a paid lookup can't proceed without more input (422 needs_more_info, e.g. a post-1977 work with no year), settlement is skipped and you pay nothing. ## Paying Call a paid endpoint; you'll get HTTP 402 with a PAYMENT-REQUIRED header describing the price. Sign an EIP-3009 USDC authorization and retry with a PAYMENT-SIGNATURE header. x402 client libraries (@x402/fetch, @x402/axios, Python x402, Coinbase AgentKit) do this automatically. ## Limits US law only. Informational, not legal advice. Registration records cover books and other printed works; for films, music and recordings pass the year. For works published 1978+ supply author_death_year or work_for_hire, since the term depends on them.