> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Update Gift Certificate

PUT https://api.bigcommerce.com/stores/{store_hash}/v2/gift_certificates/{id}
Content-Type: application/json

Updates a *Gift Certificate*.

**Read Only Fields**
* id
* order_id

Reference: https://docs.bigcommerce.com/developer/api-reference/rest/admin/content/marketing/gift-certificates/update-gift-certificate

## Authentication

- `X-Auth-Token` header (required) — ### OAuth scopes | UI Name | Permission | Parameter | |:--------|:-----------|:----------| | Marketing | modify | `store_v2_marketing` | | Marketing | read-only | `store_v2_marketing_read_only` | ### Authentication header | Header | Argument | Description | |:-------|:---------|:------------| | `X-Auth-Token` | `access_token` | For more about API accounts that generate `access_token`s, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#api-accounts). | ### Further reading For example requests and more information about authenticating BigCommerce APIs, see [Authentication and Example Requests](/developer/docs/overview/api-fundamentals/api-accounts#x-auth-token-header-example-requests). For more about BigCommerce OAuth scopes, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#oauth-scopes). For a list of API status codes, see [API Status Codes](/developer/api-reference/rest/overview#rest-http-status-codes).

## Request

### Path parameters

- `id` (integer, required) — ID of the gift certificate.
- `store_hash` (string, required) — Permanent ID of the BigCommerce store.

### Headers

- `Accept` (string, required, default: application/json) — The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response body.

### Body (application/json)

This endpoint expects a giftCertificate_Put.

- `amount` (string, required) — Value of the gift certificate.
- `from_email` (string, required) — Email of the customer who purchased the gift certificate.
- `from_name` (string, required) — Name of the customer who purchased the gift certificate.
- `to_email` (string, required) — Email of the recipient.
- `to_name` (string, required) — Name of the recipient.
- `balance` (string, optional) — The remaining value of the gift certificate. If not set, will default to the amount.
- `code` (string, optional) — A unique string that a customer enters to redeem the gift certificate. Gift certificate codes are limited to 20 characters. The API accepts values up to 255 characters without returning an error, but it saves only the first 20 characters and discards the rest. The response returns the saved, truncated code. If you don't set this field, BigCommerce generates a code automatically.
- `currency_code` (string, optional) — A currency code, following the ISO 4217 standard. The currency has to exist in the store first. Gift Certificates can only be used if the transactional currency of the cart is the same as the one defined in the gift certificate. If this value is not provided, the gift certificate is created using the store's default transactional currency.
- `customer_id` (integer, optional) — The ID of the customer placing the order.
- `expiry_date` (string, optional) — Date on which the gift certificate is set to expire.
- `message` (string, optional) — Text that will be sent to the recipient, such as “Congratulations.”
- `purchase_date` (string, optional) — Date the gift certificate was purchased. If not assigned, this will be set to today’s date. Enter date in RFC-2822 format.
- `status` (enum, optional)
  - Allowed values: `active`, `pending`, `expired`, `disabled`
- `template` (enum, optional) — The email theme to use in the message sent to the recipient.
  - Allowed values: `birthday.html`, `boy.html`, `girl.html`, `celebration.html`, `christmas.html`, `general.html`

## Response

### 200

OK

- `amount` (string, required) — Value of the gift certificate.
- `from_email` (string, required) — Email of the customer who purchased the gift certificate.
- `from_name` (string, required) — Name of the customer who purchased the gift certificate.
- `to_email` (string, required) — Email of the recipient.
- `to_name` (string, required) — Name of the recipient.
- `balance` (string, optional) — Remaining value of the gift certificate. If not set, will default to the amount.
- `code` (string, optional) — A unique string that a customer enters to redeem the gift certificate. Gift certificate codes are limited to 20 characters. The API accepts values up to 255 characters without returning an error, but it saves only the first 20 characters and discards the rest. The response returns the saved, truncated code. If you don't set this field, BigCommerce generates a code automatically.
- `currency_code` (string, optional) — A currency code, following the ISO 4217 standard. The currency has to exist in the store first. Gift Certificates can only be used if the transactional currency of the cart is the same as the one defined in the gift certificate. If this value is not provided, the gift certificate is created using the store's default transactional currency.
- `customer_id` (integer, optional) — The ID of the customer placing the order.
- `expiry_date` (string, optional) — Date on which the gift certificate is set to expire. Date displays in the Unix timestamp format.
- `id` (integer, optional) — The ID of the gift certificate. This is a READ-ONLY field; do not set or modify its value in a POST or PUT request.
- `message` (string, optional) — Text that will be sent to the recipient, such as “Congratulations.”
- `order_id` (integer, optional) — The ID of the order.
- `purchase_date` (string, optional) — Date the gift certificate was purchased. If not assigned, this will be set to today’s date. Date displays in the Unix timestamp format.
- `status` (enum, optional)
  - Allowed values: `active`, `pending`, `disabled`, `expired`
- `template` (enum, optional) — The email theme to use in the message sent to the recipient.
  - Allowed values: `birthday.html`, `girl.html`, `boy.html`, `celebration.html`, `christmas.html`, `general.html`

## Examples

**Request**

```json
{
  "amount": "10",
  "from_email": "janedoe@example.com",
  "from_name": "Jane Doe",
  "to_email": "johndoe@example.com",
  "to_name": "John Doe"
}
```

**Response**

```json
{
  "amount": "10",
  "from_email": "janedoe@example.com",
  "from_name": "Jane Doe",
  "to_email": "johndoe@example.com",
  "to_name": "John Doe",
  "balance": "0",
  "code": "FFZ-5N4-C7M-S78",
  "currency_code": "USD",
  "customer_id": 5,
  "expiry_date": "1672670738",
  "id": 1,
  "message": "Happy Birthday!",
  "order_id": 116,
  "purchase_date": "1603306",
  "status": "active",
  "template": "birthday.html"
}
```

**SDK Code**

```python Response
import requests

url = "https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1"

payload = {
    "amount": "10",
    "from_email": "janedoe@example.com",
    "from_name": "Jane Doe",
    "to_email": "johndoe@example.com",
    "to_name": "John Doe"
}
headers = {
    "Accept": "application/json",
    "X-Auth-Token": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript Response
const url = 'https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1';
const options = {
  method: 'PUT',
  headers: {
    Accept: 'application/json',
    'X-Auth-Token': '<apiKey>',
    'Content-Type': 'application/json'
  },
  body: '{"amount":"10","from_email":"janedoe@example.com","from_name":"Jane Doe","to_email":"johndoe@example.com","to_name":"John Doe"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Response
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1"

	payload := strings.NewReader("{\n  \"amount\": \"10\",\n  \"from_email\": \"janedoe@example.com\",\n  \"from_name\": \"Jane Doe\",\n  \"to_email\": \"johndoe@example.com\",\n  \"to_name\": \"John Doe\"\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Accept", "application/json")
	req.Header.Add("X-Auth-Token", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Response
require 'uri'
require 'net/http'

url = URI("https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Accept"] = 'application/json'
request["X-Auth-Token"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"amount\": \"10\",\n  \"from_email\": \"janedoe@example.com\",\n  \"from_name\": \"Jane Doe\",\n  \"to_email\": \"johndoe@example.com\",\n  \"to_name\": \"John Doe\"\n}"

response = http.request(request)
puts response.read_body
```

```java Response
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1")
  .header("Accept", "application/json")
  .header("X-Auth-Token", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"amount\": \"10\",\n  \"from_email\": \"janedoe@example.com\",\n  \"from_name\": \"Jane Doe\",\n  \"to_email\": \"johndoe@example.com\",\n  \"to_name\": \"John Doe\"\n}")
  .asString();
```

```php Response
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1', [
  'body' => '{
  "amount": "10",
  "from_email": "janedoe@example.com",
  "from_name": "Jane Doe",
  "to_email": "johndoe@example.com",
  "to_name": "John Doe"
}',
  'headers' => [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'X-Auth-Token' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Response
using RestSharp;

var client = new RestClient("https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1");
var request = new RestRequest(Method.PUT);
request.AddHeader("Accept", "application/json");
request.AddHeader("X-Auth-Token", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"amount\": \"10\",\n  \"from_email\": \"janedoe@example.com\",\n  \"from_name\": \"Jane Doe\",\n  \"to_email\": \"johndoe@example.com\",\n  \"to_name\": \"John Doe\"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Response
import Foundation

let headers = [
  "Accept": "application/json",
  "X-Auth-Token": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "amount": "10",
  "from_email": "janedoe@example.com",
  "from_name": "Jane Doe",
  "to_email": "johndoe@example.com",
  "to_name": "John Doe"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.bigcommerce.com/stores/store_hash/v2/gift_certificates/1")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```