User
Publish to social feed
Publishes an activity item to the public Social Feed. Publishing a PnL card forces its visibility to public. Idempotent per (user, source).
POST
/
v1
/
user
/
feed
Publish to social feed
curl --request POST \
--url https://api.hyperprop.com/platform/v1/user/feed \
--header 'Content-Type: application/json' \
--data '
{
"sourceId": "<string>",
"caption": "<string>"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/user/feed"
payload = {
"sourceId": "<string>",
"caption": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({sourceId: '<string>', caption: '<string>'})
};
fetch('https://api.hyperprop.com/platform/v1/user/feed', 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.hyperprop.com/platform/v1/user/feed",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceId' => '<string>',
'caption' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/user/feed"
payload := strings.NewReader("{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperprop.com/platform/v1/user/feed")
.header("Content-Type", "application/json")
.body("{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/user/feed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Published to Social Feed",
"data": {
"id": "c7de13a2-58b1-4f6e-8a3d-2e9c4b7f1a05",
"sourceType": "pnl_card",
"sourceId": "9b2f6c1e-4d0a-4c8f-9d2e-7a1b3c5d7e9f",
"caption": "Clean breakout, took the target.",
"publishedAt": "2026-08-07T14:35:00.000Z",
"card": {
"id": "9b2f6c1e-4d0a-4c8f-9d2e-7a1b3c5d7e9f",
"snapshot": {},
"description": "MNQ scalp into the close",
"createdAt": "2026-08-07T14:32:11.000Z"
},
"milestone": {
"title": "First payout",
"emoji": "🏆",
"occurredAt": "2026-08-01T09:00:00.000Z"
},
"trade": {
"symbol": "MNQ",
"contract": "MNQU6",
"side": "long",
"quantity": 2,
"entryPrice": 29528.5,
"exitPrice": 29562.25,
"openedAt": "2026-08-07T13:58:02.000Z",
"closedAt": "2026-08-07T14:31:40.000Z",
"pnlNet": 133.5
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid source — missing trade/milestone payload for the sourceType",
"code": "INVALID_SOURCE"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Source PnL card not found",
"code": "CARD_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}Body
application/json
Available options:
trade, pnl_card, milestone Maximum string length:
200Maximum string length:
280Required when sourceType is "milestone"
Show child attributes
Show child attributes
Required when sourceType is "trade"
Show child attributes
Show child attributes
Related topics
Remove from social feedGet own social feedGet public social feed by usernameGet activity streamCreate user profile⌘I
Publish to social feed
curl --request POST \
--url https://api.hyperprop.com/platform/v1/user/feed \
--header 'Content-Type: application/json' \
--data '
{
"sourceId": "<string>",
"caption": "<string>"
}
'import requests
url = "https://api.hyperprop.com/platform/v1/user/feed"
payload = {
"sourceId": "<string>",
"caption": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({sourceId: '<string>', caption: '<string>'})
};
fetch('https://api.hyperprop.com/platform/v1/user/feed', 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.hyperprop.com/platform/v1/user/feed",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sourceId' => '<string>',
'caption' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.hyperprop.com/platform/v1/user/feed"
payload := strings.NewReader("{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.hyperprop.com/platform/v1/user/feed")
.header("Content-Type", "application/json")
.body("{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hyperprop.com/platform/v1/user/feed")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"sourceId\": \"<string>\",\n \"caption\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Published to Social Feed",
"data": {
"id": "c7de13a2-58b1-4f6e-8a3d-2e9c4b7f1a05",
"sourceType": "pnl_card",
"sourceId": "9b2f6c1e-4d0a-4c8f-9d2e-7a1b3c5d7e9f",
"caption": "Clean breakout, took the target.",
"publishedAt": "2026-08-07T14:35:00.000Z",
"card": {
"id": "9b2f6c1e-4d0a-4c8f-9d2e-7a1b3c5d7e9f",
"snapshot": {},
"description": "MNQ scalp into the close",
"createdAt": "2026-08-07T14:32:11.000Z"
},
"milestone": {
"title": "First payout",
"emoji": "🏆",
"occurredAt": "2026-08-01T09:00:00.000Z"
},
"trade": {
"symbol": "MNQ",
"contract": "MNQU6",
"side": "long",
"quantity": 2,
"entryPrice": 29528.5,
"exitPrice": 29562.25,
"openedAt": "2026-08-07T13:58:02.000Z",
"closedAt": "2026-08-07T14:31:40.000Z",
"pnlNet": 133.5
}
}
}{
"success": false,
"statusCode": 400,
"error": "Bad Request",
"message": "Invalid source — missing trade/milestone payload for the sourceType",
"code": "INVALID_SOURCE"
}{
"success": false,
"statusCode": 401,
"error": "Unauthorized",
"message": "Authentication required",
"code": "UNAUTHORIZED"
}{
"success": false,
"statusCode": 404,
"error": "Not Found",
"message": "Source PnL card not found",
"code": "CARD_NOT_FOUND"
}{
"success": false,
"statusCode": 500,
"error": "Internal Server Error",
"message": "An unexpected error occurred",
"code": "INTERNAL_ERROR"
}