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:

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

Revision #1
Created 7 May 2026 11:41:02 by Clive
Updated 7 May 2026 11:41:02 by Clive