curl --request PATCH \
--url https://api.moonup.gg/v1/offers/currency/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"attributes": {},
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>",
"manual_delivery_value": 123
}
'import requests
url = "https://api.moonup.gg/v1/offers/currency/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"attributes": {},
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>",
"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>',
tags: ['<string>'],
attributes: {},
price_per_unit: 123,
stock_quantity: 123,
min_order_quantity: 123,
delivery_method: '<string>',
delivery_instructions: '<string>',
manual_delivery_value: 123
})
};
fetch('https://api.moonup.gg/v1/offers/currency/{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/currency/{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>',
'tags' => [
'<string>'
],
'attributes' => [
],
'price_per_unit' => 123,
'stock_quantity' => 123,
'min_order_quantity' => 123,
'delivery_method' => '<string>',
'delivery_instructions' => '<string>',
'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/currency/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\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/currency/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\n \"manual_delivery_value\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonup.gg/v1/offers/currency/{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 \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\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": "draft",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"manual_delivery_value": 123,
"manual_delivery_unit": "minutes",
"currency": "USD",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>"
}{
"error": "delivery_instructions_required"
}{
"error": "unauthorized"
}{
"error": "delivery_instructions_required"
}{
"error": "not_found"
}{
"error": "delivery_instructions_required"
}{
"error": "rate_limited"
}Edit one of your currency 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 leaves the listing where it stands: an active one stays
live, a draft stays a draft.
curl --request PATCH \
--url https://api.moonup.gg/v1/offers/currency/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "<string>",
"description": "<string>",
"tags": [
"<string>"
],
"attributes": {},
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>",
"manual_delivery_value": 123
}
'import requests
url = "https://api.moonup.gg/v1/offers/currency/{id}"
payload = {
"title": "<string>",
"description": "<string>",
"tags": ["<string>"],
"attributes": {},
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>",
"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>',
tags: ['<string>'],
attributes: {},
price_per_unit: 123,
stock_quantity: 123,
min_order_quantity: 123,
delivery_method: '<string>',
delivery_instructions: '<string>',
manual_delivery_value: 123
})
};
fetch('https://api.moonup.gg/v1/offers/currency/{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/currency/{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>',
'tags' => [
'<string>'
],
'attributes' => [
],
'price_per_unit' => 123,
'stock_quantity' => 123,
'min_order_quantity' => 123,
'delivery_method' => '<string>',
'delivery_instructions' => '<string>',
'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/currency/{id}"
payload := strings.NewReader("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\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/currency/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"<string>\",\n \"description\": \"<string>\",\n \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\n \"manual_delivery_value\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.moonup.gg/v1/offers/currency/{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 \"tags\": [\n \"<string>\"\n ],\n \"attributes\": {},\n \"price_per_unit\": 123,\n \"stock_quantity\": 123,\n \"min_order_quantity\": 123,\n \"delivery_method\": \"<string>\",\n \"delivery_instructions\": \"<string>\",\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": "draft",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"manual_delivery_value": 123,
"manual_delivery_unit": "minutes",
"currency": "USD",
"product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"price_per_unit": 123,
"stock_quantity": 123,
"min_order_quantity": 123,
"delivery_method": "<string>",
"delivery_instructions": "<string>"
}{
"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". Repricing and restocking here are ordinary edits.
8 - 1284096Replaces the whole list. Same limits as on create.
Replaces the whole map — send every field, not only the changed one.
US cents per one of the product's scale.
What you have left, in the product's scale — restocking is this field.
The smallest order you will take.
A key from GET /v1/offers/delivery-methods.
What the buyer is told to do at handover.
2048The handover time you promise.
What the value counts.
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.
draft on create, then active once you publish it. paused and
archived are yours too, through pause and DELETE. reserved
and sold follow an order. removed is a takedown after
publishing, which no call in this API performs.
draft, active, paused, reserved, sold, removed, archived When publish put it on the marketplace. null while it is a
draft, and written once — pausing and unpausing leave it alone.
The handover time promised, read together with the unit — 2 and hours.
What the value counts. Both are null on a listing delivered instantly.
minutes, hours, days, null Always USD.
"USD"
The product this listing sells, from GET .../products.
US cents per one of the product's scale.
What is left, in that same scale.
The smallest order this listing takes.
The key this listing hands over by.
What the buyer is told to do at handover.
