RFI Responses feed
Details of RFI (Request for Information) question responses from suppliers in a Sourcing Event are available through the RFI Responses feed. The feed provides a record per supplier per question, covering all response types including text, numeric, currency, choice selections, and file uploads. See the OpenAPI specification for full details.
The feed is updated after certain key occasions in the lifecycle of an event:
- The event is initially published, or re-published
- A bidding round is closed
- The event is closed after all bidding rounds have been completed
Any event which is in Draft state will not appear in the feed. Events without an RFI will not produce any records.
Question edits between lifecycle points (e.g. during event setup) are not emitted independently — they are captured in the next lifecycle snapshot (publish, round close, event close, re-publish).
Record types
The primary records returned by the feed are SupplierQuestionResponse entries, each representing one supplier's
response to a single question. These reference questions by UUID rather than embedding question metadata directly.
Question definitions are available via the ?include=questions parameter, which returns RfiQuestion records
containing the full question text, type, options, and other metadata. This separation means that when a purchaser
edits a question, only the question record is updated — response records are only updated when the actual response
data changes.
Including additional data
The RFI Responses feed supports the following includes via the include query parameter:
| Include | Description |
|---|---|
sourcing_events |
Sourcing Event summary data (name, status, tags, currencies) |
suppliers |
Supplier data (name, external ID, contacts) |
questions |
RFI question definitions (text, type, options, categories) |
The questions include is particularly important for interpreting response data. Each response references a
question_uuid which can be resolved against the questions in the includes to determine the question text,
input type, available options, and whether the question is gating.
Details of the includes feature are provided in the Including additional data section of the usage page.
Examples
The following examples show how the feed may be used to get RFI data. In each example, we show the URL used with a
GET request and the corresponding response JSON. Click on the Response section to see the full response content.
These examples are specific to the RFI Responses feed, to be used with the /feeds/rfi-responses endpoint which is
more fully described in the OpenAPI specification.
Basic RFI Responses feed
This example shows simple use of the RFI Responses feed. It is unfiltered so returns all SupplierQuestionResponse
records in the order they have been added or modified, starting from the oldest.
Including question and supplier data
This example shows the include feature being used to request question definitions, sourcing event summaries, and
supplier data alongside the response records.
Filtered example
The below example filters to a specific supplier and includes sourcing event data. This demonstrates how filters and includes can be combined.
Filters
The following filters are available on the RFI Responses feed. These are also detailed on the OpenAPI specification. Filters are applied additively.
Filter to records associated with a specific Sourcing Event.
Filter to records associated with a specific Sourcing Request.
Filter to records associated with Sourcing Events that have specific tags.
Filter to records modified within a date range. One or both ends may be provided. If a date is supplied
without a time, the time defaults to 00:00 UTC.
Response fields
Each SupplierQuestionResponse record contains:
| Field | Type | Description |
|---|---|---|
id |
integer | Unique record identifier (for tracking updates) |
sourcing_event |
UUID | The sourcing event this response belongs to |
sourcing_request |
UUID | The sourcing request, if applicable |
supplier |
UUID | The supplier (bid submission) who provided the response |
question_uuid |
UUID | Reference to the question (resolve via ?include=questions) |
value |
string | Response value — formatted per input type (text, formatted number, date) |
selected_options |
array | For choice types: list of {value, satisfies_gating} objects |
comment |
string | Optional supplier comment |
currency |
string | ISO 4217 currency code, for CURRENCY input type |
document_file_uuids |
array | File UUIDs for FILE input type responses |
modified |
datetime | When this record was last updated |
Null fields are omitted from the response.
Question fields
Each RfiQuestion record (via ?include=questions) contains:
| Field | Type | Description |
|---|---|---|
id |
UUID | Question identifier |
sourcing_event |
UUID | The sourcing event |
identifier |
string | Question identifier label (e.g. "Q1", "Q1.2") |
question_text |
string | The question text |
question_type |
string | GATING, EVENT_GATING, MANDATORY, or OPTIONAL |
input_type |
string | TEXT, NUMBER, CURRENCY, SINGLE_CHOICE, MULTIPLE_CHOICE, DATE, or FILE |
parent_question_uuid |
UUID | Parent question for hierarchical questions |
categories |
array | Category names assigned to the question |
options |
array | For choice types: list of {value, satisfies_gating} objects |
allow_comments |
boolean | Whether supplier comments are enabled |
supporting_documents_enabled |
boolean | Whether file attachments are enabled |
currency |
string | Default currency for CURRENCY input type |
minimum_value |
string | Minimum allowed value for numeric types |
maximum_value |
string | Maximum allowed value for numeric types |
precision |
integer | Decimal precision for numeric types |
attachment_file_uuids |
array | Buy-side file UUIDs (purchaser-attached documents) |
modified |
datetime | When this question was last updated |
Document handling
RFI data includes two types of file attachments, both represented as arrays of stable file UUIDs:
| Location | Field | Description |
|---|---|---|
Questions (?include=questions) |
attachment_file_uuids |
Buy-side documents attached by the purchaser (e.g. specification sheets, reference templates) |
Responses (data[]) |
document_file_uuids |
Supply-side documents uploaded by the supplier (e.g. certificates, policy documents) |
File UUIDs are long-lived and stable — they will not change between feed updates. To retrieve the actual files,
submit a generate-download-links job via the Intake API Jobs endpoint (POST /api/jobs) with the file UUIDs
in the job payload. The job will resolve each UUID to a download URL. Poll the job status until it reaches
PROCESSED, at which point the download URLs will be available in the job result.
Typical consumer workflow
- Fetch RFI data:
GET /api/feeds/rfi-responses?include=questions - Extract file UUIDs from
document_file_uuids(responses) andattachment_file_uuids(questions) - Submit a file resolution job:
POST /api/jobswith job typegenerate-download-linksand the collected UUIDs - Poll
GET /api/jobs/{id}until status isPROCESSED - Read download URLs from the job result and fetch the files
Data updates
The data returned by the RFI Responses feed represents a snapshot of the latest RFI state. Each item in data
corresponds to one supplier's answer to one question. Records are updated when response data changes and are
appended to the end of the feed (see Data Updates for details on how updates work).
Coverage gaps can be detected by comparing the list of questions (from ?include=questions) against the responses
per supplier. If a supplier has not answered a question, no response record will exist for that supplier-question
pair.
Records returned from the RFI Responses feed can be uniquely identified using the id field. This ID can be used
to track changes as described in the Data Updates section of the usage document.