curl --request PATCH \
--url https://api.ebrc.in/api/v1/platform-customers/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"companyName": "<string>",
"address": "<string>"
}
'import requests
url = "https://api.ebrc.in/api/v1/platform-customers/{id}"
payload = {
"name": "<string>",
"companyName": "<string>",
"address": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', companyName: '<string>', address: '<string>'})
};
fetch('https://api.ebrc.in/api/v1/platform-customers/{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.ebrc.in/api/v1/platform-customers/{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([
'name' => '<string>',
'companyName' => '<string>',
'address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.ebrc.in/api/v1/platform-customers/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.ebrc.in/api/v1/platform-customers/{id}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ebrc.in/api/v1/platform-customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com",
"type": "customer",
"companyName": "<string>",
"iec": "<string>",
"address": "<string>",
"platformId": "<string>",
"mode": "test",
"isActive": true,
"hasDgftCredentials": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}Update Customer
Partially update a platform customer’s name, company name, or address. The IEC, email, type and mode are fixed after creation, and DGFT credentials are changed via the validate endpoint.
curl --request PATCH \
--url https://api.ebrc.in/api/v1/platform-customers/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"companyName": "<string>",
"address": "<string>"
}
'import requests
url = "https://api.ebrc.in/api/v1/platform-customers/{id}"
payload = {
"name": "<string>",
"companyName": "<string>",
"address": "<string>"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: '<string>', companyName: '<string>', address: '<string>'})
};
fetch('https://api.ebrc.in/api/v1/platform-customers/{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.ebrc.in/api/v1/platform-customers/{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([
'name' => '<string>',
'companyName' => '<string>',
'address' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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.ebrc.in/api/v1/platform-customers/{id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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.ebrc.in/api/v1/platform-customers/{id}")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ebrc.in/api/v1/platform-customers/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"companyName\": \"<string>\",\n \"address\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"email": "jsmith@example.com",
"type": "customer",
"companyName": "<string>",
"iec": "<string>",
"address": "<string>",
"platformId": "<string>",
"mode": "test",
"isActive": true,
"hasDgftCredentials": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}{
"code": "<string>",
"message": "<string>"
}name, companyName or address. All three are optional; only the fields you send are changed.
What can and cannot be changed
| Field | Editable | Why |
|---|---|---|
name | Yes | |
companyName | Yes | The registered legal name. |
address | Yes | Not collected by the eBRC console, so console-onboarded clients start with no address. |
iec | No | Fixed after creation. To correct an IEC, contact support. |
email | No | Part of the client’s identity within your account and mode. |
type | No | Always customer. |
isActive | No | Set by DGFT credential validation, not by hand. |
mode | No | Fixed at creation. Moving a client between test and live would drag its filings across the isolation boundary. |
dgftUsername, dgftPassword | No | Use Validate Customer to rotate the password. |
name, companyName and address is rejected with a 400 before the update runs, including iec, email, isActive and mode.
name and companyName on its client edit form. The API is the broader surface: it also accepts address. Everything the console can edit, the API can edit.Request example
curl --location --request PATCH 'https://api.ebrc.in/api/v1/platform-customers/ee849a90-7a28-49b4-8cb2-8e31041650a2' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"companyName": "Surya Textile Exports Private Limited",
"address": "SIDCO Industrial Estate, Tiruppur, Tamil Nadu"
}'
Response example
{
"success": true,
"data": {
"id": "ee849a90-7a28-49b4-8cb2-8e31041650a2",
"name": "Rohan Mehta",
"email": "finance@suryatextiles.example.com",
"type": "customer",
"companyName": "Surya Textile Exports Private Limited",
"iec": "AAECS1234F",
"address": "SIDCO Industrial Estate, Tiruppur, Tamil Nadu",
"platformId": "1f0c9a52-3b41-4d78-9e26-7a8b5c4d3e2f",
"mode": "live",
"isActive": true,
"hasDgftCredentials": true,
"createdAt": "2026-07-22T10:15:04.874Z",
"updatedAt": "2026-07-22T11:02:18.330Z"
},
"statusCode": 200,
"timestamp": "2026-07-22T11:02:18.352Z"
}
Errors
400Validation failedwith oneerrorsentry per rejected property, for example["email: property email should not exist", "iec: property iec should not exist"]. This covers every field outsidename,companyNameandaddress. See common validation errors.401No API key providedorInvalid API key. See authentication errors.404Customer not foundwhen no client with that id belongs to your account in the mode your key selects.
Next steps
- Get the customer to confirm the change.
- Validate DGFT credentials if the DGFT password changed.
- Delete the customer if they are offboarding.
Authorizations
Path Parameters
The customer ID
Response
Customer updated
Unique identifier of the platform customer. This is the platformCustomerId used in every later call.
customer The exporter's registered legal name. Required by the eBRC console, optional on this API.
Importer Exporter Code: exactly 10 alphanumeric characters, stored uppercase. Required by the eBRC console, optional on this API.
10^[A-Za-z0-9]{10}$Free text. Not collected by the eBRC console, so console-onboarded clients have none.
Platform account that owns this client
Fixed at creation from the API key prefix and never editable. Returned by create, update and validate; omitted by the list and get endpoints.
test, live Always false at creation. Becomes true only when DGFT credentials are verified by POST /platform-customers/{id}/check-dgft-credentials.
Derived: true once DGFT credentials are on file. Branch on this; the raw DGFT credential fields are not part of the response contract and the password is never returned on any surface.
Not returned by GET /platform-customers (list).