Skip to main content
GET
/
v1
/
feedback
/
{id}
Retrieve Feedback
curl --request GET \
  --url https://api.signa.so/v1/feedback/{id} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.signa.so/v1/feedback/{id}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.signa.so/v1/feedback/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.signa.so/v1/feedback/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://api.signa.so/v1/feedback/{id}"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.signa.so/v1/feedback/{id}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.signa.so/v1/feedback/{id}")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "id": "fbk_550e8400-e29b-41d4-a716-446655440000",
  "object": "feedback",
  "api_key_id": "key_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
  "type": "data_issue",
  "status": "resolved",
  "message": "The registered owner is out of date.",
  "resource_id": "tm_9f8e7d6c-5b4a-3210-fedc-ba9876543210",
  "request_ref": "req_01kpjabcdefghijkmnpqrstvwx",
  "field": "owner.name",
  "expected_value": "Acme Holdings LLC",
  "context": {
    "resource": {
      "found": true,
      "resource_type": "trademark",
      "office": "uspto",
      "jurisdiction": "US",
      "version": 3,
      "status_primary": "active",
      "source_updated_at": "2026-07-01T00:00:00.000Z",
      "updated_at": "2026-07-02T08:00:00.000Z"
    }
  },
  "resolution_note": "Corrected on the next USPTO sync; the assignment is now reflected.",
  "metadata": {},
  "created_at": "2026-07-10T12:40:00.000Z",
  "updated_at": "2026-07-11T09:15:00.000Z",
  "resolved_at": "2026-07-11T09:15:00.000Z",
  "request_id": "req_dX9pR4sU"
}

Overview

Returns a single feedback item by its fbk_ ID. Use it to poll a report as it moves through its status lifecycle so you know your report was seen and acted on. Reads are strictly org-scoped. A feedback ID that belongs to another organization returns 404 not_found, exactly like an ID that does not exist, so nothing leaks about other orgs’ reports. Any valid API key may read; no special scope is required. Retrieving feedback does not consume metered usage.

Status lifecycle

Every report starts at open and moves forward as the Signa team works it:
statusMeaning
openSubmitted and awaiting triage. This is the value on creation.
acknowledgedThe team has seen the report and is investigating.
resolvedThe report is closed. resolution_note explains the outcome and resolved_at is stamped. A “won’t fix” is a resolved with an explanatory note (there is no separate status).
Poll this endpoint (or filter List Feedback by status) to follow the transition.

Path Parameters

id
string
required
Feedback identifier (fbk_...) returned when you submitted the report.

Response

Same fields as a single feedback object.
{
  "id": "fbk_550e8400-e29b-41d4-a716-446655440000",
  "object": "feedback",
  "api_key_id": "key_1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
  "type": "data_issue",
  "status": "resolved",
  "message": "The registered owner is out of date.",
  "resource_id": "tm_9f8e7d6c-5b4a-3210-fedc-ba9876543210",
  "request_ref": "req_01kpjabcdefghijkmnpqrstvwx",
  "field": "owner.name",
  "expected_value": "Acme Holdings LLC",
  "context": {
    "resource": {
      "found": true,
      "resource_type": "trademark",
      "office": "uspto",
      "jurisdiction": "US",
      "version": 3,
      "status_primary": "active",
      "source_updated_at": "2026-07-01T00:00:00.000Z",
      "updated_at": "2026-07-02T08:00:00.000Z"
    }
  },
  "resolution_note": "Corrected on the next USPTO sync; the assignment is now reflected.",
  "metadata": {},
  "created_at": "2026-07-10T12:40:00.000Z",
  "updated_at": "2026-07-11T09:15:00.000Z",
  "resolved_at": "2026-07-11T09:15:00.000Z",
  "request_id": "req_dX9pR4sU"
}

Code Examples

curl "https://api.signa.so/v1/feedback/fbk_550e8400-e29b-41d4-a716-446655440000" \
  -H "Authorization: Bearer sig_YOUR_KEY"
import { Signa } from "@signa-so/sdk";

const signa = new Signa({ api_key: process.env.SIGNA_API_KEY });

const feedback = await signa.feedback.retrieve(
  "fbk_550e8400-e29b-41d4-a716-446655440000",
);

if (feedback.status === "resolved") {
  console.log("Resolved:", feedback.resolution_note);
}

Errors

StatusTypeDescription
400validation_errorMalformed feedback ID (not a prefixed ID at all)
400id_type_mismatchA well-formed ID of the wrong type (e.g. a tm_... where an fbk_... is expected)
401unauthorizedMissing or invalid API key
404not_foundFeedback does not exist or belongs to another organization