List generation requests
curl --request GET \
--url https://api.ebrc.in/api/v1/genebrc \
--header 'x-api-key: <api-key>'import requests
url = "https://api.ebrc.in/api/v1/genebrc"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.ebrc.in/api/v1/genebrc', 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/genebrc",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ebrc.in/api/v1/genebrc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ebrc.in/api/v1/genebrc")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ebrc.in/api/v1/genebrc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"userId": "<string>",
"platformCustomerId": "<string>",
"requestId": "<string>",
"iecNumber": "<string>",
"recordResCount": 123,
"uploadType": "<string>",
"decalarationFlag": "<string>",
"ebrcBulkGenDtos": [
{
"serialNo": 123,
"uploadType": 123,
"branchSlNo": 499.5,
"irmIfscCode": "<string>",
"irmAdCode": "<string>",
"irmNumber": "<string>",
"irmDt": "<string>",
"irmFCC": "<string>",
"irmPurposeCode": "<string>",
"irmRemitAmtFCC": 123,
"sbCumInvoiceNumber": "<string>",
"sbCumInvoiceDate": "<string>",
"portCode": "<string>",
"billNo": "<string>",
"sbCumInvoiceFCC": "<string>",
"sbCumInvoiceValueinFCC": 123,
"mappedIRMAmountFCC": 123,
"isVostro": "<string>",
"vostroType": "<string>",
"mappedORMAmountFCC": 123,
"isThirdPartyExport": "<string>",
"commissionValDeduct": 123,
"commissionValInfo": 123,
"discountValDeduct": 123,
"discountValInfo": 123,
"insuranceValDeduct": 123,
"insuranceValInfo": 123,
"otherDeductionDeduct": 123,
"otherdeductionsInfo": 123,
"freightValDeduct": 123,
"freightValInfo": 123,
"sacCode1": "<string>",
"sacCode2": "<string>",
"serviceTypeModesValue": 123,
"isGstAvail": "<string>",
"gstinInvoiceNumber": "<string>",
"gstinInvoiceDate": "<string>"
}
],
"recordsTruncated": true,
"certificates": [
{
"sbCumInvoiceNumber": "<string>",
"ebrcNumber": "<string>"
}
],
"certificatesTruncated": true,
"dgftAckId": "<string>",
"status": "Pending",
"processedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"total": 123,
"page": 123,
"limit": 123,
"totalPages": 123
}
}eBRC generation
List Generation Requests
List eBRC generation requests for a platform customer with filters and pagination, so you can track each submission and its processing status over time.
GET
/
genebrc
List generation requests
curl --request GET \
--url https://api.ebrc.in/api/v1/genebrc \
--header 'x-api-key: <api-key>'import requests
url = "https://api.ebrc.in/api/v1/genebrc"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.ebrc.in/api/v1/genebrc', 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/genebrc",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ebrc.in/api/v1/genebrc"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ebrc.in/api/v1/genebrc")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ebrc.in/api/v1/genebrc")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "<string>",
"userId": "<string>",
"platformCustomerId": "<string>",
"requestId": "<string>",
"iecNumber": "<string>",
"recordResCount": 123,
"uploadType": "<string>",
"decalarationFlag": "<string>",
"ebrcBulkGenDtos": [
{
"serialNo": 123,
"uploadType": 123,
"branchSlNo": 499.5,
"irmIfscCode": "<string>",
"irmAdCode": "<string>",
"irmNumber": "<string>",
"irmDt": "<string>",
"irmFCC": "<string>",
"irmPurposeCode": "<string>",
"irmRemitAmtFCC": 123,
"sbCumInvoiceNumber": "<string>",
"sbCumInvoiceDate": "<string>",
"portCode": "<string>",
"billNo": "<string>",
"sbCumInvoiceFCC": "<string>",
"sbCumInvoiceValueinFCC": 123,
"mappedIRMAmountFCC": 123,
"isVostro": "<string>",
"vostroType": "<string>",
"mappedORMAmountFCC": 123,
"isThirdPartyExport": "<string>",
"commissionValDeduct": 123,
"commissionValInfo": 123,
"discountValDeduct": 123,
"discountValInfo": 123,
"insuranceValDeduct": 123,
"insuranceValInfo": 123,
"otherDeductionDeduct": 123,
"otherdeductionsInfo": 123,
"freightValDeduct": 123,
"freightValInfo": 123,
"sacCode1": "<string>",
"sacCode2": "<string>",
"serviceTypeModesValue": 123,
"isGstAvail": "<string>",
"gstinInvoiceNumber": "<string>",
"gstinInvoiceDate": "<string>"
}
],
"recordsTruncated": true,
"certificates": [
{
"sbCumInvoiceNumber": "<string>",
"ebrcNumber": "<string>"
}
],
"certificatesTruncated": true,
"dgftAckId": "<string>",
"status": "Pending",
"processedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"meta": {
"total": 123,
"page": 123,
"limit": 123,
"totalPages": 123
}
}List a platform customer’s eBRC generation requests. Use this to find older request IDs, audit past submissions, or drive a status dashboard on your side.
Filters:
Use it to reconcile your side against what we hold, without spending a live DGFT call on
Fetch eBRC details just to read data back.
It is opt-in for the same reason as
Pass
Request example
curl --location 'https://api.ebrc.in/api/v1/genebrc?platformCustomerId=ee849a90-7a28-49b4-8cb2-8e31041650a2&status=Processed&page=1&limit=10' \
--header 'x-api-key: <YOUR_API_KEY>'
requestId, status, fromDate / toDate (ISO dates), plus page / limit for pagination. status matches case-insensitively as a substring and accepts a comma-separated list, so status=Failed,Error,Rejected returns every refused filing in one call.
Response
A generation-request array indata.data plus a meta block with total, page, limit and
totalPages, wrapped in the standard envelope.
Each row carries the request’s identifiers and lifecycle fields — requestId, iecNumber,
recordResCount, uploadType, dgftAckId, status, processedAt, createdAt, updatedAt.
The submitted records and the certificate numbers are not included by default, because one
request can cover thousands of invoices and every row on the page would carry them. Both are
available on request through the two flags below.
Getting your submitted records back
AddincludeRecords=true and each row gains ebrcBulkGenDtos: the records you sent in
Submit new IRMs, echoed back in the order you submitted them.
"ebrcBulkGenDtos": [
{ "serialNo": 1, "irmNumber": "IRM-A", "sbCumInvoiceNumber": "INV-001", "irmRemitAmtFCC": 100.5 }
],
"recordsTruncated": false
includeCertificates, only more so: a record is a full
~20-field object rather than a two-string pair. When the flag is set, page size is capped at 5
and each request returns at most 2000 records, oldest-first by submission order. Past that,
recordsTruncated is true for that row and the remainder is only retrievable through
Fetch eBRC details.
Before August 2026 the documented response listed
ebrcBulkGenDtos unconditionally, but the
API stopped returning it on 25 July 2026 when the list projection was slimmed to keep large
batches from exhausting memory. includeRecords=true is the supported way to get it back.Getting eBRC numbers in this response
AddincludeCertificates=true and each request row gains a compact certificates array: the
invoice number and eBRC number of every certificate issued for that request:
"certificates": [
{ "sbCumInvoiceNumber": "INV-001", "ebrcNumber": "BRC0001" }
],
"certificatesTruncated": false
ebrcNumber straight to Download eBRC PDF. No DGFT call is
made (these are read from data already stored), so you do not need
Fetch eBRC details just to obtain the number.
It is opt-in because a generation request is a batch: one request can cover thousands of invoices.
When the flag is set, page size is capped at 10 and each request returns at most 2000 certificates.
If a request somehow exceeds that, certificatesTruncated is true for that row. The remaining
certificates are only retrievable through
Fetch eBRC details, which queries DGFT directly.
status values
| Value | Meaning |
|---|---|
Pending | Request saved; submission in progress or not yet acknowledged |
Validated | Push accepted successfully |
Failed | Push acknowledgement failed |
Processed | Processing completed successfully |
Errored | Processing failed |
Error | Local/system failure |
Next steps
- Get Request Status for a live DGFT status check.
- Fetch eBRC details for processed requests.
- Submit new IRMs.
Authorizations
Query Parameters
Filter by request status
Available options:
Pending, Validated, Failed, Processed, Errored, Error Required range:
x >= 1Required range:
x >= 1Include a compact certificates array on each request row (invoice number + eBRC number). Page size is capped at 10 and each request returns at most 2000 certificates, with certificatesTruncated set when there are more.
Include the ebrcBulkGenDtos array on each request row: the records you submitted in push-irm, echoed back. Page size is capped at 5 and each request returns at most 2000 records, with recordsTruncated set when there are more.