Send feedback from n8n, Zapier or Make
Send feedback from n8n, Zapier or Make
There is no RawQuotes app to install in n8n, Zapier or Make. You add one HTTP step that sends the feedback to a general source. The source's API tab in the panel shows the same address and examples, with your source's ID filled in.
What you need
- An API key. Create one under Settings → API keys; see Using the API with an API key. One key works for every source in your account. Sending with a key needs a plan with API access, listed in Plans and billing.
- The address, with the ID from the source's API tab:
POST https://app.rawquotes.io/api/v1/sources/YOUR-SOURCE-ID/items
- The body, JSON with a list of items.
textis the feedback, up to 10,000 characters.dateis when it was given, in one of the forms on Import a file; a date without a time zone is read as UTC, and withoutdatethe item gets the moment it was received.
{
"dryRun": false,
"items": [
{ "text": "Parcel came a week late.", "date": "2026-10-08T09:14:00Z" }
]
}
Set up the HTTP step
In each tool, map text and date to fields from the previous step.
- Add an HTTP Request node. Method:
POST. URL: the address above. - Authentication: Generic Credential Type → Header Auth. Name
Authorization, valueBearer rq_live_YOUR_KEY. - Body: JSON, and paste the body above.
- Add a Webhooks by Zapier action with the event Custom Request. Method:
POST. URL: the address above. - Headers:
Authorizationwith the valueBearer rq_live_YOUR_KEY, andContent-Typewithapplication/json. - Data: paste the body above.
Webhooks by Zapier needs a paid Zapier plan.
- Add an HTTP module, Make a request. Method:
POST. URL: the address above. - Headers:
Authorizationwith the valueBearer rq_live_YOUR_KEY. - Body type: Raw, content type JSON, and paste the body above.
curl -X POST https://app.rawquotes.io/api/v1/sources/YOUR-SOURCE-ID/items \
-H "Authorization: Bearer rq_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"dryRun": true, "items": [{"text": "Parcel came a week late.", "date": "2026-10-08T09:14:00Z"}]}'
Try it without saving
Set "dryRun": true and you get the full answer with nothing saved. Do this once before you switch
the step on:
{
"dryRun": true,
"items": [
{ "text": "Parcel came a week late.", "date": "2026-10-08T09:14:00Z" },
{ "text": "Great staff, quick refund.", "date": "2026-09-30" },
{ "text": "", "date": "2026-10-01" },
{ "text": "Still waiting for my order.", "date": "2026-11-30" }
]
}
The answer, shortened:
{
"dryRun": true,
"received": 4,
"accepted": 2,
"rejected": [
{ "index": 3, "code": "item.text_empty", "message": "Item 3: the text is empty.", "sample": "" },
{ "index": 4, "code": "item.date_in_future", "message": "Item 4: the date 2026-11-30 is in the future.", "sample": "Still waiting for my order." }
],
"datesWithoutTimeZone": 1,
"dateRange": { "from": "2026-09-30", "to": "2026-10-08" },
"ao": 2,
"countedWindowsToRecompute": [],
"itemsPerRequest": { "limit": 1000 },
"responsesThisMonth": { "used": 0, "adding": 2, "limit": 5000 }
}
rejectedlists every skipped item with its position in the request, from 1. The rest are saved.datesWithoutTimeZonecounts accepted dates read as UTC.aois what the accepted items use when insights are counted over them.countedWindowsToRecomputelists the months and weeks already counted that the items fall into. They show there only after you recompute that period.itemsPerRequest.limitis how many items your plan takes in one request, rejected ones included.
Every field is described in the API reference.
Errors
Errors are JSON with a code and a plain-sentence message, so they read well in an n8n or Zapier
run log:
{
"type": "bad_request",
"code": "import.too_many_items",
"message": "This request has 1,001 items. Your Basic plan accepts up to 1,000 per request. Nothing was saved.",
"status": 422
}
| Status | code | What it means |
|---|---|---|
200 | — | Bad items skipped and listed in rejected, the rest saved |
400 | validation.failed | No items, an empty list, or an item that is not an object of strings |
401 | http.unauthorized | The key is missing, wrong or removed |
403 | plan.feature_not_included | Your plan has no API access |
404 | source.not_found | No general source with this ID in your account. A survey's ID gets the same answer |
409 | idempotency.already_processed, idempotency.in_progress | A repeat with the same Idempotency-Key; see Idempotency |
413 | http.payload_too_large | The body is over 12 MB |
422 | import.too_many_items | More items than your plan takes in one request. Nothing was saved |
422 | import.monthly_responses_exceeded | The items would take your account past this month's responses limit. Nothing was saved |
A 422 refuses the whole request. Send fewer items per request, or wait for the next month.
A dry run is never refused for the monthly limit; it shows the numbers in responsesThisMonth.