You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
These endpoints enable testers to generate secure short links for sharing dispute resolution information publicly. This is useful for cases where proof of purchase, feedback, and publication needs to be shared with a third party or dispute resolution authority.
300
+
301
+
#### Link Generation
302
+
303
+
-**POST `/api/link/public`** - Generate a short public link for dispute resolution - requires write:api permission
304
+
- Query parameters:
305
+
-`duration` (required): Duration in seconds for which the link should be valid (minimum 60, maximum 31536000 / 1 year)
306
+
-`purchase` (required): The UUID of the purchase to create a link for
307
+
- The purchase must have both feedback and publication before a link can be created
308
+
- Link codes are 7 characters long, containing digits (0-9) and letters (a-z, A-Z)
309
+
- Each generated code is unique and automatically checked for collisions
Copy file name to clipboardExpand all lines: client/public/openapi.json
+180-1Lines changed: 180 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
"openapi": "3.0.0",
3
3
"info": {
4
4
"title": "Feedback Flow API",
5
-
"version": "1.4.0"
5
+
"version": "1.5.0"
6
6
},
7
7
"paths": {
8
8
"/api/testers": {
@@ -1830,6 +1830,185 @@
1830
1830
}
1831
1831
}
1832
1832
}
1833
+
},
1834
+
"/api/link/public": {
1835
+
"post": {
1836
+
"summary": "Generate a short public link for dispute resolution",
1837
+
"description": "Creates a short public link that allows sharing dispute information.\nThe link is only valid if the purchase has:\n- A feedback entry (feedback created)\n- A publication entry (feedback published)\n\nThe link will expire after the specified duration (in seconds).\nRequires write:api permission.\n",
1838
+
"tags": [
1839
+
"Links"
1840
+
],
1841
+
"parameters": [
1842
+
{
1843
+
"name": "duration",
1844
+
"in": "query",
1845
+
"required": true,
1846
+
"description": "Duration in seconds for which the link should be valid",
1847
+
"schema": {
1848
+
"type": "integer",
1849
+
"minimum": 60,
1850
+
"maximum": 31536000,
1851
+
"example": 3600
1852
+
}
1853
+
},
1854
+
{
1855
+
"name": "purchase",
1856
+
"in": "query",
1857
+
"required": true,
1858
+
"description": "The UUID of the purchase to create a link for",
1859
+
"schema": {
1860
+
"type": "string",
1861
+
"format": "uuid"
1862
+
}
1863
+
}
1864
+
],
1865
+
"responses": {
1866
+
"200": {
1867
+
"description": "Short link successfully generated",
"description": "Purchase not found or not owned by user"
1900
+
}
1901
+
}
1902
+
}
1903
+
},
1904
+
"/api/link/{code}": {
1905
+
"get": {
1906
+
"summary": "Access public dispute resolution information",
1907
+
"description": "Retrieves complete dispute resolution information for a valid short link.\nThis endpoint requires no authentication and provides:\n- Purchase details (order number, date, amount, screenshot)\n- Feedback details (creation date, content)\n- Publication details (publication date, screenshot)\n- Refund details if the purchase was refunded (amount, transaction ID)\n\nThe link must be valid (code format correct and not expired).\n\nNo permission required - public endpoint accessible with valid link code.\n",
1908
+
"tags": [
1909
+
"Links"
1910
+
],
1911
+
"parameters": [
1912
+
{
1913
+
"name": "code",
1914
+
"in": "path",
1915
+
"required": true,
1916
+
"description": "The 7-character unique link code",
1917
+
"schema": {
1918
+
"type": "string",
1919
+
"pattern": "^[0-9a-zA-Z]{7}$",
1920
+
"example": "aBc1234"
1921
+
}
1922
+
}
1923
+
],
1924
+
"responses": {
1925
+
"200": {
1926
+
"description": "Dispute resolution information successfully retrieved",
1927
+
"content": {
1928
+
"application/json": {
1929
+
"schema": {
1930
+
"type": "object",
1931
+
"properties": {
1932
+
"success": {
1933
+
"type": "boolean",
1934
+
"example": true
1935
+
},
1936
+
"data": {
1937
+
"type": "object",
1938
+
"properties": {
1939
+
"orderNumber": {
1940
+
"type": "string",
1941
+
"description": "The order number for the purchase",
1942
+
"example": "102-1234567-1234567"
1943
+
},
1944
+
"orderDate": {
1945
+
"type": "string",
1946
+
"format": "date",
1947
+
"description": "Date of the purchase",
1948
+
"example": "2024-03-15"
1949
+
},
1950
+
"purchaseAmount": {
1951
+
"type": "number",
1952
+
"description": "Amount paid for the purchase",
1953
+
"example": 99.99
1954
+
},
1955
+
"purchaseScreenshot": {
1956
+
"type": "string",
1957
+
"description": "Base64-encoded screenshot of the purchase"
1958
+
},
1959
+
"secondaryScreenshot": {
1960
+
"type": "string",
1961
+
"description": "Optional secondary screenshot (e.g., from publication)"
1962
+
},
1963
+
"feedbackDate": {
1964
+
"type": "string",
1965
+
"format": "date",
1966
+
"description": "Date when feedback was submitted",
1967
+
"example": "2024-03-16"
1968
+
},
1969
+
"feedbackText": {
1970
+
"type": "string",
1971
+
"description": "The feedback text provided by the tester"
1972
+
},
1973
+
"publicationDate": {
1974
+
"type": "string",
1975
+
"format": "date",
1976
+
"description": "Date when the feedback was published",
1977
+
"example": "2024-03-17"
1978
+
},
1979
+
"publicationScreenshot": {
1980
+
"type": "string",
1981
+
"description": "Base64-encoded screenshot of the publication"
1982
+
},
1983
+
"isRefunded": {
1984
+
"type": "boolean",
1985
+
"description": "Whether the purchase has been refunded",
1986
+
"example": false
1987
+
},
1988
+
"refundAmount": {
1989
+
"type": "number",
1990
+
"description": "Amount refunded (only if isRefunded is true)",
1991
+
"example": 99.99
1992
+
},
1993
+
"refundTransactionId": {
1994
+
"type": "string",
1995
+
"description": "Transaction ID of the refund (if available)"
0 commit comments