Saltar al contenido principal

OpenAPI Definition

Esta sección contiene la especificación OpenAPI completa para Goat API. Ofrece detalles sobre los esquemas de datos, manejo de errores y los protocolos de seguridad que deben seguirse al interactuar con la API.

openapi: 3.0.0
info:
title: Goat API
version: 1.0.0
servers:
- url: https://api.goat.ar/v1/

components:
securitySchemes:
OAuth2ClientCredentials:
type: oauth2
flows:
clientCredentials:
tokenUrl: https://api.goat.ar/v1/oauth/token
scopes: []
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT

schemas:
############
## plusmo ##
############

SMSSendRequest:
type: object
required:
- dnis
- message
properties:
dnis:
type: string
pattern: "^[0-9][12]$"
example: "541126947999"
message:
type: string
maxLength: 64
example: "hello"

SMSSendResponse:
type: object
properties:
message_id:
type: string
example: "alss-a1b2c3d4-e5f67890"

SMSStatusResponse:
type: object
properties:
status:
type: string
example: "DELIVRD"
delivery_time:
type: string
example: "20210922093309"
mccmnc:
type: string
example: "214099"
error_code:
type: string
example: "000"
system_delivery_time:
type: string
example: "210922093309"

SMSStatusNotFoundResponse:
type: object
properties:
status:
type: string
example: "UNKNOWN"
delivery_time:
type: string
example: ""
mccmnc:
type: string
example: ""

SimSwapRequest:
type: object
required:
- phoneNumber
properties:
phoneNumber:
type: string
pattern: "^[0-9][12]$"
example: "543541587510"

CompanyKYCData: # TODO: no definimos con precisión los diccionarios internos, porque pueden cambiar
type: object
properties:
datosBasicos:
type: object
description: Basic data
estructuraCorporativa:
type: object
description: Corporate structure
gestionDeRiesgo:
type: object
description: Risk management
monitoreoDeCumplimiento:
type: object
description: Compliance monitoring

CreateCompanyKYCDataRequest:
type: object
properties:
data:
type: object # no vamos a restringir el contenido por ahora
additionalProperties: true
description: KYC company data for the "datosBasicos" section

UpdateKYCDataRequest:
type: object
properties:
dataSection:
type: string
description: Section to update
enum:
- datosBasicos
- estructuraCorporativa
- gestionDeRiesgo
- monitoreoDeCumplimiento
data:
type: object # no vamos a restringir el contenido por ahora
additionalProperties: true
description: KYC company data for a given section

Document: # Extracted from KYCAttachments
type: object
properties:
uuid:
type: string
format: uuid
name:
type: string
type:
type: string
contentType:
type: string
url:
type: string
created:
type: string
format: date-time

UploadDocumentRequest:
type: object
properties:
name: # TODO: habría que agregarlo en el modelo, como identificador para Compliance
type: string
documentType:
type: string
file:
type: string
format: binary
required:
- documentType
- file

############
## Errors ##
############

ErrorResponse:
type: object
properties:
name:
type: string
description: Error name
message:
type: string
description: Error message
required:
- name
- message

InternalServerErrorDetails:
type: object
properties:
trackingId:
type: string
description: Error tracking ID

InternalServerError:
allOf:
- $ref: "#/components/schemas/ErrorResponse"
- type: object
properties:
detail:
$ref: "#/components/schemas/InternalServerErrorDetails"

NotFoundErrorDetails:
type: object
properties:
item:
type: string
description: Item not found

NotFoundError:
allOf:
- $ref: "#/components/schemas/ErrorResponse"
- type: object
properties:
detail:
$ref: "#/components/schemas/NotFoundErrorDetails"

ValidationErrorItem:
type: object
properties:
path:
type: string
description: Body path
message:
type: string
description: Error message
type:
type: string
enum:
- required
- invalid
- notfound
- duplicate

ValidationErrorDetails:
type: object
properties:
items:
type: array
items:
$ref: "#/components/schemas/ValidationErrorItem"

ValidationError:
allOf:
- $ref: "#/components/schemas/ErrorResponse"
- type: object
properties:
detail:
$ref: "#/components/schemas/ValidationErrorDetails"

UnauthorizedError:
allOf:
- $ref: "#/components/schemas/ErrorResponse"

ForbiddenErrorDetails:
type: object
properties:
reason:
type: string
description: Forbidden reason
enum:
- FORBIDDEN
- INSUFFICIENT_PERMISSIONS
- INVALID_STATE

ForbiddenError:
allOf:
- $ref: "#/components/schemas/ErrorResponse"
- type: object
properties:
detail:
$ref: "#/components/schemas/ForbiddenErrorDetails"

#############################
## Entities shared schemas ##
#############################

CountryCode:
type: string
pattern: "^[A-Z][2]$"
description: Country code (ISO 3166-1 alpha-2)
example: AR

UserLegalInformationRequest:
type: object
additionalProperties: false
required:
- taxIdType
- taxId
- taxCondition
- category
- taxExempt
properties:
taxIdType:
type: string
enum:
- cuil
- cuit
taxId:
type: string
taxCondition:
type: string
enum:
- vatRegistered
- others
category:
type: string
enum:
- consumidorFinal
- monotributista
- responsableInscripto
taxExempt:
type: boolean

UserLegalInformation:
type: object
additionalProperties: false
required:
- taxIdType
- taxId
- taxCondition
- category
- taxExempt
properties:
taxIdType:
type: string
enum:
- CUIL
- CUIT
taxId:
type: string
taxCondition:
type: string
enum:
- VAT_REGISTERED
- OTHERS
category:
type: string
enum:
- Consumidor final
- Monotributista
- Responsable inscripto
taxExempt:
type: boolean

LegalAddress:
type: object
additionalProperties: false
required:
- streetName
- streetNumber
- floor
- apartment
- zipCode
- neighborhood
- city
- region
- country
properties:
streetName:
type: string
example: "Evergreen Terrace"
streetNumber:
type: string #@TODO
example: "742"
floor:
type: string # @TODO
example: "1"
apartment:
type: string
example: "A"
zipCode:
type: string
example: "90210"
neighborhood:
type: string
example: "Los Alamos"
city:
type: string
example: "Springfield"
region:
type: string
example: "Illinois"
country:
$ref: "#/components/schemas/CountryCode"
example:
streetName: "Evergreen Terrace"

TaxInformation:
type: object
properties:
type:
type: string
description: Tax identification type
enum:
- CUIT
- CNPJ
value:
type: string
description: Tax identification value
condition:
type: string
enum:
- VAT_REGISTERED
- OTHERS

CurrencyCode:
type: string
pattern: "^[A-Z][3]$"
description: ISO 4217 (e.g., USD, EUR, ARS)
example: ARS

AmountField:
type: object
properties:
currency:
$ref: "#/components/schemas/CurrencyCode"
description: currency
value:
type: number
format: float
description: amount

AccountInfo:
type: object
nullable: true
properties:
ownerType:
type: string
enum:
- USER
- COMPANY
uuid:
type: string
format: uuid
description: Account UUID
status:
type: string
enum:
- ACTIVE
- INACTIVE
- PENDING
created:
type: string
format: date-time
updated:
type: string
format: date-time
cvu:
$ref: "#/components/schemas/AccountCXU"
description: Account CVU
alias:
$ref: "#/components/schemas/AccountAlias"
description: Account Alias
currency:
$ref: "#/components/schemas/CurrencyCode"
description: Currency
balance:
type: number
description: Account balance
monthlyDepositOperation:
type: number
monthlyWithdrawOperation:
type: number

AccountAlias:
type: string
pattern: '^[a-zA-Z0-9\.\-][6,20]$'
description: Account alias
example: "juan.pesos"

UpdateAccountAliasRequest:
type: object
properties:
newAlias:
$ref: "#/components/schemas/AccountAlias"

CreateAccountAliasRequest:
type: object
properties:
alias:
$ref: "#/components/schemas/AccountAlias"
cuit:
type: string
cvu:
type: string

CreateAccountAliasResponse:
type: string

AccountCXU:
type: string
pattern: '^\d[22]$'
example: "1234567890123456789012"

TransactionConcept:
type: string
description: Transaction concept
example: VAR
enum:
- VAR
- ALQ
- APC
- BRH
- BRN
- CUO
- EXP
- FAC
- HAB
- HON
- OIN
- OIH
- PRE
- ROP
- SEG
- SIS
- SON

TransactionParty:
type: object
properties:
uuid:
type: string
format: uuid
description: Party UUID
name:
type: string
description: Party name
cuit:
type: string
cuil:
type: string
oneOf:
- required: ["cuit"]
- required: ["cuil"]

TransactionInternalParty:
allOf:
- $ref: "#/components/schemas/TransactionParty"
- type: object
properties:
type:
type: string
enum:
- USER
- COMPANY
description: Party type (user or company)
cvu:
type: string
cbu:
type: string
oneOf:
- required: ["cvu"]
- required: ["cbu"]

TransactionCounterParty:
type: object
allOf:
- $ref: "#/components/schemas/TransactionParty"
- type: object
properties:
type:
type: string
enum:
- INTERNAL
- EXTERNAL
description: Party type (external or internal)
personType:
type: string
enum:
- Fisica
- Juridica
identifierType:
type: string
enum:
- CBU
- CVU
identifier:
type: string
description: Party identifier value (CBU or CVU)
TransactionAccountInfo:
type: object
additionalProperties: false
required:
- cvu
- cuit
- name
properties:
cvu:
description: Account CVU
$ref: "#/components/schemas/AccountCXU"
cuit:
description: CUIT of the account
type: string
name:
description: Name of the account
type: string

TransactionSimpleCounterParty:
type: object
additionalProperties: false
required:
- name
- cuit
- identifierType
- identifier
properties:
name:
type: string
description: Name of the party
cuit:
type: string
description: CUIT of the party
identifierType:
type: string
description: Identifier type
enum:
- CBU
- CVU
example: CVU
identifier:
description: Identifier of the party
$ref: "#/components/schemas/AccountCXU"

#############
## Balance ##
#############

BalanceResponse:
type: object
properties:
id:
type: string
format: uuid
accountId:
type: string
format: uuid
balance:
type: number
nullable: true

##############
## Limits ##
##############

LimitsResponse:
type: object
additionalProperties: false
properties:
data:
type: object
properties:
id:
type: string
format: uuid
accountId:
type: string
format: uuid
monthlyWithdrawLimit:
type: number
monthlyDepositLimit:
type: number
annualWithdrawLimit:
type: number
annualDepositLimit:
type: number
statusCode:
type: number

SetLimitsRequest:
type: object
additionalProperties: false
properties:
monthlyWithdrawLimit:
type: number
monthlyDepositLimit:
type: number
annualWithdrawLimit:
type: number
annualDepositLimit:
type: number

##############
## Fees ##
##############

FeesResponse:
type: object
additionalProperties: false
properties:
id:
type: string
format: uuid
accountId:
type: string
format: uuid
feeType:
type: string
amount:
type: number

SetFeesRequest:
type: object
additionalProperties: false
properties:
feeType:
type: string
amount:
type: number

##############
## Operado ##
##############

OperadoResponse:
type: object
additionalProperties: false
properties:
id:
type: string
format: uuid
accountUUID:
type: string
format: uuid
monthDeposit:
type: number
monthWithdraw:
type: number
annualDeposit:
type: number
annualWithdraw:
type: number
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time

FullOperadoResponse:
type: object
additionalProperties: false
properties:
id:
type: string
format: uuid
accountUUID:
type: string
format: uuid
monthDeposit:
type: number
monthWithdraw:
type: number
annualDeposit:
type: number
annualWithdraw:
type: number
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
WithdrawMonthAvailable:
type: number
DepositMonthAvailable:
type: number
WithdrawAnnualAvailable:
type: number
DepositAnnualAvailable:
type: number

####################
## Counterparty ##
####################

CounterpartyRequest:
type: object
properties:
destinatario:
type: string
description: Counterparty cxu

CounterpartyResponse:
type: object
additionalProperties: false
oneOf:
- type: object
properties:
cvu:
type: string
cbu:
type: string
tipo:
type: string
enum:
- CA
- CC
titulares:
type: string
entidadBancaria:
type: string
moneda:
$ref: "#/components/schemas/CurrencyCode"
- type: object
properties:
message:
type: string
example: Alias not found

###########
## Users ##
###########

User:
type: object
properties:
uuid:
type: string
format: uuid
description: User UUID
firstName:
type: string
lastName:
type: string
birthday:
type: string
format: date
civilStatus:
type: string
enum:
- single
- married
- divorced
legalAddress:
$ref: "#/components/schemas/LegalAddress"
account:
$ref: "#/components/schemas/AccountInfo"
legalInformation:
$ref: "#/components/schemas/UserLegalInformation"

CreateUserRequest:
type: object
additionalProperties: false
properties:
firstName:
type: string
lastName:
type: string
birthdate:
type: string
format: date
sex:
type: string
enum:
- male
- female
- other
civilStatus:
type: string
enum:
- single
- married
- divorced
nationality:
$ref: "#/components/schemas/CountryCode"
legalInformation:
$ref: "#/components/schemas/UserLegalInformationRequest"
legalAddress:
$ref: "#/components/schemas/LegalAddress"
required:
- firstName
- lastName
- birthdate
- sex
- civilStatus
- nationality
- legalInformation
- legalAddress

CreateUserResponse:
type: object
properties:
uuid:
type: string
format: uuid
description: User UUID
firstName:
type: string
lastName:
type: string
birthday:
type: string
format: date
civilStatus:
type: string
enum:
- single
- married
- divorced
legalAddress:
$ref: "#/components/schemas/LegalAddress"
legalInformation:
$ref: "#/components/schemas/UserLegalInformation"
account:
$ref: "#/components/schemas/AccountInfo"

UpdateUserRequest:
type: object
properties:
email:
type: string
firstName:
type: string
lastName:
type: string
birthday:
type: string
format: date
sex:
type: string
enum:
- M
- F
- O
legalName:
type: string
format: email
taxId:
type: string
nationality:
$ref: "#/components/schemas/CountryCode"

UserKYCData:
type: object
properties:
uuid:
type: string
format: uuid
nullable: true
userId:
type: string
format: uuid
civilStatus:
type: string
enum:
- SINGLE
- MARRIED
- DIVORCED
- WIDOWED
- CONCUBINE
isPep:
type: boolean
nullable: true
isSOAUIF:
type: boolean
nullable: true
description: ¿Es sujeto obligado?
isBlackListed:
type: boolean
nullable: true

CreateUserKYCDataRequest:
type: object
properties:
civilStatus:
type: string
enum:
- SINGLE
- MARRIED
- DIVORCED
- WIDOWED
- CONCUBINE
isPep:
type: boolean
nullable: true
isSOAUIF:
type: boolean
nullable: true
description: ¿Es sujeto obligado?

###############
## Companies ##
###############

Company:
type: object
properties:
uuid:
type: string
format: uuid
name:
type: string
legalName:
type: string
taxInfomation:
$ref: "#/components/schemas/TaxInformation"
legalAddress:
$ref: "#/components/schemas/LegalAddress"

CreateCompanyRequest:
type: object
properties:
name:
type: string
legalName:
type: string
tradeName:
type: string
operationCountry:
$ref: "#/components/schemas/CountryCode"
companyType:
type: string
taxType:
type: string
taxValue:
type: string
taxCondition:
type: string
legalAddress:
$ref: "#/components/schemas/LegalAddress"
required:
- name
- legalName
- tradeName
- operationCountry
- companyType
- taxType
- taxValue
- taxCondition
- legalAddress

##############
## Accounts ##
##############

CreateAccountRequest:
type: object
properties:
ownerType:
type: string
enum:
- USER
- COMPANY
uuid:
type: string
format: uuid
description: Goat UUID of the Company or User
appId:
type: string
format: uuid
description: Application UUID
fees:
type: number
description: Account fees
annualWithdrawLimit:
type: number
description: Annual withdrawal limit
annualDepositLimit:
type: number
description: Annual deposit limit
monthlyWithdrawLimit:
type: number
description: Monthly withdrawal limit
monthlyDepositLimit:
type: number
description: Monthly deposit limit
required:
- ownerType
- uuid
- appId
- fees
- annualWithdrawLimit
- annualDepositLimit
- monthlyWithdrawLimit
- monthlyDepositLimit

ModifyAccountRequest:
type: object
properties:
alias:
$ref: "#/components/schemas/AccountAlias"
description: Account Alias
status:
type: string
enum:
- ACTIVE
- INACTIVE
- PENDING
name:
type: string
nationality:
$ref: "#/components/schemas/CountryCode"
type:
type: string
enum:
- USER
- COMPANY
entityId:
type: string
format: uuid
description: Entity UUID

UpdateAccountRequest:
type: object
properties:
type:
type: string
enum:
- USER
- COMPANY
entityId:
type: string
format: uuid
description: Entity UUID
name:
type: string
description: Account name
status:
type: string
enum:
- ACTIVE
- INACTIVE
- PENDING
isVerified:
type: boolean
description: Verification status
depositLimit:
type: number
description: Deposit limit
withdrawalLimit:
type: number
description: Withdrawal limit
alias:
type: string
description: Account alias
nationality:
type: string
description: Nationality

UpdateAccountResponse:
type: object
properties:
uuid:
type: string
format: uuid
description: Account UUID
type:
type: string
enum:
- USER
- COMPANY
entityId:
type: string
format: uuid
description: Entity UUID
name:
type: string
description: Account name
currency:
$ref: "#/components/schemas/CurrencyCode"
description: Currency
cvu:
type: string
description: Account CVU
depositLimit:
type: number
description: Deposit limit
withdrawalLimit:
type: number
description: Withdrawal limit
appId:
type: string
format: uuid
description: Application UUID
nationality:
type: string
description: Nationality
status:
type: string
enum:
- ACTIVE
- INACTIVE
- PENDING
isVerified:
type: boolean
description: Verification status
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
alias:
type: string
description: Account Alias

FindAccountRequest:
type: object
properties:
schema:
type: string
enum:
- CVU
- CBU
- Alias
value:
type: string
required:
- schema
- value

###############
## Transfers ##
###############

TransactionInfo:
type: object
additionalProperties: false
properties:
uuid:
type: string
format: uuid
coelsaId:
type: string
nullable: true
type:
type: string
enum:
- DEPOSIT
- WITHDRAW
status:
type: string
enum:
- COMMITING
- INICIADO
- EN_CURSO
- ERROR_DATOS
- SIN_GARANTIA
- ERROR_ACREDITACION
- ACREDITADO
account:
$ref: "#/components/schemas/TransactionInternalParty"
counterParty:
$ref: "#/components/schemas/TransactionCounterParty"
amount:
type: number
currency:
$ref: "#/components/schemas/CurrencyCode"
concept:
$ref: "#/components/schemas/TransactionConcept"
summary:
type: string
nullable: true
description:
type: string
nullable: true
taxes:
type: number
description: Total taxes applied
nullable: true
fees:
type: number
description: Total fees applied
nullable: true
createdAt:
type: string
format: date-time

CreateTransactionResponse:
type: object
additionalProperties: false
properties:
uuid:
type: string
format: uuid
coelsaId:
type: string
nullable: true
type:
type: string
enum:
- DEPOSIT
- WITHDRAW
status:
type: string
enum:
- COMMITING
- INICIADO
- EN_CURSO
- ERROR_DATOS
- SIN_GARANTIA
- ERROR_ACREDITACION
- ACREDITADO
account:
$ref: "#/components/schemas/TransactionInternalParty"
counterParty:
$ref: "#/components/schemas/TransactionCounterParty"
amount:
type: object
properties:
value:
type: number
description: Amount in account currency
minimum: 1
currency:
$ref: "#/components/schemas/CurrencyCode"
currency:
$ref: "#/components/schemas/CurrencyCode"
concept:
$ref: "#/components/schemas/TransactionConcept"
summary:
type: string
nullable: true
description:
type: string
nullable: true
taxes:
type: number
description: Total taxes applied
nullable: true
fees:
type: number
description: Total fees applied
nullable: true
movementType:
type: string
enum:
- DEPOSIT
- WITHDRAW
created:
type: string
format: date-time

CreateTransactionRequest:
type: object
additionalProperties: false
required:
- accountUUID
- movementType
- counterParty
- amount
- concept
properties:
accountUUID:
type: string
format: uuid
description: Account UUID
movementType:
type: string
enum:
- DEPOSIT
- WITHDRAW
counterParty:
type: object
additionalProperties: false
required:
- name
- cValue
- identifierType
- identifier
- branchName
properties:
name:
type: string
description: Name of the party (if legal name, better)
cValue:
type: string
description: CUIT of the party
identifierType:
type: string
description: Identifier type
enum:
- CBU
- CVU
identifier:
description: Identifier of the party
$ref: "#/components/schemas/AccountCXU"
branchName:
type: string
description: Counterparty branch name
amount:
type: number
format: float
description: Amount in account currency
minimum: 1
concept:
$ref: "#/components/schemas/TransactionConcept"
summary:
type: string
description: Transfer summary
example: "Pay of rent"

paths:
###########
## Users ##
###########

/users:
post:
summary: Crear nuevo Usuario
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateUserRequest"
responses:
201:
description: User created success
content:
application/json:
schema:
$ref: "#/components/schemas/CreateUserResponse"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/users/all:
get:
summary: Get all users
responses:
200:
description: List of users
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/User"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

/users/[uuid]:
get:
summary: Get user information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: User details
content:
application/json:
schema:
$ref: "#/components/schemas/User"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

patch:
summary: Modify user information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateUserRequest"
responses:
200:
description: User information updated
content:
application/json:
schema:
$ref: "#/components/schemas/User"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

delete:
summary: Delete user
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
204:
description: User deleted
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

###############
## Companies ##
###############`

/companies:
post:
summary: Crear nueva Empresa
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateCompanyRequest"
responses:
201:
description: Company created
content:
application/json:
schema:
$ref: "#/components/schemas/Company"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/companies/all:
get:
summary: Get all companies
responses:
200:
description: List of companies
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/Company"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Company not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

/companies/[uuid]:
get:
summary: Get company information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Company details
content:
application/json:
schema:
$ref: "#/components/schemas/Company"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

patch:
summary: Modify company information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateKYCDataRequest"
responses:
200:
description: Company information updated
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

delete:
summary: Delete company
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
204:
description: Company deleted
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: User not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

##############
## Accounts ##
##############

/wallet/accounts:
post:
summary: Crear nueva cuenta
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateAccountRequest"
responses:
201:
description: Account created
content:
application/json:
schema:
$ref: "#/components/schemas/AccountInfo"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/wallet/accounts/[uuid]:
get:
summary: Get account information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account information
content:
application/json:
schema:
$ref: "#/components/schemas/AccountInfo"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

patch:
summary: Modify an account information
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ModifyAccountRequest"
responses:
200:
description: Account information
content:
application/json:
schema:
$ref: "#/components/schemas/AccountInfo"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

delete:
summary: Set account in deleted state
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account deleted
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Account deleted
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/wallet/accounts/[uuid]/alias:
patch:
summary: Update account alias
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/UpdateAccountAliasRequest"
responses:
200:
description: Account alias set
content:
application/json:
schema:
$ref: "#/components/schemas/AccountInfo"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/wallet/accounts/[uuid]/transactions:
get:
summary: Get transactions for an account
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: List of transactions for the account
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/TransactionInfo"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

##############
## Balance ##
##############

/wallet/accounts/[uuid]/balance:
get:
summary: Get account balance
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account balance
content:
application/json:
schema:
oneOf:
- $ref: "#/components/schemas/BalanceResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

post:
summary: Create account balance
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
balance:
type: number
responses:
200:
description: Account balance
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Balance created successfully
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

patch:
summary: Update account balance
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
balance:
type: number
responses:
200:
description: Account balance
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: Balance updated successfully
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

##############
## Limits ##
##############

/wallet/accounts/[uuid]/limits:
get:
summary: Get account limits
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account limits
content:
application/json:
schema:
$ref: "#/components/schemas/LimitsResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

post:
summary: Create account limits
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetLimitsRequest"
responses:
200:
description: Account limits
content:
application/json:
schema:
type: object
properties:
status:
type: number
example: 201
message:
type: string
example: Account limits created successfully
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

patch:
summary: Update account limits
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetLimitsRequest"
responses:
200:
description: Account limits
content:
application/json:
schema:
type: object
properties:
status:
type: number
example: 201
message:
type: string
example: Account limits updated successfully
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

##############
## Fees ##
##############

/wallet/accounts/[uuid]/fees:
get:
summary: Get account fees
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account fees
content:
application/json:
schema:
$ref: "#/components/schemas/FeesResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

patch:
summary: Update account fees
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SetFeesRequest"
responses:
200:
description: Account fees
content:
application/json:
schema:
type: object
properties:
status:
type: number
example: 200
message:
type: string
example: Account fee updated successfully
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

##############
## Operado ##
##############

/wallet/accounts/[uuid]/operado:
get:
summary: Get account operated values
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account operated values
content:
application/json:
schema:
$ref: "#/components/schemas/OperadoResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

/wallet/accounts/[uuid]/fulloperado:
get:
summary: Get account operated and available values
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Account operated and available values
content:
application/json:
schema:
$ref: "#/components/schemas/FullOperadoResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

###############
## Transfers ##
###############

/wallet/transactions/all:
get:
summary: Get all transfers
responses:
200:
description: Transfer created
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/TransactionInfo"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
security:
- OAuth2ClientCredentials: []

/wallet/transactions:
post:
summary: Crear nueva transfer
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CreateTransactionRequest"
responses:
201:
description: Transfer created
content:
application/json:
schema:
$ref: "#/components/schemas/CreateTransactionResponse"
400:
description: Invalid payload
content:
application/json:
schema:
$ref: "#/components/schemas/ValidationError"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/wallet/transactions/[uuid]:
get:
summary: View transaction details
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: Transaction details
content:
application/json:
schema:
$ref: "#/components/schemas/TransactionInfo"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Transfer not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

##################
## Counterparty ##
##################

/counterparty:
post:
summary: Get counterparty information
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/CounterpartyRequest"
responses:
200:
description: Counterparty information
content:
application/json:
schema:
$ref: "#/components/schemas/CounterpartyResponse"
401:
description: Unauthorized
content:
application/json:
schema:
$ref: "#/components/schemas/UnauthorizedError"
404:
description: Account not found
content:
application/json:
schema:
$ref: "#/components/schemas/NotFoundError"
security:
- OAuth2ClientCredentials: []

##############
## Plusmo ##
##############

/plusmobile/sms:
post:
summary: Send SMS
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SMSSendRequest"
responses:
200:
description: SMS sent successfully
content:
application/json:
schema:
$ref: "#/components/schemas/SMSSendResponse"
400:
description: Bad Request
content:
text/html:
schema:
type: string
example: "NO ROUTES"
401:
description: Unauthorized
content:
text/html:
schema:
type: string
example: "NO ROUTES"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/plusmobile/sms/[uuid]:
get:
summary: Get SMS status
parameters:
- name: uuid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: SMS status
content:
application/json:
schema:
oneOf:
- $ref: "#/components/schemas/SMSStatusResponse"
- $ref: "#/components/schemas/SMSStatusNotFoundResponse"
401:
description: Unauthorized
content:
text/html:
schema:
type: string
example: "NO ROUTES"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []

/plusmobile/simSwap:
post:
summary: SIM Swap
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SimSwapRequest"
responses:
200:
description: SIM Swap successful
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: "SIM Swap completed successfully"
400:
description: Bad Request
content:
text/html:
schema:
type: string
example: "NO ROUTES"
401:
description: Unauthorized
content:
text/html:
schema:
type: string
example: "NO ROUTES"
security:
- OAuth2ClientCredentials: []
- BearerAuth: []