Add an order note
curl --request POST \
--url https://api.sellfern.com/orders/{id}/notes \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"content": "<string>"
}
'import requests
url = "https://api.sellfern.com/orders/{id}/notes"
payload = { "content": "<string>" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({content: '<string>'})
};
fetch('https://api.sellfern.com/orders/{id}/notes', 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.sellfern.com/orders/{id}/notes",
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([
'content' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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.sellfern.com/orders/{id}/notes"
payload := strings.NewReader("{\n \"content\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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.sellfern.com/orders/{id}/notes")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sellfern.com/orders/{id}/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 42,
"order_id": 1234567890,
"author_user_id": 123,
"author_token_id": 123,
"author_name": "Operations Bot",
"text": "Supplier confirmed production start.",
"created_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_error",
"message": "Request validation failed."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "missing_scope",
"message": "Missing required scope."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Resource not found."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_error",
"message": "Request validation failed."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "<string>"
}
}Orders
Add an order note
Adds a note to an order in the authenticated organization. Safe retries require Idempotency-Key.
Scope notes: Requires order write scope and authenticated organization isolation.
Mutation safety: Send an Idempotency-Key header for safe retries.
POST
/
orders
/
{id}
/
notes
Add an order note
curl --request POST \
--url https://api.sellfern.com/orders/{id}/notes \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"content": "<string>"
}
'import requests
url = "https://api.sellfern.com/orders/{id}/notes"
payload = { "content": "<string>" }
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({content: '<string>'})
};
fetch('https://api.sellfern.com/orders/{id}/notes', 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.sellfern.com/orders/{id}/notes",
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([
'content' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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.sellfern.com/orders/{id}/notes"
payload := strings.NewReader("{\n \"content\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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.sellfern.com/orders/{id}/notes")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"content\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sellfern.com/orders/{id}/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"content\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": 42,
"order_id": 1234567890,
"author_user_id": 123,
"author_token_id": 123,
"author_name": "Operations Bot",
"text": "Supplier confirmed production start.",
"created_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_error",
"message": "Request validation failed."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "unauthorized",
"message": "Missing or invalid API key."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "missing_scope",
"message": "Missing required scope."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Resource not found."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "validation_error",
"message": "Request validation failed."
},
"meta": {
"request_id": "<string>"
}
}{
"success": false,
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded."
},
"meta": {
"request_id": "<string>"
}
}Authorizations
Sellfern public API key scoped to the authenticated organization. Do not use user JWTs for public integrations.
Headers
Required for public write retries. Reuse the same key for safe retry after network or 5xx uncertainty. Reusing a key with a different request returns 422 idempotency_conflict.
Required string length:
1 - 255Path Parameters
Order ID.
Required range:
x >= 1Body
application/json
⌘I
