---
title: "Revoke an Offer"
url: "https://stage-api-docs.centraldispatch.com/apis/stage-offer-api-1-0-0/versions/43981ece-e7be-4c4b-a45e-0f4da174a60c/operations/postRevokeOffer"
---

> Full API specification: https://stage-api-docs.centraldispatch.com/apis/stage-offer-api-1-0-0/versions/43981ece-e7be-4c4b-a45e-0f4da174a60c.md

# Revoke an Offer

`POST` `/negotiations/id/{negotiationId}/revoke`

Operation ID: `postRevokeOffer`

Revokes an offer on a listing. #### 📝 Important Notes An offer can be revoked only by the party who was the last one to transact on the offer.

## Path parameters

- `negotiationId` (string, uuid, required) - The ID of the offer negotiation record.

## Header parameters

- `If-Match` (integer, required) - This is a required field to ensure the update is being completed on an item that has not changed since it was last read. The value of this field will be the value of the `ETag` header that was received on the preceding get call.
- `Content-Type` (string, required) - The major version of the API to make a request against. This is a custom MIME type that contains `vnd.coxauto.v[#]+`. For example, to request a resource from version 1.x.x of an API, the Content-Type header should be set to `application/vnd.coxauto.v1+json`.

## Responses

- `202` - Accepted. Successful request.
- `400` - Bad Request. Check the request payload. **Scenarios:** - Invalid request body structure. - Missing or empty `customerId` (cannot be Guid.Empty). - Missing or empty `negotiationId` (cannot be Guid.Empty). - Negotiation status not AWAITING_CARRIER or AWAITING_SHIPPER (attempting to decline a negotiation that's already ACCEPTED, DECLINED, or ARCHIVED). - Listing status not ACTIVE (attempting to revoke on a listing that's PENDING, EXPIRED, or CANCELLED). - No transactions exist for this negotiation. - Missing or empty 'If-Match' header.
- `401` - Unauthorized. Authentication failed or missing.
- `403` - Forbidden. The attempted action is not permitted. **Scenarios:** - Current user is not a participant in this negotiation (customerId must be either the shipper or the carrier). - Shipper cannot revoke a carrier initiated offer. - Carrier cannot revoke a shipper initiated offer.
- `404` - Not Found. **Scenarios:** - No negotiation exists with the specified `negotiationId`.
- `409` - Conflict. Update not allowed based on the current resource state. **Scenarios:** - `If-Match` header doesn't match current record version. - The offer has already been revoked.
- `429` - Too Many Requests. Rate limit exceeded.
- `500` - Error.
- `503` - Service Unavailable. Temporary service interruption.

## OpenAPI definition

```yaml
openapi: 3.0.1
info:
  title: Offer API
  version: 1.0.0
servers:
  - url: https://prod-offers-api.awscal2.manheim.com
    description: Production server
paths:
  /negotiations/id/{negotiationId}/revoke:
    post:
      tags:
        - Negotiations
      summary: Revoke an Offer
      description: >
        
        Revokes an offer on a listing.


        #### 📝 Important Notes

        An offer can be revoked only by the party who was the last one to
        transact on the offer.
      operationId: postRevokeOffer
      parameters:
        - name: negotiationId
          in: path
          description: The ID of the offer negotiation record.
          required: true
          schema:
            type: string
            format: uuid
          example: 7e0a1107-bf75-4e09-a8db-9c3b73b4674b
        - name: If-Match
          in: header
          description: This is a required field to ensure the update is being completed on
            an item that has not changed since it was last read. The value of
            this field will be the value of the `ETag` header that was received
            on the preceding get call.
          required: true
          schema:
            type: integer
          example: 8675309
        - name: Content-Type
          in: header
          description: The major version of the API to make a request against. This is a
            custom MIME type that contains `vnd.coxauto.v[#]+`. For example, to
            request a resource from version 1.x.x of an API, the Content-Type
            header should be set to `application/vnd.coxauto.v1+json`.
          required: true
          schema:
            type: string
          example: application/vnd.coxauto.v1+json
      responses:
        "202":
          description: Accepted. Successful request.
        "400":
          description: >-
            Bad Request. Check the request payload.


            **Scenarios:**

             - Invalid request body structure.
             - Missing or empty `customerId` (cannot be Guid.Empty).
             - Missing or empty `negotiationId` (cannot be Guid.Empty).
             - Negotiation status not AWAITING_CARRIER or AWAITING_SHIPPER (attempting to decline a negotiation that's already ACCEPTED, DECLINED, or ARCHIVED).
             - Listing status not ACTIVE (attempting to revoke on a listing that's PENDING, EXPIRED, or CANCELLED).
             - No transactions exist for this negotiation.
             - Missing or empty 'If-Match' header.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
        "401":
          description: Unauthorized. Authentication failed or missing.
        "403":
          description: >-
            Forbidden. The attempted action is not permitted.


            **Scenarios:**

             - Current user is not a participant in this negotiation (customerId must be either the shipper or the carrier).
             - Shipper cannot revoke a carrier initiated offer.
             - Carrier cannot revoke a shipper initiated offer.
        "404":
          description: |-
            Not Found.

            **Scenarios:**

             - No negotiation exists with the specified `negotiationId`.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
        "409":
          description: |-
            Conflict. Update not allowed based on the current resource state.

            **Scenarios:**

             - `If-Match` header doesn't match current record version.
             - The offer has already been revoked.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
        "429":
          description: Too Many Requests. Rate limit exceeded.
        "500":
          description: Error.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Errors"
        "503":
          description: Service Unavailable. Temporary service interruption.
      security:
        - Bearer: []
security:
  - Bearer: []
components:
  schemas:
    Errors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: "#/components/schemas/Error"
          description: A collection of errors.
          nullable: true
      description: An error occurred, and the request could not be completed.
    Error:
      type: object
      properties:
        code:
          type: string
          description: The code used for the issue.
          nullable: true
          example: resource.issue_type
        message:
          type: string
          description: A detailed message.
          nullable: true
          example: The issue happened because something is wrong.
        property:
          type: string
          description: The property to which the issue is associated.
          nullable: true
          example: person
        properties:
          type: object
          additionalProperties:
            type: string
          description: Additional properties related to the issue.
          nullable: true
          example:
            firstName: D0nn@
            lastName: Sm!th
      description: Details of an error or issue.
  securitySchemes:
    Bearer:
      type: http
      scheme: Bearer
```
