Back to Updates
Weekly Update

Week in Review: Billing API & Transyt Webhook Infrastructure

January 5, 2025 CityCycle Team

Happy New Year! This week we’re focused on building integrations for municipal billing systems and ensuring reliable event delivery across our platform.

Billing API for Citation Payments

Counties need to connect their existing billing systems to CityCycle for citation payment processing. We built a complete REST API:

Inbound (County → CityCycle)

  • POST /api/v1/billing/citation_payment - Record when a citizen pays a citation
  • POST /api/v1/billing/appeal_fee - Record appeal hearing fee payments
  • GET /api/v1/billing/citation_status - Query citation payment status
  • GET /api/v1/billing/unpaid_citations - List all unpaid/overdue citations

Outbound (CityCycle → County)

  • Webhooks fire on citation.issued and citation.paid events
  • Counties configure webhook endpoints in Settings → Webhooks
  • HMAC signature verification for secure delivery

The API supports partial payments, custom timestamps, and includes full documentation at /docs/BILLING_API.md.

Transyt: Webhook Reliability Infrastructure

We built Transyt to solve a problem we kept running into: webhooks fail silently, retries don’t explain what happened, and postmortems need evidence.

Transyt acts as a system of record for all incoming webhooks:

  • Stored before forwarded - Every webhook is persisted the moment it arrives. Even if CityCycle is down, nothing is lost.
  • Idempotent by default - Database-level deduplication ensures every event is processed exactly once.
  • Verified signatures - Provider-specific HMAC validation for Stripe, AWS SES, Twilio, and more.
  • Full visibility - See every webhook, when it was delivered, whether it succeeded, and replay any event with one click.

This is critical for audit readiness - immutable payloads, headers, timestamps, and delivery history for SOC 2 compliance.


Questions or feedback? Contact us or schedule a demo call.