Update Order Issue
curl --request PATCH \
--globoff \
--url 'https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}' \
--header 'Content-Type: application/json' \
--data '
{
"notes": "<string>",
"priority": "<string>",
"status": "<string>",
"refund_amount": 123,
"refund_source": "<string>",
"resolution_description": "<string>",
"customer_satisfied": true,
"follow_up_required": true,
"follow_up_date": "<string>",
"assigned_to": "<string>",
"updated_by": "<string>"
}
'import requests
url = "https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}"
payload = {
"notes": "<string>",
"priority": "<string>",
"status": "<string>",
"refund_amount": 123,
"refund_source": "<string>",
"resolution_description": "<string>",
"customer_satisfied": True,
"follow_up_required": True,
"follow_up_date": "<string>",
"assigned_to": "<string>",
"updated_by": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
notes: '<string>',
priority: '<string>',
status: '<string>',
refund_amount: 123,
refund_source: '<string>',
resolution_description: '<string>',
customer_satisfied: true,
follow_up_required: true,
follow_up_date: '<string>',
assigned_to: '<string>',
updated_by: '<string>'
})
};
fetch('https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_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.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_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([
'notes' => '<string>',
'priority' => '<string>',
'status' => '<string>',
'refund_amount' => 123,
'refund_source' => '<string>',
'resolution_description' => '<string>',
'customer_satisfied' => true,
'follow_up_required' => true,
'follow_up_date' => '<string>',
'assigned_to' => '<string>',
'updated_by' => '<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.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}"
payload := strings.NewReader("{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}")
.header("Content-Type", "application/json")
.body("{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"issue_id": "<string>",
"updated_fields": [
{}
],
"previous_status": "<string>",
"new_status": "<string>",
"refund_processed": true,
"timestamp": "<string>"
}Order Issues
Update Order Issue
Update an existing order issue with resolution notes, status changes, refund information, and other progress updates.
PATCH
{micro_service_base_url}
/
orders
/
{order_id}
/
issues
/
{issue_id}
Update Order Issue
curl --request PATCH \
--globoff \
--url 'https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}' \
--header 'Content-Type: application/json' \
--data '
{
"notes": "<string>",
"priority": "<string>",
"status": "<string>",
"refund_amount": 123,
"refund_source": "<string>",
"resolution_description": "<string>",
"customer_satisfied": true,
"follow_up_required": true,
"follow_up_date": "<string>",
"assigned_to": "<string>",
"updated_by": "<string>"
}
'import requests
url = "https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}"
payload = {
"notes": "<string>",
"priority": "<string>",
"status": "<string>",
"refund_amount": 123,
"refund_source": "<string>",
"resolution_description": "<string>",
"customer_satisfied": True,
"follow_up_required": True,
"follow_up_date": "<string>",
"assigned_to": "<string>",
"updated_by": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
notes: '<string>',
priority: '<string>',
status: '<string>',
refund_amount: 123,
refund_source: '<string>',
resolution_description: '<string>',
customer_satisfied: true,
follow_up_required: true,
follow_up_date: '<string>',
assigned_to: '<string>',
updated_by: '<string>'
})
};
fetch('https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_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.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_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([
'notes' => '<string>',
'priority' => '<string>',
'status' => '<string>',
'refund_amount' => 123,
'refund_source' => '<string>',
'resolution_description' => '<string>',
'customer_satisfied' => true,
'follow_up_required' => true,
'follow_up_date' => '<string>',
'assigned_to' => '<string>',
'updated_by' => '<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.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}"
payload := strings.NewReader("{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}")
.header("Content-Type", "application/json")
.body("{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/{{micro_service_base_url}}/orders/{{order_id}}/issues/{{issue_id}}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"notes\": \"<string>\",\n \"priority\": \"<string>\",\n \"status\": \"<string>\",\n \"refund_amount\": 123,\n \"refund_source\": \"<string>\",\n \"resolution_description\": \"<string>\",\n \"customer_satisfied\": true,\n \"follow_up_required\": true,\n \"follow_up_date\": \"<string>\",\n \"assigned_to\": \"<string>\",\n \"updated_by\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "<string>",
"issue_id": "<string>",
"updated_fields": [
{}
],
"previous_status": "<string>",
"new_status": "<string>",
"refund_processed": true,
"timestamp": "<string>"
}This endpoint allows you to update existing order issues as they progress through resolution. You can change status, add resolution notes, process refunds, update priority, and document the complete resolution process.
Issue updates maintain a complete audit trail of all changes, ensuring transparency and accountability in the resolution process.
Path Parameters
string
required
The unique identifier of the order containing the issue
string
required
The unique identifier of the issue to update
Request Body
string
Additional notes or comments about the issue resolution progress
string
Updated priority level: “low”, “medium”, “high”, “critical”
string
Updated issue status: “open”, “investigating”, “in_progress”, “resolved”, “closed”, “escalated”
number
Amount to refund to customer (if applicable)
string
Source of refund: “merchant”, “platform”, “insurance”, “store_credit”
string
Detailed description of how the issue was resolved
boolean
Whether the customer expressed satisfaction with the resolution
boolean
Whether additional follow-up is needed
string
Scheduled date for follow-up (ISO 8601 format)
string
Employee ID of person now assigned to handle the issue
string
required
Employee ID of person making this update
Response
boolean
Indicates whether the issue was successfully updated
string
Confirmation message or error details
string
The ID of the updated issue
array
List of fields that were successfully updated
string
Previous status before this update
string
Current status after this update
boolean
Whether a refund was processed as part of this update
string
Timestamp when the update was applied
Request Example
{
"notes": "Customer contacted and confirmed wrong items received. Processing replacement order and refund for inconvenience.",
"priority": "medium",
"status": "resolved",
"refund_amount": 15.50,
"refund_source": "merchant",
"resolution_description": "Issued full refund for incorrect items and sent replacement order at no charge. Customer very understanding and satisfied with resolution.",
"customer_satisfied": true,
"follow_up_required": true,
"follow_up_date": "2024-01-22T10:00:00Z",
"updated_by": "emp_cs_001"
}
Response Example
{
"success": true,
"message": "Issue successfully updated and resolution recorded",
"issue_id": "issue_123456789",
"updated_fields": [
"notes",
"status",
"refund_amount",
"refund_source",
"resolution_description",
"customer_satisfied",
"follow_up_required",
"follow_up_date"
],
"previous_status": "investigating",
"new_status": "resolved",
"refund_processed": true,
"timestamp": "2024-01-15T16:45:00Z"
}
Issue Status Workflow
Issue Status Workflow
Status Progression:
- open: Issue newly created, awaiting initial review
- investigating: Issue under investigation, gathering information
- in_progress: Active resolution efforts underway
- resolved: Issue resolved, waiting for confirmation
- closed: Issue fully resolved and confirmed
- escalated: Issue escalated to higher authority
- Issues can move forward or backward in the workflow
- Certain status changes trigger automatic notifications
- Closed issues require manager approval to reopen
- Escalated issues follow special handling procedures
Refund Processing: When refund_amount is specified, the system initiates the refund process automatically. Processing time depends on the refund_source and payment method.
Customer Communication: Always update the issue when you communicate with the customer. This maintains a complete record of all interactions and helps other team members understand the situation.
Update Tracking
Audit Trail Features
Audit Trail Features
When an issue is updated, the system automatically tracks:
- Change History: All field changes with before/after values
- User Attribution: Who made each change and when
- Status Timeline: Complete progression through resolution stages
- Communication Log: Record of all customer interactions
- Resolution Metrics: Time to resolution and satisfaction scores
- Pattern Analysis: Data for identifying recurring issues
Use Cases
Common Update Scenarios
Common Update Scenarios
Status Updates
- Move issue through resolution workflow
- Track progress and milestones
- Communicate current state to stakeholders
- Record final resolution details
- Document customer satisfaction
- Plan follow-up activities
- Process partial or full refunds
- Track refund sources and amounts
- Document financial resolution
- Escalate complex issues
- Reassign to specialists
- Update priority based on severity
- Add detailed resolution notes
- Identify process improvements
- Document lessons learned
Error Responses
Common Error Scenarios
Common Error Scenarios
Issue Not FoundInvalid Status TransitionRefund Processing ErrorPermission Denied
{
"success": false,
"message": "Issue not found",
"error_code": "ISSUE_NOT_FOUND",
"issue_id": "invalid-issue-id"
}
{
"success": false,
"message": "Invalid status transition",
"error_code": "INVALID_STATUS_TRANSITION",
"current_status": "closed",
"attempted_status": "investigating"
}
{
"success": false,
"message": "Unable to process refund",
"error_code": "REFUND_FAILED",
"refund_amount": 15.50,
"reason": "Payment method no longer valid"
}
{
"success": false,
"message": "Insufficient permissions to update this issue",
"error_code": "PERMISSION_DENIED",
"required_role": "customer_service_manager"
}
Status Restrictions: Certain status changes may require manager approval or special permissions. Ensure you have appropriate access before attempting status changes to “closed” or “escalated”.
Field Validation
Update Validation Rules
Update Validation Rules
notes
- Maximum length: 2000 characters
- Required when changing status to “resolved” or “closed”
- Cannot be empty string
- Must be one of: “low”, “medium”, “high”, “critical”
- Critical priority issues trigger immediate notifications
- Priority increases require justification in notes
- Must follow valid status transition rules
- Some transitions require manager approval
- Cannot skip required workflow steps
- Must be positive number
- Cannot exceed original order amount
- Requires refund_source when specified
- Must be one of: “merchant”, “platform”, “insurance”, “store_credit”
- Required when refund_amount is specified
- Different sources have different processing times

