Feedqip Log in

Webhook Integration

Submit feedback programmatically from any backend, CI pipeline, or third-party service using a single REST endpoint and an API key.

When to use the webhook

Scenario

DataLoop is a B2B analytics platform. Their support team uses Zendesk, but the product team never sees those tickets until someone manually copies them into a spreadsheet during the weekly meeting. By the time a pattern is spotted, three weeks have passed. DataLoop's engineering lead wants every closed Zendesk ticket that includes user feedback to land in Feedqip automatically — no manual copying, no delays.

The webhook is ideal when feedback originates inside a system your code already controls. Common use cases include:

  • Forwarding support tickets from Zendesk, Freshdesk, or a custom helpdesk.
  • Capturing NPS or CSAT responses from survey tools via Zapier or a direct API call.
  • Piping user comments from a mobile app's in-app feedback dialog.
  • Batch-importing historical feedback from a CSV or database during initial setup.

For DataLoop, the solution is a 20-line script triggered by a Zendesk webhook. Every time a ticket is closed, the script sends the ticket body to Feedqip. The product team now sees real-time feedback without ever opening Zendesk.

Prerequisites

  1. 1

    Create a product

    Navigate to Products in your dashboard and create a product that will receive the feedback.

  2. 2

    Generate an API key

    Open the product's Integration → API Keys page and click Generate Key. Copy the key immediately — it's shown only once.

Endpoint reference

URL

POST https://your-domain.com/api/v1/feedback

Headers

Content-Type: application/json
X-API-Key: lc_your_api_key_here

Request body

{
  "message": "Your feedback message here",
  "metadata": {
    "email": "[email protected]",
    "page_url": "/pricing",
    "user_agent": "MyApp/1.0"
  }
}

Fields

Field Type Required Description
message string Yes The feedback text (1–5 000 characters).
metadata object No Arbitrary key/value pairs for context (email, URL, user agent, etc.).

Response codes

Code Meaning
201 Feedback created successfully.
401 Missing or invalid API key.
422 Validation error (missing message, exceeds length, etc.).
429 Rate limit exceeded (60 requests / minute per key).

Code examples

Copy the snippet for your language. Replace YOUR_API_KEY with the key you generated and https://your-domain.com with your Feedqip instance URL.

import requests

resp = requests.post(
    "https://your-domain.com/api/v1/feedback",
    headers={
        "Content-Type": "application/json",
        "X-API-Key": "YOUR_API_KEY",
    },
    json={
        "message": "The checkout page is confusing on mobile.",
        "metadata": {"email": "[email protected]", "source": "zendesk"},
    },
)
print(resp.status_code, resp.json())

Best practices

1

Include metadata

Add context like the user's email, page URL, or app version. This makes it easier to follow up and helps Feedqip's classifier spot patterns faster.

2

Handle rate limits gracefully

The API allows 60 requests per minute per key. If you're batch-importing, add a short delay between requests or use exponential back-off on 429 responses.

3

Rotate keys periodically

Generate a new key every quarter (or sooner if a key may have been exposed). Revoke the old key from the API Keys management page.

4

Store keys securely

Use environment variables or a secrets manager. Never commit API keys to source control.

Next steps