Skip to content

Sourcing Event Creation Examples

The following examples provide JSON data which may be used with the jobs endpoints as described in Usage. These examples are specific to the sourcing event creation API, to be used with the /jobs/sourcing-events endpoint which is fully described in the OpenAPI Specification.

Create a Basic Sourcing Event

The below example creates a very basic Sourcing Event. It has a few bid-sheet columns and lots, but does not add supplier(s), formula(e) nor a custom schedule. A member of the event team can add suppliers later and publish the event from the Sourcing Optimizer app.

The roles key enables access to the Sourcing Event for users within your organisation. All three available role types have been shown here: Administrator, Editor and Viewer. The email addresses provided must be unique and must correspond to existing Sourcing Optimiser users in your organisation.

{
    "name": "Basic Event",
    "description": "A very simple example event",
    "business_contact": {
        "name": "John Keelvary",
        "email": "john@example.com"
    },
    "created_by": "bob@example.com",
    "timezone": "Europe/Dublin",
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Quantity",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "NUMBER",
                "precision": 0
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" },
                    { "column": "Quantity", "value": "100" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" },
                    { "column": "Quantity", "value": "200" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price * Quantity",
    "roles": [
        { "email": "administrator@example.buyer.com", "role_type": "ADMIN" },
        { "email": "editor@example.buyer.com", "role_type": "EDITOR" },
        { "email": "viewer@example.buyer.com", "role_type": "VIEWER" }
    ],
    "settings": { "is_test": true }
}

Note on bid sheet structure

Before we dive into more advanced examples, we should examine how the bid-sheet structure is defined in a little more detail.

As can be seen in the previous example, a lot_identifier field is defined in the column_roles top-level attribute on the bid_sheet definition. This is a required attribute that contains the name of the column containing identifying values for the lot.

Because the lot identifier column has such a critical role in the bid-sheet definition, it's name must be specified in the column_roles as well as being defined as a column in columns. A lot identifier column must always contain buyer-input text values, and by default will always be included in reports. The attributes column_type, input_by, and input_type must be set as in all of the examples here.

Similarly, when specifying buyer-defined bid sheet values, the lot identifier value must be specified at the top level of the lots element as name. It may also be defined as a standalone value for the related column, however the lot name will take precedence.

There is one other column_role available currently, namely the volume role. If specified on a column definition, this indicates that the related column is the "volume" or "demand" column for the bid-sheet. An example of this is shown in the more advanced sample below.

Optional Column with Default Value

A default value may be added to an optional column. The field will be blank on the bidsheet but will still be included in formula evaluations.

"bid_sheet": {
        "column_roles": {
            "lot_identifier": "Lot Name"
        },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Delivery Note",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT",
                "is_mandatory": false,
                "default_value": "Standard delivery terms, example default value"
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    {
                        "column": "Lot Name",
                        "value": "Lot 1"
                    }
                ]
            }
        ]
    }

Create a more advanced Sourcing Event

The example below creates a Sourcing Event with a little more detail than the previous example, using more of the features available in Sourcing Optimizer. It will create a bid-sheet with a formula column, some suppliers, uses global bid inputs and sets initial bid values for suppliers. See that the column_type value for the "Total Price" column is set to formula to specify that it is a formula column. It also sets the "volume" / "demand" column to be "Quantity".

A list of tags have been supplied in the tags key. Note that these are distinct from the normal Event tags which may be input in the Sourcing Optimizer application. The tag names must be configured at an organisation level before they may be used here. Tags that do not match a configured label or option will be ignored.

Note: The use of the description field on the bid-sheet lot columns adds a tool-tip in the Sourcing Optimizer app.

{
    "name": "Event Name",
    "description": "Event Description",
    "business_contact": {
        "name": "John Keelvary",
        "email": "john@example.com"
    },
    "created_by": "bob@example.com",
    "bid_sheet": {
        "column_roles": {
            "lot_identifier": "Lot Name",
            "volume": "Quantity"
        },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Quantity",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "NUMBER",
                "precision": 0
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "description": "Price per unit",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "currency_code": "EUR"
            },
            {
                "name": "Total Price",
                "column_type": "FORMULA",
                "description": "Total price of the lot",
                "input_type": "CURRENCY",
                "precision": 2,
                "formula": "Unit Price * Quantity"
            }
        ],
        "global_inputs": [
            {
                "name": "Supplier Onboarding Cost",
                "input_by": "BUYER_INPUT_SUPPLIER_SPECIFIC",
                "input_type": "CURRENCY",
                "currency_code": "EUR",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" },
                    { "column": "Quantity", "value": "100" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" },
                    { "column": "Quantity", "value": "200" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Total Price + Supplier Onboarding Cost",
    "suppliers": [
        {
            "name": "Supplier 1",
            "external_id": "SUPP_1",
            "contacts": [
                { "name": "Mary Jones", "email": "contact2.supplier.1@example.com" },
                { "name": "Joe Bloggs", "email": "contact1.supplier.1@example.com" }
            ]
        },
        {
            "name": "Supplier 2",
            "external_id": "SUPP_2",
            "contacts": [
                { "name": "Max Mustermann", "email": "contact1.supplier.2@example.com" }
            ]
        }
    ],
    "starting_bids": {
        "global_bid_values": [
            {
                "supplier": "Supplier 1",
                "values": [
                    { "column": "Supplier Onboarding Cost", "value": "250" }
                ]
            },
            {
                "supplier": "Supplier 2",
                "values": [
                    { "column": "Supplier Onboarding Cost", "value": "300" }
                ]
            }
        ],
        "lot_bid_values": [
            {
                "lot": "Lot 1",
                "supplier": "Supplier 1",
                "values": [
                    { "column": "Unit Price", "value": "123.12" }
                ]
            },
            {
                "lot": "Lot 1",
                "supplier": "Supplier 2",
                "values": [
                    { "column": "Unit Price", "value": "100.12" }
                ]
            },
            {
                "lot": "Lot 2",
                "supplier": "Supplier 1",
                "values": [
                    { "column": "Unit Price", "value": "234.56" }
                ]
            },
            {
                "lot": "Lot 2",
                "supplier": "Supplier 2",
                "values": [
                    { "column": "Unit Price", "value": "200.56" }
                ]
            }
        ]
    },
    "primary_currency": "EUR",
    "roles": [
        { "email": "administrator@example.buyer.com", "role_type": "ADMIN" },
        { "email": "editor@example.buyer.com", "role_type": "EDITOR" },
        { "email": "viewer@example.buyer.com", "role_type": "VIEWER" }
    ],
    "tags": [
        { "name": "Category", "value": "Logistics" },
        { "name": "Project", "value": "PROJECT_123" }
    ],
    "settings": { "is_test": true }
}

Create a Sourcing RFQ Event with a custom schedule

The example below creates a minimal bid-sheet, however we provide a custom schedule under the schedule key of the request payload. Three bidding rounds are added to the event, with the start and end times specified.

The bidding rounds must be listed in the order they will run, invalid schedules will be rejected. The final round in the example below shows adding an unscheduled round, where there is no start and end time. All rounds may be added in this fashion if required, and the schedule can be configured in Sourcing Optimizer at a later time.

If no schedule is added Sourcing Optimizer will automatically add a single round, start the event immediately when it is published, and set it to close after 7 days. If no start date is provided for the first round, or if it is set in the past, Sourcing Optimizer will start the event immediately when it is published.

Optional notifications may be added to any scheduled round. These are used to remind or prompt suppliers during the round lifecycle. Each round can contain one or more notifications, configured either relative to the round start or end time, or using an absolute delay. The supported reminder_type values are:

  • PENDING_INVITE – remind bidders who have not accepted the invite
  • BID_NOT_SUBMITTED – remind bidders who have not bid
  • BID_ACTIVITY_REPORT – update team members with a bidder activity report

Notifications use either:

  • notify_after_seconds - a delay in seconds from the event start, or
  • relative_config with delta_seconds and relative_to - for fine-grained control relative to the round's start or end

Notifications are optional; if omitted, no reminders will be sent.

Scheduling of Auction type events is discussed below in Create a Sourcing Auction Event with a custom schedule.

Note also that the timezone has been set here as Europe/Dublin. This affects the round schedule time zone shown in Sourcing Optimizer and to suppliers when bidding. If this is not provided, the default organisation timezone will be used.

The starts and ends values are expected in ISO8601 timestamp format, and are timezone-aware. The first round is created with UTC timestamps, and the second is UTC-0500 (US East). This does not affect the timezone displayed in Sourcing Optimizer, but can be used for consistency if your application is already working in a particular timezone.

{
    "name": "Basic event with scheduling",
    "description": "An example event using scheduled bidding rounds",
    "timezone": "Europe/Dublin",
    "schedule": [
        {
            "starts": "2030-01-01T17:00:00Z",
            "ends": "2030-01-30T17:00:00Z",
            "notifications": [
                {
                    "reminder_type": "PENDING_INVITE",
                    "notify_after_seconds": 86400
                }
            ]
        },
        {
            "starts": "2030-02-01T09:00:00-0500",
            "ends": "2030-02-07T17:00:00-0500"
        },
        {
            "starts": null,
            "ends": null
        }
    ],
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "settings": { "is_test": true }
}

Create a Sourcing Auction Event with a custom schedule

The below example creates a minimal bid-sheet for an auction event type with custom schedule in the schedule key of the request. The approach is similar to the RFQ example above, however we only support a single schedule entry for "auction" event types. The default bidding extension rule of 3 minutes will apply.

As with RFQ events, the input times are timezone-aware, and if no schedule is provided, Sourcing Optimizer will automatically start the event immediately on publish and set it to close after 1 hour.

{
    "name": "Basic auction event with scheduling",
    "event_type": "AUCTION",
    "schedule": [
        {
            "starts": "2030-01-01T09:00:00Z",
            "ends": "2030-01-01T12:00:00Z"
        }
    ],
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "settings": { "is_test": true }
}

Create a Sourcing Event with multiple currencies

The below example creates a minimal bid-sheet for an event with a primary currency and more than one secondary currency. The primary currency is set by the primary_currency field, secondary currencies and their exchange rates are set by the secondary_currencies field. If the primary_currency is not specified, it will revert to the organisation's default currency.

The Unit Price column has been configured with a currency of GBP.

{
    "name": "Basic sourcing event with currencies",
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "currency_code": "GBP",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "primary_currency": "EUR",
    "secondary_currencies": [
        {
            "code": "GBP",
            "exchange_rate": "0.85"
        },
        {
            "code": "USD",
            "exchange_rate": "1.05"
        }
    ],
    "settings": { "is_test": true }
}

Create a Sourcing Event with floating currency columns

The example below creates a Sourcing Event which uses the floating currency column feature of Sourcing Optimizer, that allows event organizers to link multiple price components collected from a supplier to a single bid-sheet column defining the currency of pricing for this group of columns.

A floating currency bid-sheet column is defined by setting the column_type to CURRENCY. While floating currencies can be set by the buyer or selected by the supplier (optionally from a pre-defined list), this example shows one that is selected by the buyer for each lot. This can be seen in bid_sheet.lots, where the currencies are provided as buyer input values for each lot. The input_type for floating currency columns does not need to be set as it can only be TEXT.

If the input_by was set to SUPPLIER_INPUT, the suppliers would be able to select which currency they wished to use for pricing information for the linked pricing components on each lot. The list of available currencies can be the full list of currencies defined on the event, or can be limited using the options field.

Note: values for currency columns must always be the ISO-4217 currency "code" text - e.g. "USD".

{
    "name": "Basic sourcing event with floating currency column",
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Currency Selection Column",
                "column_type": "CURRENCY",
                "input_by": "BUYER_INPUT"
            },
            {
                "name": "Linked Input Column 1",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "currency_column": "Currency Selection Column"
            },
            {
                "name": "Linked Input Column 2",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "currency_column": "Currency Selection Column"
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" },
                    { "column": "Currency Selection Column", "value": "USD" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" },
                    { "column": "Currency Selection Column", "value": "USD" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Linked Input Column 1 + Linked Input Column 2",
    "primary_currency": "EUR",
    "secondary_currencies": [
        { "code": "GBP", "exchange_rate": "0.85" },
        { "code": "USD", "exchange_rate": "1.05" }
    ],
    "settings": { "is_test": true }
}

Create a Sourcing Event with RFI

The example below creates a Sourcing Event which uses the RFI feature of Sourcing Optimizer, that allows event organizers to capture information about suppliers and the goods and services they provide.

One or more RFI questions may be added under the questions key of the rfi section. Each question has a mandatory text field which defines the question along with an optional description field. The input_type is used to define the type of input for the question.

The question_type attribute is used to define gating level for the suppliers to access event information and documents. The various gating levels are explained below:

  • OPTIONAL: Suppliers are not required to provide a response to access the bid sheet
  • MANDATORY: Suppliers are expected to provide a response but access the bid sheet without providing one
  • GATING: Suppliers are required to provide a response to access the bid sheet
  • EVENT_GATING: Suppliers are required to provide a response to access event information and documents

Note: The options field for a question is only available for input types SINGLE_CHOICE and MULTIPLE_CHOICE. The field satisfies_gating denotes whether the option will satisfy gating or not. The value field is the 'value' of the option for the question that will be displayed to the supplier

Note: It is possible to optionally supply a template_rfi_event_id allowing RFI content from existing Sourcing Events to act as a basis for new jobs. Any questions submitted in the payload will be supplemented by any already present in the template_rfi_event_id.

{
    "name": "Basic RFI",
    "description": "A very simple example for RFI",
    "timezone": "Europe/Dublin",
    "bid_sheet": {
      "column_roles": { "lot_identifier": "Lot Name" },
      "columns": [
        {
          "name": "Lot Name",
          "column_type": "INPUT",
          "input_by": "BUYER_INPUT",
          "input_type": "TEXT"
        },
        {
          "name": "Quantity",
          "column_type": "INPUT",
          "input_by": "BUYER_INPUT",
          "input_type": "NUMBER",
          "precision": 0
        },
        {
          "name": "Unit Price",
          "column_type": "INPUT",
          "input_by": "SUPPLIER_INPUT",
          "input_type": "CURRENCY",
          "precision": 2
        }
      ],
      "lots": [
        {
          "name": "Lot 1",
          "values": [
            { "column": "Lot Name", "value": "Lot 1" },
            { "column": "Quantity", "value": "100" }
          ]
        },
        {
          "name": "Lot 2",
          "values": [
            { "column": "Lot Name", "value": "Lot 2" },
            { "column": "Quantity", "value": "200" }
          ]
        }
      ]
    },
    "primary_cost_calculation": "Unit Price * Quantity",
    "rfi": {
      "questions": [
        {
          "text": "What is your company’s annual revenue?",
          "description": "This is just to understand the size of your company",
          "input_type": "NUMBER",
          "question_type": "OPTIONAL"
        },
        {
          "text": "What is your preferred currency for payment?",
          "description": "This will help us understand your preferred currency for payment",
          "input_type": "CURRENCY",
          "question_type": "OPTIONAL"
        },
        {
          "text": "When was you company established?",
          "input_type": "DATE",
          "question_type": "MANDATORY"
        },
        {
          "text": "Are there any pending legal issues or complaints against your company? If yes, please explain.",
          "description": "This will be reviewed strictly in order to maintain compliance",
          "input_type": "TEXT",
          "question_type": "GATING"
        },
        {
          "text": "Please provide a signed copy of our Mutual Non Disclosure Agreement",
          "description": "This is required for legal purposes",
          "input_type": "FILE",
          "question_type": "GATING"
        },
        {
          "text": "Does your company agree to our Terms and Conditions?",
          "description": "This means that you agree to the Terms and Conditions of our company",
          "input_type": "SINGLE_CHOICE",
          "question_type": "EVENT_GATING",
          "options": [
            {
              "satisfies_gating": true,
              "value": "Yes"
            },
            {
              "satisfies_gating": false,
              "value": "No"
            }
          ]
        },
        {
          "text": "What certifications are held by your company?",
          "input_type": "MULTIPLE_CHOICE",
          "question_type": "EVENT_GATING",
          "options": [
            {
              "satisfies_gating": true,
              "value": "ISO9001:5000"
            },
            {
              "satisfies_gating": false,
              "value": "ISO9001:6000"
            },
            {
              "satisfies_gating": true,
              "value": "ISO9001:7000"
            },
            {
              "satisfies_gating": false,
              "value": "ISO9001:8000"
            }
          ]
        }
      ]
    },
    "settings": { "is_test": true }
  }

Create a more advanced RFI

The example below creates a Sourcing Event with a more involved RFI than the previous example, using more of the features available in Sourcing Optimizer. Categories can be assigned to questions which can be used for grouping related questions. For this, you need to first define the categories under categories key under rfi as seen below and then one or more categories can be assigned to questions. Also, a unique identifier can be used identify a question which can be specified under the identifier key. The example below depicts various questions being categorized and assigned unique identifiers.

Note: identifier for the question will be displayed to the bidder and included in error messages.

{
    "name": "Advanced RFI",
    "description": "An advanced example for RFI",
    "timezone": "Europe/Dublin",
    "bid_sheet": {
      "column_roles": { "lot_identifier": "Lot Name" },
      "columns": [
        {
          "name": "Lot Name",
          "column_type": "INPUT",
          "input_by": "BUYER_INPUT",
          "input_type": "TEXT"
        },
        {
          "name": "Quantity",
          "column_type": "INPUT",
          "input_by": "BUYER_INPUT",
          "input_type": "NUMBER",
          "precision": 0
        },
        {
          "name": "Unit Price",
          "column_type": "INPUT",
          "input_by": "SUPPLIER_INPUT",
          "input_type": "CURRENCY",
          "precision": 2
        }
      ],
      "lots": [
        {
          "name": "Lot 1",
          "values": [
            { "column": "Lot Name", "value": "Lot 1" },
            { "column": "Quantity", "value": "100" }
          ]
        },
        {
          "name": "Lot 2",
          "values": [
            { "column": "Lot Name", "value": "Lot 2" },
            { "column": "Quantity", "value": "200" }
          ]
        }
      ]
    },
    "primary_cost_calculation": "Unit Price * Quantity",
    "rfi": {
      "categories": [
        {
          "name": "Legal",
          "description": "Needed for legal purposes"
        },
        {
          "name": "General",
          "description": "General Information"
        }
      ],
      "questions": [
        {
          "text": "What is your company’s annual revenue?",
          "description": "This is just to understand the size of your company",
          "input_type": "NUMBER",
          "question_type": "OPTIONAL",
          "categories" : ["General"],
          "identifier": "REVENUE"
        },
        {
          "text": "What is your preferred currency for payment?",
          "description": "This will help us understand your preferred currency for payment",
          "input_type": "CURRENCY",
          "question_type": "OPTIONAL",
          "categories" : ["General"],
          "identifier": "CURRENCY"
        },
        {
          "text": "When was you company established?",
          "input_type": "DATE",
          "question_type": "MANDATORY",
          "categories" : ["General"],
          "identifier": "ESTABLISHED"
        },
        {
          "text": "Are there any pending legal issues or complaints against your company? If yes, please explain.",
          "description": "This will be reviewed strictly in order to maintain compliance",
          "input_type": "TEXT",
          "question_type": "GATING",
          "categories" : ["General","Legal"],
          "identifier": "COMPLAINTS"
        },
        {
          "text": "Please provide a signed copy of our Mutual Non Disclosure Agreement(NDA)",
          "description": "This is required for legal purposes",
          "input_type": "FILE",
          "question_type": "GATING",
          "categories" : ["General","Legal"],
          "identifier": "NDA"
        },
        {
          "text": "Does your company agree to our Terms and Conditions?",
          "description": "This means that you agree to the Terms and Conditions of our company",
          "input_type": "SINGLE_CHOICE",
          "question_type": "EVENT_GATING",
          "categories" : ["General","LEGAL"],
          "identifier": "T&C",
          "options": [
            {
              "satisfies_gating": true,
              "value": "Yes"
            },
            {
              "satisfies_gating": false,
              "value": "No"
            }
          ]
        },
        {
          "text": "What certifications are held by your company?",
          "input_type": "MULTIPLE_CHOICE",
          "question_type": "EVENT_GATING",
          "categories" : ["General"],
          "identifier": "CERTIFICATIONS",
          "options": [
            {
              "satisfies_gating": true,
              "value": "ISO9001:5000"
            },
            {
              "satisfies_gating": false,
              "value": "ISO9001:6000"
            },
            {
              "satisfies_gating": true,
              "value": "ISO9001:7000"
            },
            {
              "satisfies_gating": false,
              "value": "ISO9001:8000"
            }
          ]
        }
      ]
    },
    "settings": { "is_test": true }
  }

Auto-provision new users

The example below creates a Sourcing Event and also creates and associates the users which do not yet exist. It does this by auto-provisioning the user accounts with the specified details. It is possible to do this for both the created_by user:

{
    "name": "Auto-provision created_by",
    "created_by": {
        "email": "john.doe@example.com",
        "full_name": "John Doe"
    },
    "bid_sheet": {
        "column_roles": {
            "lot_identifier": "Lot Name"
        },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    {
                        "column": "Lot Name",
                        "value": "Lot 1"
                    },
                    {
                        "column": "Quantity",
                        "value": "100"
                    }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    {
                        "column": "Lot Name",
                        "value": "Lot 2"
                    },
                    {
                        "column": "Quantity",
                        "value": "200"
                    }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "settings": {
        "is_test": true
    }
}

as well as any user specified in the roles:

{
    "name": "Auto-provision new users",
    "bid_sheet": {
        "column_roles": { "lot_identifier": "Lot Name" },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    { "column": "Lot Name", "value": "Lot 1" },
                    { "column": "Quantity", "value": "100" }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    { "column": "Lot Name", "value": "Lot 2" },
                    { "column": "Quantity", "value": "200" }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "roles": [
        { "email": "john.doe@example.buyer.com", "full_name": "John Doe", "role_type": "EDITOR" },
        { "email": "jane.doe@example.buyer.com", "full_name": "Jane Doe", "role_type": "VIEWER" }
    ],
    "settings": { "is_test": true }
}

Note: That for a successful user auto-provision, it is necessary to supply both an email and a full_name at a minimum. If your organisation makes use of SSO for authentication, an sso_id for each user may also be required:

{
    "name": "Auto-provision with SSO",
    "created_by": {
        "email": "john.doe@example.com",
        "full_name": "John Doe",
        "sso_id": "john_doe"
    },
    "bid_sheet": {
        "column_roles": {
            "lot_identifier": "Lot Name"
        },
        "columns": [
            {
                "name": "Lot Name",
                "column_type": "INPUT",
                "input_by": "BUYER_INPUT",
                "input_type": "TEXT"
            },
            {
                "name": "Unit Price",
                "column_type": "INPUT",
                "input_by": "SUPPLIER_INPUT",
                "input_type": "CURRENCY",
                "precision": 2
            }
        ],
        "lots": [
            {
                "name": "Lot 1",
                "values": [
                    {
                        "column": "Lot Name",
                        "value": "Lot 1"
                    },
                    {
                        "column": "Quantity",
                        "value": "100"
                    }
                ]
            },
            {
                "name": "Lot 2",
                "values": [
                    {
                        "column": "Lot Name",
                        "value": "Lot 2"
                    },
                    {
                        "column": "Quantity",
                        "value": "200"
                    }
                ]
            }
        ]
    },
    "primary_cost_calculation": "Unit Price",
    "roles": [
        {
            "email": "john.doe@example.buyer.com",
            "full_name": "John Doe",
            "sso_id": "john_doe",
            "role_type": "EDITOR"
        },
        {
            "email": "jane.doe@example.buyer.com",
            "full_name": "Jane Doe",
            "sso_id": "jane_doe",
            "role_type": "VIEWER"
        }
    ],
    "settings": {
        "is_test": true
    }
}