> 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/cancel/llms.txt. > For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.pinnacle.sh/_mcp/server. # Cancel Fax POST https://api.pinnacle.sh/fax/{id}/cancel Cancel an outbound fax before transmission starts. Cancellation stops queued preparation and every unsent part, releases the credit reservation, and changes the status to `CANCELLED`. Repeating a successful cancellation returns the same fax. Cancellation is unavailable for inbound faxes, completed faxes, and `SUBMISSION_UNKNOWN` faxes. Pinnacle returns 409 once transmission may have started, even when later parts remain unsent. **HIPAA only:** this endpoint exists only in Pinnacle's HIPAA cell and is unavailable at `https://api.pinnacle.sh`. Only a fax ID owned by your team is accepted. Unknown IDs return 404. Reference: https://docs.pinnacle.sh/api-reference/fax-hipaa-only/cancel ## Authentication - `PINNACLE-API-KEY` header (required) — API Key authentication via header ## Request ### Path parameters - `id` (string, required) — Fax ID returned by send, list, or a fax webhook. ## Response ### 200 Fax cancelled before transmission started. - `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) ## 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. - `CancelFaxRequestBadRequestError` ### 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. ### 404 Not Found Error The requested resource could not be found. This may occur if the identifier is incorrect, the resource has been deleted, or you don't have permission to access it. - `error` (string, required) — Human-readable description of the error that occurred, corresponding to the HTTP status code. ### 409 Conflict Error The request conflicts with an existing resource. - `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 ### 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 { "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" } ``` **SDK Code** ```python import requests url = "https://api.pinnacle.sh/fax/id/cancel" headers = {"PINNACLE-API-KEY": ""} response = requests.post(url, headers=headers) print(response.json()) ``` ```javascript const url = 'https://api.pinnacle.sh/fax/id/cancel'; const options = {method: 'POST', 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/id/cancel" req, _ := http.NewRequest("POST", 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/id/cancel") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true request = Net::HTTP::Post.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.post("https://api.pinnacle.sh/fax/id/cancel") .header("PINNACLE-API-KEY", "") .asString(); ``` ```php request('POST', 'https://api.pinnacle.sh/fax/id/cancel', [ 'headers' => [ 'PINNACLE-API-KEY' => '', ], ]); echo $response->getBody(); ``` ```csharp using RestSharp; var client = new RestClient("https://api.pinnacle.sh/fax/id/cancel"); var request = new RestRequest(Method.POST); 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/id/cancel")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0) request.httpMethod = "POST" 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.