@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Bank Feeds
@base https://api.codat.io
@version 3.0.0
@auth ApiKey Authorization in header
@endpoints 32
@hint download_for_search
@toc companies(32)

@endpoint POST /companies
@required {name: str}
@optional {description: str, tags: map}
@returns(200)
@errors {400, 401, 402, 403, 429, 500, 503}

@endpoint GET /companies
@optional {page: int(int32)=1, pageSize: int(int32)=100, query: str, orderBy: str, tags: str}
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}
@required {companyId: str(uuid)}
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint DELETE /companies/{companyId}
@required {companyId: str(uuid)}
@returns(204)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint PUT /companies/{companyId}
@required {companyId: str(uuid), name: str}
@optional {description: str, tags: map}
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint PATCH /companies/{companyId}
@required {companyId: str(uuid)}
@optional {name: str, description: str, tags: map}
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/accessToken
@required {companyId: str(uuid)}
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections
@required {companyId: str(uuid)}
@optional {page: int(int32)=1, pageSize: int(int32)=100, query: str, orderBy: str}
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections
@required {companyId: str(uuid)}
@optional {platformKey: str}
@returns(200) {id: str(uuid), integrationId: str(uuid), integrationKey: str, sourceId: str(uuid), sourceType: str, platformName: str, linkUrl: str(uri), status: str, lastSync: str, created: str, dataConnectionErrors: [map]?, connectionInfo: map?}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}
@required {companyId: str(uuid), connectionId: str(uuid)}
@returns(200) {id: str(uuid), integrationId: str(uuid), integrationKey: str, sourceId: str(uuid), sourceType: str, platformName: str, linkUrl: str(uri), status: str, lastSync: str, created: str, dataConnectionErrors: [map]?, connectionInfo: map?}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint DELETE /companies/{companyId}/connections/{connectionId}
@required {companyId: str(uuid), connectionId: str(uuid)}
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint PATCH /companies/{companyId}/connections/{connectionId}
@required {companyId: str(uuid), connectionId: str(uuid)}
@optional {status: str(PendingAuth/Linked/Unlinked/Deauthorized)}
@returns(200) {id: str(uuid), integrationId: str(uuid), integrationKey: str, sourceId: str(uuid), sourceType: str, platformName: str, linkUrl: str(uri), status: str, lastSync: str, created: str, dataConnectionErrors: [map]?, connectionInfo: map?}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/data/bankAccounts
@optional {page: int(int32)=1, pageSize: int(int32)=100, query: str, orderBy: str}
@returns(200)
@errors {400, 401, 402, 403, 404, 409, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/options/bankAccounts
@returns(200) {type: str, displayName: str, description: str, required: bool, properties: map?, options: [map]?, validation: map{warnings: [map]?, information: [map]?}}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/push/bankAccounts
@optional {timeoutInMinutes: int(int32)}
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/batch
@returns(201)
@returns(207)
@errors {400, 401, 402, 403, 404, 409, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint PATCH /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{accountId}
@required {companyId: str(uuid), connectionId: str(uuid), accountId: str, id: str}
@optional {accountName: str, accountType: str, accountNumber: str, sortCode: str, currency: str(ISO4217), balance: num(decimal), modifiedDate: str, status: str(pending/connected/connecting/disconnected/unknown), feedStartDate: str}
@returns(200) {id: str, accountName: str?, accountType: str?, accountNumber: str?, sortCode: str?, currency: str(ISO4217), balance: num(decimal)?, modifiedDate: str, status: str?, feedStartDate: str}
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint DELETE /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/{accountId}
@required {companyId: str(uuid), connectionId: str(uuid), accountId: str}
@returns(204)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/credentials
@required {companyId: str(uuid), connectionId: str(uuid)}
@returns(200) {username: str, password: str}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint DELETE /companies/{companyId}/connections/{connectionId}/connectionInfo/bankFeedAccounts/credentials
@required {companyId: str(uuid), connectionId: str(uuid)}
@returns(204)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/bankFeedAccounts/mapping
@returns(200)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/bankFeedAccounts/mapping
@required {sourceAccountId: str}
@optional {targetAccountId: str, feedStartDate: str}
@returns(200) {sourceAccountId: str, targetAccountId: str?, status: str?, error: str?}
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/bankFeeds/info
@returns(200) {companyName: str, baseCurrency: str, planType: str?, multicurrencyEnabled: bool, currencies: [str]?}
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/push/bankAccounts/{accountId}/bankTransactions
@required {companyId: str(uuid), connectionId: str(uuid), accountId: str, accountId: str, transactions: [map{id: str, date: str, description: str, counterparty: str, reference: str, reconciled: bool, amount: num(decimal), balance: num(decimal), transactionType: str}]}
@optional {timeoutInMinutes: int(int32), allowSyncOnPushComplete: bool=true}
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/options/bankAccounts/{accountId}/bankTransactions
@required {companyId: str(uuid), connectionId: str(uuid), accountId: str}
@returns(200) {type: str, displayName: str, description: str, required: bool, properties: map?, options: [map]?, validation: map{warnings: [map]?, information: [map]?}}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/push/{pushOperationKey}
@returns(200) {changes: [map]?, dataType: str, companyId: str(uuid), pushOperationKey: str(uuid), dataConnectionKey: str(uuid), requestedOnUtc: str, completedOnUtc: str, timeoutInMinutes: int(int32)?, timeoutInSeconds: int(int32)?, status: str, errorMessage: str?, validation: map{errors: [map]?, warnings: [map]?}, statusCode: int}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/push
@optional {page: int(int32)=1, pageSize: int(int32)=100, query: str, orderBy: str}
@returns(200)
@errors {400, 401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/bankFeedAccounts/{sourceAccountId}/managedBankFeeds/syncs/{syncId}
@returns(200) {syncId: str(uuid), clientId: str(uuid), companyId: str(uuid), companyName: str, dataConnectionId: str(uuid), sourceAccountId: str, periodStartUtc: str(date-time), periodEndUtc: str(date-time), executionStartUtc: str(date-time), status: str, executionEndUtc: str(date-time)?, errorMessage: str?, errorCode: str?, pushOperationKeys: [str(uuid)]?}
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint GET /companies/{companyId}/connections/{connectionId}/bankFeedAccounts/{sourceAccountId}/managedBankFeeds/syncs/latest
@returns(200) {syncId: str(uuid), clientId: str(uuid), companyId: str(uuid), companyName: str, dataConnectionId: str(uuid), sourceAccountId: str, periodStartUtc: str(date-time), periodEndUtc: str(date-time), executionStartUtc: str(date-time), status: str, executionEndUtc: str(date-time)?, errorMessage: str?, errorCode: str?, pushOperationKeys: [str(uuid)]?}
@returns(204)
@errors {401, 402, 403, 404, 429, 500, 503}

@endpoint POST /companies/{companyId}/connections/{connectionId}/bankFeedAccounts/{sourceAccountId}/managedBankFeeds/syncs
@returns(201) {syncId: str(uuid)}
@errors {400, 401, 402, 403, 404, 409, 429, 500, 503}

@end
