Consultar em lote
Classifica até 100 itens numa requisição, com admissão e resultado item a item.
/v1/classifications/batchAutenticação: Authorization: Bearer <sua chave>. Como obter a chave
Classifica até 100 itens numa requisição, um por um, na ordem enviada, e responde tudo na mesma resposta. Feito para carga e revisão de catálogo. Cada item tem os mesmos campos e regras da consulta unitária, e cada result tem o mesmo formato da resposta dela.
Admissão item a item#
- Um item inválido (GTIN com dígito verificador errado, setor desconhecido, campo não previsto) volta como
REJECTEDcomINVALID_REQUEST, sem consumir franquia e sem derrubar os demais. - O lote inteiro só é recusado (HTTP 400) quando o envelope é inválido:
itemsvazio ou com mais de 100 itens, campo além deitems, ou item semgtinecfopem texto. indexaponta a posição do item no array enviado. Use-o para casar cada resultado com o seu item.
Franquia#
- Cada item admitido consome uma unidade, GTIN repetido inclusive. No exemplo abaixo, o lote consome 2 unidades: o item de índice 1 foi recusado.
- Se a franquia acabar no meio do lote, os itens já admitidos são mantidos e resolvidos; deste ponto em diante, todos voltam como
REJECTEDcomQUOTA_EXCEEDED. O mesmo vale paraINVALID_API_KEYeSERVICE_UNAVAILABLEna admissão: o item em que o erro ocorreu e todos os seguintes recebem esse erro. - Uma falha ao resolver um item já admitido afeta só aquele item (
SERVICE_UNAVAILABLE); a unidade dele já foi consumida.
O lote não busca na GS1#
GTIN fora do catálogo volta PENDING com LOCAL_PRODUCT_MISSING e entra na fila de busca; consulte de novo mais tarde. Para tentar a GS1 na hora, use a consulta unitária. No lote não há NOT_FOUND por GTIN desconhecido.
O que reenviar#
Reenvie só os itens REJECTED com SERVICE_UNAVAILABLE (com backoff) ou com QUOTA_EXCEEDED (depois da virada do mês). Itens RESOLVED já foram cobrados: reenviá-los consome de novo. Itens com INVALID_REQUEST precisam ser corrigidos antes.
Nota
Os valores fiscais dos exemplos são ilustrativos.
Requisição
Corpo JSON (Content-Type: application/json).
itemsarray<object>obrigatórioItens a classificar, de 1 a 100. Cada item é validado sozinho.mínimo de 1 item · máximo de 100 itens
›4 campos
gtinstringobrigatórioCódigo de barras do produto, com as mesmas regras da consulta unitária. Precisa ser texto: item semgtinem texto invalida o lote inteiro (400).cfopstringobrigatórioCFOP da operação, com 4 dígitos. Precisa ser texto: item semcfopem texto invalida o lote inteiro (400).sectorstringSetor do cliente final, opcional. Valor fora da lista recusa só este item, comINVALID_REQUEST.referenceDatestringData (AAAA-MM-DD) para regras e alíquotas vigentes, opcional. Padrão: hoje, no fuso de São Paulo.
Exemplos
curl -sS -X POST "$GETTAX_URL/v1/classifications/batch" \ -H "Authorization: Bearer $GETTAX_KEY" \ -H "Content-Type: application/json" \ -d '{ "items": [ { "gtin": "7891000315507", "cfop": "5102" }, { "gtin": "7891000315508", "cfop": "5102" }, { "gtin": "7891000315521", "cfop": "5102", "sector": "VAREJO_GERAL" } ]}'// Node 18+ (fetch nativo). Rode com: node gettax.mjsconst response = await fetch(`${process.env.GETTAX_URL}/v1/classifications/batch`, { method: "POST", headers: { Authorization: `Bearer ${process.env.GETTAX_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ items: [ { gtin: "7891000315507", cfop: "5102", }, { gtin: "7891000315508", cfop: "5102", }, { gtin: "7891000315521", cfop: "5102", sector: "VAREJO_GERAL", }, ], }),}); const data = await response.json();if (!response.ok) throw new Error(`GetTax ${response.status}: ${data.error}`);console.log(data);import os import requests # pip install requests response = requests.post( f"{os.environ['GETTAX_URL']}/v1/classifications/batch", headers={"Authorization": f"Bearer {os.environ['GETTAX_KEY']}"}, json={ "items": [ { "gtin": "7891000315507", "cfop": "5102", }, { "gtin": "7891000315508", "cfop": "5102", }, { "gtin": "7891000315521", "cfop": "5102", "sector": "VAREJO_GERAL", }, ], }, timeout=30,)response.raise_for_status()print(response.json())// .NET 7+ (top-level statements). Rode com: dotnet runusing System.Net.Http.Headers;using System.Text; var baseUrl = Environment.GetEnvironmentVariable("GETTAX_URL");var apiKey = Environment.GetEnvironmentVariable("GETTAX_KEY"); using var http = new HttpClient();http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); var body = """ { "items": [ { "gtin": "7891000315507", "cfop": "5102" }, { "gtin": "7891000315508", "cfop": "5102" }, { "gtin": "7891000315521", "cfop": "5102", "sector": "VAREJO_GERAL" } ] } """;using var content = new StringContent(body, Encoding.UTF8, "application/json");using var response = await http.PostAsync($"{baseUrl}/v1/classifications/batch", content); Console.WriteLine((int)response.StatusCode);Console.WriteLine(await response.Content.ReadAsStringAsync());// Java 17+. Rode com: java GetTax.javaimport java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse; public class GetTax { public static void main(String[] args) throws Exception { var baseUrl = System.getenv("GETTAX_URL"); var apiKey = System.getenv("GETTAX_KEY"); var body = """ { "items": [ { "gtin": "7891000315507", "cfop": "5102" }, { "gtin": "7891000315508", "cfop": "5102" }, { "gtin": "7891000315521", "cfop": "5102", "sector": "VAREJO_GERAL" } ] } """; var request = HttpRequest.newBuilder(URI.create(baseUrl + "/v1/classifications/batch")) .header("Authorization", "Bearer " + apiKey) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(body)) .build(); var response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); }}<?php// PHP 8+ com a extensão curl. Rode com: php gettax.php$ch = curl_init(getenv('GETTAX_URL') . '/v1/classifications/batch');curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . getenv('GETTAX_KEY'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => json_encode([ 'items' => [ [ 'gtin' => '7891000315507', 'cfop' => '5102', ], [ 'gtin' => '7891000315508', 'cfop' => '5102', ], [ 'gtin' => '7891000315521', 'cfop' => '5102', 'sector' => 'VAREJO_GERAL', ], ], ]),]); $body = curl_exec($ch);if ($body === false) { throw new RuntimeException(curl_error($ch));} echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL, $body, PHP_EOL;// Delphi XE8+ (System.Net.HttpClient, sem componentes de terceiros).program GetTax; {$APPTYPE CONSOLE} uses System.SysUtils, System.Classes, System.Net.HttpClient, System.Net.URLClient; const Body = '{' + ' "items": [' + ' {' + ' "gtin": "7891000315507",' + ' "cfop": "5102"' + ' },' + ' {' + ' "gtin": "7891000315508",' + ' "cfop": "5102"' + ' },' + ' {' + ' "gtin": "7891000315521",' + ' "cfop": "5102",' + ' "sector": "VAREJO_GERAL"' + ' }' + ' ]' + '}'; var Client: THTTPClient; Content: TStringStream; Response: IHTTPResponse;begin Client := THTTPClient.Create; Content := TStringStream.Create(Body, TEncoding.UTF8); try Response := Client.Post(GetEnvironmentVariable('GETTAX_URL') + '/v1/classifications/batch', Content, nil, [ TNetHeader.Create('Authorization', 'Bearer ' + GetEnvironmentVariable('GETTAX_KEY')), TNetHeader.Create('Content-Type', 'application/json') ]); Writeln(Response.StatusCode); Writeln(Response.ContentAsString(TEncoding.UTF8)); finally Content.Free; Client.Free; end;end.Respostas
200Lote processado, inclusive quando há itens recusados. O lote não responde 429: franquia esgotada aparece por item.›
resultsarray<um de>obrigatórioUma entrada por item enviado, na mesma ordem.›2 formas possíveis
outcome = RESOLVED
outcomestringobrigatórioRESOLVED: o item foi admitido e trazresult.REJECTED: o item foi recusado e trazerror.Valores:RESOLVEDindexintegerobrigatórioPosição do item no array enviado, começando em 0.mínimo 0
resultobjectobrigatórioResposta do item, no mesmo formato da consulta unitária.›10 campos
decisionVersionstringobrigatórioIdentificador da decisão, gravada em trilha de auditoria imutável. Cada consulta gera um novo, mesmo com a mesma entrada. Guarde junto do documento fiscal e informe ao reportar um problema.UUID
statusstringobrigatórioValores:CLASSIFIEDPENDINGIN_REVIEWNOT_FOUNDretryAfterSecondsintegerSó emPENDING, quando a busca do produto foi adiada pelo limite diário de consultas do GetTax à GS1: segundos até esse limite reiniciar. Não consulte o mesmo GTIN antes disso. Ausente nos demais casos.mínimo 0
reasonstringobrigatóriopode ser nullMotivo do status:LOCAL_PRODUCT_MISSING(produto fora do catálogo),MISSING_NCM,MISSING_RULEouINCOMPLETE_CLASSIFICATION.nullemCLASSIFIEDeNOT_FOUND.Valores:LOCAL_PRODUCT_MISSINGMISSING_NCMMISSING_RULEINCOMPLETE_CLASSIFICATIONgtinstringobrigatórioGTIN normalizado com 14 dígitos (zeros à esquerda).cfopstringobrigatórioCFOP consultado.sectorstringobrigatóriopode ser nullSetor enviado;nullquando a consulta não informou setor.Valores:VAREJO_GERALBAR_RESTAURANTEPRODUTOR_RURALGOVERNOATACADOZONA_FRANCAreferenceDatestringobrigatórioData de referência efetivamente usada: a enviada ou a data de hoje em São Paulo.data AAAA-MM-DD
productobjectobrigatóriopode ser nullProduto no catálogo do GetTax.nullquando o GTIN não está no catálogo (PENDINGeNOT_FOUND).›10 campos
idstringobrigatórioIdentificador interno do produto.UUID
gtinAsProvidedstringobrigatóriopode ser nullGTIN na forma em que entrou no catálogo, antes da normalização para 14 dígitos.descriptionstringobrigatóriopode ser nullDescrição do produto, quando a origem informa.brandstringobrigatóriopode ser nullMarca, quando a origem informa.ncmstringobrigatóriopode ser nullNCM de 8 dígitos, sem pontuação.nullquando a origem não informou. Sem NCM, só se aplicam regras que não dependem dele (por operação ou exceção por GTIN).ncmSourcestringobrigatóriopode ser nullOrigem do NCM (hoje,GS1).nullquando não há NCM.ceststringobrigatóriopode ser nullCEST, quando a origem informa.gpcCodestringobrigatóriopode ser nullCódigo de categoria GPC da GS1, quando informado.imageUrlstringobrigatóriopode ser nullURL de imagem do produto, quando informada.sourceKindstringobrigatórioComo o produto entrou no catálogo:BULK(carga de arquivo da GS1) ouPROVIDER(busca individual na GS1).
classificationsarray<object>obrigatórioAlternativas de enquadramento. Vazio quando não há alternativa. A ordem é técnica e estável, não recomendação: não escolha a primeira automaticamente.›11 campos
stagestringobrigatórioEtapa do motor que produziu a alternativa:OPERATION,COHERENCE,PRODUCTouFALLBACK. Ver Etapas do motor.Valores:OPERATIONCOHERENCEPRODUCTFALLBACKruleobjectobrigatórioRegra curada que produziu a alternativa, com versão, vigência e escopo.›7 campos
idstringobrigatórioIdentificador da regra.UUID
versionintegerobrigatórioVersão da regra. Junto comrule.id, identifica exatamente o que foi aplicado.effectiveFromstringobrigatórioInício da vigência da regra (inclusivo).data AAAA-MM-DD
effectiveTostringobrigatóriopode ser nullFim da vigência da regra (exclusivo).null= sem data de término.data AAAA-MM-DD
ncmstringobrigatóriopode ser nullEscopo de NCM da regra: família de 4 dígitos, NCM completo de 8, ounullquando a regra não depende de NCM.gtinstringobrigatóriopode ser nullGTIN (14 dígitos) quando a regra é exceção para um produto específico; senãonull.sectorstringobrigatóriopode ser nullSetor da regra.null= regra genérica, vale para qualquer setor.Valores:VAREJO_GERALBAR_RESTAURANTEPRODUTOR_RURALGOVERNOATACADOZONA_FRANCA
cststringobrigatórioCST a informar no documento fiscal. É o mesmo para CBS e IBS.cClassTribstringobrigatórioCódigo de classificação tributária a informar no documento fiscal. É o mesmo para CBS e IBS.applicabilitystringobrigatóriopode ser nullCondição em que a alternativa se aplica, em texto.nullquando não há condição. Quem confirma se a condição vale para a operação é o emissor.observationstringobrigatóriopode ser nullObservação da curadoria fiscal, em texto, ounull.legalBasisstringobrigatóriopode ser nullFundamento legal da alternativa: o da regra, quando a curadoria cadastrou um próprio; senão o do cClassTrib na fonte oficial (ex.:LC 214/2025, Art. 135).nullquando nenhum dos dois existe.taxClassificationobjectobrigatóriopode ser nullLinha da tabela oficial de cClassTrib usada no cálculo.nullquando não há linha vigente para o código (o cálculo ficaUNAVAILABLE).›12 campos
idstringobrigatórioIdentificador da linha na tabela de cClassTrib.UUID
sourceVersionstringobrigatórioVersão da fonte de onde a linha foi carregada.effectiveFromstringobrigatórioInício da vigência da linha (inclusivo).data AAAA-MM-DD
effectiveTostringobrigatóriopode ser nullFim da vigência da linha (exclusivo).null= sem data de término.data AAAA-MM-DD
cststringobrigatórioCST do código na tabela oficial. Se divergir do CST da regra, o cálculo ficaUNAVAILABLEcomCST_MISMATCH.cClassTribstringobrigatórioCódigo cClassTrib da linha.reductionPctIbsstringobrigatórioRedução do IBS (vale paraIBS_UFeIBS_MUN), fração decimal em string, com 6 casas:0.600000= 60%.reductionPctCbsstringobrigatórioRedução da CBS, fração decimal em string, com 6 casas:0.600000= 60%.gTribRegularbooleanobrigatórioIndicadorgTribRegulardo código, como publicado na tabela oficial de cClassTrib.isApplicablebooleanobrigatórioIndicador de aplicabilidade do código, como publicado na tabela oficial de cClassTrib.calculationModestringobrigatórioComo o código é calculado:STANDARD(alíquota × (1 − redução)),NOT_DUE(sem tributo devido) ouUNSUPPORTED(mecânica que o motor ainda não calcula, como diferimento e monofasia).Valores:STANDARDNOT_DUEUNSUPPORTEDlegalBasisstringobrigatóriopode ser nullFundamento legal do código na fonte oficial. O que vale para a alternativa é olegalBasisdela.
ratesarray<object>obrigatórioLinhas da tabela de alíquotas vigentes na data de referência, uma por componente.›6 campos
idstringobrigatórioIdentificador da linha na tabela de alíquotas.UUID
sourceVersionstringobrigatórioVersão da fonte de onde a alíquota foi carregada.effectiveFromstringobrigatórioInício da vigência da alíquota (inclusivo).data AAAA-MM-DD
effectiveTostringobrigatóriopode ser nullFim da vigência da alíquota (exclusivo).null= sem data de término.data AAAA-MM-DD
componentstringobrigatórioComponente a que a alíquota se refere.Valores:CBSIBS_UFIBS_MUNratestringobrigatórioAlíquota padrão do componente, fração decimal em string, com 6 casas:0.009000= 0,9%.
componentsarray<um de>obrigatóriopode ser nullResultado por componente (CBS,IBS_UF,IBS_MUN).nullquando o cálculo está indisponível (calculation.status = UNAVAILABLE). Ver Componentes e alíquotas.›2 formas possíveis
status = STANDARD
componentstringobrigatórioComponente:CBS,IBS_UFouIBS_MUN. Trate a lista como aberta: novos componentes podem surgir.Valores:CBSIBS_UFIBS_MUNcststringobrigatórioCST do componente. Igual ao da alternativa.cClassTribstringobrigatóriocClassTrib do componente. Igual ao da alternativa.statusstringobrigatórioSTANDARD: tributo devido, com alíquota padrão, redução e alíquota efetiva.NOT_DUE: sem tributo devido; não traz números.Valores:STANDARDstandardRatestringobrigatórioAlíquota padrão do componente na data de referência, fração decimal em string, com 6 casas.reductionPctstringobrigatórioRedução aplicada ao componente, fração decimal em string, com 6 casas.effectiveRatestringobrigatórioAlíquota efetiva:standardRate × (1 − reductionPct), fração decimal em string, com 6 casas.
status = NOT_DUE
componentstringobrigatórioComponente:CBS,IBS_UFouIBS_MUN. Trate a lista como aberta: novos componentes podem surgir.Valores:CBSIBS_UFIBS_MUNcststringobrigatórioCST do componente. Igual ao da alternativa.cClassTribstringobrigatóriocClassTrib do componente. Igual ao da alternativa.statusstringobrigatórioSTANDARD: tributo devido, com alíquota padrão, redução e alíquota efetiva.NOT_DUE: sem tributo devido; não traz números.Valores:NOT_DUE
calculationum deobrigatórioEstado do cálculo da alternativa. Uma alternativa sem cálculo continua na resposta, com o motivo.›3 formas possíveis
status = CALCULATED
statusstringobrigatórioCALCULATED(componentesSTANDARD),NOT_DUE(componentesNOT_DUE) ouUNAVAILABLE(componentsnulo).Valores:CALCULATED
status = NOT_DUE
statusstringobrigatórioCALCULATED(componentesSTANDARD),NOT_DUE(componentesNOT_DUE) ouUNAVAILABLE(componentsnulo).Valores:NOT_DUE
status = UNAVAILABLE
statusstringobrigatórioCALCULATED(componentesSTANDARD),NOT_DUE(componentesNOT_DUE) ouUNAVAILABLE(componentsnulo).Valores:UNAVAILABLEreasonstringobrigatórioSó emUNAVAILABLE:TAX_CLASSIFICATION_MISSING,CST_MISMATCH,RATE_MISSINGouCALCULATION_UNSUPPORTED.Valores:TAX_CLASSIFICATION_MISSINGCST_MISMATCHRATE_MISSINGCALCULATION_UNSUPPORTED
outcome = REJECTED
outcomestringobrigatórioRESOLVED: o item foi admitido e trazresult.REJECTED: o item foi recusado e trazerror.Valores:REJECTEDindexintegerobrigatórioPosição do item no array enviado, começando em 0.mínimo 0
errorstringobrigatórioPor que o item foi recusado:INVALID_REQUEST(item inválido; não consome),QUOTA_EXCEEDED(franquia esgotada),INVALID_API_KEY(chave deixou de valer) ouSERVICE_UNAVAILABLE(falha temporária).Valores:INVALID_REQUESTQUOTA_EXCEEDEDINVALID_API_KEYSERVICE_UNAVAILABLE
{ "results": [ { "outcome": "RESOLVED", "index": 0, "result": { "decisionVersion": "4c5d6e7f-8091-4a2b-9c3d-4e5f60718293", "status": "CLASSIFIED", "reason": null, "gtin": "07891000315507", "cfop": "5102", "sector": null, "referenceDate": "2026-10-20", "product": { "id": "5e6f7a8b-9c0d-4e1f-a2b3-c4d5e6f7a8b9", "gtinAsProvided": "7891000315507", "description": "ARROZ BRANCO TIPO 1 5KG", "brand": "MARCA EXEMPLO", "ncm": "10063021", "ncmSource": "GS1", "cest": null, "gpcCode": null, "imageUrl": null, "sourceKind": "BULK" }, "classifications": [ { "stage": "PRODUCT", "rule": { "id": "3f6b2c1e-8a4d-4f2b-9c7e-1d2a3b4c5d6e", "version": 1, "effectiveFrom": "2026-01-01", "effectiveTo": null, "ncm": "1006", "gtin": null, "sector": null }, "cst": "200", "cClassTrib": "200034", "applicability": "Venda para alimentação humana.", "observation": null, "legalBasis": "LC 214/2025, Art. 135", "taxClassification": { "id": "6f7a8b9c-0d1e-4f2a-b3c4-d5e6f7a8b9c0", "sourceVersion": "CCLASSTRIB-2026", "effectiveFrom": "2026-01-01", "effectiveTo": null, "cst": "200", "cClassTrib": "200034", "reductionPctIbs": "0.600000", "reductionPctCbs": "0.600000", "gTribRegular": false, "isApplicable": true, "calculationMode": "STANDARD", "legalBasis": "LC 214/2025, Art. 135" }, "rates": [ { "id": "0b1c2d3e-4f50-4a61-8b72-c3d4e5f60718", "sourceVersion": "ALIQUOTAS-2026", "effectiveFrom": "2026-01-01", "effectiveTo": null, "component": "CBS", "rate": "0.009000" }, { "id": "1c2d3e4f-5061-4b72-9c83-d4e5f6071829", "sourceVersion": "ALIQUOTAS-2026", "effectiveFrom": "2026-01-01", "effectiveTo": null, "component": "IBS_UF", "rate": "0.001000" }, { "id": "2d3e4f50-6172-4c83-ad94-e5f60718293a", "sourceVersion": "ALIQUOTAS-2026", "effectiveFrom": "2026-01-01", "effectiveTo": null, "component": "IBS_MUN", "rate": "0.000000" } ], "components": [ { "component": "CBS", "cst": "200", "cClassTrib": "200034", "status": "STANDARD", "standardRate": "0.009000", "reductionPct": "0.600000", "effectiveRate": "0.003600" }, { "component": "IBS_UF", "cst": "200", "cClassTrib": "200034", "status": "STANDARD", "standardRate": "0.001000", "reductionPct": "0.600000", "effectiveRate": "0.000400" }, { "component": "IBS_MUN", "cst": "200", "cClassTrib": "200034", "status": "STANDARD", "standardRate": "0.000000", "reductionPct": "0.600000", "effectiveRate": "0.000000" } ], "calculation": { "status": "CALCULATED" } } ] } }, { "outcome": "REJECTED", "index": 1, "error": "INVALID_REQUEST" }, { "outcome": "RESOLVED", "index": 2, "result": { "decisionVersion": "7b8c9d0e-1f2a-4b3c-8d4e-5f6a7b8c9d0e", "status": "PENDING", "reason": "LOCAL_PRODUCT_MISSING", "gtin": "07891000315521", "cfop": "5102", "sector": "VAREJO_GERAL", "referenceDate": "2026-10-20", "product": null, "classifications": [] } } ]}400Envelope inválido: lote vazio, mais de 100 itens, campo além de items, item que não é objeto ou item sem gtin/cfop em texto. Nenhum item é processado nem consumido.›
errorstringobrigatórioCódigo do erro, sem mensagem detalhada. Ver Erros e novas tentativas.Valores:INVALID_REQUEST
{ "error": "INVALID_REQUEST"}401Chave ausente, malformada, inexistente, revogada ou de cliente desativado. Não consome franquia.›
errorstringobrigatórioCódigo do erro, sem mensagem detalhada. Ver Erros e novas tentativas.Valores:INVALID_API_KEY
{ "error": "INVALID_API_KEY"}500Erro inesperado. Repita com backoff exponencial.›
errorstringobrigatórioCódigo do erro, sem mensagem detalhada. Ver Erros e novas tentativas.Valores:INTERNAL_ERROR
{ "error": "INTERNAL_ERROR"}503Serviço temporariamente indisponível. Repita com backoff exponencial.›
errorstringobrigatórioCódigo do erro, sem mensagem detalhada. Ver Erros e novas tentativas.Valores:SERVICE_UNAVAILABLE
{ "error": "SERVICE_UNAVAILABLE"}