Coupa Suppliers API

Create, retrieve, update, and manage supplier records. Suppliers represent vendor organizations that provide goods or services.

Documentation

Specifications

Schemas & Data

Other Resources

🔗
ErrorCodes
https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/exception-handling-and-error-codes
🔗
APIReturnFormats
https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/api-return-formats
🔗
XMLvsJSON
https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/differences-between-xml-and-json-in-coupa
🔗
SampleRequests
https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/sample-requestsresponses-xml-vs-json
🔗
SpecialActions
https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/get-started-with-the-api/special-actions-and-api-notes
🔗
OpenAPISpec
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/openapi/coupa-core-api-openapi.yml
🔗
JSONLD
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/json-ld/coupa-context.jsonld
🔗
Vocabulary
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/vocabulary/coupa-vocabulary.yml
🔗
Rules
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/rules/coupa-core-api-rules.yml
🔗
GraphQL
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/graphql/coupa-graphql.md
🔗
Capabilities
https://raw.githubusercontent.com/api-evangelist/coupa/refs/heads/main/capabilities/coupa-procure-to-pay-capabilities.yml

OpenAPI Specification

coupa-suppliers-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Coupa Core Invoices Suppliers API
  description: The primary RESTful API for accessing and managing core Coupa Business Spend Management (BSM) resources including purchase orders, invoices, requisitions, and suppliers. Supports both JSON and XML response formats. All endpoints require OAuth 2.0 or API key authentication. Coupa recommends using query parameters to limit result sets for optimal performance.
  version: 1.0.0
  termsOfService: https://www.coupa.com/company/trust/agreements
  contact:
    name: Coupa Support
    url: https://compass.coupa.com/en-us/support
  license:
    name: Proprietary
    url: https://www.coupa.com/company/trust/agreements
  x-logo:
    url: https://www.coupa.com/wp-content/themes/coupa/images/coupa-logo.svg
    altText: Coupa
servers:
- url: https://{instance}.coupahost.com/api
  description: Coupa Production Instance
  variables:
    instance:
      default: your-instance
      description: Your Coupa instance subdomain
security:
- oauth2: []
- apiKey: []
tags:
- name: Suppliers
  description: Create, retrieve, update, and manage supplier records. Suppliers represent vendor organizations that provide goods or services.
  externalDocs:
    url: https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/the-coupa-core-api/resources/reference-data-resources/suppliers-api-(suppliers)
paths:
  /suppliers:
    get:
      operationId: listSuppliers
      summary: Coupa List suppliers
      description: Retrieve a list of suppliers. Use query parameters to filter results. Supports filtering by name, number, status, and date ranges.
      tags:
      - Suppliers
      parameters:
      - $ref: '#/components/parameters/offsetParam'
      - $ref: '#/components/parameters/limitParam'
      - $ref: '#/components/parameters/returnObjectParam'
      - $ref: '#/components/parameters/dirParam'
      - name: name
        in: query
        description: Filter by supplier name
        schema:
          type: string
      - name: number
        in: query
        description: Filter by supplier number
        schema:
          type: string
      - name: status
        in: query
        description: Filter by supplier status (active, inactive, draft)
        schema:
          type: string
          enum:
          - active
          - inactive
          - draft
      - name: updated-at[gt]
        in: query
        description: Filter for records updated after this datetime
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: A list of suppliers
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Supplier'
            application/xml:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createSupplier
      summary: Coupa Create a supplier
      description: Create a new supplier record. The supplier name is required. Default status is draft if not specified. Default payment method is invoice.
      tags:
      - Suppliers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupplierCreate'
          application/xml:
            schema:
              $ref: '#/components/schemas/SupplierCreate'
      responses:
        '201':
          description: Supplier created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /suppliers/{id}:
    get:
      operationId: getSupplier
      summary: Coupa Get a supplier
      description: Retrieve a single supplier by its Coupa internal ID.
      tags:
      - Suppliers
      parameters:
      - $ref: '#/components/parameters/idParam'
      - $ref: '#/components/parameters/returnObjectParam'
      responses:
        '200':
          description: A single supplier
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      operationId: updateSupplier
      summary: Coupa Update a supplier
      description: Update an existing supplier by its Coupa internal ID. Cannot reassign address or contact IDs when updating primary address or contact.
      tags:
      - Suppliers
      parameters:
      - $ref: '#/components/parameters/idParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SupplierUpdate'
          application/xml:
            schema:
              $ref: '#/components/schemas/SupplierUpdate'
      responses:
        '200':
          description: Supplier updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Supplier'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  parameters:
    idParam:
      name: id
      in: path
      required: true
      description: Coupa internal unique identifier
      schema:
        type: integer
    limitParam:
      name: limit
      in: query
      description: Maximum number of records to return (max 50)
      schema:
        type: integer
        default: 50
        maximum: 50
    offsetParam:
      name: offset
      in: query
      description: Number of records to skip for pagination
      schema:
        type: integer
        default: 0
    dirParam:
      name: dir
      in: query
      description: Sort direction (asc or desc)
      schema:
        type: string
        enum:
        - asc
        - desc
    returnObjectParam:
      name: return_object
      in: query
      description: Set to limited to return only key fields, or shallow to exclude nested objects
      schema:
        type: string
        enum:
        - limited
        - shallow
  responses:
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized - invalid or missing authentication credentials
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: Unprocessable entity - validation errors
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request - invalid parameters or malformed request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    AddressReference:
      type: object
      description: Reference to an address
      properties:
        id:
          type: integer
          description: Coupa unique identifier for the address
        name:
          type: string
          description: Address name
        street1:
          type: string
          description: Street address line 1
        street2:
          type: string
          description: Street address line 2
        city:
          type: string
          description: City
        state:
          type: string
          description: State or province
        postal-code:
          type: string
          description: Postal or ZIP code
        country:
          type: object
          properties:
            id:
              type: integer
            code:
              type: string
              description: ISO 3166-1 alpha-2 country code
    SupplierCreate:
      type: object
      description: Schema for creating a new supplier
      required:
      - name
      properties:
        name:
          type: string
          maxLength: 100
        number:
          type: string
        display-name:
          type: string
        duns:
          type: string
        tax-id:
          type: string
        account-number:
          type: string
        corporate-url:
          type: string
        website:
          type: string
        commodity:
          type: string
        payment-method:
          type: string
          enum:
          - invoice
          - pcard
          - invoice_only
          - pcard_only
          - virtual_card
        payment-term:
          $ref: '#/components/schemas/PaymentTermReference'
        shipping-term:
          $ref: '#/components/schemas/ShippingTermReference'
        invoice-matching-level:
          type: string
          enum:
          - 2-way
          - 3-way
          - 3-way-direct
          - none
        po-method:
          type: string
          enum:
          - cxml
          - xml
          - email
          - prompt
          - mark_as_sent
          - buy_online
        po-email:
          type: string
        primary-contact:
          type: string
        primary-address:
          $ref: '#/components/schemas/AddressReference'
        default-locale:
          type: string
        strategic-supplier:
          type: boolean
        one-time-supplier:
          type: boolean
        allow-cxml-invoicing:
          type: boolean
        allow-inv-from-connect:
          type: boolean
        allow-inv-no-backing-doc-from-connect:
          type: boolean
    UserReference:
      type: object
      description: Reference to a Coupa user
      properties:
        id:
          type: integer
          description: Coupa unique identifier for the user
        login:
          type: string
          description: User login name
        email:
          type: string
          format: email
          description: User email address
    SupplierUpdate:
      type: object
      description: Schema for updating a supplier
      properties:
        name:
          type: string
          maxLength: 100
        number:
          type: string
        display-name:
          type: string
        duns:
          type: string
        tax-id:
          type: string
        account-number:
          type: string
        corporate-url:
          type: string
        website:
          type: string
        status:
          type: string
          enum:
          - active
          - inactive
        on-hold:
          type: boolean
        commodity:
          type: string
        payment-method:
          type: string
          enum:
          - invoice
          - pcard
          - invoice_only
          - pcard_only
          - virtual_card
        payment-term:
          $ref: '#/components/schemas/PaymentTermReference'
        shipping-term:
          $ref: '#/components/schemas/ShippingTermReference'
        invoice-matching-level:
          type: string
          enum:
          - 2-way
          - 3-way
          - 3-way-direct
          - none
        po-method:
          type: string
          enum:
          - cxml
          - xml
          - email
          - prompt
          - mark_as_sent
          - buy_online
        po-email:
          type: string
        primary-contact:
          type: string
        default-locale:
          type: string
        strategic-supplier:
          type: boolean
        allow-cxml-invoicing:
          type: boolean
        allow-inv-from-connect:
          type: boolean
        hold-invoices-for-ap-review:
          type: boolean
        send-invoices-to-approvals:
          type: boolean
    Supplier:
      type: object
      description: A supplier (vendor) organization that provides goods or services. Represents the full supplier record with all configuration settings.
      properties:
        id:
          type: integer
          description: Coupa internal unique identifier
          readOnly: true
        name:
          type: string
          description: Supplier name
          maxLength: 100
        number:
          type: string
          description: Supplier number
        display-name:
          type: string
          description: Display name for the supplier
        status:
          type: string
          description: Supplier status
          enum:
          - active
          - inactive
          - draft
        supplier-status:
          type: string
          description: Supplier status (draft when first created)
        duns:
          type: string
          description: Supplier DUNS number
        tax-id:
          type: string
          description: Supplier tax identification number
        account-number:
          type: string
          description: Account number
        corporate-url:
          type: string
          description: Corporate website URL
        website:
          type: string
          description: Supplier website
        on-hold:
          type: boolean
          description: Whether the supplier is on hold
        buyer-hold:
          type: boolean
          description: Whether all POs are held for buyer review
        one-time-supplier:
          type: boolean
          description: Whether this is a one-time supplier
        strategic-supplier:
          type: boolean
          description: Whether this is a strategic supplier
        commodity:
          type: string
          description: Default commodity
        payment-method:
          type: string
          description: Default payment method
          enum:
          - invoice
          - pcard
          - invoice_only
          - pcard_only
          - virtual_card
        payment-term:
          $ref: '#/components/schemas/PaymentTermReference'
        shipping-term:
          $ref: '#/components/schemas/ShippingTermReference'
        invoice-matching-level:
          type: string
          description: Invoice matching level
          enum:
          - 2-way
          - 3-way
          - 3-way-direct
          - none
        order-confirmation-level:
          type: integer
          description: Order confirmation level (0=not_applicable, 1=header, 2=line)
        confirm-by-hrs:
          type: number
          format: decimal
          description: Confirmation deadline in hours
        po-method:
          type: string
          description: Purchase order transmission method
          enum:
          - cxml
          - xml
          - email
          - prompt
          - mark_as_sent
          - buy_online
        po-email:
          type: string
          description: Email address for PO transmission
        po-change-method:
          type: string
          description: Purchase order change transmission method
        primary-contact:
          type: string
          description: Primary supplier contact email
        primary-address:
          $ref: '#/components/schemas/AddressReference'
        contacts:
          type: array
          description: Supplier contact information
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
              email:
                type: string
                format: email
              phone:
                type: string
        remit-to-addresses:
          type: array
          description: Remit-to addresses for payments
          items:
            $ref: '#/components/schemas/AddressReference'
        supplier-addresses:
          type: array
          description: List of supplier addresses
          items:
            $ref: '#/components/schemas/AddressReference'
        default-locale:
          type: string
          description: Default locale for sending emails to this supplier
        allow-cxml-invoicing:
          type: boolean
          description: Whether cXML invoicing is allowed
        allow-inv-from-connect:
          type: boolean
          description: Whether the supplier can create invoices against POs or Contracts
        allow-inv-no-backing-doc-from-connect:
          type: boolean
          description: Whether the supplier can create invoices without a backing PO
        allow-inv-unbacked-lines-from-connect:
          type: boolean
          description: Whether the supplier can create unbacked invoice lines
        allow-cn-no-backing-doc-from-connect:
          type: boolean
          description: Whether the supplier can create credit notes without a backing invoice
        allow-csp-access-without-two-factor:
          type: boolean
          description: Whether CSP access is allowed without two-factor authentication
        allow-change-requests:
          type: boolean
          description: Whether the supplier can initiate change requests via CSP
        hold-invoices-for-ap-review:
          type: boolean
          description: Whether invoices from this supplier require AP review before approval
        send-invoices-to-approvals:
          type: boolean
          description: Whether invoices are sent through approval workflows
        invoice-emails:
          type: string
          description: Registered email addresses permitted to send invoices
        savings-pct:
          type: number
          format: decimal
          description: Savings percentage for using this supplier
        cxml-domain:
          type: string
          description: cXML domain identifier
        cxml-identity:
          type: string
          description: cXML identity
        cxml-url:
          type: string
          description: URL where POs are sent for cXML transmission
        cxml-protocol:
          type: string
          description: cXML transmission protocol
        cxml-supplier-domain:
          type: string
          description: Supplier domain for cXML
        cxml-supplier-identity:
          type: string
          description: Supplier identity for cXML
        diversities:
          type: array
          description: Supplier diversity markers
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        tags:
          type: array
          description: Associated tags
          items:
            type: object
            properties:
              id:
                type: integer
              name:
                type: string
        scope-three-emissions:
          type: boolean
          description: Whether the supplier tracks Scope Three Emissions
        do-not-accelerate:
          type: boolean
          description: Do not accelerate payment terms (Static Discounting)
        created-at:
          type: string
          format: date-time
          description: Timestamp when the supplier was created
          readOnly: true
        updated-at:
          type: string
          format: date-time
          description: Timestamp when the supplier was last updated
          readOnly: true
        created-by:
          $ref: '#/components/schemas/UserReference'
        updated-by:
          $ref: '#/components/schemas/UserReference'
    ShippingTermReference:
      type: object
      description: Reference to a shipping term
      properties:
        id:
          type: integer
          description: Coupa unique identifier for the shipping term
        code:
          type: string
          description: Shipping term code
    Error:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
                description: Human-readable error message
              field:
                type: string
                description: Field that caused the error
    PaymentTermReference:
      type: object
      description: Reference to a payment term
      properties:
        id:
          type: integer
          description: Coupa unique identifier for the payment term
        code:
          type: string
          description: Payment term code
  securitySchemes:
    oauth2:
      type: oauth2
      description: OAuth 2.0 authentication. Coupa supports the client_credentials grant type. Obtain client credentials from Coupa instance setup.
      flows:
        clientCredentials:
          tokenUrl: https://{instance}.coupahost.com/oauth2/token
          scopes:
            core.purchase_orders.read: Read purchase orders
            core.purchase_orders.write: Create and update purchase orders
            core.invoices.read: Read invoices
            core.invoices.write: Create and update invoices
            core.requisitions.read: Read requisitions
            core.requisitions.write: Create and update requisitions
            core.suppliers.read: Read suppliers
            core.suppliers.write: Create and update suppliers
    apiKey:
      type: apiKey
      in: header
      name: X-COUPA-API-KEY
      description: Legacy API key authentication. Coupa recommends migrating to OAuth 2.0. API keys are configured per Coupa instance.
externalDocs:
  description: Coupa Core API Documentation
  url: https://compass.coupa.com/en-us/products/product-documentation/integration-technical-documentation/coupa-core-api