Overview & Quick Start
Go Proton API
Overview
github.com/ProtonMail/go-proton-api is the official Go library implementing a client for (a subset of) the Proton REST API. It covers Mail, Contacts, Calendar, Drive Shares, and core account operations. Built on resty/v2 for HTTP communication and gopenpgp/v2 for PGP encryption/decryption.
Quick Start
import (
"context"
"github.com/ProtonMail/go-proton-api"
)
// 1. Create a Manager (shared across clients)
m := proton.New()
defer m.Close()
ctx := context.Background()
// 2a. Login with username/password (full SRP flow)
c, auth, err := m.NewClientWithLogin(ctx, "user@proton.me", []byte("password"))
if err != nil {
panic(err)
}
defer c.Close()
// Handle 2FA if needed
if auth.TwoFA.Enabled&proton.HasTOTP != 0 {
if err := c.Auth2FA(ctx, proton.Auth2FAReq{TwoFactorCode: "123456"}); err != nil {
panic(err)
}
}
// 2b. Or create from existing tokens (no login needed)
c := m.NewClient("uid", "accessToken", "refreshToken")
defer c.Close()
Installation
go get github.com/ProtonMail/go-proton-api
Requires Go 1.26+.
Architecture
The library uses a Manager → Client hierarchy:
- Manager — Top-level factory object. Created via
New(opts ...Option). Holds a shared*resty.Client, status observers, error handlers, and panic recovery. Shared across all clients. - Client — Per-user client bound to a specific UID. Created by the Manager via
NewClient(),NewClientWithLogin(), orNewClientWithRefresh(). Each Client handles one Proton account.
Core Features
| Feature | Description |
|---|---|
| Automatic auth refresh | 401 responses trigger transparent token refresh + retry |
| Connection status | Manager.AddStatusObserver() receives StatusUp / StatusDown notifications |
| Error handlers | Manager.AddErrorHandler(code, handler) — register callbacks for specific API error codes |
| Request hooks | Per-client and global pre/post request middleware via resty |
| Parallel operations | Delete messages, import messages, and attachment downloads all use parallel execution |
| Undo support | Label/unlabel operations return undo tokens for reversible actions |
| Paging helpers | GetAllContacts(), GetAllMessageIDs() etc. auto-page through results |
No comments to display
No comments to display