@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Customer Credit API
@base https://apiexamples.vtexcommercestable.com.br
@version 1.0
@auth ApiKey X-VTEX-API-AppKey in header | ApiKey X-VTEX-API-AppToken in header | ApiKey VtexIdclientAutCookie in header
@common_fields {Content-Type: str, Accept: str}
@endpoints 25
@hint download_for_search
@toc api(25)

@endpoint GET /api/creditcontrol/invoices
@required {creditAccountId: str}
@optional {from: str, to: str, createdDateFrom: str, createdDateTo: str, dueDateFrom: str, dueDateTo: str, value: num, status: str(Opened/Paid/Cancelled), friendlyId: str, observation: str}
@returns(200) {data: [map], summary: map{total: num, count: int, totalPaid: num, totalCancelled: num}}

@endpoint GET /api/creditcontrol/accounts/{creditAccountId}/invoices/{invoiceId}
@required {creditAccountId: str, invoiceId: str}
@returns(200) {id: str, friendlyId: str, status: str, value: num, accountId: str, creditValue: num, createdAt: str, updatedAt: str, originalDueDate: str, dueDate: str, installment: num, orderId: str, transactionId: str, numberOfInstallments: num, creditAccountId: str}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/invoices/{invoiceId}
@required {creditAccountId: str, invoiceId: str, status: str(Opened/Paid/Cancelled)}
@optional {friendlyId: str, observation: str, paymentLink: str}
@returns(200)

@endpoint DELETE /api/creditcontrol/accounts/{creditAccountId}/invoices/{invoiceId}
@required {creditAccountId: str, invoiceId: str}
@returns(200)

@endpoint GET /api/creditcontrol/accounts/{creditAccountId}/invoices
@required {creditAccountId: str}
@returns(200) {data: [map], summary: map{total: num, count: int, totalPaid: int, totalCancelled: int}}

@endpoint POST /api/creditcontrol/accounts/{creditAccountId}/invoices/{invoiceId}/payments
@required {creditAccountId: str, invoiceId: str}
@returns(200) {id: str, friendlyId: str, status: str, value: num, accountId: str, creditValue: num, createdAt: str, updatedAt: str, originalDueDate: str, dueDate: str, installment: num, orderId: str, transactionId: str, numberOfInstallments: num, creditAccountId: str}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/invoices/{invoiceId}/postponement
@required {creditAccountId: str, invoiceId: str, dueDays: num}
@returns(200)

@endpoint GET /api/creditcontrol/accounts
@optional {from: str, to: str, status: str(Opened/Paid/Cancelled), email: str}
@returns(200) {data: [map], summary: map{count: int}}

@endpoint POST /api/creditcontrol/accounts
@required {document: str, documentType: str(CPF/CNPJ/Other), email: str, creditLimit: str, description: str, tolerance: str}
@returns(200) {id: str, balance: num, document: str, status: str, documentType: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint GET /api/creditcontrol/accounts/{creditAccountId}
@required {creditAccountId: str}
@returns(200) {id: str, balance: num, document: str, status: str, documentType: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint DELETE /api/creditcontrol/accounts/{creditAccountId}
@required {creditAccountId: str}
@optional {document: str, documentType: str(CPF/CNPJ/Other), email: str}
@returns(200) {id: str, balance: num, document: str, status: str, documentType: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}
@required {creditAccountId: str, email: str, document: str, documentType: str(CPF/CNPJ/Other)}
@optional {creditLimit: num, tolerance: num}
@returns(200) {id: str, balance: num, document: str, status: str, documentType: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint GET /api/creditcontrol/accounts/{creditAccountId}/statements
@required {creditAccountId: str}
@returns(200) {statements: [map], currentBalance: num, intervalBalance: num, previousBalance: num}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/creditlimit
@required {creditAccountId: str, value: num}
@returns(200) {id: str, balance: num, status: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/statements/{statementId}
@required {creditAccountId: str, statementId: str, value: str}
@returns(200) {value: str}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/transactions/{transactionId}/settlement
@required {creditAccountId: str, transactionId: str, value: num}
@returns(200) {value: num, id: str}

@endpoint POST /api/creditcontrol/accounts/{creditAccountId}/transactions
@required {creditAccountId: str, value: num, settle: bool, installments: num}
@optional {expirationDate: str}
@returns(200) {id: str, value: num, expirationDate: str, installments: num}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/transactions/{transactionId}
@required {creditAccountId: str, transactionId: str, value: num, settle: bool, installments: num}
@returns(200) {id: str, value: num, installments: num}

@endpoint DELETE /api/creditcontrol/accounts/{creditAccountId}/transactions/{transactionId}
@required {creditAccountId: str, transactionId: str}
@returns(200)

@endpoint POST /api/creditcontrol/accounts/{creditAccountId}/holders
@required {creditAccountId: str, claims: map{email!: str}}
@returns(200) {level: num, claims: map{email: str}, id: str, createdAt: str}

@endpoint DELETE /api/creditcontrol/accounts/{creditAccountId}/holders/{holderId}
@required {creditAccountId: str, holderId: str}
@returns(200) {id: str}

@endpoint PUT /api/creditcontrol/accounts/{creditAccountId}/tolerance
@required {creditAccountId: str, value: num}
@returns(200) {id: str, balance: num, status: str, creditLimit: num, updatedAt: str, createdAt: str, description: str, availableCredit: num, preAuthorizedCredit: num, email: str, tolerance: num, availableBalance: num}

@endpoint POST /api/creditcontrol/accounts/{creditAccountId}/transactions/{transactionId}/refunds
@required {creditAccountId: str, transactionId: str, value: num}
@returns(200) {value: num}

@endpoint GET /api/creditcontrol/storeconfig
@returns(200) {dailyInterestRate: num, invoicePostponementLimit: num, taxRate: num, maxPostponementDays: num, defaultCreditValue: num, postponementEnabled: bool, automaticCheckingAccountCreationEnabled: bool, toleranceEnabled: bool, myCreditsEnabled: bool, maxPreAuthorizationGrowthRate: num, notificationsSettings: map{daysPrior: [map], daysAfter: [map]}}

@endpoint PUT /api/creditcontrol/storeconfig
@required {dailyInterestRate: num, invoicePostponementLimit: num, taxRate: num, maxPostponementDays: num, defaultCreditValue: num, maxPreAuthorizationGrowthRate: num, myCreditsEnabled: bool, toleranceEnabled: bool, automaticCheckingAccountCreationEnabled: bool, postponementEnabled: bool}
@optional {notificationsSettings: map{daysPrior: [map], daysAfter: [map]}}
@returns(200) {dailyInterestRate: num, invoicePostponementLimit: num, taxRate: num, maxPostponementDays: num, defaultCreditValue: num, postponementEnabled: bool, automaticCheckingAccountCreationEnabled: bool, toleranceEnabled: bool, myCreditsEnabled: bool, maxPreAuthorizationGrowthRate: num, notificationsSettings: map{daysPrior: [map], daysAfter: [map]}}

@end
