Update a charge
Update the description and metadata of an existing charge. Only these two fields can be modified after charge creation.
API Credentials
Request Parametersโ
Required - 1 fieldRequired Parameters
`id`STRING(required)
The charge ID to update. Must be a valid charge from your account.
Additional - 2 fieldsAdditional Parameters
Responsesโ
200
Successfully updatedCharge updated successfully. Returns complete charge object with updated fields.
Updated fields:
description- New description (if provided)metadata- New metadata object (if provided)- All other fields remain unchanged
400
Bad requestInvalid parameters provided.
Common causes:
- Metadata exceeds 15,000 characters
- Invalid metadata format
- No fields provided to update
401
UnauthorizedAuthentication failed. Invalid or missing API key.
Common causes:
- Missing Authorization header
- Invalid secret key
- Using public key instead of secret key
404
Not foundCharge ID does not exist.
Common causes:
- Incorrect charge ID
- Charge from different account
- Using test key for live charge (or vice versa)
Code samplesโ
- cURL
- Ruby
- Python
- Node.js
- PHP
- Java
- C#
- Go
curl https://api.omise.co/charges/chrg_test_5xuy4w91xqz7d1w9u0t \
-X PATCH \
-u skey_test_5xuy4w91xqz7d1w9u0t: \
-d "description=Order #1234 - Shipped" \
-d "metadata[status]=shipped"
require 'omise'
Omise.api_key = 'skey_test_5xuy4w91xqz7d1w9u0t'
charge = Omise::Charge.update('chrg_test_5xuy4w91xqz7d1w9u0t', {
description: 'Order #1234 - Shipped',
metadata: { status: 'shipped', tracking: 'TH123456789' }
})
import omise
omise.api_secret = 'skey_test_5xuy4w91xqz7d1w9u0t'
charge = omise.Charge.update(
'chrg_test_5xuy4w91xqz7d1w9u0t',
description='Order #1234 - Shipped',
metadata={'status': 'shipped', 'tracking': 'TH123456789'}
)
const omise = require('omise')({
secretKey: 'skey_test_5xuy4w91xqz7d1w9u0t'
});
const charge = await omise.charges.update('chrg_test_5xuy4w91xqz7d1w9u0t', {
description: 'Order #1234 - Shipped',
metadata: { status: 'shipped', tracking: 'TH123456789' }
});
<?php
define('OMISE_SECRET_KEY', 'skey_test_5xuy4w91xqz7d1w9u0t');
$charge = OmiseCharge::retrieve('chrg_test_5xuy4w91xqz7d1w9u0t');
$charge->update(array(
'description' => 'Order #1234 - Shipped',
'metadata' => array('status' => 'shipped', 'tracking' => 'TH123456789')
));
Client client = new Client.Builder()
.secretKey("skey_test_5xuy4w91xqz7d1w9u0t")
.build();
Map<String, String> metadata = new HashMap<>();
metadata.put("status", "shipped");
metadata.put("tracking", "TH123456789");
Charge charge = client.charges().update("chrg_test_5xuy4w91xqz7d1w9u0t")
.description("Order #1234 - Shipped")
.metadata(metadata)
.send();
var client = new Client("skey_test_5xuy4w91xqz7d1w9u0t");
var charge = await client.Charges.Update("chrg_test_5xuy4w91xqz7d1w9u0t", new UpdateChargeRequest {
Description = "Order #1234 - Shipped",
Metadata = new Dictionary<string, object> {
{ "status", "shipped" },
{ "tracking", "TH123456789" }
}
});
client, _ := omise.NewClient(
"pkey_test_5xuy4w91xqz7d1w9u0t",
"skey_test_5xuy4w91xqz7d1w9u0t",
)
charge, _ := client.UpdateCharge("chrg_test_5xuy4w91xqz7d1w9u0t", &operations.UpdateCharge{
Description: "Order #1234 - Shipped",
Metadata: map[string]interface{}{
"status": "shipped",
"tracking": "TH123456789",
},
})
Error and result codesโ
Updatable Fieldsโ
| Field | Can Update? | Notes |
|---|---|---|
description | Yes | Text description for internal use |
metadata | Yes | Custom key-value data (replaces entirely) |
amount | No | Cannot change after creation |
currency | No | Cannot change after creation |
status | No | Changes via capture/reverse/etc |
card | No | Cannot change payment method |
Metadata Behaviorโ
| Action | Result | Important Note |
|---|---|---|
| Update metadata | Replaces entire object | Must include all keys you want to keep |
| Omit metadata | No change | Existing metadata preserved |
| Empty metadata | Clears all metadata | All existing data removed |
Try it outโ
Required - 1 fields
Additional - 2 fields