curl --request PATCH \
--url https://api.moonup.gg/v1/offers/accounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"price": 123,
"images": [
"<string>"
],
"tags": [
"<string>"
],
"attributes": {},
"units": [
{}
],
"manual_delivery_value": 123
}
'import requests
url = "https://api.moonup.gg/v1/offers/accounts/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"price": 123,
"images": ["<string>"],
"tags": ["<string>"],
"attributes": {},
"units": [{}],
"manual_delivery_value": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
price: 123,
images: ['<string>'],
tags: ['<string>'],
attributes: {},
units: [{}],
manual_delivery_value: 123
})
};
fetch('https://api.moonup.gg/v1/offers/accounts/{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.moonup.gg/v1/offers/accounts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'price' => 123,
'images' => [
'<string>'
],
'tags' => [
'<string>'
],
'attributes' => [
],
'units' => [
[
]
],
'manual_delivery_value' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.moonup.gg/v1/offers/accounts/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.moonup.gg/v1/offers/accounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonup.gg/v1/offers/accounts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"attributes": {},
"tags": [
"<string>"
],
"status": "pending_moderation",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"rejection_reason_code": "prohibited_item",
"rejection_note": "<string>",
"manual_delivery_value": 123,
"manual_delivery_unit": "minutes",
"price": 123,
"currency": "USD",
"images": [
"<string>"
],
"delivery_type": "instant"
}{
"error": "delivery_instructions_required"
}{
"error": "unauthorized"
}{
"error": "delivery_instructions_required"
}{
"error": "not_found"
}{
"error": "delivery_instructions_required"
}{
"error": "rate_limited"
}Edit one of your accounts listings
Every field is optional and means “leave this alone” when absent.
Sending images or tags replaces the whole list rather than adding
to it.
Editing a rejected listing resubmits it. Editing an active or
paused one sends it back to moderation, unless the only thing that
changed was the price or the stock.
curl --request PATCH \
--url https://api.moonup.gg/v1/offers/accounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"price": 123,
"images": [
"<string>"
],
"tags": [
"<string>"
],
"attributes": {},
"units": [
{}
],
"manual_delivery_value": 123
}
'import requests
url = "https://api.moonup.gg/v1/offers/accounts/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"price": 123,
"images": ["<string>"],
"tags": ["<string>"],
"attributes": {},
"units": [{}],
"manual_delivery_value": 123
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: '<string>',
description: '<string>',
price: 123,
images: ['<string>'],
tags: ['<string>'],
attributes: {},
units: [{}],
manual_delivery_value: 123
})
};
fetch('https://api.moonup.gg/v1/offers/accounts/{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.moonup.gg/v1/offers/accounts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => '<string>',
'description' => '<string>',
'price' => 123,
'images' => [
'<string>'
],
'tags' => [
'<string>'
],
'attributes' => [
],
'units' => [
[
]
],
'manual_delivery_value' => 123
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.moonup.gg/v1/offers/accounts/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.patch("https://api.moonup.gg/v1/offers/accounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonup.gg/v1/offers/accounts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"price\": 123,\n \"images\": [\n \"<string>\"\n ],\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"units\": [\n {}\n ],\n \"manual_delivery_value\": 123\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>",
"description": "<string>",
"attributes": {},
"tags": [
"<string>"
],
"status": "pending_moderation",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"rejection_reason_code": "prohibited_item",
"rejection_note": "<string>",
"manual_delivery_value": 123,
"manual_delivery_unit": "minutes",
"price": 123,
"currency": "USD",
"images": [
"<string>"
],
"delivery_type": "instant"
}{
"error": "delivery_instructions_required"
}{
"error": "unauthorized"
}{
"error": "delivery_instructions_required"
}{
"error": "not_found"
}{
"error": "delivery_instructions_required"
}{
"error": "rate_limited"
}Authorizations
Your API key, from the cabinet under Seller → API keys.
Path Parameters
Body
Every field optional; absent means "leave unchanged".
8 - 128409610Changing it replaces the listing's unit pool.
instant, manual minutes, hours, days Response
OK
How a listing sold by hand promises to hand over.
The category's own fields, keyed by the schema's key.
pending_moderation on create, then active or rejected.
paused and archived are yours, through pause and DELETE.
reserved and sold follow an order. removed is a moderation
takedown after publishing, which no call in this API performs.
pending_moderation, active, paused, reserved, sold, rejected, removed, archived Why moderation refused the last version, if it ever did. It stays
on the listing after you resubmit, so read it together with
status.
prohibited_item, misleading_description, stolen_images, invalid_price, insufficient_details, other, null minutes, hours, days, null "USD"
instant, manual 