All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.1.0 - 2026-02-17
Added
- Core client —
WhatsApp.Clientstruct with Bearer auth, JSON/multipart encoding, and configurable timeouts - Automatic retries — opt-in exponential backoff with jitter,
Retry-Afterheader parsing, 429/5xx/connection error handling, and Metais_transientawareness - Connection pooling — auto-sized Finch pool (
max(schedulers_online, 10)) - Error handling —
WhatsApp.Errorstruct that parses Meta's error format (code,error_subcode,fbtrace_id,is_transient) - Response metadata —
WhatsApp.Responsewith named header fields (trace ID, rate limit usage, API version) - Telemetry —
:start,:stop,:exception, and:retryevents under[:whatsapp, :request, ...] - Test helpers —
WhatsApp.Testwith per-process HTTP stubs via NimbleOwnership forasync: truetests - Code generation —
mix whatsapp.generatetask that reads Meta's OpenAPI spec and generates service modules and resource structs - OpenAPI sync —
scripts/sync_openapi.shdownloads the latest spec fromfacebook/openapiand converts YAML to JSON - Pagination —
WhatsApp.Pagewith cursor-based navigation and lazy auto-paging viaStream.unfold - Deserialization —
WhatsApp.Deserializerwith format-aware casting (ISO 8601 dates/times) and discriminator dispatch - Webhook verification —
WhatsApp.Webhookwith HMAC-SHA256 signature validation and subscription verification - WebhookPlug — optional Phoenix Plug with
WhatsApp.WebhookPlug.Handlerbehaviour for event dispatch - Interactive messages —
WhatsApp.Interactivebuilders for buttons, lists, CTA URLs, flows, location requests, and products - CI workflows — GitHub Actions for test matrix (Elixir 1.19-1.20, OTP 27-28), quality checks, and codegen verification
- Spec sync workflow — periodic OpenAPI spec sync with automatic PR generation
- Parity report —
scripts/parity_report.shfor API coverage tracking