Skip to content

Managing Feedback

Feedback submissions are the primary resource in MagicFeedback. Each submission records a set of answers for a specific integration and product.

feedback = client.feedbacks.create({
"name": "User survey response",
"type": "APP",
"identity": "MAGICFORM",
"answers": [
{"key": "nps", "value": "9"},
{"key": "reason", "value": "Fast and reliable"},
],
"integrationId": "0eb9d270-6dd7-11ef-9987-21e04f383573",
"companyId": "YOUR_COMPANY_ID",
"productId": "YOUR_PRODUCT_ID",
})
print(feedback["id"])
FieldTypeDescription
namestringHuman-readable label for this submission
typestringSource type — e.g. "APP", "DOCUMENT"
identitystringRenderer identity — e.g. "MAGICFORM"
integrationIdstringUUID of the integration this feedback belongs to
companyIdstringYour company identifier
productIdstringThe product this feedback is associated with

The SDK automatically wraps a bare string value in a list. Both forms below are equivalent:

{"key": "comment", "value": "Great product"}
{"key": "comment", "value": ["Great product"]}

You can always pass a list directly if you need multiple values for one key.

feedbacks = client.feedbacks.get()

Filter the results with a LoopBack-style filter dict (see Querying):

feedbacks = client.feedbacks.get({
"where": {"companyId": "YOUR_COMPANY_ID"},
"limit": 50,
})
feedback = client.feedbacks.get_id("feedback-uuid-here")

Pass a filter as the second argument to shape the returned fields:

feedback = client.feedbacks.get_id("feedback-uuid-here", {"fields": {"answers": True}})
updated = client.feedbacks.update("feedback-uuid-here", {
"name": "Updated label",
})

Only the fields you pass are changed; the rest remain unchanged.

client.feedbacks.delete("feedback-uuid-here")

Returns the deleted object on success.

Attach a file to an existing feedback submission. The file is sent as a multipart upload.

attachment = client.feedbacks.upload_attachment(
"feedback-uuid-here",
file_path="/path/to/report.pdf",
)

Pass optional arguments to control the display name and attach extra metadata:

attachment = client.feedbacks.upload_attachment(
"feedback-uuid-here",
file_path="/path/to/report.pdf",
filename="q3-report.pdf", # overrides the file name shown in the dashboard
extra_data={"source": "crm", "year": 2026},
)
ParameterTypeDescription
feedback_idstringID of the feedback to attach the file to
file_pathstringAbsolute or relative path to the file on disk
filenamestring | NoneDisplay name in the dashboard — defaults to the file’s base name
extra_datadict | NoneAny JSON-serialisable dict stored alongside the attachment