> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.pinnacle.sh/v-2/api-reference/fax-hipaa-only/list/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # List Faxes GET https://api.pinnacle.sh/fax List your team's fax history, newest first. **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at `https://api.pinnacle.sh`. Results contain complete faxes only. Use `nextOffset` until it is null. The maximum page size is 100 records and the maximum offset is 100,000. Reference: https://docs.pinnacle.sh/api-reference/fax-hipaa-only/list ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Query parameters - `limit` (integer, optional, default: 25) — Maximum logical faxes to return. Defaults to 25. - `offset` (integer, optional, default: 0) — Zero-based number of logical faxes to skip. Defaults to 0. - `direction` (enum, optional) — Return only inbound or outbound logical faxes. - Allowed values: `INBOUND`, `OUTBOUND` ## Response ### 200 Fax history. - `data` (list of Fax, required) - `nextOffset` (integer, required, nullable) — Offset for the next page, or null when no more records exist. ## Errors ### 400 Bad Request Error The request was unacceptable, often due to providing an invalid update. Errors may originate from invalid payload or from Pinnacle's additional validation checks. For example, providing an URL that cannot be accessed, updating a campaign that is currently being reviewed, updating data that you cannot access, sending a malformed message, and so on. For `Pinnacle Validation Error` inspect the `error` payload to determine the source of the failure. These errors are likely due to additional validation and business logic checks. For `Request Validation Error` inspect the `description` and `errors` payload to determine the source of failure. These errors are likely due to invalid payload inside the request. - `ListFaxesRequestBadRequestError` ### 401 Unauthorized Error The request lacks valid authentication credentials or the provided credentials are invalid. Ensure you're including a valid API key in the request headers and that your account has the necessary permissions to access this endpoint. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 403 Forbidden Error Your subscription does not include access to this feature. This occurs when attempting to use functionality that requires a higher subscription tier. Please upgrade your subscription to access this feature. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 500 Internal Server Error An unexpected error occurred on Pinnacle's servers while processing your request. If this error persists, please contact support with the request details. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 503 Service Unavailable Error Fax support is disabled or temporarily unavailable in this deployment. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ## Types ### Fax - `id` (string, required) - `direction` (enum, required) — `OUTBOUND` for faxes sent by your team or `INBOUND` for faxes received by your team. - Allowed values: `INBOUND`, `OUTBOUND` - `from` (string, required) — Sender number in E.164 format. - `to` (string, required) — Recipient number in E.164 format. - `status` (enum, required) — Current state of the fax: - `PREPARING`: Pinnacle is downloading, validating, converting, splitting, or archiving the document. - `SUBMITTING`: The fax is waiting for transmission to start. - `SUBMISSION_UNKNOWN`: Transmission may have started, but Pinnacle cannot confirm it. The fax is not retried automatically. - `QUEUED`: The outbound fax is queued for transmission. - `PROCESSING`: The outbound document is being processed. - `SENDING`: The outbound fax is being transmitted. - `RECEIVING`: An inbound fax is in progress. - `DELIVERED`: Every outbound part was delivered. - `RECEIVED`: The inbound fax was received and archived. - `FAILED`: Preparation, submission, or delivery failed. `partialContent` indicates whether any pages were transmitted. - `CANCELLED`: The outbound fax was cancelled before transmission started. - Allowed values: `PREPARING`, `SUBMITTING`, `SUBMISSION_UNKNOWN`, `QUEUED`, `PROCESSING`, `SENDING`, `RECEIVING`, `DELIVERED`, `RECEIVED`, `FAILED`, `CANCELLED` - `pages` (integer, required) — Transmitted page count across the fax. This can be zero before transmission and can include only transmitted pages after a partial failure. Outbound documents can contain at most 3,500 pages. - `durationSeconds` (double, required) — Total transmission duration in seconds. - `partialContent` (boolean, required) — Whether only part of the document was delivered, including when an earlier part succeeded before a later part failed. - `failureReason` (enum, required) — Stable failure category, or null when no failure is recorded: - `MEDIA_PREPARATION_FAILED`: The source was unavailable, invalid, unsupported, over a limit, or could not be rendered. - `MEDIA_PREPARATION_INTERRUPTED`: Preparation could not be completed after retries. - `INSUFFICIENT_CREDITS`: The team's available credits could not cover the prepared page count. - `SUBMISSION_UNCONFIRMED`: Transmission may have started, so Pinnacle will not retry automatically. - `SUBMISSION_REJECTED`: Transmission could not start. - `DELIVERY_FAILED`: Delivery failed or a transmitted part did not match the expected page count. - Allowed values: `MEDIA_PREPARATION_FAILED`, `MEDIA_PREPARATION_INTERRUPTED`, `INSUFFICIENT_CREDITS`, `SUBMISSION_UNCONFIRMED`, `SUBMISSION_REJECTED`, `DELIVERY_FAILED` - `cost` (double, required) — Settled fax cost in USD, calculated at $0.025 per final transmitted page. Quality does not change the rate. - `reservedCost` (double, required) — Credit reserved after document preparation for an unsettled outbound fax, in USD. This equals $0.025 multiplied by the prepared page count, regardless of quality, and is zero while status is `PREPARING`. - `billingStatus` (enum, required) — `PENDING` while a reservation or uncertain submission remains open; `SETTLED` after final charging, refund, or cancellation. - Allowed values: `PENDING`, `SETTLED` - `hasMedia` (boolean, required) — Whether Pinnacle has archived the fax document. - `createdAt` (string, required) - `updatedAt` (string, required) ### ZodError - `description` (string, required) — Human-readable summary of validation failures. - `errors` (ZodErrorErrors, required) — Structured dictionary of issues containing two main sections: - `errors`: Array of global validation errors not tied to specific fields - `properties`: Object mapping field names to their specific validation errors, where each field contains an `errors` array ### Error Standard error response returned when a request cannot be processed successfully. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### ZodErrorErrors Structured dictionary of issues containing two main sections: - `errors`: Array of global validation errors not tied to specific fields - `properties`: Object mapping field names to their specific validation errors, where each field contains an `errors` array ## Examples **Response** ```json { "data": [ { "id": "string", "direction": "INBOUND", "from": "string", "to": "string", "status": "PREPARING", "pages": 1, "durationSeconds": 1.1, "partialContent": true, "failureReason": "MEDIA_PREPARATION_FAILED", "cost": 1.1, "reservedCost": 1.1, "billingStatus": "PENDING", "hasMedia": true, "createdAt": "2024-01-15T09:30:00Z", "updatedAt": "2024-01-15T09:30:00Z" } ], "nextOffset": 1 } ``` **SDK Code** ```python import requests url = "https://api.pinnacle.sh/fax" headers = {"PINNACLE-API-KEY": ""} response = requests.get(url, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.pinnacle.sh/fax'; const options = {method: 'GET', headers: {'PINNACLE-API-KEY': ''}}; try { const response = await fetch(url, options); const data = await response.json(); console.log(data); } catch (error) { console.error(error); } ``` ```go package main import ( "fmt" "net/http" "io" ) func main() { url := "https://api.pinnacle.sh/fax" req, _ := http.NewRequest("GET", url, nil) req.Header.Add("PINNACLE-API-KEY", "") res, _ := http.DefaultClient.Do(req) defer res.Body.Close() body, _ := io.ReadAll(res.Body) fmt.Println(res) fmt.Println(string(body)) } ``` ```ruby require 'uri' require 'net/http' url = URI("https://api.pinnacle.sh/fax") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Get.new(url) request["PINNACLE-API-KEY"] = '' response = http.request(request) puts response.read_body ``` ```java import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unirest; HttpResponse response = Unirest.get("https://api.pinnacle.sh/fax") .header("PINNACLE-API-KEY", "") .asString(); ``` ```php request('GET', 'https://api.pinnacle.sh/fax', [ 'headers' => [ 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.pinnacle.sh/fax"); var request = new RestRequest(Method.GET); request.AddHeader("PINNACLE-API-KEY", ""); IRestResponse response = client.Execute(request); ``` ```swift import Foundation let headers = ["PINNACLE-API-KEY": ""] let request = NSMutableURLRequest(url: NSURL(string: "https://api.pinnacle.sh/fax")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "GET" request.allHTTPHeaderFields = headers let session = URLSession.shared let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in if (error != nil) { print(error as Any) } else { let httpResponse = response as? HTTPURLResponse print(httpResponse) } }) dataTask.resume() ``` > One API for RCS, iMessage, MMS, and SMS. Build, test, and scale every channel — send your first message in minutes, not weeks.