SAP Ariba Purchase Orders API

Create, retrieve, update, and manage purchase orders across the SAP Ariba Network. Supports standard and service purchase orders including new, change, cancel, and close operations.

OpenAPI Specification

sap-ariba-purchase-orders-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: SAP Ariba Procurement Invoices Purchase Orders API
  description: Enables integration with SAP Ariba procurement processes including purchase orders, invoices, requisitions, receipts, and supplier management across the SAP Business Network. This API supports the complete procure-to-pay lifecycle from requisition creation through invoice reconciliation and payment processing.
  version: 1.0.0
  contact:
    name: SAP Ariba API Support
    url: https://developer.ariba.com
    email: support@ariba.com
  license:
    name: SAP Developer License
    url: https://www.sap.com/about/legal/developer-license.html
  termsOfService: https://www.ariba.com/legal/terms-of-use
  x-sap-api-type: REST
  x-sap-shortText: Procurement API for purchase orders, invoices, and suppliers
  x-sap-stateInfo:
    state: Active
  x-documentation:
  - url: https://help.sap.com/docs/ariba-apis
    description: SAP Help Portal - Ariba APIs
  - url: https://api.sap.com/package/SAPAribaOpenAPIs/rest
    description: SAP Business Accelerator Hub
  - url: https://help.sap.com/docs/ariba-apis/operational-reporting-api-for-procurement/operational-reporting-api-for-procurement
    description: Operational Reporting API for Procurement
servers:
- url: https://openapi.ariba.com/api/procurement/v1
  description: SAP Ariba Production API Server
- url: https://sandbox.ariba.com/api/procurement/v1
  description: SAP Ariba Sandbox API Server
security:
- oauth2: []
tags:
- name: Purchase Orders
  description: Create, retrieve, update, and manage purchase orders across the SAP Ariba Network. Supports standard and service purchase orders including new, change, cancel, and close operations.
paths:
  /orders:
    get:
      operationId: listPurchaseOrders
      summary: List Purchase Orders
      description: Retrieves a paginated list of purchase order headers matching the specified filter criteria. Supports filtering by buyer, supplier, date range, status, and other order attributes. Results are returned with pagination support using skip and limit parameters.
      tags:
      - Purchase Orders
      parameters:
      - $ref: '#/components/parameters/RealmParam'
      - $ref: '#/components/parameters/SkipParam'
      - $ref: '#/components/parameters/LimitParam'
      - name: filter
        in: query
        description: 'OData-style filter expression to narrow results. Supports operators eq, ne, gt, lt, ge, le with the case-sensitive ''and'' operator. Example: orderDate ge ''2025-01-01'' and status eq ''Ordered'''
        required: false
        schema:
          type: string
      - name: orderBy
        in: query
        description: Field name to sort results by, with optional asc or desc direction
        required: false
        schema:
          type: string
      - name: supplierId
        in: query
        description: Filter by supplier AN-ID on the SAP Ariba Network
        required: false
        schema:
          type: string
      - name: buyerId
        in: query
        description: Filter by buyer AN-ID on the SAP Ariba Network
        required: false
        schema:
          type: string
      - name: status
        in: query
        description: Filter by purchase order status
        required: false
        schema:
          $ref: '#/components/schemas/PurchaseOrderStatus'
      - name: fromDate
        in: query
        description: Filter orders created on or after this date (ISO 8601 format YYYY-MM-DD)
        required: false
        schema:
          type: string
          format: date
      - name: toDate
        in: query
        description: Filter orders created on or before this date (ISO 8601 format YYYY-MM-DD)
        required: false
        schema:
          type: string
          format: date
      responses:
        '200':
          description: Successfully retrieved list of purchase orders
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseOrderListResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createPurchaseOrder
      summary: Create a Purchase Order
      description: Creates a new purchase order in the SAP Ariba system. The order must include header information, at least one line item, supplier details, and shipping address. Upon successful creation, the purchase order is transmitted through the Ariba Network to the designated supplier.
      tags:
      - Purchase Orders
      parameters:
      - $ref: '#/components/parameters/RealmParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseOrderCreate'
      responses:
        '201':
          description: Purchase order created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseOrder'
          headers:
            Location:
              description: URI of the newly created purchase order
              schema:
                type: string
                format: uri
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          description: Conflict - duplicate order number or business rule violation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable entity - validation error in order data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /orders/{orderId}:
    get:
      operationId: getPurchaseOrder
      summary: Get a Purchase Order
      description: Retrieves the complete details of a specific purchase order including header information, all line items, accounting assignments, shipping addresses, and current status. The orderId corresponds to the unique purchase order identifier (UniqueName) in SAP Ariba.
      tags:
      - Purchase Orders
      parameters:
      - $ref: '#/components/parameters/RealmParam'
      - $ref: '#/components/parameters/OrderIdParam'
      responses:
        '200':
          description: Successfully retrieved purchase order details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    patch:
      operationId: updatePurchaseOrder
      summary: Update a Purchase Order
      description: Updates an existing purchase order with change request information. Supports modifications to line items, quantities, prices, delivery dates, and shipping addresses. Creates a new version of the purchase order and increments the version number. Change requests are transmitted to the supplier through the Ariba Network.
      tags:
      - Purchase Orders
      parameters:
      - $ref: '#/components/parameters/RealmParam'
      - $ref: '#/components/parameters/OrderIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PurchaseOrderUpdate'
      responses:
        '200':
          description: Purchase order updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Conflict - order is in a state that does not allow modification
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable entity - validation error in update data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /orders/{orderId}/cancel:
    post:
      operationId: cancelPurchaseOrder
      summary: Cancel a Purchase Order
      description: Cancels an existing purchase order and notifies the supplier through the Ariba Network. Only orders in Ordered or Confirmed status can be cancelled. Cancellation creates a new version with cancelled status.
      tags:
      - Purchase Orders
      parameters:
      - $ref: '#/components/parameters/RealmParam'
      - $ref: '#/components/parameters/OrderIdParam'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                reason:
                  type: string
                  description: Reason for cancellation
                  maxLength: 1000
      responses:
        '200':
          description: Purchase order cancelled successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PurchaseOrder'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Conflict - order cannot be cancelled in its current state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    AccountingInfo:
      type: object
      description: Accounting assignment information for cost allocation on purchase order line items
      properties:
        costCenter:
          type: string
          description: Cost center identifier for expenditure allocation
          example: example_value
        generalLedger:
          type: string
          description: General ledger account number
          example: example_value
        asset:
          type: string
          description: Fixed asset number
          example: example_value
        internalOrder:
          type: string
          description: Internal order number
          example: example_value
        wbsElement:
          type: string
          description: Work Breakdown Structure element
          example: example_value
        amount:
          $ref: '#/components/schemas/Money'
        percentage:
          type: number
          format: double
          description: Percentage of line item amount allocated to this accounting assignment
          minimum: 0
          maximum: 100
          example: 42.5
        sapDistributionFlag:
          type: string
          description: SAP distribution indicator flag
          example: example_value
        accountCategory:
          type: string
          description: Account assignment category code for the line item expenditure
          example: example_value
    Money:
      type: object
      description: Monetary amount with currency code following ISO 4217
      required:
      - amount
      - currencyCode
      properties:
        amount:
          type: number
          format: double
          description: The monetary value
          examples:
          - 1250.0
        currencyCode:
          type: string
          description: ISO 4217 currency code
          pattern: ^[A-Z]{3}$
          examples:
          - USD
          - EUR
          - GBP
    Address:
      type: object
      description: Postal address structure used for shipping, billing, and company addresses
      properties:
        name:
          type: string
          description: Addressee name or attention line
          example: Example Title
        lines:
          type: string
          description: Street address lines
          example: example_value
        city:
          type: string
          description: City name
          example: example_value
        state:
          type: string
          description: State or province
          example: example_value
        postalCode:
          type: string
          description: Postal or ZIP code
          example: example_value
        country:
          type: string
          description: Country code (ISO 3166-1 alpha-2)
          pattern: ^[A-Z]{2}$
          example: example_value
        phone:
          type: string
          description: Phone number
          example: example_value
        email:
          type: string
          format: email
          description: Email address
          example: user@example.com
    ErrorResponse:
      type: object
      description: Standard error response structure
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              examples:
              - INVALID_REQUEST
              - RESOURCE_NOT_FOUND
              - UNAUTHORIZED
            message:
              type: string
              description: Human-readable error message
            details:
              type: array
              description: Additional error details
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: Field name that caused the error (for validation errors)
                  message:
                    type: string
                    description: Detail message for this specific issue
                  errorNumber:
                    type: string
                    description: SAP error number
                  errorModule:
                    type: string
                    description: SAP module where the error originated
          example: example_value
    SupplierReference:
      type: object
      description: Reference to a supplier on the SAP Ariba Network
      required:
      - supplierId
      properties:
        supplierId:
          type: string
          description: Supplier unique identifier (AN-ID on the Ariba Network or internal supplier number)
          examples:
          - AN01000000001
        name:
          type: string
          description: Supplier company name
          example: Example Title
        erpSupplierId:
          type: string
          description: Supplier number in the ERP system
          example: '500123'
    PurchaseOrderListResponse:
      type: object
      description: Paginated list of purchase orders
      properties:
        totalCount:
          type: integer
          description: Total number of matching records
          example: 10
        skip:
          type: integer
          description: Number of records skipped
          example: 10
        limit:
          type: integer
          description: Maximum records per page
          example: 10
        orders:
          type: array
          items:
            $ref: '#/components/schemas/PurchaseOrder'
          example: []
    UnitOfMeasure:
      type: object
      description: Unit of measure specification following UN/ECE Recommendation 20 standard codes
      required:
      - code
      properties:
        code:
          type: string
          description: Unit of measure code (UN/ECE Rec 20 or SAP Ariba internal code)
          examples:
          - EA
          - KG
          - PC
          - HR
        description:
          type: string
          description: Human-readable description of the unit
          examples:
          - Each
          - Kilogram
          - Piece
          - Hour
    PurchaseOrderCreate:
      type: object
      description: Request body for creating a new purchase order
      required:
      - supplier
      - currency
      - lineItems
      properties:
        erpPONumber:
          type: string
          description: ERP system purchase order number
          example: example_value
        supplier:
          $ref: '#/components/schemas/SupplierReference'
        currency:
          type: string
          description: ISO 4217 currency code
          pattern: ^[A-Z]{3}$
          example: example_value
        paymentTerms:
          $ref: '#/components/schemas/PaymentTerms'
        purchaseOrg:
          type: string
          description: Purchasing organization identifier
          example: example_value
        purchaseGroup:
          type: string
          description: Purchasing group identifier
          example: example_value
        companyCode:
          type: string
          description: Company code
          example: example_value
        shipTo:
          $ref: '#/components/schemas/Address'
        billTo:
          $ref: '#/components/schemas/Address'
        lineItems:
          type: array
          items:
            $ref: '#/components/schemas/PurchaseOrderLineItem'
          minItems: 1
          example: []
        requisitionId:
          type: string
          description: Reference to originating requisition
          example: '500123'
        contractId:
          type: string
          description: Reference to master agreement
          example: '500123'
        comments:
          type: string
          description: Header-level comments
          example: example_value
    PaymentTerms:
      type: object
      description: Payment terms governing when and how invoices should be paid
      properties:
        code:
          type: string
          description: Payment terms code
          examples:
          - NET30
          - NET60
          - 2/10NET30
        description:
          type: string
          description: Human-readable payment terms description
          example: A sample description.
        netDays:
          type: integer
          description: Number of days until payment is due
          example: 10
        discountPercent:
          type: number
          format: double
          description: Early payment discount percentage
          example: 42.5
        discountDays:
          type: integer
          description: Number of days within which discount applies
          example: 10
    TaxDetail:
      type: object
      description: Tax calculation details for an invoice or line item
      properties:
        taxCode:
          type: string
          description: Tax code identifier
          example: example_value
        taxCategory:
          type: string
          description: Tax category (e.g., VAT, GST, Sales Tax)
          example: example_value
        taxRate:
          type: number
          format: double
          description: Tax rate as a percentage
          minimum: 0
          example: 42.5
        taxAmount:
          $ref: '#/components/schemas/Money'
        taxableAmount:
          $ref: '#/components/schemas/Money'
        description:
          type: string
          description: Description of the tax
          example: A sample description.
    BuyerReference:
      type: object
      description: Reference to a buyer organization
      properties:
        buyerId:
          type: string
          description: Buyer AN-ID on the SAP Ariba Network
          example: '500123'
        name:
          type: string
          description: Buyer organization name
          example: Example Title
        erpBuyerId:
          type: string
          description: Buyer identifier in the ERP system
          example: '500123'
    PurchaseOrderStatus:
      type: string
      description: Status of a purchase order in the procurement lifecycle
      enum:
      - Draft
      - Submitted
      - Ordered
      - Confirmed
      - PartiallyReceived
      - Received
      - PartiallyInvoiced
      - Invoiced
      - Cancelled
      - Closed
      - Rejected
    CommodityCode:
      type: object
      description: UNSPSC commodity classification code
      required:
      - code
      properties:
        code:
          type: string
          description: UNSPSC commodity code
          examples:
          - '43211500'
        description:
          type: string
          description: Commodity description
          examples:
          - Computers
        domain:
          type: string
          description: Classification domain identifier
          default: UNSPSC
          example: example_value
    PurchaseOrderLineItem:
      type: object
      description: A line item within a purchase order representing a specific good or service being procured
      required:
      - numberOnPO
      - description
      - quantity
      - unitPrice
      - unitOfMeasure
      properties:
        numberOnPO:
          type: string
          description: Line item number within the purchase order. Unique within the order.
          example: example_value
        description:
          type: string
          description: Description of the item or service being purchased
          example: A sample description.
        quantity:
          type: number
          format: double
          description: Quantity to purchase
          minimum: 0
          example: 42.5
        unitPrice:
          $ref: '#/components/schemas/Money'
        unitOfMeasure:
          $ref: '#/components/schemas/UnitOfMeasure'
        netAmount:
          $ref: '#/components/schemas/Money'
        commodityCode:
          $ref: '#/components/schemas/CommodityCode'
        buyerPartNumber:
          type: string
          description: Buyer-assigned part or material number
          example: example_value
        supplierPartNumber:
          type: string
          description: Supplier-assigned part or catalog number
          example: example_value
        manufacturerPartId:
          type: string
          description: Manufacturer part identifier
          example: '500123'
        manufacturerName:
          type: string
          description: Name of the manufacturer
          example: example_value
        itemCategory:
          type: string
          description: Item category code distinguishing material, service, or other item types
          example: example_value
        accountCategory:
          type: string
          description: Account assignment category for the line item expenditure
          example: example_value
        needByDate:
          type: string
          format: date
          description: Requested delivery date for the line item (ISO 8601 YYYY-MM-DD)
          example: '2026-01-15'
        shipTo:
          $ref: '#/components/schemas/Address'
        accountings:
          type: array
          description: Split accounting assignments for distributing costs across multiple cost objects
          items:
            $ref: '#/components/schemas/AccountingInfo'
          example: []
        receivingType:
          type: integer
          description: Receiving type value indicating how receipts should be processed for this line item
          example: 10
        taxCode:
          type: string
          description: Tax code per evaluated receipt settlement agreements
          example: example_value
        taxDetail:
          $ref: '#/components/schemas/TaxDetail'
        itemOnRequisition:
          type: string
          description: Line number of the corresponding item in the originating requisition
          example: example_value
        serviceStartDate:
          type: string
          format: date
          description: Service period start date (for service line items)
          example: '2026-01-15'
        serviceEndDate:
          type: string
          format: date
          description: Service period end date (for service line items)
          example: '2026-01-15'
        comments:
          type: string
          description: Additional comments or notes on the line item
          example: example_value
    PurchaseOrder:
      type: object
      description: A complete purchase order document representing a buyer's commitment to purchase goods or services from a supplier through the SAP Ariba Network
      required:
      - orderId
      - orderDate
      - supplier
      - currency
      - lineItems
      properties:
        orderId:
          type: string
          description: Unique purchase order identifier (UniqueName) including version
          examples:
          - PO-2025-001234
        erpPONumber:
          type: string
          description: ERP system purchase order number. Unique ID for every version of the purchase order in the backend ERP system.
          example: example_value
        versionNumber:
          type: integer
          description: Supplemental version number of the order. Incremented with each change request.
          minimum: 1
          example: 10
        orderDate:
          type: string
          format: date-time
          description: Date and time when the purchase order was created
          example: '2026-01-15T10:30:00Z'
        status:
          $ref: '#/components/schemas/PurchaseOrderStatus'
        orderMethodCategory:
          type: string
          description: Ordering method category indicating how the order was generated (e.g., manual, automatic, blanket release)
          example: example_value
        supplier:
          $ref: '#/components/schemas/SupplierReference'
        buyer:
          $ref: '#/components/schemas/BuyerReference'
        currency:
          type: string
          description: ISO 4217 currency code for the order
          pattern: ^[A-Z]{3}$
          example: example_value
        totalAmount:
          $ref: '#/components/schemas/Money'
        taxAmount:
          $ref: '#/components/schemas/Money'
        shippingAmount:
          $ref: '#/components/schemas/Money'
        paymentTerms:
          $ref: '#/components/schemas/PaymentTerms'
        purchaseOrg:
          type: string
          description: Purchasing organization identifier
          example: example_value
        purchaseGroup:
          type: string
          description: Purchasing group identifier
          example: example_value
        companyCode:
          type: string
          description: Company code for the buying entity
          example: example_value
        shipTo:
          $ref: '#/components/schemas/Address'
        billTo:
          $ref: '#/components/schemas/Address'
        lineItems:
          type: array
          description: Line items contained in the purchase order
          items:
            $ref: '#/components/schemas/PurchaseOrderLineItem'
          minItems: 1
          example: []
        requisitionId:
          type: string
          description: Reference to the originating purchase requisition
          example: '500123'
        contractId:
          type: string
          description: Reference to a master agreement or contract
          example: '500123'
        comments:
          type: string
          description: Header-level comments on the purchase order
          example: example_value
        createdDate:
          type: string
          format: date-time
          description: Timestamp when the order was first created
          example: '2026-01-15T10:30:00Z'
        lastModifiedDate:
          type: string
          format: date-time
          description: Timestamp of the most recent modification
          example: '2026-01-15T10:30:00Z'
        closedDate:
          type: string
          format: date-time
          description: Timestamp when the order was closed
          example: '2026-01-15T10:30:00Z'
    PurchaseOrderUpdate:
      type: object
      description: Request body for updating an existing purchase order. Only provided fields will be modified.
      properties:
        lineItems:
          type: array
          description: Updated line items
          items:
            $ref: '#/components/schemas/PurchaseOrderLineItem'
          example: []
        shipTo:
          $ref: '#/components/schemas/Address'
        paymentTerms:
          $ref: '#/components/schemas/PaymentTerms'
        comments:
          type: string
          description: Change request comments
          example: example_value
  parameters:
    OrderIdParam:
      name: orderId
      in: path
      description: Unique purchase order identifier (UniqueName). This is the purchase order number with its version, or the ERP PO number (ERPPONumber).
      required: true
      schema:
        type: string
    SkipParam:
      name: skip
      in: query
      description: Number of records to skip for pagination (default 0)
      required: false
      schema:
        type: integer
        minimum: 0
        default: 0
    RealmParam:
      name: realm
      in: query
      description: The SAP Ariba realm identifier for the buyer organization. This is the unique site name assigned during provisioning.
      required: true
      schema:
        type: string
    LimitParam:
      name: limit
      in: query
      description: Maximum number of records to return per page (default 10, max 100)
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
  responses:
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden - insufficient permissions for the requested operation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Unauthorized - invalid or missing authentication credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    TooManyRequests:
      description: Rate limit exceeded. Retry after the duration specified in the Retry-After header.
      headers:
        Retry-After:
          description: Number of seconds to wait before retrying
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Bad request - invalid parameters or malformed request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 Client Credentials flow for SAP Ariba API authentication. Obtain client credentials from the SAP Ariba Developer Portal.
      flows:
        clientCredentials:
          tokenUrl: https://api.ariba.com/v2/oauth/token
          scopes: {}