Skip to content

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.

Request

GET /api/feeds/rfi-responses
Response
{
    "data": [
        {
            "id": 1,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000001",
            "selected_options": [
                { "value": "ISO 9001", "satisfies_gating": true }
            ],
            "document_file_uuids": [],
            "modified": "2026-04-10T09:30:00.000Z"
        },
        {
            "id": 2,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000002",
            "value": "150000.00",
            "currency": "EUR",
            "selected_options": [],
            "document_file_uuids": [],
            "modified": "2026-04-10T09:32:00.000Z"
        },
        {
            "id": 3,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-2222-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000001",
            "selected_options": [
                { "value": "ISO 14001", "satisfies_gating": false }
            ],
            "comment": "Certification in progress, expected Q3 2026",
            "document_file_uuids": [],
            "modified": "2026-04-11T14:00:00.000Z"
        },
        {
            "id": 4,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-2222-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000003",
            "selected_options": [],
            "document_file_uuids": ["00000000-0000-0000-0000-dddddddddd01"],
            "modified": "2026-04-11T14:05:00.000Z"
        }
    ],
    "next": null
}

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.

Request

GET /api/feeds/rfi-responses?include=sourcing_events&include=suppliers&include=questions
Response
{
    "data": [
        {
            "id": 1,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000001",
            "selected_options": [
                { "value": "ISO 9001", "satisfies_gating": true }
            ],
            "comment": "See attached certificate",
            "document_file_uuids": [],
            "modified": "2026-04-10T09:30:00.000Z"
        },
        {
            "id": 2,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000002",
            "value": "150000.00",
            "currency": "EUR",
            "selected_options": [],
            "document_file_uuids": [],
            "modified": "2026-04-10T09:32:00.000Z"
        },
        {
            "id": 3,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-2222-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000001",
            "selected_options": [
                { "value": "ISO 14001", "satisfies_gating": false }
            ],
            "comment": "Certification in progress, expected Q3 2026",
            "document_file_uuids": [],
            "modified": "2026-04-11T14:00:00.000Z"
        },
        {
            "id": 4,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-2222-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000003",
            "selected_options": [],
            "document_file_uuids": ["00000000-0000-0000-0000-dddddddddd01"],
            "modified": "2026-04-11T14:05:00.000Z"
        }
    ],
    "includes": {
        "sourcing_events": [
            {
                "id": "00000000-1111-0000-0000-000000000000",
                "name": "Q2 Packaging RFI",
                "status": "OPEN",
                "type": "RFQ",
                "primary_currency": "EUR",
                "tags": [
                    { "name": "Category", "value": "PACKAGING" }
                ]
            }
        ],
        "suppliers": [
            {
                "id": "00000000-1111-1111-0000-000000000000",
                "name": "Acme Corp",
                "external_id": "SUP-001"
            },
            {
                "id": "00000000-1111-2222-0000-000000000000",
                "name": "Global Packaging Ltd",
                "external_id": "SUP-002"
            }
        ],
        "questions": [
            {
                "id": "00000000-0000-0000-1111-000000000001",
                "sourcing_event": "00000000-1111-0000-0000-000000000000",
                "identifier": "Q1",
                "question_text": "Which quality certifications does your organisation hold?",
                "question_type": "GATING",
                "input_type": "SINGLE_CHOICE",
                "categories": ["Compliance"],
                "options": [
                    { "value": "ISO 9001", "satisfies_gating": true },
                    { "value": "ISO 14001", "satisfies_gating": false },
                    { "value": "None", "satisfies_gating": false }
                ],
                "allow_comments": true,
                "supporting_documents_enabled": false,
                "precision": 6,
                "attachment_file_uuids": [],
                "modified": "2026-04-08T10:00:00.000Z"
            },
            {
                "id": "00000000-0000-0000-1111-000000000002",
                "sourcing_event": "00000000-1111-0000-0000-000000000000",
                "identifier": "Q2",
                "question_text": "What is your annual revenue?",
                "question_type": "MANDATORY",
                "input_type": "CURRENCY",
                "categories": ["Financial"],
                "options": [],
                "allow_comments": false,
                "supporting_documents_enabled": false,
                "currency": "EUR",
                "minimum_value": "0",
                "precision": 2,
                "attachment_file_uuids": [],
                "modified": "2026-04-08T10:00:00.000Z"
            },
            {
                "id": "00000000-0000-0000-1111-000000000003",
                "sourcing_event": "00000000-1111-0000-0000-000000000000",
                "identifier": "Q3",
                "question_text": "Please upload your sustainability policy document",
                "question_type": "OPTIONAL",
                "input_type": "FILE",
                "categories": ["Compliance"],
                "options": [],
                "allow_comments": false,
                "supporting_documents_enabled": true,
                "precision": 6,
                "attachment_file_uuids": [],
                "modified": "2026-04-08T10:00:00.000Z"
            }
        ]
    },
    "next": null
}

Filtered example

The below example filters to a specific supplier and includes sourcing event data. This demonstrates how filters and includes can be combined.

Request

GET /api/feeds/rfi-responses?include=sourcing_events&sourcing_event=00000000-1111-0000-0000-000000000000&modified_after=2026-04-10&modified_before=2026-04-10T12:00:00Z
Response
{
    "data": [
        {
            "id": 1,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000001",
            "selected_options": [
                { "value": "ISO 9001", "satisfies_gating": true }
            ],
            "comment": "See attached certificate",
            "document_file_uuids": [],
            "modified": "2026-04-10T09:30:00.000Z"
        },
        {
            "id": 2,
            "sourcing_event": "00000000-1111-0000-0000-000000000000",
            "supplier": "00000000-1111-1111-0000-000000000000",
            "question_uuid": "00000000-0000-0000-1111-000000000002",
            "value": "150000.00",
            "currency": "EUR",
            "selected_options": [],
            "document_file_uuids": [],
            "modified": "2026-04-10T09:32:00.000Z"
        }
    ],
    "includes": {
        "sourcing_events": [
            {
                "id": "00000000-1111-0000-0000-000000000000",
                "name": "Q2 Packaging RFI",
                "status": "OPEN",
                "type": "RFQ",
                "primary_currency": "EUR",
                "tags": [
                    { "name": "Category", "value": "PACKAGING" }
                ]
            }
        ]
    },
    "next": null
}

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.

GET /api/feeds/rfi-responses?sourcing_event=00000000-1111-0000-0000-000000000000

Filter to records associated with a specific Sourcing Request.

GET /api/feeds/rfi-responses?sourcing_request=00000000-1111-0000-0000-111111111111

Filter to records associated with Sourcing Events that have specific tags.

GET /api/feeds/rfi-responses?filter[sourcing_event.tags.Category]=LOGISTICS

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.

GET /api/feeds/rfi-responses?modified_after=2026-01-01&modified_before=2026-04-01

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

  1. Fetch RFI data: GET /api/feeds/rfi-responses?include=questions
  2. Extract file UUIDs from document_file_uuids (responses) and attachment_file_uuids (questions)
  3. Submit a file resolution job: POST /api/jobs with job type generate-download-links and the collected UUIDs
  4. Poll GET /api/jobs/{id} until status is PROCESSED
  5. 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.