Client Libraries
SDKs & Libraries
Official client libraries for the MCE platform. Fully typed, well-documented, and designed to get you from zero to first API call in minutes.
@mesocrats/mce-sdk
v1.0.0Package
@mesocrats/mce-sdk
License
MIT
TypeScript
Full types included
Node.js
>= 18.0.0
Installation
npm
bash
npm install @mesocrats/mce-sdkyarn
bash
yarn add @mesocrats/mce-sdkpnpm
bash
pnpm add @mesocrats/mce-sdkQuick Start
Initialize the client
typescript
import { MesocraticClient } from "@mesocrats/mce-sdk";const mce = new MesocraticClient({ apiKey: process.env.MCE_API_KEY, // baseUrl: "https://api.mesocrats.org" (default) // sandbox: true (uses test data, no real filings)});Usage Examples
List contributions
typescript
1// List itemized contributions for Q1 20262const contributions = await mce.contributions.list({3 year: 2026,4 period: "Q1",5 itemized: true,6 limit: 50,7});89for (const c of contributions.data) {10 const dollars = (c.amount_cents / 100).toFixed(2);11 console.log(12 c.contributor_name,13 "-- $" + dollars,14 c.itemized ? "(itemized)" : "(unitemized)"15 );16}1718// Paginate through all results19if (contributions.has_more) {20 const nextPage = await mce.contributions.list({21 year: 2026,22 period: "Q1",23 cursor: contributions.next_cursor,24 });25}Generate a report
typescript
1// Generate FEC Form 3X for Q1 20262const report = await mce.reports.generate({3 year: 2026,4 period: "Q1",5 format: "json",6 cashOnHandStart: 1500000, // $15,000.007});89console.log("Total receipts:", report.summary.totalReceiptsCents);10console.log("Schedule A entries:", report.scheduleA.length);11console.log("Warnings:", report.warnings.length);1213// Download the .fec electronic filing14const fecFile = await mce.reports.generate({15 year: 2026,16 period: "Q1",17 format: "fec",18});1920await fs.writeFile("./filings/mnc_q1_2026.fec", fecFile);2122// Generate IRS Form 8872 XML23const xml = await mce.reports.generate({24 year: 2026,25 period: "Q1",26 format: "8872xml",27 filingType: "InitalReport",28});2930await fs.writeFile("./filings/form8872_q1_2026.xml", xml);Record a disbursement
typescript
1// Record a disbursement2const disbursement = await mce.disbursements.create({3 payee_name: "Capitol Printing Co.",4 amount_cents: 125000, // $1,250.005 date: "2026-02-10",6 purpose: "Printing and mailing -- Q1 fundraising letters",7 category: "operating",8 payee_address_line1: "900 E Broad St",9 payee_address_city: "Richmond",10 payee_address_state: "VA",11 payee_address_zip: "23219",12 check_number: "1042",13});1415console.log("Recorded:", disbursement.id);Webhook verification (Next.js API route)
typescript
1import { MesocraticClient } from "@mesocrats/mce-sdk";2import { NextRequest, NextResponse } from "next/server";34const mce = new MesocraticClient({5 apiKey: process.env.MCE_API_KEY,6});78export async function POST(req: NextRequest) {9 const body = await req.text();10 const signature = req.headers.get("x-mce-signature") || "";1112 // Verify HMAC-SHA256 signature13 const isValid = mce.webhooks.verifySignature({14 payload: body,15 signature,16 secret: process.env.MCE_WEBHOOK_SECRET!,17 });1819 if (!isValid) {20 return NextResponse.json({ error: "Invalid signature" }, { status: 401 });21 }2223 const event = JSON.parse(body);2425 switch (event.type) {26 case "contribution.created":27 console.log("New contribution:", event.data.id);28 break;2930 case "aggregate.threshold_crossed":31 console.log("Donor crossed $200:", event.data.donor_id);32 // Trigger best-efforts follow-up33 break;3435 case "compliance.deadline_approaching":36 console.log("Deadline in", event.data.days_remaining, "days");37 break;38 }3940 return NextResponse.json({ received: true });41}OpenAPI Specification
Machine-readable API description conforming to OpenAPI 3.1. Use it to generate client libraries, mock servers, or import into Postman, Insomnia, or any OpenAPI-compatible tool.