From ab4e58bfa0a714f3239eae79e7c5da5b25998b09 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Fri, 1 Sep 2023 17:00:36 +0000 Subject: [PATCH] ci: regenerated with OpenAPI Doc prealpha, Speakeay CLI 1.77.1 --- .../.gitattributes | 2 + .../sync-for-expenses-version-1/.gitignore | 6 + .../sync-for-expenses-version-1/RELEASES.md | 11 + .../sync-for-expenses-version-1/USAGE.md | 24 + .../operations/createcompanyresponse.md | 12 + .../operations/createconnectionrequest.md | 9 + .../operations/createconnectionrequestbody.md | 8 + .../operations/createconnectionresponse.md | 12 + .../operations/createexpensedatasetrequest.md | 9 + .../createexpensedatasetresponse.md | 12 + .../createpartnerexpenseconnectionrequest.md | 8 + .../createpartnerexpenseconnectionresponse.md | 12 + .../models/operations/deletecompanyrequest.md | 8 + .../operations/deletecompanyresponse.md | 11 + .../operations/deleteconnectionrequest.md | 9 + .../operations/deleteconnectionresponse.md | 11 + .../getcompanyconfigurationrequest.md | 8 + .../getcompanyconfigurationresponse.md | 12 + .../models/operations/getcompanyrequest.md | 8 + .../models/operations/getcompanyresponse.md | 12 + .../models/operations/getconnectionrequest.md | 9 + .../operations/getconnectionresponse.md | 12 + .../getlastsuccessfulsyncrequest.md | 8 + .../getlastsuccessfulsyncresponse.md | 12 + .../models/operations/getlatestsyncrequest.md | 8 + .../operations/getlatestsyncresponse.md | 12 + .../operations/getmappingoptionsrequest.md | 8 + .../operations/getmappingoptionsresponse.md | 12 + .../models/operations/getsyncbyidrequest.md | 9 + .../models/operations/getsyncbyidresponse.md | 12 + .../operations/getsynctransactionrequest.md | 10 + .../operations/getsynctransactionresponse.md | 12 + .../models/operations/intiatesyncrequest.md | 9 + .../models/operations/intiatesyncresponse.md | 12 + .../models/operations/listcompaniesrequest.md | 11 + .../operations/listcompaniesresponse.md | 12 + .../operations/listconnectionsrequest.md | 12 + .../operations/listconnectionsresponse.md | 12 + .../models/operations/listsyncsrequest.md | 8 + .../models/operations/listsyncsresponse.md | 12 + .../operations/listsynctransactionsrequest.md | 11 + .../listsynctransactionsresponse.md | 12 + .../savecompanyconfigurationrequest.md | 9 + .../savecompanyconfigurationresponse.md | 12 + .../operations/unlinkconnectionrequest.md | 10 + .../operations/unlinkconnectionrequestbody.md | 8 + .../operations/unlinkconnectionresponse.md | 12 + .../models/operations/updatecompanyrequest.md | 9 + .../operations/updatecompanyresponse.md | 12 + .../updateexpensedataset202applicationjson.md | 10 + .../operations/updateexpensedatasetrequest.md | 10 + .../updateexpensedatasetresponse.md | 12 + .../operations/uploadattachmentrequest.md | 11 + .../operations/uploadattachmentrequestbody.md | 9 + .../operations/uploadattachmentresponse.md | 12 + .../docs/models/shared/accountmappinginfo.md | 12 + .../shared/accountmappinginfoaccounttype.md | 14 + ...accountmappinginfovalidtransactiontypes.md | 15 + .../docs/models/shared/attachment.md | 12 + .../docs/models/shared/bankaccount.md | 8 + .../docs/models/shared/companies.md | 14 + .../docs/models/shared/company.md | 22 + .../models/shared/companyconfiguration.md | 12 + .../docs/models/shared/companyrequestbody.md | 9 + .../docs/models/shared/companysyncstatus.md | 17 + .../docs/models/shared/connection.md | 31 + .../docs/models/shared/connections.md | 14 + .../models/shared/connectionsourcetype.md | 14 + .../docs/models/shared/contactref.md | 9 + .../models/shared/contactrefcontacttype.md | 10 + .../models/shared/createexpenserequest.md | 8 + .../models/shared/createexpenseresponse.md | 10 + .../docs/models/shared/customer.md | 8 + .../docs/models/shared/dataconnectionerror.md | 11 + .../models/shared/dataconnectionstatus.md | 13 + .../docs/models/shared/errormessage.md | 15 + .../docs/models/shared/expensetransaction.md | 16 + .../models/shared/expensetransactionline.md | 12 + .../models/shared/expensetransactiontype.md | 17 + .../docs/models/shared/halref.md | 8 + .../docs/models/shared/integrationtype.md | 11 + .../docs/models/shared/links.md | 11 + .../docs/models/shared/mappingoptions.md | 13 + .../docs/models/shared/postsync.md | 8 + .../docs/models/shared/recordref.md | 8 + .../docs/models/shared/security.md | 8 + .../docs/models/shared/supplier.md | 8 + .../docs/models/shared/synccompletewebhook.md | 17 + .../models/shared/synccompletewebhookdata.md | 11 + .../docs/models/shared/syncfailedwebhook.md | 17 + .../models/shared/syncfailedwebhookdata.md | 12 + .../docs/models/shared/syncinitiated.md | 10 + .../docs/models/shared/syncstartedwebhook.md | 17 + .../models/shared/syncstartedwebhookdata.md | 11 + .../docs/models/shared/taxratemappinginfo.md | 13 + ...taxratemappinginfovalidtransactiontypes.md | 15 + .../shared/trackingcategorymappinginfo.md | 12 + .../docs/models/shared/transactionmetadata.md | 11 + .../models/shared/transactionmetadatalist.md | 14 + .../docs/models/shared/transactionstatus.md | 14 + .../models/shared/updateexpenserequest.md | 15 + .../docs/models/utils/retryconfig.md | 24 + .../models/webhooks/synccompleteresponse.md | 10 + .../models/webhooks/syncfailedresponse.md | 10 + .../models/webhooks/syncstartedresponse.md | 10 + .../docs/sdks/codatsyncexpenses/README.md | 18 + .../docs/sdks/companies/README.md | 221 +++++ .../docs/sdks/configuration/README.md | 99 +++ .../docs/sdks/connections/README.md | 264 ++++++ .../docs/sdks/expenses/README.md | 498 ++++++++++++ .../docs/sdks/mappingoptions/README.md | 48 ++ .../docs/sdks/sync/README.md | 56 ++ .../docs/sdks/syncstatus/README.md | 169 ++++ .../docs/sdks/transactionstatus/README.md | 93 +++ .../sync-for-expenses-version-1/files.gen | 198 +++++ .../sync-for-expenses-version-1/gen.yaml | 19 +- .../sync-for-expenses-version-1/pylintrc | 643 +++++++++++++++ .../sync-for-expenses-version-1/setup.py | 42 + .../src/codatsyncexpenses/__init__.py | 4 + .../src/codatsyncexpenses/companies.py | 245 ++++++ .../src/codatsyncexpenses/configuration.py | 108 +++ .../src/codatsyncexpenses/connections.py | 291 +++++++ .../src/codatsyncexpenses/expenses.py | 159 ++++ .../src/codatsyncexpenses/mapping_options.py | 60 ++ .../src/codatsyncexpenses/models/__init__.py | 2 + .../models/errors/__init__.py | 4 + .../models/errors/sdkerror.py | 24 + .../models/operations/__init__.py | 28 + .../models/operations/create_company.py | 22 + .../models/operations/create_connection.py | 42 + .../operations/create_expense_dataset.py | 32 + .../create_partner_expense_connection.py | 30 + .../models/operations/delete_company.py | 27 + .../models/operations/delete_connection.py | 28 + .../models/operations/get_company.py | 30 + .../operations/get_company_configuration.py | 30 + .../models/operations/get_connection.py | 31 + .../operations/get_last_successful_sync.py | 30 + .../models/operations/get_latest_sync.py | 30 + .../models/operations/get_mapping_options.py | 30 + .../models/operations/get_sync_by_id.py | 32 + .../models/operations/get_sync_transaction.py | 34 + .../models/operations/intiate_sync.py | 32 + .../models/operations/list_companies.py | 37 + .../models/operations/list_connections.py | 38 + .../operations/list_sync_transactions.py | 36 + .../models/operations/list_syncs.py | 30 + .../operations/save_company_configuration.py | 31 + .../models/operations/unlink_connection.py | 43 + .../models/operations/update_company.py | 32 + .../operations/update_expense_dataset.py | 45 ++ .../models/operations/upload_attachment.py | 44 + .../models/shared/__init__.py | 41 + .../models/shared/accountmappinginfo.py | 44 + .../models/shared/attachment.py | 22 + .../models/shared/bankaccount.py | 17 + .../models/shared/companies.py | 23 + .../models/shared/company.py | 76 ++ .../models/shared/companyconfiguration.py | 21 + .../models/shared/companyrequestbody.py | 19 + .../models/shared/companysyncstatus.py | 51 ++ .../models/shared/connection.py | 96 +++ .../models/shared/connections.py | 23 + .../models/shared/contactref.py | 24 + .../models/shared/createexpenserequest.py | 17 + .../models/shared/createexpenseresponse.py | 18 + .../models/shared/customer.py | 17 + .../models/shared/dataconnectionerror.py | 39 + .../models/shared/dataconnectionstatus.py | 11 + .../models/shared/errormessage.py | 22 + .../models/shared/expensetransaction.py | 90 +++ .../models/shared/expensetransactionline.py | 23 + .../codatsyncexpenses/models/shared/halref.py | 16 + .../models/shared/integrationtype.py | 9 + .../codatsyncexpenses/models/shared/links.py | 20 + .../models/shared/mappingoptions.py | 27 + .../models/shared/postsync.py | 16 + .../models/shared/recordref.py | 17 + .../models/shared/security.py | 12 + .../models/shared/supplier.py | 17 + .../models/shared/synccompletewebhook.py | 84 ++ .../models/shared/syncfailedwebhook.py | 86 ++ .../models/shared/syncinitiated.py | 17 + .../models/shared/syncstartedwebhook.py | 84 ++ .../models/shared/taxratemappinginfo.py | 38 + .../shared/trackingcategorymappinginfo.py | 44 + .../models/shared/transactionmetadata.py | 25 + .../models/shared/transactionmetadatalist.py | 23 + .../models/shared/transactionstatus.py | 12 + .../models/shared/updateexpenserequest.py | 56 ++ .../models/webhooks/__init__.py | 7 + .../models/webhooks/sync_complete.py | 16 + .../models/webhooks/sync_failed.py | 16 + .../models/webhooks/sync_started.py | 16 + .../src/codatsyncexpenses/sdk.py | 90 +++ .../src/codatsyncexpenses/sdkconfiguration.py | 29 + .../src/codatsyncexpenses/sync.py | 63 ++ .../src/codatsyncexpenses/sync_status.py | 195 +++++ .../codatsyncexpenses/transaction_status.py | 106 +++ .../src/codatsyncexpenses/utils/__init__.py | 4 + .../src/codatsyncexpenses/utils/retries.py | 119 +++ .../src/codatsyncexpenses/utils/utils.py | 764 ++++++++++++++++++ 202 files changed, 8022 insertions(+), 5 deletions(-) create mode 100755 previous-versions/sync-for-expenses-version-1/.gitattributes create mode 100755 previous-versions/sync-for-expenses-version-1/.gitignore create mode 100644 previous-versions/sync-for-expenses-version-1/RELEASES.md create mode 100755 previous-versions/sync-for-expenses-version-1/USAGE.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createcompanyresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequestbody.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequestbody.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedataset202applicationjson.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequestbody.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfo.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfoaccounttype.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfovalidtransactiontypes.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/attachment.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/bankaccount.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/companies.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/company.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/companyconfiguration.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/companyrequestbody.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/companysyncstatus.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/connection.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/connections.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/connectionsourcetype.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/contactref.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/contactrefcontacttype.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenserequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenseresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/customer.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionerror.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionstatus.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/errormessage.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransaction.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactionline.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactiontype.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/halref.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/integrationtype.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/links.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/mappingoptions.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/postsync.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/recordref.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/security.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/supplier.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhook.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhookdata.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhook.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhookdata.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/syncinitiated.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhook.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhookdata.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfo.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfovalidtransactiontypes.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/trackingcategorymappinginfo.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadata.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadatalist.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionstatus.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/shared/updateexpenserequest.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/utils/retryconfig.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/webhooks/synccompleteresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncfailedresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncstartedresponse.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/codatsyncexpenses/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/companies/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/configuration/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/connections/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/expenses/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/mappingoptions/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/sync/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/syncstatus/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/docs/sdks/transactionstatus/README.md create mode 100755 previous-versions/sync-for-expenses-version-1/files.gen create mode 100755 previous-versions/sync-for-expenses-version-1/pylintrc create mode 100755 previous-versions/sync-for-expenses-version-1/setup.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/companies.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/configuration.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/connections.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/expenses.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/mapping_options.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/sdkerror.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_company.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_expense_dataset.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_partner_expense_connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_company.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company_configuration.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_last_successful_sync.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_latest_sync.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_mapping_options.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_by_id.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_transaction.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/intiate_sync.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_companies.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_connections.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_sync_transactions.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_syncs.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/save_company_configuration.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/unlink_connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_company.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_expense_dataset.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/upload_attachment.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/accountmappinginfo.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/attachment.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/bankaccount.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companies.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/company.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyconfiguration.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyrequestbody.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companysyncstatus.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connection.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connections.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/contactref.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenserequest.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenseresponse.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/customer.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionerror.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionstatus.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/errormessage.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransaction.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransactionline.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/halref.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/integrationtype.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/links.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/mappingoptions.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/postsync.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/recordref.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/security.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/supplier.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/synccompletewebhook.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncfailedwebhook.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncinitiated.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncstartedwebhook.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/taxratemappinginfo.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/trackingcategorymappinginfo.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadata.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadatalist.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionstatus.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/updateexpenserequest.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_complete.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_failed.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_started.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdk.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdkconfiguration.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync_status.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/transaction_status.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/__init__.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/retries.py create mode 100755 previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/utils.py diff --git a/previous-versions/sync-for-expenses-version-1/.gitattributes b/previous-versions/sync-for-expenses-version-1/.gitattributes new file mode 100755 index 000000000..4d75d5900 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/.gitattributes @@ -0,0 +1,2 @@ +# This allows generated code to be indexed correctly +*.py linguist-generated=false \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/.gitignore b/previous-versions/sync-for-expenses-version-1/.gitignore new file mode 100755 index 000000000..3cdf33802 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/.gitignore @@ -0,0 +1,6 @@ +venv/ +src/*.egg-info/ +__pycache__/ +.pytest_cache/ +.python-version +.DS_Store diff --git a/previous-versions/sync-for-expenses-version-1/RELEASES.md b/previous-versions/sync-for-expenses-version-1/RELEASES.md new file mode 100644 index 000000000..f781d8ea4 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/RELEASES.md @@ -0,0 +1,11 @@ + + +## 2023-09-01 17:00:19 +### Changes +Based on: +- OpenAPI Doc prealpha https://raw.githubusercontent.com/codatio/oas/main/yaml/Codat-Sync-Expenses-v1.yaml +- Speakeasy CLI 1.77.1 (2.91.4) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.1.0] previous-versions/sync-for-expenses-version-1 +### Releases +- [PyPI v0.1.0] https://pypi.org/project/codat-sync-for-expenses-version-1/0.1.0 - previous-versions/sync-for-expenses-version-1 \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/USAGE.md b/previous-versions/sync-for-expenses-version-1/USAGE.md new file mode 100755 index 000000000..e671f2ed6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/USAGE.md @@ -0,0 +1,24 @@ + + + +```python +import codatsyncexpenses +from codatsyncexpenses.models import shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = shared.CompanyRequestBody( + description='Requested early access to the new financing scheme.', + name='Bank of Dave', +) + +res = s.companies.create_company(req) + +if res.company is not None: + # handle response +``` + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createcompanyresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createcompanyresponse.md new file mode 100755 index 000000000..ea59de39f --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createcompanyresponse.md @@ -0,0 +1,12 @@ +# CreateCompanyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company` | [Optional[shared.Company]](../../models/shared/company.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequest.md new file mode 100755 index 000000000..775111c5e --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequest.md @@ -0,0 +1,9 @@ +# CreateConnectionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `request_body` | [Optional[CreateConnectionRequestBody]](../../models/operations/createconnectionrequestbody.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequestbody.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequestbody.md new file mode 100755 index 000000000..510a6b3b0 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionrequestbody.md @@ -0,0 +1,8 @@ +# CreateConnectionRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `platform_key` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionresponse.md new file mode 100755 index 000000000..5aa8726d9 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createconnectionresponse.md @@ -0,0 +1,12 @@ +# CreateConnectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `connection` | [Optional[shared.Connection]](../../models/shared/connection.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetrequest.md new file mode 100755 index 000000000..efc2332a1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetrequest.md @@ -0,0 +1,9 @@ +# CreateExpenseDatasetRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `create_expense_request` | [Optional[shared.CreateExpenseRequest]](../../models/shared/createexpenserequest.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetresponse.md new file mode 100755 index 000000000..3036fbdb7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createexpensedatasetresponse.md @@ -0,0 +1,12 @@ +# CreateExpenseDatasetResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `create_expense_response` | [Optional[shared.CreateExpenseResponse]](../../models/shared/createexpenseresponse.md) | :heavy_minus_sign: | OK | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionrequest.md new file mode 100755 index 000000000..967771fa9 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionrequest.md @@ -0,0 +1,8 @@ +# CreatePartnerExpenseConnectionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionresponse.md new file mode 100755 index 000000000..718c99c48 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/createpartnerexpenseconnectionresponse.md @@ -0,0 +1,12 @@ +# CreatePartnerExpenseConnectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `connection` | [Optional[shared.Connection]](../../models/shared/connection.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyrequest.md new file mode 100755 index 000000000..268537e13 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyrequest.md @@ -0,0 +1,8 @@ +# DeleteCompanyRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyresponse.md new file mode 100755 index 000000000..ee9fe7cd3 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deletecompanyresponse.md @@ -0,0 +1,11 @@ +# DeleteCompanyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionrequest.md new file mode 100755 index 000000000..2cab8bf4a --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionrequest.md @@ -0,0 +1,9 @@ +# DeleteConnectionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `connection_id` | *str* | :heavy_check_mark: | N/A | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionresponse.md new file mode 100755 index 000000000..973be81b3 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/deleteconnectionresponse.md @@ -0,0 +1,11 @@ +# DeleteConnectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationrequest.md new file mode 100755 index 000000000..14babb9e3 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationrequest.md @@ -0,0 +1,8 @@ +# GetCompanyConfigurationRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationresponse.md new file mode 100755 index 000000000..92fe9ca69 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyconfigurationresponse.md @@ -0,0 +1,12 @@ +# GetCompanyConfigurationResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_configuration` | [Optional[shared.CompanyConfiguration]](../../models/shared/companyconfiguration.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyrequest.md new file mode 100755 index 000000000..4c9629ab6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyrequest.md @@ -0,0 +1,8 @@ +# GetCompanyRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyresponse.md new file mode 100755 index 000000000..a0c0a41b1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getcompanyresponse.md @@ -0,0 +1,12 @@ +# GetCompanyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company` | [Optional[shared.Company]](../../models/shared/company.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionrequest.md new file mode 100755 index 000000000..d9d6f6c13 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionrequest.md @@ -0,0 +1,9 @@ +# GetConnectionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `connection_id` | *str* | :heavy_check_mark: | N/A | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionresponse.md new file mode 100755 index 000000000..32fb66433 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getconnectionresponse.md @@ -0,0 +1,12 @@ +# GetConnectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `connection` | [Optional[shared.Connection]](../../models/shared/connection.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncrequest.md new file mode 100755 index 000000000..7cf638491 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncrequest.md @@ -0,0 +1,8 @@ +# GetLastSuccessfulSyncRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncresponse.md new file mode 100755 index 000000000..eb964382b --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlastsuccessfulsyncresponse.md @@ -0,0 +1,12 @@ +# GetLastSuccessfulSyncResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_sync_status` | [Optional[shared.CompanySyncStatus]](../../models/shared/companysyncstatus.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncrequest.md new file mode 100755 index 000000000..ad82ec5dc --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncrequest.md @@ -0,0 +1,8 @@ +# GetLatestSyncRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncresponse.md new file mode 100755 index 000000000..9b9951a6a --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getlatestsyncresponse.md @@ -0,0 +1,12 @@ +# GetLatestSyncResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_sync_status` | [Optional[shared.CompanySyncStatus]](../../models/shared/companysyncstatus.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsrequest.md new file mode 100755 index 000000000..5ea4f35a1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsrequest.md @@ -0,0 +1,8 @@ +# GetMappingOptionsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsresponse.md new file mode 100755 index 000000000..321cd56f1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getmappingoptionsresponse.md @@ -0,0 +1,12 @@ +# GetMappingOptionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `mapping_options` | [Optional[shared.MappingOptions]](../../models/shared/mappingoptions.md) | :heavy_minus_sign: | Success | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidrequest.md new file mode 100755 index 000000000..d93fc0c82 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidrequest.md @@ -0,0 +1,9 @@ +# GetSyncByIDRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `sync_id` | *str* | :heavy_check_mark: | Unique identifier for a sync. | 6fb40d5e-b13e-11ed-afa1-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidresponse.md new file mode 100755 index 000000000..1dd1a1c76 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsyncbyidresponse.md @@ -0,0 +1,12 @@ +# GetSyncByIDResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_sync_status` | [Optional[shared.CompanySyncStatus]](../../models/shared/companysyncstatus.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionrequest.md new file mode 100755 index 000000000..8c7fbe600 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionrequest.md @@ -0,0 +1,10 @@ +# GetSyncTransactionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `sync_id` | *str* | :heavy_check_mark: | Unique identifier for a sync. | 6fb40d5e-b13e-11ed-afa1-0242ac120002 | +| `transaction_id` | *str* | :heavy_check_mark: | The unique identifier for your SMB's transaction. | 336694d8-2dca-4cb5-a28d-3ccb83e55eee | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionresponse.md new file mode 100755 index 000000000..3f3853d84 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/getsynctransactionresponse.md @@ -0,0 +1,12 @@ +# GetSyncTransactionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | +| `transaction_metadata` | list[[shared.TransactionMetadata](../../models/shared/transactionmetadata.md)] | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncrequest.md new file mode 100755 index 000000000..7ee237b81 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncrequest.md @@ -0,0 +1,9 @@ +# IntiateSyncRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `post_sync` | [Optional[shared.PostSync]](../../models/shared/postsync.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncresponse.md new file mode 100755 index 000000000..5c8dea7e8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/intiatesyncresponse.md @@ -0,0 +1,12 @@ +# IntiateSyncResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | If model is incorrect | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | +| `sync_initiated` | [Optional[shared.SyncInitiated]](../../models/shared/syncinitiated.md) | :heavy_minus_sign: | Returns the newly created SyncId | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesrequest.md new file mode 100755 index 000000000..8dfaf69d5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesrequest.md @@ -0,0 +1,11 @@ +# ListCompaniesRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results). | -modifiedDate | +| `page` | *Optional[int]* | :heavy_minus_sign: | Page number. [Read more](https://docs.codat.io/using-the-api/paging). | 1 | +| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging). | 100 | +| `query` | *Optional[str]* | :heavy_minus_sign: | Codat query string. [Read more](https://docs.codat.io/using-the-api/querying). | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesresponse.md new file mode 100755 index 000000000..506ed1fa1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listcompaniesresponse.md @@ -0,0 +1,12 @@ +# ListCompaniesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `companies` | [Optional[shared.Companies]](../../models/shared/companies.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your `query` parameter was not correctly formed | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsrequest.md new file mode 100755 index 000000000..1cdcf0879 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsrequest.md @@ -0,0 +1,12 @@ +# ListConnectionsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `order_by` | *Optional[str]* | :heavy_minus_sign: | Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results). | -modifiedDate | +| `page` | *Optional[int]* | :heavy_minus_sign: | Page number. [Read more](https://docs.codat.io/using-the-api/paging). | 1 | +| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging). | 100 | +| `query` | *Optional[str]* | :heavy_minus_sign: | Codat query string. [Read more](https://docs.codat.io/using-the-api/querying). | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsresponse.md new file mode 100755 index 000000000..68f439c07 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listconnectionsresponse.md @@ -0,0 +1,12 @@ +# ListConnectionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `connections` | [Optional[shared.Connections]](../../models/shared/connections.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your `query` parameter was not correctly formed | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsrequest.md new file mode 100755 index 000000000..4e76ed7a7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsrequest.md @@ -0,0 +1,8 @@ +# ListSyncsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsresponse.md new file mode 100755 index 000000000..c0ace91ac --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsyncsresponse.md @@ -0,0 +1,12 @@ +# ListSyncsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_sync_statuses` | list[[shared.CompanySyncStatus](../../models/shared/companysyncstatus.md)] | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsrequest.md new file mode 100755 index 000000000..0598e3753 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsrequest.md @@ -0,0 +1,11 @@ +# ListSyncTransactionsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `page` | *Optional[int]* | :heavy_minus_sign: | Page number. [Read more](https://docs.codat.io/using-the-api/paging). | 1 | +| `page_size` | *Optional[int]* | :heavy_minus_sign: | Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging). | 100 | +| `sync_id` | *str* | :heavy_check_mark: | Unique identifier for a sync. | 6fb40d5e-b13e-11ed-afa1-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsresponse.md new file mode 100755 index 000000000..c127362d4 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/listsynctransactionsresponse.md @@ -0,0 +1,12 @@ +# ListSyncTransactionsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | +| `transaction_metadata_list` | [Optional[shared.TransactionMetadataList]](../../models/shared/transactionmetadatalist.md) | :heavy_minus_sign: | Success | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationrequest.md new file mode 100755 index 000000000..f2a7c4248 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationrequest.md @@ -0,0 +1,9 @@ +# SaveCompanyConfigurationRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `company_configuration` | [Optional[shared.CompanyConfiguration]](../../models/shared/companyconfiguration.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationresponse.md new file mode 100755 index 000000000..cb2dad148 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/savecompanyconfigurationresponse.md @@ -0,0 +1,12 @@ +# SaveCompanyConfigurationResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company_configuration` | [Optional[shared.CompanyConfiguration]](../../models/shared/companyconfiguration.md) | :heavy_minus_sign: | Success | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequest.md new file mode 100755 index 000000000..2ed1d78dc --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequest.md @@ -0,0 +1,10 @@ +# UnlinkConnectionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `request_body` | [Optional[UnlinkConnectionRequestBody]](../../models/operations/unlinkconnectionrequestbody.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `connection_id` | *str* | :heavy_check_mark: | N/A | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequestbody.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequestbody.md new file mode 100755 index 000000000..276bf1330 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionrequestbody.md @@ -0,0 +1,8 @@ +# UnlinkConnectionRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `status` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionresponse.md new file mode 100755 index 000000000..ced538908 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/unlinkconnectionresponse.md @@ -0,0 +1,12 @@ +# UnlinkConnectionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `connection` | [Optional[shared.Connection]](../../models/shared/connection.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyrequest.md new file mode 100755 index 000000000..697f00528 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyrequest.md @@ -0,0 +1,9 @@ +# UpdateCompanyRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `company_request_body` | [Optional[shared.CompanyRequestBody]](../../models/shared/companyrequestbody.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyresponse.md new file mode 100755 index 000000000..9b9c51eef --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updatecompanyresponse.md @@ -0,0 +1,12 @@ +# UpdateCompanyResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `company` | [Optional[shared.Company]](../../models/shared/company.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | Your API request was not properly authorized. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedataset202applicationjson.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedataset202applicationjson.md new file mode 100755 index 000000000..0cafdc3ba --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedataset202applicationjson.md @@ -0,0 +1,10 @@ +# UpdateExpenseDataset202ApplicationJSON + +Accepted + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetrequest.md new file mode 100755 index 000000000..3bf50ad10 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetrequest.md @@ -0,0 +1,10 @@ +# UpdateExpenseDatasetRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `update_expense_request` | [Optional[shared.UpdateExpenseRequest]](../../models/shared/updateexpenserequest.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `transaction_id` | *str* | :heavy_check_mark: | The unique identifier for your SMB's transaction. | 336694d8-2dca-4cb5-a28d-3ccb83e55eee | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetresponse.md new file mode 100755 index 000000000..14d1ac9bb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/updateexpensedatasetresponse.md @@ -0,0 +1,12 @@ +# UpdateExpenseDatasetResponse + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | +| `update_expense_dataset_202_application_json_object` | [Optional[UpdateExpenseDataset202ApplicationJSON]](../../models/operations/updateexpensedataset202applicationjson.md) | :heavy_minus_sign: | Accepted | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequest.md new file mode 100755 index 000000000..3b35a7812 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequest.md @@ -0,0 +1,11 @@ +# UploadAttachmentRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `request_body` | [Optional[UploadAttachmentRequestBody]](../../models/operations/uploadattachmentrequestbody.md) | :heavy_minus_sign: | N/A | | +| `company_id` | *str* | :heavy_check_mark: | N/A | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `sync_id` | *str* | :heavy_check_mark: | Unique identifier for a sync. | 6fb40d5e-b13e-11ed-afa1-0242ac120002 | +| `transaction_id` | *str* | :heavy_check_mark: | The unique identifier for your SMB's transaction. | 336694d8-2dca-4cb5-a28d-3ccb83e55eee | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequestbody.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequestbody.md new file mode 100755 index 000000000..54eb656dd --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentrequestbody.md @@ -0,0 +1,9 @@ +# UploadAttachmentRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `content` | *bytes* | :heavy_check_mark: | N/A | +| `request_body` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentresponse.md new file mode 100755 index 000000000..6f073cade --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/operations/uploadattachmentresponse.md @@ -0,0 +1,12 @@ +# UploadAttachmentResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `attachment` | [Optional[shared.Attachment]](../../models/shared/attachment.md) | :heavy_minus_sign: | OK | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `error_message` | [Optional[shared.ErrorMessage]](../../models/shared/errormessage.md) | :heavy_minus_sign: | The request made is not valid. | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfo.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfo.md new file mode 100755 index 000000000..f02b66098 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfo.md @@ -0,0 +1,12 @@ +# AccountMappingInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `account_type` | [Optional[AccountMappingInfoAccountType]](../../models/shared/accountmappinginfoaccounttype.md) | :heavy_minus_sign: | Type of the account. | Expense | +| `currency` | *Optional[str]* | :heavy_minus_sign: | Currency of the account. | GBP | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of account. | 6 | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the account as it appears in the companies accounting software. | Purchases | +| `valid_transaction_types` | list[[AccountMappingInfoValidTransactionTypes](../../models/shared/accountmappinginfovalidtransactiontypes.md)] | :heavy_minus_sign: | Supported transaction types for the account. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfoaccounttype.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfoaccounttype.md new file mode 100755 index 000000000..d5b4f8125 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfoaccounttype.md @@ -0,0 +1,14 @@ +# AccountMappingInfoAccountType + +Type of the account. + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `ASSET` | Asset | +| `LIABILITY` | Liability | +| `INCOME` | Income | +| `EXPENSE` | Expense | +| `EQUITY` | Equity | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfovalidtransactiontypes.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfovalidtransactiontypes.md new file mode 100755 index 000000000..8f4f170b6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/accountmappinginfovalidtransactiontypes.md @@ -0,0 +1,15 @@ +# AccountMappingInfoValidTransactionTypes + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `PAYMENT` | Payment | +| `REFUND` | Refund | +| `REWARD` | Reward | +| `CHARGEBACK` | Chargeback | +| `TRANSFER_IN` | TransferIn | +| `TRANSFER_OUT` | TransferOut | +| `ADJUSTMENT_IN` | AdjustmentIn | +| `ADJUSTMENT_OUT` | AdjustmentOut | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/attachment.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/attachment.md new file mode 100755 index 000000000..e5fb39141 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/attachment.md @@ -0,0 +1,12 @@ +# Attachment + +OK + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique ID of company in Codat | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of attachment | +| `transaction_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of transaction | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/bankaccount.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/bankaccount.md new file mode 100755 index 000000000..6c1048e80 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/bankaccount.md @@ -0,0 +1,8 @@ +# BankAccount + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | The id of the account from which purchases are made | 32 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/companies.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companies.md new file mode 100755 index 000000000..621899fbb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companies.md @@ -0,0 +1,14 @@ +# Companies + +OK + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | ----------------------------------------------- | +| `links` | [Links](../../models/shared/links.md) | :heavy_check_mark: | N/A | +| `page_number` | *int* | :heavy_check_mark: | N/A | +| `page_size` | *int* | :heavy_check_mark: | N/A | +| `results` | list[[Company](../../models/shared/company.md)] | :heavy_minus_sign: | N/A | +| `total_results` | *int* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/company.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/company.md new file mode 100755 index 000000000..8187ff147 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/company.md @@ -0,0 +1,22 @@ +# Company + +In Codat, a company represents a business sharing access to their data. Each company can have multiple [connections](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Connection) to different data sources such as one connection to [Xero](https://docs.codat.io/integrations/accounting/xero/accounting-xero) for accounting data, two connections to [Plaid](https://docs.codat.io/integrations/banking/plaid/banking-plaid) for two bank accounts and a connection to [Zettle](https://docs.codat.io/integrations/commerce/zettle/commerce-zettle) for POS data. + +Typically each company is one of your customers. + +When you create a company, you can specify a `name` and we will automatically generate a unique `id` for the company. You can also add a `description` to store any additional information about the company. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `created` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `created_by_user_name` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `data_connections` | list[[Connection](../../models/shared/connection.md)] | :heavy_minus_sign: | N/A | | +| `description` | *Optional[str]* | :heavy_minus_sign: | Additional information about the company. This can be used to store foreign IDs, references, etc. | Requested early access to the new financing scheme. | +| `id` | *str* | :heavy_check_mark: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `last_sync` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `name` | *str* | :heavy_check_mark: | The name of the company | Codat Ltd. | +| ~~`platform`~~ | *Optional[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible. | Xero | +| `redirect` | *str* | :heavy_check_mark: | The `redirect` [Link URL](https://docs.codat.io/auth-flow/authorize-hosted-link) enabling the customer to start their auth flow journey for the company. | https://link.codat.io/company/27628208-459c-46a2-a705-5641ce25f739 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyconfiguration.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyconfiguration.md new file mode 100755 index 000000000..e0678c642 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyconfiguration.md @@ -0,0 +1,12 @@ +# CompanyConfiguration + +Success + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `bank_account` | [BankAccount](../../models/shared/bankaccount.md) | :heavy_check_mark: | N/A | +| `customer` | [Customer](../../models/shared/customer.md) | :heavy_check_mark: | N/A | +| `supplier` | [Supplier](../../models/shared/supplier.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyrequestbody.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyrequestbody.md new file mode 100755 index 000000000..339e136ce --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companyrequestbody.md @@ -0,0 +1,9 @@ +# CompanyRequestBody + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| `description` | *Optional[str]* | :heavy_minus_sign: | Additional information about the company. This can be used to store foreign IDs, references, etc. | Requested early access to the new financing scheme. | +| `name` | *str* | :heavy_check_mark: | Name of company being connected. | Bank of Dave | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/companysyncstatus.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companysyncstatus.md new file mode 100755 index 000000000..a3d6dcb4b --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/companysyncstatus.md @@ -0,0 +1,17 @@ +# CompanySyncStatus + +Success + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | d4d73051-ed31-42b6-99f6-d288cd940992 | +| `data_pushed` | *Optional[bool]* | :heavy_minus_sign: | Boolean of whether the sync resulted in data being pushed. | | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | Error message of the sync. | | +| `sync_exception_message` | *Optional[str]* | :heavy_minus_sign: | Exception message of the sync. | | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the sync. | a6a22aff-a43a-411d-a910-2dae73217cce | +| `sync_status` | *Optional[str]* | :heavy_minus_sign: | Text status of the sync. | Completed | +| `sync_status_code` | *Optional[int]* | :heavy_minus_sign: | Status code of the sync. | 2000 | +| `sync_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/connection.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connection.md new file mode 100755 index 000000000..7698204a7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connection.md @@ -0,0 +1,31 @@ +# Connection + +A connection represents a [company's](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Company) connection to a data source and allows you to synchronize data (pull and/or push) with that source. + +A company can have multiple data connections depending on the type of data source it is connecting to. For example, a single company can link to: + +- [Accounting data](https://docs.codat.io/accounting-api/overview) - 1 active connection. +- [Banking data](https://docs.codat.io/banking-api/overview) - Multiple active connections. +- [Commerce data](https://docs.codat.io/commerce-api/overview) - Multiple active connections. +Any combination of accounting, banking, and commerce data connections is allowed. + +Before you can use a data connection to pull or push data, the company must grant you access to their business data by [linking the connection](https://docs.codat.io/auth-flow/overview). + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `additional_properties` | *Optional[Any]* | :heavy_minus_sign: | N/A | | +| `connection_info` | dict[str, *str*] | :heavy_minus_sign: | N/A | | +| `created` | *str* | :heavy_check_mark: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `data_connection_errors` | list[[DataConnectionError](../../models/shared/dataconnectionerror.md)] | :heavy_minus_sign: | N/A | | +| `id` | *str* | :heavy_check_mark: | Unique identifier for a company's data connection. | 2e9d2c44-f675-40ba-8049-353bfcb5e171 | +| `integration_id` | *str* | :heavy_check_mark: | A Codat ID representing the integration. | fd321cb6-7963-4506-b873-e99593a45e30 | +| `integration_key` | *str* | :heavy_check_mark: | A unique four-character ID that identifies the platform of the company's data connection. This ensures continuity if the platform changes its name in the future. | | +| `last_sync` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `link_url` | *str* | :heavy_check_mark: | N/A | https://link-api.codat.io/companies/86bd88cb-44ab-4dfb-b32f-87b19b14287f/connections/2e2eb431-c1fa-4dc9-93fa-d29781c12bcd/start | +| `platform_name` | *str* | :heavy_check_mark: | N/A | | +| `source_id` | *str* | :heavy_check_mark: | A source-specific ID used to distinguish between different sources originating from the same data connection. In general, a data connection is a single data source. However, for TrueLayer, `sourceId` is associated with a specific bank and has a many-to-one relationship with the `integrationId`. | 35b92968-9851-4095-ad60-395c95cbcba4 | +| `source_type` | [ConnectionSourceType](../../models/shared/connectionsourcetype.md) | :heavy_check_mark: | The type of platform of the connection. | Accounting | +| `status` | [DataConnectionStatus](../../models/shared/dataconnectionstatus.md) | :heavy_check_mark: | The current authorization status of the data connection. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/connections.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connections.md new file mode 100755 index 000000000..ba1135508 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connections.md @@ -0,0 +1,14 @@ +# Connections + +OK + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `links` | [Links](../../models/shared/links.md) | :heavy_check_mark: | N/A | +| `page_number` | *int* | :heavy_check_mark: | N/A | +| `page_size` | *int* | :heavy_check_mark: | N/A | +| `results` | list[[Connection](../../models/shared/connection.md)] | :heavy_minus_sign: | N/A | +| `total_results` | *int* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/connectionsourcetype.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connectionsourcetype.md new file mode 100755 index 000000000..85e691690 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/connectionsourcetype.md @@ -0,0 +1,14 @@ +# ConnectionSourceType + +The type of platform of the connection. + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `ACCOUNTING` | Accounting | +| `BANKING` | Banking | +| `COMMERCE` | Commerce | +| `OTHER` | Other | +| `UNKNOWN` | Unknown | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactref.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactref.md new file mode 100755 index 000000000..4d252422e --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactref.md @@ -0,0 +1,9 @@ +# ContactRef + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `contact_type` | [Optional[ContactRefContactType]](../../models/shared/contactrefcontacttype.md) | :heavy_minus_sign: | The type of contact. | Supplier | +| `id` | *Optional[str]* | :heavy_minus_sign: | Identifier of supplier or customer. | 40e3e57c-2322-4898-966c-ca41adfd23fd | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactrefcontacttype.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactrefcontacttype.md new file mode 100755 index 000000000..0e0790e83 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/contactrefcontacttype.md @@ -0,0 +1,10 @@ +# ContactRefContactType + +The type of contact. + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `SUPPLIER` | Supplier | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenserequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenserequest.md new file mode 100755 index 000000000..d245c3e0c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenserequest.md @@ -0,0 +1,8 @@ +# CreateExpenseRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | --------------------------------------------------------------------- | +| `items` | list[[ExpenseTransaction](../../models/shared/expensetransaction.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenseresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenseresponse.md new file mode 100755 index 000000000..e4aeb38ba --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/createexpenseresponse.md @@ -0,0 +1,10 @@ +# CreateExpenseResponse + +OK + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | ------------------------------------ | +| `dataset_id` | *Optional[str]* | :heavy_minus_sign: | Unique id of dataset created | cd937d46-8e41-43a9-9477-a79158ffd98a | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/customer.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/customer.md new file mode 100755 index 000000000..7ccd3cf07 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/customer.md @@ -0,0 +1,8 @@ +# Customer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | id of the customer for all income related activities to be associated to. | 142 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionerror.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionerror.md new file mode 100755 index 000000000..6c85722e1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionerror.md @@ -0,0 +1,11 @@ +# DataConnectionError + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `error_message` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `errored_on_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `status_code` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `status_text` | *Optional[str]* | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionstatus.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionstatus.md new file mode 100755 index 000000000..4e79f5d5a --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/dataconnectionstatus.md @@ -0,0 +1,13 @@ +# DataConnectionStatus + +The current authorization status of the data connection. + + +## Values + +| Name | Value | +| -------------- | -------------- | +| `PENDING_AUTH` | PendingAuth | +| `LINKED` | Linked | +| `UNLINKED` | Unlinked | +| `DEAUTHORIZED` | Deauthorized | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/errormessage.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/errormessage.md new file mode 100755 index 000000000..b32400646 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/errormessage.md @@ -0,0 +1,15 @@ +# ErrorMessage + +Your `query` parameter was not correctly formed + + +## Fields + +| Field | Type | Required | Description | +| --------------------- | --------------------- | --------------------- | --------------------- | +| `can_be_retried` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `correlation_id` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `detailed_error_code` | *Optional[int]* | :heavy_minus_sign: | N/A | +| `error` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `service` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `status_code` | *Optional[int]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransaction.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransaction.md new file mode 100755 index 000000000..898c49c58 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransaction.md @@ -0,0 +1,16 @@ +# ExpenseTransaction + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `contact_ref` | [Optional[ContactRef]](../../models/shared/contactref.md) | :heavy_minus_sign: | N/A | | +| `currency` | *str* | :heavy_check_mark: | Currency the transaction was recorded in. | GBP | +| `currency_rate` | *Optional[float]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | +| `id` | *str* | :heavy_check_mark: | Your unique identifier for the transaction. | 4d7c6929-7770-412b-91bb-44d3bc71d111 | +| `issue_date` | *str* | :heavy_check_mark: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `lines` | list[[ExpenseTransactionLine](../../models/shared/expensetransactionline.md)] | :heavy_minus_sign: | Array of transaction lines. | | +| `merchant_name` | *Optional[str]* | :heavy_minus_sign: | Name of the merchant where the purchase took place | Amazon UK | +| `notes` | *Optional[str]* | :heavy_minus_sign: | Any private, company notes about the transaction. | APPLE.COM/BILL - 09001077498 - Card Ending: 4590 | +| `type` | [ExpenseTransactionType](../../models/shared/expensetransactiontype.md) | :heavy_check_mark: | The type of transaction. | Payment | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactionline.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactionline.md new file mode 100755 index 000000000..7715b7de9 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactionline.md @@ -0,0 +1,12 @@ +# ExpenseTransactionLine + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | +| `account_ref` | [RecordRef](../../models/shared/recordref.md) | :heavy_check_mark: | N/A | | +| `net_amount` | *float* | :heavy_check_mark: | Amount of the line, exclusive of tax. | 110.42 | +| `tax_amount` | *float* | :heavy_check_mark: | Amount of tax for the line. | 14.43 | +| `tax_rate_ref` | [Optional[RecordRef]](../../models/shared/recordref.md) | :heavy_minus_sign: | N/A | | +| `tracking_refs` | list[[RecordRef](../../models/shared/recordref.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactiontype.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactiontype.md new file mode 100755 index 000000000..ce4e0c626 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/expensetransactiontype.md @@ -0,0 +1,17 @@ +# ExpenseTransactionType + +The type of transaction. + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `PAYMENT` | Payment | +| `REFUND` | Refund | +| `REWARD` | Reward | +| `CHARGEBACK` | Chargeback | +| `TRANSFER_IN` | TransferIn | +| `TRANSFER_OUT` | TransferOut | +| `ADJUSTMENT_IN` | AdjustmentIn | +| `ADJUSTMENT_OUT` | AdjustmentOut | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/halref.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/halref.md new file mode 100755 index 000000000..fef2ab2fc --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/halref.md @@ -0,0 +1,8 @@ +# HalRef + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `href` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/integrationtype.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/integrationtype.md new file mode 100755 index 000000000..44c0c2d48 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/integrationtype.md @@ -0,0 +1,11 @@ +# IntegrationType + +Type of transaction that has been processed e.g. Expense or Bank Feed. + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `EXPENSES` | expenses | +| `BANKFEEDS` | bankfeeds | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/links.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/links.md new file mode 100755 index 000000000..7aad1ea5d --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/links.md @@ -0,0 +1,11 @@ +# Links + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| `current` | [HalRef](../../models/shared/halref.md) | :heavy_check_mark: | N/A | +| `next` | [Optional[HalRef]](../../models/shared/halref.md) | :heavy_minus_sign: | N/A | +| `previous` | [Optional[HalRef]](../../models/shared/halref.md) | :heavy_minus_sign: | N/A | +| `self_` | [HalRef](../../models/shared/halref.md) | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/mappingoptions.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/mappingoptions.md new file mode 100755 index 000000000..98fc50f93 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/mappingoptions.md @@ -0,0 +1,13 @@ +# MappingOptions + +Success + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| `accounts` | list[[AccountMappingInfo](../../models/shared/accountmappinginfo.md)] | :heavy_minus_sign: | Array of available accounts for mapping. | | +| `expense_provider` | *Optional[str]* | :heavy_minus_sign: | Name of the expense integration. | Partner Expense | +| `tax_rates` | list[[TaxRateMappingInfo](../../models/shared/taxratemappinginfo.md)] | :heavy_minus_sign: | Array of available tax rates for mapping. | | +| `tracking_categories` | list[[TrackingCategoryMappingInfo](../../models/shared/trackingcategorymappinginfo.md)] | :heavy_minus_sign: | Array of available tracking categories for mapping. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/postsync.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/postsync.md new file mode 100755 index 000000000..42a7749f0 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/postsync.md @@ -0,0 +1,8 @@ +# PostSync + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `dataset_ids` | list[*str*] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/recordref.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/recordref.md new file mode 100755 index 000000000..82561b7cd --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/recordref.md @@ -0,0 +1,8 @@ +# RecordRef + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | identifier of linked reference from mapping options. | 40e3e57c-2322-4898-966c-ca41adfd23fd | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/security.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/security.md new file mode 100755 index 000000000..2b68bd0e7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/security.md @@ -0,0 +1,8 @@ +# Security + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `auth_header` | *str* | :heavy_check_mark: | N/A | Basic BASE_64_ENCODED(API_KEY) | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/supplier.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/supplier.md new file mode 100755 index 000000000..5131731ce --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/supplier.md @@ -0,0 +1,8 @@ +# Supplier + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | id of the supplier for all purchases to be associated to | 124 | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhook.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhook.md new file mode 100755 index 000000000..002c3ed9e --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhook.md @@ -0,0 +1,17 @@ +# SyncCompleteWebhook + +Webhook request body used to notify that a sync has completed. + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[SyncCompleteWebhookData]](../../models/shared/synccompletewebhookdata.md) | :heavy_minus_sign: | N/A | | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human readable message about the webhook. | | +| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhookdata.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhookdata.md new file mode 100755 index 000000000..255098788 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/synccompletewebhookdata.md @@ -0,0 +1,11 @@ +# SyncCompleteWebhookData + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sync_date_range_finish_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_date_range_start_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | N/A | a9367074-b5c3-42c4-9be4-be129f43577e | +| `sync_type` | *Optional[str]* | :heavy_minus_sign: | The type of sync being performed. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhook.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhook.md new file mode 100755 index 000000000..4054cefff --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhook.md @@ -0,0 +1,17 @@ +# SyncFailedWebhook + +Webhook request body used to notify that a sync has failed. + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[SyncFailedWebhookData]](../../models/shared/syncfailedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human readable message about the webhook. | | +| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhookdata.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhookdata.md new file mode 100755 index 000000000..aa11280fa --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncfailedwebhookdata.md @@ -0,0 +1,12 @@ +# SyncFailedWebhookData + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `failure_stage` | *Optional[str]* | :heavy_minus_sign: | The stage of the job the sync failed. | | +| `sync_date_range_finish_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_date_range_start_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | N/A | a9367074-b5c3-42c4-9be4-be129f43577e | +| `sync_type` | *Optional[str]* | :heavy_minus_sign: | The type of sync being performed. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncinitiated.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncinitiated.md new file mode 100755 index 000000000..e10f210a8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncinitiated.md @@ -0,0 +1,10 @@ +# SyncInitiated + +Returns the newly created SyncId + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhook.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhook.md new file mode 100755 index 000000000..15f31c0c6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhook.md @@ -0,0 +1,17 @@ +# SyncStartedWebhook + +Webhook request body used to notify that a sync has started. + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | +| `alert_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the webhook event. | | +| `client_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your client in Codat. | | +| `client_name` | *Optional[str]* | :heavy_minus_sign: | Name of your client in Codat. | | +| `company_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for your SMB in Codat. | 8a210b68-6988-11ed-a1eb-0242ac120002 | +| `data` | [Optional[SyncStartedWebhookData]](../../models/shared/syncstartedwebhookdata.md) | :heavy_minus_sign: | N/A | | +| `message` | *Optional[str]* | :heavy_minus_sign: | A human readable message about the webhook. | | +| `rule_id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier for the rule. | | +| `rule_type` | *Optional[str]* | :heavy_minus_sign: | The type of rule. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhookdata.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhookdata.md new file mode 100755 index 000000000..75b051314 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/syncstartedwebhookdata.md @@ -0,0 +1,11 @@ +# SyncStartedWebhookData + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `sync_date_range_finish_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_date_range_start_utc` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `sync_id` | *Optional[str]* | :heavy_minus_sign: | N/A | a9367074-b5c3-42c4-9be4-be129f43577e | +| `sync_type` | *Optional[str]* | :heavy_minus_sign: | The type of sync being performed. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfo.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfo.md new file mode 100755 index 000000000..7652d90b5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfo.md @@ -0,0 +1,13 @@ +# TaxRateMappingInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `code` | *Optional[str]* | :heavy_minus_sign: | Code for the tax rate from the accounting platform. | UK Standard Rate (Bills) | +| `effective_tax_rate` | *Optional[float]* | :heavy_minus_sign: | Effective tax rate. | 20 | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of tax rate. | 59_Bills | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the tax rate in the accounting platform. | UK Standard Rate (Bills) Bills | +| `total_tax_rate` | *Optional[float]* | :heavy_minus_sign: | Total (not compounded) sum of the components of a tax rate. | 20 | +| `valid_transaction_types` | list[[TaxRateMappingInfoValidTransactionTypes](../../models/shared/taxratemappinginfovalidtransactiontypes.md)] | :heavy_minus_sign: | Supported transaction types for the account. | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfovalidtransactiontypes.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfovalidtransactiontypes.md new file mode 100755 index 000000000..d2f7d4eaf --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/taxratemappinginfovalidtransactiontypes.md @@ -0,0 +1,15 @@ +# TaxRateMappingInfoValidTransactionTypes + + +## Values + +| Name | Value | +| ---------------- | ---------------- | +| `PAYMENT` | Payment | +| `REFUND` | Refund | +| `REWARD` | Reward | +| `CHARGEBACK` | Chargeback | +| `TRANSFER_IN` | TransferIn | +| `TRANSFER_OUT` | TransferOut | +| `ADJUSTMENT_IN` | AdjustmentIn | +| `ADJUSTMENT_OUT` | AdjustmentOut | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/trackingcategorymappinginfo.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/trackingcategorymappinginfo.md new file mode 100755 index 000000000..b0efc30f6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/trackingcategorymappinginfo.md @@ -0,0 +1,12 @@ +# TrackingCategoryMappingInfo + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `has_children` | *Optional[bool]* | :heavy_minus_sign: | Boolean of whether the tracking category has child categories. | | +| `id` | *Optional[str]* | :heavy_minus_sign: | Unique identifier of the tracking category. | DEPARTMENT_2 | +| `modified_date` | *Optional[str]* | :heavy_minus_sign: | In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example:

```
2020-10-08T22:40:50Z
2021-01-01T00:00:00
```



When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information:

- Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z`
- Unqualified local time: `2021-11-15T01:00:00`
- UTC time offsets: `2021-11-15T01:00:00-05:00`

> Time zones
>
> Not all dates from Codat will contain information about time zones.
> Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. | 2022-10-23T00:00:00.000Z | +| `name` | *Optional[str]* | :heavy_minus_sign: | Name of the tracking category as it appears in the accounting software. | New York | +| `parent_id` | *Optional[str]* | :heavy_minus_sign: | ID of the parent tracking category | DEPARTMENTS | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadata.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadata.md new file mode 100755 index 000000000..569dd95f0 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadata.md @@ -0,0 +1,11 @@ +# TransactionMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `integration_type` | [Optional[IntegrationType]](../../models/shared/integrationtype.md) | :heavy_minus_sign: | Type of transaction that has been processed e.g. Expense or Bank Feed. | expenses | +| `message` | *Optional[str]* | :heavy_minus_sign: | Metadata such as validation errors or the resulting record created in the accounting software. | | +| `status` | [Optional[TransactionStatus]](../../models/shared/transactionstatus.md) | :heavy_minus_sign: | Status of the transaction. | Completed | +| `transaction_id` | *Optional[str]* | :heavy_minus_sign: | Your unique idenfier of the transaction. | aa02271d-ed5f-47f5-be76-778d5905225a | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadatalist.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadatalist.md new file mode 100755 index 000000000..2764f2309 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionmetadatalist.md @@ -0,0 +1,14 @@ +# TransactionMetadataList + +Success + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | ----------------------------------------------------------------------- | +| `links` | [Links](../../models/shared/links.md) | :heavy_check_mark: | N/A | +| `page_number` | *int* | :heavy_check_mark: | N/A | +| `page_size` | *int* | :heavy_check_mark: | N/A | +| `results` | list[[TransactionMetadata](../../models/shared/transactionmetadata.md)] | :heavy_minus_sign: | N/A | +| `total_results` | *int* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionstatus.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionstatus.md new file mode 100755 index 000000000..6f9a25285 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/transactionstatus.md @@ -0,0 +1,14 @@ +# TransactionStatus + +Status of the transaction. + + +## Values + +| Name | Value | +| ------------------ | ------------------ | +| `UNKNOWN` | Unknown | +| `PENDING` | Pending | +| `VALIDATION_ERROR` | ValidationError | +| `COMPLETED` | Completed | +| `PUSH_ERROR` | PushError | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/shared/updateexpenserequest.md b/previous-versions/sync-for-expenses-version-1/docs/models/shared/updateexpenserequest.md new file mode 100755 index 000000000..a142f690f --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/shared/updateexpenserequest.md @@ -0,0 +1,15 @@ +# UpdateExpenseRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `contact_ref` | [Optional[ContactRef]](../../models/shared/contactref.md) | :heavy_minus_sign: | N/A | | +| `currency` | *Optional[str]* | :heavy_minus_sign: | Currency the transaction was recorded in. | GBP | +| `currency_rate` | *Optional[float]* | :heavy_minus_sign: | Rate to convert the total amount of the payment into the base currency for the company at the time of the payment.

Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit.

It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR.

Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places).

For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places.

## Examples with base currency of GBP

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (GBP) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **USD** \| $20 \| 0.781 \| £15.62 \|
\| **EUR** \| €20 \| 0.885 \| £17.70 \|
\| **RUB** \| ₽20 \| 0.011 \| £0.22 \|

## Examples with base currency of USD

\| Foreign Currency \| Foreign Amount \| Currency Rate \| Base Currency Amount (USD) \|
\| :--------------- \| :------------- \| :------------ \| :------------------------- \|
\| **GBP** \| £20 \| 1.277 \| $25.54 \|
\| **EUR** \| €20 \| 1.134 \| $22.68 \|
\| **RUB** \| ₽20 \| 0.015 \| $0.30 \| | | +| `issue_date` | *str* | :heavy_check_mark: | Date the transaction was recorded. | 2022-06-28T00:00:00.000Z | +| `lines` | list[[ExpenseTransactionLine](../../models/shared/expensetransactionline.md)] | :heavy_minus_sign: | Array of transaction lines. | | +| `merchant_name` | *Optional[str]* | :heavy_minus_sign: | Name of the merchant where the purchase took place | Amazon UK | +| `notes` | *Optional[str]* | :heavy_minus_sign: | Any private, company notes about the transaction. | APPLE.COM/BILL - 09001077498 - Card Ending: 4590 | +| `type` | *Any* | :heavy_check_mark: | N/A | | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/utils/retryconfig.md b/previous-versions/sync-for-expenses-version-1/docs/models/utils/retryconfig.md new file mode 100755 index 000000000..69dd549ec --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/utils/retryconfig.md @@ -0,0 +1,24 @@ +# RetryConfig + +Allows customizing the default retry configuration. Only usable with methods that mention they support retries. + +## Fields + +| Name | Type | Description | Example | +| ------------------------- | ----------------------------------- | --------------------------------------- | --------- | +| `strategy` | `*str*` | The retry strategy to use. | `backoff` | +| `backoff` | [BackoffStrategy](#backoffstrategy) | Configuration for the backoff strategy. | | +| `retry_connection_errors` | `*bool*` | Whether to retry on connection errors. | `true` | + +## BackoffStrategy + +The backoff strategy allows retrying a request with an exponential backoff between each retry. + +### Fields + +| Name | Type | Description | Example | +| ------------------ | --------- | ----------------------------------------- | -------- | +| `initial_interval` | `*int*` | The initial interval in milliseconds. | `500` | +| `max_interval` | `*int*` | The maximum interval in milliseconds. | `60000` | +| `exponent` | `*float*` | The exponent to use for the backoff. | `1.5` | +| `max_elapsed_time` | `*int*` | The maximum elapsed time in milliseconds. | `300000` | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/synccompleteresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/synccompleteresponse.md new file mode 100755 index 000000000..891ffee2a --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/synccompleteresponse.md @@ -0,0 +1,10 @@ +# SyncCompleteResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncfailedresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncfailedresponse.md new file mode 100755 index 000000000..162c382d9 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncfailedresponse.md @@ -0,0 +1,10 @@ +# SyncFailedResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncstartedresponse.md b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncstartedresponse.md new file mode 100755 index 000000000..968c36c52 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/models/webhooks/syncstartedresponse.md @@ -0,0 +1,10 @@ +# SyncStartedResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | N/A | +| `status_code` | *int* | :heavy_check_mark: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/codatsyncexpenses/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/codatsyncexpenses/README.md new file mode 100755 index 000000000..14fe52fa8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/codatsyncexpenses/README.md @@ -0,0 +1,18 @@ +# CodatSyncExpenses SDK + +## Overview + +Sync for Expenses (v1): The API for Sync for Expenses. + +Sync for Expenses is an API and a set of supporting tools. It has been built to +enable corporate card and expense management platforms to provide high-quality +integrations with multiple accounting platforms through a standardized API. + + +[Read more...](https://docs.codat.io/sync-for-expenses/overview) + + +[See our OpenAPI spec](https://github.com/codatio/oas) + +### Available Operations + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/companies/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/companies/README.md new file mode 100755 index 000000000..1ebe2aa71 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/companies/README.md @@ -0,0 +1,221 @@ +# companies + +## Overview + +Create and manage your Codat companies. + +### Available Operations + +* [create_company](#create_company) - Create company +* [delete_company](#delete_company) - Delete a company +* [get_company](#get_company) - Get company +* [list_companies](#list_companies) - List companies +* [update_company](#update_company) - Update company + +## create_company + +Creates a new company that can be used to assign connections to. + +If forbidden characters (see `name` pattern) are present in the request, a company will be created with the forbidden characters removed. For example, `Company (Codat[1])` with be created as `Company Codat1`. + + + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = shared.CompanyRequestBody( + description='Requested early access to the new financing scheme.', + name='Bank of Dave', +) + +res = s.companies.create_company(req) + +if res.company is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `request` | [shared.CompanyRequestBody](../../models/shared/companyrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.CreateCompanyResponse](../../models/operations/createcompanyresponse.md)** + + +## delete_company + + +Permanently deletes a company, its connections and any cached data. This operation is irreversible. If the company ID does not exist an error is returned. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.DeleteCompanyRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.companies.delete_company(req) + +if res.status_code == 200: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.DeleteCompanyRequest](../../models/operations/deletecompanyrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.DeleteCompanyResponse](../../models/operations/deletecompanyresponse.md)** + + +## get_company + +Returns the company for a valid identifier. If the identifier is for a deleted company, a not found response is returned. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetCompanyRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.companies.get_company(req) + +if res.company is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `request` | [operations.GetCompanyRequest](../../models/operations/getcompanyrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetCompanyResponse](../../models/operations/getcompanyresponse.md)** + + +## list_companies + +Returns a list of your companies. The company schema contains a list of [connections](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Connection) related to the company. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.ListCompaniesRequest( + order_by='-modifiedDate', + page=1, + page_size=100, + query='corrupti', +) + +res = s.companies.list_companies(req) + +if res.companies is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.ListCompaniesRequest](../../models/operations/listcompaniesrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.ListCompaniesResponse](../../models/operations/listcompaniesresponse.md)** + + +## update_company + +Updates both the name and description of the company. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.UpdateCompanyRequest( + company_request_body=shared.CompanyRequestBody( + description='Requested early access to the new financing scheme.', + name='Bank of Dave', + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.companies.update_company(req) + +if res.company is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.UpdateCompanyRequest](../../models/operations/updatecompanyrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.UpdateCompanyResponse](../../models/operations/updatecompanyresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/configuration/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/configuration/README.md new file mode 100755 index 000000000..e7cc14b07 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/configuration/README.md @@ -0,0 +1,99 @@ +# configuration + +## Overview + +Companies sync configuration. + +### Available Operations + +* [get_company_configuration](#get_company_configuration) - Get company configuration +* [save_company_configuration](#save_company_configuration) - Set company configuration + +## get_company_configuration + +Gets a companies expense sync configuration + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetCompanyConfigurationRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.configuration.get_company_configuration(req) + +if res.company_configuration is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `request` | [operations.GetCompanyConfigurationRequest](../../models/operations/getcompanyconfigurationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetCompanyConfigurationResponse](../../models/operations/getcompanyconfigurationresponse.md)** + + +## save_company_configuration + +Sets a companies expense sync configuration + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.SaveCompanyConfigurationRequest( + company_configuration=shared.CompanyConfiguration( + bank_account=shared.BankAccount( + id='32', + ), + customer=shared.Customer( + id='142', + ), + supplier=shared.Supplier( + id='124', + ), + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.configuration.save_company_configuration(req) + +if res.company_configuration is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `request` | [operations.SaveCompanyConfigurationRequest](../../models/operations/savecompanyconfigurationrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.SaveCompanyConfigurationResponse](../../models/operations/savecompanyconfigurationresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/connections/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/connections/README.md new file mode 100755 index 000000000..da30254e4 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/connections/README.md @@ -0,0 +1,264 @@ +# connections + +## Overview + +Create and manage partner expense connection. + +### Available Operations + +* [create_connection](#create_connection) - Create connection +* [create_partner_expense_connection](#create_partner_expense_connection) - Create Partner Expense connection +* [delete_connection](#delete_connection) - Delete connection +* [get_connection](#get_connection) - Get connection +* [list_connections](#list_connections) - List connections +* [unlink](#unlink) - Unlink connection + +## create_connection + +Creates a connection for the company by providing a valid `platformKey`. + +Use the [List Integrations](https://docs.codat.io/sync-for-expenses-v1-api#/operations/list-integrations) endpoint to access valid platform keys. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.CreateConnectionRequest( + request_body=operations.CreateConnectionRequestBody( + platform_key='provident', + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.connections.create_connection(req) + +if res.connection is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.CreateConnectionRequest](../../models/operations/createconnectionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.CreateConnectionResponse](../../models/operations/createconnectionresponse.md)** + + +## create_partner_expense_connection + +Creates a Partner Expense data connection + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.CreatePartnerExpenseConnectionRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.connections.create_partner_expense_connection(req) + +if res.connection is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.CreatePartnerExpenseConnectionRequest](../../models/operations/createpartnerexpenseconnectionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.CreatePartnerExpenseConnectionResponse](../../models/operations/createpartnerexpenseconnectionresponse.md)** + + +## delete_connection + +Revoke and remove a connection from a company. +This operation is not reversible. The end user would need to reauthorize a new data connection if you wish to view new data for this company. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.DeleteConnectionRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', +) + +res = s.connections.delete_connection(req) + +if res.status_code == 200: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.DeleteConnectionRequest](../../models/operations/deleteconnectionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.DeleteConnectionResponse](../../models/operations/deleteconnectionresponse.md)** + + +## get_connection + +Returns a specific connection for a company when valid identifiers are provided. If the identifiers are for a deleted company and/or connection, a not found response is returned. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetConnectionRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', +) + +res = s.connections.get_connection(req) + +if res.connection is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.GetConnectionRequest](../../models/operations/getconnectionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetConnectionResponse](../../models/operations/getconnectionresponse.md)** + + +## list_connections + +List the connections for a company. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.ListConnectionsRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + order_by='-modifiedDate', + page=1, + page_size=100, + query='distinctio', +) + +res = s.connections.list_connections(req) + +if res.connections is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `request` | [operations.ListConnectionsRequest](../../models/operations/listconnectionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.ListConnectionsResponse](../../models/operations/listconnectionsresponse.md)** + + +## unlink + +This allows you to deauthorize a connection, without deleting it from Codat. This means you can still view any data that has previously been pulled into Codat, and also lets you re-authorize in future if your customer wishes to resume sharing their data. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.UnlinkConnectionRequest( + request_body=operations.UnlinkConnectionRequestBody( + status='quibusdam', + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + connection_id='2e9d2c44-f675-40ba-8049-353bfcb5e171', +) + +res = s.connections.unlink(req) + +if res.connection is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.UnlinkConnectionRequest](../../models/operations/unlinkconnectionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.UnlinkConnectionResponse](../../models/operations/unlinkconnectionresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/expenses/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/expenses/README.md new file mode 100755 index 000000000..71072adc1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/expenses/README.md @@ -0,0 +1,498 @@ +# expenses + +## Overview + +Create expense datasets and upload receipts. + +### Available Operations + +* [create_expense_dataset](#create_expense_dataset) - Create expense-transactions +* [update_expense_dataset](#update_expense_dataset) - Update expense-transactions +* [upload_attachment](#upload_attachment) - Upload attachment + +## create_expense_dataset + +Create an expense transaction + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.CreateExpenseDatasetRequest( + create_expense_request=shared.CreateExpenseRequest( + items=[ + shared.ExpenseTransaction( + contact_ref=shared.ContactRef( + contact_type=shared.ContactRefContactType.SUPPLIER, + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + currency='GBP', + currency_rate=8579.46, + id='4d7c6929-7770-412b-91bb-44d3bc71d111', + issue_date='2022-10-23T00:00:00.000Z', + lines=[ + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + ], + merchant_name='Amazon UK', + notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', + type=shared.ExpenseTransactionType.PAYMENT, + ), + shared.ExpenseTransaction( + contact_ref=shared.ContactRef( + contact_type=shared.ContactRefContactType.SUPPLIER, + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + currency='GBP', + currency_rate=4375.87, + id='4d7c6929-7770-412b-91bb-44d3bc71d111', + issue_date='2022-10-23T00:00:00.000Z', + lines=[ + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + ], + merchant_name='Amazon UK', + notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', + type=shared.ExpenseTransactionType.PAYMENT, + ), + shared.ExpenseTransaction( + contact_ref=shared.ContactRef( + contact_type=shared.ContactRefContactType.SUPPLIER, + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + currency='GBP', + currency_rate=4776.65, + id='4d7c6929-7770-412b-91bb-44d3bc71d111', + issue_date='2022-10-23T00:00:00.000Z', + lines=[ + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + ], + merchant_name='Amazon UK', + notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', + type=shared.ExpenseTransactionType.PAYMENT, + ), + ], + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.expenses.create_expense_dataset(req) + +if res.create_expense_response is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `request` | [operations.CreateExpenseDatasetRequest](../../models/operations/createexpensedatasetrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.CreateExpenseDatasetResponse](../../models/operations/createexpensedatasetresponse.md)** + + +## update_expense_dataset + +Update an expense transaction + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.UpdateExpenseDatasetRequest( + update_expense_request=shared.UpdateExpenseRequest( + contact_ref=shared.ContactRef( + contact_type=shared.ContactRefContactType.SUPPLIER, + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + currency='GBP', + currency_rate=9255.97, + issue_date='2022-06-28T00:00:00.000Z', + lines=[ + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + shared.ExpenseTransactionLine( + account_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + net_amount=110.42, + tax_amount=14.43, + tax_rate_ref=shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + tracking_refs=[ + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + shared.RecordRef( + id='40e3e57c-2322-4898-966c-ca41adfd23fd', + ), + ], + ), + ], + merchant_name='Amazon UK', + notes='APPLE.COM/BILL - 09001077498 - Card Ending: 4590', + type='perferendis', + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + transaction_id='336694d8-2dca-4cb5-a28d-3ccb83e55eee', +) + +res = s.expenses.update_expense_dataset(req) + +if res.update_expense_dataset_202_application_json_object is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `request` | [operations.UpdateExpenseDatasetRequest](../../models/operations/updateexpensedatasetrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.UpdateExpenseDatasetResponse](../../models/operations/updateexpensedatasetresponse.md)** + + +## upload_attachment + +Creates an attachment in the accounting software against the given transactionId + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.UploadAttachmentRequest( + request_body=operations.UploadAttachmentRequestBody( + content='ipsam'.encode(), + request_body='repellendus', + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + sync_id='6fb40d5e-b13e-11ed-afa1-0242ac120002', + transaction_id='336694d8-2dca-4cb5-a28d-3ccb83e55eee', +) + +res = s.expenses.upload_attachment(req) + +if res.attachment is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `request` | [operations.UploadAttachmentRequest](../../models/operations/uploadattachmentrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.UploadAttachmentResponse](../../models/operations/uploadattachmentresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/mappingoptions/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/mappingoptions/README.md new file mode 100755 index 000000000..95aa47279 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/mappingoptions/README.md @@ -0,0 +1,48 @@ +# mapping_options + +## Overview + +Mapping options for a companies expenses. + +### Available Operations + +* [get_mapping_options](#get_mapping_options) - Mapping options + +## get_mapping_options + +Gets the expense mapping options for a companies accounting software + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetMappingOptionsRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.mapping_options.get_mapping_options(req) + +if res.mapping_options is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `request` | [operations.GetMappingOptionsRequest](../../models/operations/getmappingoptionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetMappingOptionsResponse](../../models/operations/getmappingoptionsresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/sync/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/sync/README.md new file mode 100755 index 000000000..2e071d856 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/sync/README.md @@ -0,0 +1,56 @@ +# sync + +## Overview + +Triggering a new sync of expenses to accounting software. + +### Available Operations + +* [intiate_sync](#intiate_sync) - Initiate sync + +## intiate_sync + +Initiate sync of pending transactions. + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.IntiateSyncRequest( + post_sync=shared.PostSync( + dataset_ids=[ + 'c2ddf7cc-78ca-41ba-928f-c816742cb739', + '20592939-6fea-4759-aeb1-0faaa2352c59', + '55907aff-1a3a-42fa-9467-739251aa52c3', + 'f5ad019d-a1ff-4e78-b097-b0074f15471b', + ], + ), + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.sync.intiate_sync(req) + +if res.sync_initiated is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `request` | [operations.IntiateSyncRequest](../../models/operations/intiatesyncrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.IntiateSyncResponse](../../models/operations/intiatesyncresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/syncstatus/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/syncstatus/README.md new file mode 100755 index 000000000..13d639c02 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/syncstatus/README.md @@ -0,0 +1,169 @@ +# sync_status + +## Overview + +Check the status of ongoing or previous expense syncs. + +### Available Operations + +* [get_last_successful_sync](#get_last_successful_sync) - Last successful sync +* [get_latest_sync](#get_latest_sync) - Latest sync status +* [get_sync_by_id](#get_sync_by_id) - Get Sync status +* [list_syncs](#list_syncs) - List sync statuses + +## get_last_successful_sync + +Gets the status of the last successful sync + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetLastSuccessfulSyncRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.sync_status.get_last_successful_sync(req) + +if res.company_sync_status is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `request` | [operations.GetLastSuccessfulSyncRequest](../../models/operations/getlastsuccessfulsyncrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetLastSuccessfulSyncResponse](../../models/operations/getlastsuccessfulsyncresponse.md)** + + +## get_latest_sync + +Gets the latest sync status + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetLatestSyncRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.sync_status.get_latest_sync(req) + +if res.company_sync_status is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `request` | [operations.GetLatestSyncRequest](../../models/operations/getlatestsyncrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetLatestSyncResponse](../../models/operations/getlatestsyncresponse.md)** + + +## get_sync_by_id + +Get the sync status for a specified sync + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetSyncByIDRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + sync_id='6fb40d5e-b13e-11ed-afa1-0242ac120002', +) + +res = s.sync_status.get_sync_by_id(req) + +if res.company_sync_status is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `request` | [operations.GetSyncByIDRequest](../../models/operations/getsyncbyidrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetSyncByIDResponse](../../models/operations/getsyncbyidresponse.md)** + + +## list_syncs + +Gets a list of sync statuses + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.ListSyncsRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', +) + +res = s.sync_status.list_syncs(req) + +if res.company_sync_statuses is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `request` | [operations.ListSyncsRequest](../../models/operations/listsyncsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.ListSyncsResponse](../../models/operations/listsyncsresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/docs/sdks/transactionstatus/README.md b/previous-versions/sync-for-expenses-version-1/docs/sdks/transactionstatus/README.md new file mode 100755 index 000000000..f42a76a49 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/docs/sdks/transactionstatus/README.md @@ -0,0 +1,93 @@ +# transaction_status + +## Overview + +Retrieve the status of transactions within a sync. + +### Available Operations + +* [get_sync_transaction](#get_sync_transaction) - Get Sync Transaction +* [list_sync_transactions](#list_sync_transactions) - Get Sync transactions + +## get_sync_transaction + +Gets the status of a transaction for a sync + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.GetSyncTransactionRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + sync_id='6fb40d5e-b13e-11ed-afa1-0242ac120002', + transaction_id='336694d8-2dca-4cb5-a28d-3ccb83e55eee', +) + +res = s.transaction_status.get_sync_transaction(req) + +if res.transaction_metadata is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `request` | [operations.GetSyncTransactionRequest](../../models/operations/getsynctransactionrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.GetSyncTransactionResponse](../../models/operations/getsynctransactionresponse.md)** + + +## list_sync_transactions + +Get's the transactions and status for a sync + +### Example Usage + +```python +import codatsyncexpenses +from codatsyncexpenses.models import operations, shared + +s = codatsyncexpenses.CodatSyncExpenses( + security=shared.Security( + auth_header="Basic BASE_64_ENCODED(API_KEY)", + ), +) + +req = operations.ListSyncTransactionsRequest( + company_id='8a210b68-6988-11ed-a1eb-0242ac120002', + page=1, + page_size=100, + sync_id='6fb40d5e-b13e-11ed-afa1-0242ac120002', +) + +res = s.transaction_status.list_sync_transactions(req) + +if res.transaction_metadata_list is not None: + # handle response +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `request` | [operations.ListSyncTransactionsRequest](../../models/operations/listsynctransactionsrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | + + +### Response + +**[operations.ListSyncTransactionsResponse](../../models/operations/listsynctransactionsresponse.md)** + diff --git a/previous-versions/sync-for-expenses-version-1/files.gen b/previous-versions/sync-for-expenses-version-1/files.gen new file mode 100755 index 000000000..98d5ce2e0 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/files.gen @@ -0,0 +1,198 @@ +src/codatsyncexpenses/sdkconfiguration.py +src/codatsyncexpenses/companies.py +src/codatsyncexpenses/configuration.py +src/codatsyncexpenses/connections.py +src/codatsyncexpenses/expenses.py +src/codatsyncexpenses/mapping_options.py +src/codatsyncexpenses/sync.py +src/codatsyncexpenses/sync_status.py +src/codatsyncexpenses/transaction_status.py +src/codatsyncexpenses/sdk.py +pylintrc +setup.py +src/codatsyncexpenses/__init__.py +src/codatsyncexpenses/models/__init__.py +src/codatsyncexpenses/models/errors/sdkerror.py +src/codatsyncexpenses/utils/__init__.py +src/codatsyncexpenses/utils/retries.py +src/codatsyncexpenses/utils/utils.py +src/codatsyncexpenses/models/operations/create_company.py +src/codatsyncexpenses/models/operations/delete_company.py +src/codatsyncexpenses/models/operations/get_company.py +src/codatsyncexpenses/models/operations/list_companies.py +src/codatsyncexpenses/models/operations/update_company.py +src/codatsyncexpenses/models/operations/get_company_configuration.py +src/codatsyncexpenses/models/operations/save_company_configuration.py +src/codatsyncexpenses/models/operations/create_connection.py +src/codatsyncexpenses/models/operations/create_partner_expense_connection.py +src/codatsyncexpenses/models/operations/delete_connection.py +src/codatsyncexpenses/models/operations/get_connection.py +src/codatsyncexpenses/models/operations/list_connections.py +src/codatsyncexpenses/models/operations/unlink_connection.py +src/codatsyncexpenses/models/operations/create_expense_dataset.py +src/codatsyncexpenses/models/operations/update_expense_dataset.py +src/codatsyncexpenses/models/operations/upload_attachment.py +src/codatsyncexpenses/models/operations/get_mapping_options.py +src/codatsyncexpenses/models/operations/intiate_sync.py +src/codatsyncexpenses/models/operations/get_last_successful_sync.py +src/codatsyncexpenses/models/operations/get_latest_sync.py +src/codatsyncexpenses/models/operations/get_sync_by_id.py +src/codatsyncexpenses/models/operations/list_syncs.py +src/codatsyncexpenses/models/operations/get_sync_transaction.py +src/codatsyncexpenses/models/operations/list_sync_transactions.py +src/codatsyncexpenses/models/operations/__init__.py +src/codatsyncexpenses/models/shared/errormessage.py +src/codatsyncexpenses/models/shared/company.py +src/codatsyncexpenses/models/shared/connection.py +src/codatsyncexpenses/models/shared/dataconnectionstatus.py +src/codatsyncexpenses/models/shared/dataconnectionerror.py +src/codatsyncexpenses/models/shared/companyrequestbody.py +src/codatsyncexpenses/models/shared/companies.py +src/codatsyncexpenses/models/shared/links.py +src/codatsyncexpenses/models/shared/halref.py +src/codatsyncexpenses/models/shared/companyconfiguration.py +src/codatsyncexpenses/models/shared/supplier.py +src/codatsyncexpenses/models/shared/customer.py +src/codatsyncexpenses/models/shared/bankaccount.py +src/codatsyncexpenses/models/shared/connections.py +src/codatsyncexpenses/models/shared/createexpenseresponse.py +src/codatsyncexpenses/models/shared/createexpenserequest.py +src/codatsyncexpenses/models/shared/expensetransaction.py +src/codatsyncexpenses/models/shared/expensetransactionline.py +src/codatsyncexpenses/models/shared/recordref.py +src/codatsyncexpenses/models/shared/contactref.py +src/codatsyncexpenses/models/shared/updateexpenserequest.py +src/codatsyncexpenses/models/shared/attachment.py +src/codatsyncexpenses/models/shared/mappingoptions.py +src/codatsyncexpenses/models/shared/trackingcategorymappinginfo.py +src/codatsyncexpenses/models/shared/taxratemappinginfo.py +src/codatsyncexpenses/models/shared/accountmappinginfo.py +src/codatsyncexpenses/models/shared/syncinitiated.py +src/codatsyncexpenses/models/shared/postsync.py +src/codatsyncexpenses/models/shared/companysyncstatus.py +src/codatsyncexpenses/models/shared/transactionmetadata.py +src/codatsyncexpenses/models/shared/transactionstatus.py +src/codatsyncexpenses/models/shared/integrationtype.py +src/codatsyncexpenses/models/shared/transactionmetadatalist.py +src/codatsyncexpenses/models/shared/security.py +src/codatsyncexpenses/models/shared/synccompletewebhook.py +src/codatsyncexpenses/models/shared/syncfailedwebhook.py +src/codatsyncexpenses/models/shared/syncstartedwebhook.py +src/codatsyncexpenses/models/shared/__init__.py +src/codatsyncexpenses/models/webhooks/sync_complete.py +src/codatsyncexpenses/models/webhooks/sync_failed.py +src/codatsyncexpenses/models/webhooks/sync_started.py +src/codatsyncexpenses/models/webhooks/__init__.py +src/codatsyncexpenses/models/errors/__init__.py +docs/sdks/codatsyncexpenses/README.md +docs/models/utils/retryconfig.md +docs/sdks/companies/README.md +docs/sdks/configuration/README.md +docs/sdks/connections/README.md +docs/sdks/expenses/README.md +docs/sdks/mappingoptions/README.md +docs/sdks/sync/README.md +docs/sdks/syncstatus/README.md +docs/sdks/transactionstatus/README.md +USAGE.md +docs/models/operations/createcompanyresponse.md +docs/models/operations/deletecompanyrequest.md +docs/models/operations/deletecompanyresponse.md +docs/models/operations/getcompanyrequest.md +docs/models/operations/getcompanyresponse.md +docs/models/operations/listcompaniesrequest.md +docs/models/operations/listcompaniesresponse.md +docs/models/operations/updatecompanyrequest.md +docs/models/operations/updatecompanyresponse.md +docs/models/operations/getcompanyconfigurationrequest.md +docs/models/operations/getcompanyconfigurationresponse.md +docs/models/operations/savecompanyconfigurationrequest.md +docs/models/operations/savecompanyconfigurationresponse.md +docs/models/operations/createconnectionrequestbody.md +docs/models/operations/createconnectionrequest.md +docs/models/operations/createconnectionresponse.md +docs/models/operations/createpartnerexpenseconnectionrequest.md +docs/models/operations/createpartnerexpenseconnectionresponse.md +docs/models/operations/deleteconnectionrequest.md +docs/models/operations/deleteconnectionresponse.md +docs/models/operations/getconnectionrequest.md +docs/models/operations/getconnectionresponse.md +docs/models/operations/listconnectionsrequest.md +docs/models/operations/listconnectionsresponse.md +docs/models/operations/unlinkconnectionrequestbody.md +docs/models/operations/unlinkconnectionrequest.md +docs/models/operations/unlinkconnectionresponse.md +docs/models/operations/createexpensedatasetrequest.md +docs/models/operations/createexpensedatasetresponse.md +docs/models/operations/updateexpensedatasetrequest.md +docs/models/operations/updateexpensedataset202applicationjson.md +docs/models/operations/updateexpensedatasetresponse.md +docs/models/operations/uploadattachmentrequestbody.md +docs/models/operations/uploadattachmentrequest.md +docs/models/operations/uploadattachmentresponse.md +docs/models/operations/getmappingoptionsrequest.md +docs/models/operations/getmappingoptionsresponse.md +docs/models/operations/intiatesyncrequest.md +docs/models/operations/intiatesyncresponse.md +docs/models/operations/getlastsuccessfulsyncrequest.md +docs/models/operations/getlastsuccessfulsyncresponse.md +docs/models/operations/getlatestsyncrequest.md +docs/models/operations/getlatestsyncresponse.md +docs/models/operations/getsyncbyidrequest.md +docs/models/operations/getsyncbyidresponse.md +docs/models/operations/listsyncsrequest.md +docs/models/operations/listsyncsresponse.md +docs/models/operations/getsynctransactionrequest.md +docs/models/operations/getsynctransactionresponse.md +docs/models/operations/listsynctransactionsrequest.md +docs/models/operations/listsynctransactionsresponse.md +docs/models/shared/errormessage.md +docs/models/shared/company.md +docs/models/shared/connectionsourcetype.md +docs/models/shared/connection.md +docs/models/shared/dataconnectionstatus.md +docs/models/shared/dataconnectionerror.md +docs/models/shared/companyrequestbody.md +docs/models/shared/companies.md +docs/models/shared/links.md +docs/models/shared/halref.md +docs/models/shared/companyconfiguration.md +docs/models/shared/supplier.md +docs/models/shared/customer.md +docs/models/shared/bankaccount.md +docs/models/shared/connections.md +docs/models/shared/createexpenseresponse.md +docs/models/shared/createexpenserequest.md +docs/models/shared/expensetransactiontype.md +docs/models/shared/expensetransaction.md +docs/models/shared/expensetransactionline.md +docs/models/shared/recordref.md +docs/models/shared/contactrefcontacttype.md +docs/models/shared/contactref.md +docs/models/shared/updateexpenserequest.md +docs/models/shared/attachment.md +docs/models/shared/mappingoptions.md +docs/models/shared/trackingcategorymappinginfo.md +docs/models/shared/taxratemappinginfovalidtransactiontypes.md +docs/models/shared/taxratemappinginfo.md +docs/models/shared/accountmappinginfoaccounttype.md +docs/models/shared/accountmappinginfovalidtransactiontypes.md +docs/models/shared/accountmappinginfo.md +docs/models/shared/syncinitiated.md +docs/models/shared/postsync.md +docs/models/shared/companysyncstatus.md +docs/models/shared/transactionmetadata.md +docs/models/shared/transactionstatus.md +docs/models/shared/integrationtype.md +docs/models/shared/transactionmetadatalist.md +docs/models/shared/security.md +docs/models/shared/synccompletewebhookdata.md +docs/models/shared/synccompletewebhook.md +docs/models/shared/syncfailedwebhookdata.md +docs/models/shared/syncfailedwebhook.md +docs/models/shared/syncstartedwebhookdata.md +docs/models/shared/syncstartedwebhook.md +docs/models/webhooks/synccompleteresponse.md +docs/models/webhooks/syncfailedresponse.md +docs/models/webhooks/syncstartedresponse.md +.gitattributes \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/gen.yaml b/previous-versions/sync-for-expenses-version-1/gen.yaml index 168410d2c..2370645b8 100644 --- a/previous-versions/sync-for-expenses-version-1/gen.yaml +++ b/previous-versions/sync-for-expenses-version-1/gen.yaml @@ -1,15 +1,24 @@ configVersion: 1.0.0 management: - docChecksum: 853aebc76021ec17db9b1abb7a33f340 - docVersion: 2.1.0 - speakeasyVersion: 1.53.0 - generationVersion: 2.58.0 + docChecksum: 71e62a9be779f1539008f73bd24c9a9b + docVersion: prealpha + speakeasyVersion: 1.77.1 + generationVersion: 2.91.4 generation: sdkClassName: CodatSyncExpenses singleTagPerOp: false telemetryEnabled: true +features: + python: + core: 2.85.1 + deprecations: 2.81.1 + examples: 2.81.1 + globalSecurity: 2.81.1 + globalServerURLs: 2.82.0 + nameOverrides: 2.81.1 + retries: 2.81.1 python: - version: 0.0.0 + version: 0.1.0 author: Codat description: Push expenses to accounting platforms. maxMethodParams: 0 diff --git a/previous-versions/sync-for-expenses-version-1/pylintrc b/previous-versions/sync-for-expenses-version-1/pylintrc new file mode 100755 index 000000000..ab6495dd6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/pylintrc @@ -0,0 +1,643 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.9 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names= + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _, + id + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + trailing-whitespace, + line-too-long, + missing-class-docstring, + missing-module-docstring, + missing-function-docstring, + too-many-instance-attributes, + wrong-import-order, + too-many-arguments, + broad-exception-raised, + too-few-public-methods, + too-many-branches, + chained-comparison, + duplicate-code, + trailing-newlines, + too-many-public-methods, + too-many-locals, + too-many-lines, + using-constant-test, + too-many-statements, + cyclic-import, + too-many-nested-blocks, + too-many-boolean-expressions, + no-else-raise + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins=id,object + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/previous-versions/sync-for-expenses-version-1/setup.py b/previous-versions/sync-for-expenses-version-1/setup.py new file mode 100755 index 000000000..8d7296330 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/setup.py @@ -0,0 +1,42 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import setuptools + +try: + with open("README.md", "r") as fh: + long_description = fh.read() +except FileNotFoundError: + long_description = "" + +setuptools.setup( + name="codat-sync-for-expenses-version-1", + version="0.1.0", + author="Codat", + description="Push expenses to accounting platforms.", + long_description=long_description, + long_description_content_type="text/markdown", + packages=setuptools.find_packages(where="src"), + install_requires=[ + "certifi>=2022.12.7", + "charset-normalizer>=2.1.1", + "dataclasses-json>=0.5.12", + "idna>=3.3", + "jsonpath-python>=1.0.6 ", + "marshmallow>=3.17.1", + "marshmallow-enum>=1.5.1", + "mypy-extensions>=0.4.3", + "packaging>=21.3", + "pyparsing>=3.0.9", + "python-dateutil>=2.8.2", + "requests>=2.28.1", + "six>=1.16.0", + "typing-inspect>=0.8.0", + "typing_extensions>=4.3.0", + "urllib3>=1.26.12", + ], + extras_require={ + "dev":["pylint==2.16.2"] + }, + package_dir={'': 'src'}, + python_requires='>=3.9' +) diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/__init__.py new file mode 100755 index 000000000..e6c0deeb6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdk import * +from .sdkconfiguration import * diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/companies.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/companies.py new file mode 100755 index 000000000..21652e0bb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/companies.py @@ -0,0 +1,245 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class Companies: + r"""Create and manage your Codat companies.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def create_company(self, request: shared.CompanyRequestBody, retries: Optional[utils.RetryConfig] = None) -> operations.CreateCompanyResponse: + r"""Create company + Creates a new company that can be used to assign connections to. + + If forbidden characters (see `name` pattern) are present in the request, a company will be created with the forbidden characters removed. For example, `Company (Codat[1])` with be created as `Company Codat1`. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/companies' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) + res.company = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def delete_company(self, request: operations.DeleteCompanyRequest, retries: Optional[utils.RetryConfig] = None) -> operations.DeleteCompanyResponse: + r"""Delete a company + Permanently deletes a company, its connections and any cached data. This operation is irreversible. If the company ID does not exist an error is returned. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteCompanyRequest, base_url, '/companies/{companyId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('DELETE', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def get_company(self, request: operations.GetCompanyRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetCompanyResponse: + r"""Get company + Returns the company for a valid identifier. If the identifier is for a deleted company, a not found response is returned. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetCompanyRequest, base_url, '/companies/{companyId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) + res.company = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def list_companies(self, request: operations.ListCompaniesRequest, retries: Optional[utils.RetryConfig] = None) -> operations.ListCompaniesResponse: + r"""List companies + Returns a list of your companies. The company schema contains a list of [connections](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Connection) related to the company. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/companies' + headers = {} + query_params = utils.get_query_params(operations.ListCompaniesRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, params=query_params, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.ListCompaniesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Companies]) + res.companies = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def update_company(self, request: operations.UpdateCompanyRequest, retries: Optional[utils.RetryConfig] = None) -> operations.UpdateCompanyResponse: + r"""Update company + Updates both the name and description of the company. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateCompanyRequest, base_url, '/companies/{companyId}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "company_request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('PUT', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateCompanyResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Company]) + res.company = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/configuration.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/configuration.py new file mode 100755 index 000000000..bd05ddf8d --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/configuration.py @@ -0,0 +1,108 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class Configuration: + r"""Companies sync configuration.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def get_company_configuration(self, request: operations.GetCompanyConfigurationRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetCompanyConfigurationResponse: + r"""Get company configuration + Gets a companies expense sync configuration + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetCompanyConfigurationRequest, base_url, '/companies/{companyId}/sync/expenses/config', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetCompanyConfigurationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CompanyConfiguration]) + res.company_configuration = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def save_company_configuration(self, request: operations.SaveCompanyConfigurationRequest, retries: Optional[utils.RetryConfig] = None) -> operations.SaveCompanyConfigurationResponse: + r"""Set company configuration + Sets a companies expense sync configuration + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.SaveCompanyConfigurationRequest, base_url, '/companies/{companyId}/sync/expenses/config', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "company_configuration", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.SaveCompanyConfigurationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CompanyConfiguration]) + res.company_configuration = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/connections.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/connections.py new file mode 100755 index 000000000..0d0e37649 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/connections.py @@ -0,0 +1,291 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class Connections: + r"""Create and manage partner expense connection.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def create_connection(self, request: operations.CreateConnectionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.CreateConnectionResponse: + r"""Create connection + Creates a connection for the company by providing a valid `platformKey`. + + Use the [List Integrations](https://docs.codat.io/sync-for-expenses-v1-api#/operations/list-integrations) endpoint to access valid platform keys. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.CreateConnectionRequest, base_url, '/companies/{companyId}/connections', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) + res.connection = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def create_partner_expense_connection(self, request: operations.CreatePartnerExpenseConnectionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.CreatePartnerExpenseConnectionResponse: + r"""Create Partner Expense connection + Creates a Partner Expense data connection + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.CreatePartnerExpenseConnectionRequest, base_url, '/companies/{companyId}/sync/expenses/connections/partnerExpense', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreatePartnerExpenseConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) + res.connection = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def delete_connection(self, request: operations.DeleteConnectionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.DeleteConnectionResponse: + r"""Delete connection + Revoke and remove a connection from a company. + This operation is not reversible. The end user would need to reauthorize a new data connection if you wish to view new data for this company. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('DELETE', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def get_connection(self, request: operations.GetConnectionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetConnectionResponse: + r"""Get connection + Returns a specific connection for a company when valid identifiers are provided. If the identifiers are for a deleted company and/or connection, a not found response is returned. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) + res.connection = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def list_connections(self, request: operations.ListConnectionsRequest, retries: Optional[utils.RetryConfig] = None) -> operations.ListConnectionsResponse: + r"""List connections + List the connections for a company. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.ListConnectionsRequest, base_url, '/companies/{companyId}/connections', request) + headers = {} + query_params = utils.get_query_params(operations.ListConnectionsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, params=query_params, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.ListConnectionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Connections]) + res.connections = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def unlink(self, request: operations.UnlinkConnectionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.UnlinkConnectionResponse: + r"""Unlink connection + This allows you to deauthorize a connection, without deleting it from Codat. This means you can still view any data that has previously been pulled into Codat, and also lets you re-authorize in future if your customer wishes to resume sharing their data. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UnlinkConnectionRequest, base_url, '/companies/{companyId}/connections/{connectionId}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('PATCH', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.UnlinkConnectionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Connection]) + res.connection = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/expenses.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/expenses.py new file mode 100755 index 000000000..93d6f87a6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/expenses.py @@ -0,0 +1,159 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class Expenses: + r"""Create expense datasets and upload receipts.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def create_expense_dataset(self, request: operations.CreateExpenseDatasetRequest, retries: Optional[utils.RetryConfig] = None) -> operations.CreateExpenseDatasetResponse: + r"""Create expense-transactions + Create an expense transaction + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.CreateExpenseDatasetRequest, base_url, '/companies/{companyId}/sync/expenses/data/expense-transactions', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "create_expense_request", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreateExpenseDatasetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CreateExpenseResponse]) + res.create_expense_response = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def update_expense_dataset(self, request: operations.UpdateExpenseDatasetRequest, retries: Optional[utils.RetryConfig] = None) -> operations.UpdateExpenseDatasetResponse: + r"""Update expense-transactions + Update an expense transaction + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdateExpenseDatasetRequest, base_url, '/companies/{companyId}/sync/expenses/expense-transactions/{transactionId}', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "update_expense_request", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('PUT', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdateExpenseDatasetResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 202: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.UpdateExpenseDataset202ApplicationJSON]) + res.update_expense_dataset_202_application_json_object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 422, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def upload_attachment(self, request: operations.UploadAttachmentRequest, retries: Optional[utils.RetryConfig] = None) -> operations.UploadAttachmentResponse: + r"""Upload attachment + Creates an attachment in the accounting software against the given transactionId + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UploadAttachmentRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/{syncId}/transactions/{transactionId}/attachments', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "request_body", 'multipart') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.UploadAttachmentResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.Attachment]) + res.attachment = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/mapping_options.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/mapping_options.py new file mode 100755 index 000000000..89d91994f --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/mapping_options.py @@ -0,0 +1,60 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class MappingOptions: + r"""Mapping options for a companies expenses.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def get_mapping_options(self, request: operations.GetMappingOptionsRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetMappingOptionsResponse: + r"""Mapping options + Gets the expense mapping options for a companies accounting software + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetMappingOptionsRequest, base_url, '/companies/{companyId}/sync/expenses/mappingOptions', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMappingOptionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.MappingOptions]) + res.mapping_options = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/__init__.py new file mode 100755 index 000000000..889f8adcf --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/__init__.py @@ -0,0 +1,2 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/__init__.py new file mode 100755 index 000000000..cfd848441 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkerror import SDKError +__all__ = ["SDKError"] diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/sdkerror.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/sdkerror.py new file mode 100755 index 000000000..6bb02bbd6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/errors/sdkerror.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http + + +class SDKError(Exception): + """Represents an error returned by the API.""" + message: str + status_code: int + body: str + raw_response: requests_http.Response + + def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response): + self.message = message + self.status_code = status_code + self.body = body + self.raw_response = raw_response + + def __str__(self): + body = '' + if len(self.body) > 0: + body = f'\n{self.body}' + + return f'{self.message}: Status {self.status_code}{body}' diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/__init__.py new file mode 100755 index 000000000..e5d9c7e0c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/__init__.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .create_company import * +from .create_connection import * +from .create_expense_dataset import * +from .create_partner_expense_connection import * +from .delete_company import * +from .delete_connection import * +from .get_company import * +from .get_company_configuration import * +from .get_connection import * +from .get_last_successful_sync import * +from .get_latest_sync import * +from .get_mapping_options import * +from .get_sync_by_id import * +from .get_sync_transaction import * +from .intiate_sync import * +from .list_companies import * +from .list_connections import * +from .list_sync_transactions import * +from .list_syncs import * +from .save_company_configuration import * +from .unlink_connection import * +from .update_company import * +from .update_expense_dataset import * +from .upload_attachment import * + +__all__ = ["CreateCompanyResponse","CreateConnectionRequest","CreateConnectionRequestBody","CreateConnectionResponse","CreateExpenseDatasetRequest","CreateExpenseDatasetResponse","CreatePartnerExpenseConnectionRequest","CreatePartnerExpenseConnectionResponse","DeleteCompanyRequest","DeleteCompanyResponse","DeleteConnectionRequest","DeleteConnectionResponse","GetCompanyConfigurationRequest","GetCompanyConfigurationResponse","GetCompanyRequest","GetCompanyResponse","GetConnectionRequest","GetConnectionResponse","GetLastSuccessfulSyncRequest","GetLastSuccessfulSyncResponse","GetLatestSyncRequest","GetLatestSyncResponse","GetMappingOptionsRequest","GetMappingOptionsResponse","GetSyncByIDRequest","GetSyncByIDResponse","GetSyncTransactionRequest","GetSyncTransactionResponse","IntiateSyncRequest","IntiateSyncResponse","ListCompaniesRequest","ListCompaniesResponse","ListConnectionsRequest","ListConnectionsResponse","ListSyncTransactionsRequest","ListSyncTransactionsResponse","ListSyncsRequest","ListSyncsResponse","SaveCompanyConfigurationRequest","SaveCompanyConfigurationResponse","UnlinkConnectionRequest","UnlinkConnectionRequestBody","UnlinkConnectionResponse","UpdateCompanyRequest","UpdateCompanyResponse","UpdateExpenseDataset202ApplicationJSON","UpdateExpenseDatasetRequest","UpdateExpenseDatasetResponse","UploadAttachmentRequest","UploadAttachmentRequestBody","UploadAttachmentResponse"] diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_company.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_company.py new file mode 100755 index 000000000..a8a25afd3 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_company.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import company as shared_company +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class CreateCompanyResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company: Optional[shared_company.Company] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_connection.py new file mode 100755 index 000000000..bd14c20da --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_connection.py @@ -0,0 +1,42 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import connection as shared_connection +from ..shared import errormessage as shared_errormessage +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CreateConnectionRequestBody: + platform_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platformKey'), 'exclude': lambda f: f is None }}) + + + + + +@dataclasses.dataclass +class CreateConnectionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + request_body: Optional[CreateConnectionRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class CreateConnectionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + connection: Optional[shared_connection.Connection] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_expense_dataset.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_expense_dataset.py new file mode 100755 index 000000000..d6a623d54 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_expense_dataset.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import createexpenserequest as shared_createexpenserequest +from ..shared import createexpenseresponse as shared_createexpenseresponse +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class CreateExpenseDatasetRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + create_expense_request: Optional[shared_createexpenserequest.CreateExpenseRequest] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class CreateExpenseDatasetResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + create_expense_response: Optional[shared_createexpenseresponse.CreateExpenseResponse] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_partner_expense_connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_partner_expense_connection.py new file mode 100755 index 000000000..19edd9eb6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/create_partner_expense_connection.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import connection as shared_connection +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class CreatePartnerExpenseConnectionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class CreatePartnerExpenseConnectionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + connection: Optional[shared_connection.Connection] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_company.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_company.py new file mode 100755 index 000000000..b5e6a5b86 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_company.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class DeleteCompanyRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class DeleteCompanyResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_connection.py new file mode 100755 index 000000000..e12219d11 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/delete_connection.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class DeleteConnectionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class DeleteConnectionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company.py new file mode 100755 index 000000000..b9881123d --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import company as shared_company +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetCompanyRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetCompanyResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company: Optional[shared_company.Company] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company_configuration.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company_configuration.py new file mode 100755 index 000000000..21423d2d8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_company_configuration.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companyconfiguration as shared_companyconfiguration +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetCompanyConfigurationRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetCompanyConfigurationResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_configuration: Optional[shared_companyconfiguration.CompanyConfiguration] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_connection.py new file mode 100755 index 000000000..af6188ccb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_connection.py @@ -0,0 +1,31 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import connection as shared_connection +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetConnectionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetConnectionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + connection: Optional[shared_connection.Connection] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_last_successful_sync.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_last_successful_sync.py new file mode 100755 index 000000000..033681e40 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_last_successful_sync.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companysyncstatus as shared_companysyncstatus +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetLastSuccessfulSyncRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetLastSuccessfulSyncResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_sync_status: Optional[shared_companysyncstatus.CompanySyncStatus] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_latest_sync.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_latest_sync.py new file mode 100755 index 000000000..598fe704c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_latest_sync.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companysyncstatus as shared_companysyncstatus +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetLatestSyncRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetLatestSyncResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_sync_status: Optional[shared_companysyncstatus.CompanySyncStatus] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_mapping_options.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_mapping_options.py new file mode 100755 index 000000000..0c0e42881 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_mapping_options.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from ..shared import mappingoptions as shared_mappingoptions +from typing import Optional + + + +@dataclasses.dataclass +class GetMappingOptionsRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class GetMappingOptionsResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + mapping_options: Optional[shared_mappingoptions.MappingOptions] = dataclasses.field(default=None) + r"""Success""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_by_id.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_by_id.py new file mode 100755 index 000000000..eafc89389 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_by_id.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companysyncstatus as shared_companysyncstatus +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class GetSyncByIDRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + sync_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'syncId', 'style': 'simple', 'explode': False }}) + r"""Unique identifier for a sync.""" + + + + + +@dataclasses.dataclass +class GetSyncByIDResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_sync_status: Optional[shared_companysyncstatus.CompanySyncStatus] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_transaction.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_transaction.py new file mode 100755 index 000000000..8245aa252 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/get_sync_transaction.py @@ -0,0 +1,34 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from ..shared import transactionmetadata as shared_transactionmetadata +from typing import Optional + + + +@dataclasses.dataclass +class GetSyncTransactionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + sync_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'syncId', 'style': 'simple', 'explode': False }}) + r"""Unique identifier for a sync.""" + transaction_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'transactionId', 'style': 'simple', 'explode': False }}) + r"""The unique identifier for your SMB's transaction.""" + + + + + +@dataclasses.dataclass +class GetSyncTransactionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + transaction_metadata: Optional[list[shared_transactionmetadata.TransactionMetadata]] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/intiate_sync.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/intiate_sync.py new file mode 100755 index 000000000..6d70c03b2 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/intiate_sync.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from ..shared import postsync as shared_postsync +from ..shared import syncinitiated as shared_syncinitiated +from typing import Optional + + + +@dataclasses.dataclass +class IntiateSyncRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + post_sync: Optional[shared_postsync.PostSync] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class IntiateSyncResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""If model is incorrect""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + sync_initiated: Optional[shared_syncinitiated.SyncInitiated] = dataclasses.field(default=None) + r"""Returns the newly created SyncId""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_companies.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_companies.py new file mode 100755 index 000000000..bef24c7d7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_companies.py @@ -0,0 +1,37 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companies as shared_companies +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class ListCompaniesRequest: + order_by: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'orderBy', 'style': 'form', 'explode': True }}) + r"""Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results).""" + page: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + r"""Page number. [Read more](https://docs.codat.io/using-the-api/paging).""" + page_size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + r"""Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).""" + query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + r"""Codat query string. [Read more](https://docs.codat.io/using-the-api/querying).""" + + + + + +@dataclasses.dataclass +class ListCompaniesResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + companies: Optional[shared_companies.Companies] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your `query` parameter was not correctly formed""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_connections.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_connections.py new file mode 100755 index 000000000..a8f988177 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_connections.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import connections as shared_connections +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class ListConnectionsRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + order_by: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'orderBy', 'style': 'form', 'explode': True }}) + r"""Field to order results by. [Read more](https://docs.codat.io/using-the-api/ordering-results).""" + page: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + r"""Page number. [Read more](https://docs.codat.io/using-the-api/paging).""" + page_size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + r"""Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).""" + query: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + r"""Codat query string. [Read more](https://docs.codat.io/using-the-api/querying).""" + + + + + +@dataclasses.dataclass +class ListConnectionsResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + connections: Optional[shared_connections.Connections] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your `query` parameter was not correctly formed""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_sync_transactions.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_sync_transactions.py new file mode 100755 index 000000000..61ccfb210 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_sync_transactions.py @@ -0,0 +1,36 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from ..shared import transactionmetadatalist as shared_transactionmetadatalist +from typing import Optional + + + +@dataclasses.dataclass +class ListSyncTransactionsRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + sync_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'syncId', 'style': 'simple', 'explode': False }}) + r"""Unique identifier for a sync.""" + page: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'page', 'style': 'form', 'explode': True }}) + r"""Page number. [Read more](https://docs.codat.io/using-the-api/paging).""" + page_size: Optional[int] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'pageSize', 'style': 'form', 'explode': True }}) + r"""Number of records to return in a page. [Read more](https://docs.codat.io/using-the-api/paging).""" + + + + + +@dataclasses.dataclass +class ListSyncTransactionsResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + transaction_metadata_list: Optional[shared_transactionmetadatalist.TransactionMetadataList] = dataclasses.field(default=None) + r"""Success""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_syncs.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_syncs.py new file mode 100755 index 000000000..29fdc0b22 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/list_syncs.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companysyncstatus as shared_companysyncstatus +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class ListSyncsRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + + + + + +@dataclasses.dataclass +class ListSyncsResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_sync_statuses: Optional[list[shared_companysyncstatus.CompanySyncStatus]] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/save_company_configuration.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/save_company_configuration.py new file mode 100755 index 000000000..e823a3ce8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/save_company_configuration.py @@ -0,0 +1,31 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import companyconfiguration as shared_companyconfiguration +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class SaveCompanyConfigurationRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + company_configuration: Optional[shared_companyconfiguration.CompanyConfiguration] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class SaveCompanyConfigurationResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company_configuration: Optional[shared_companyconfiguration.CompanyConfiguration] = dataclasses.field(default=None) + r"""Success""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/unlink_connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/unlink_connection.py new file mode 100755 index 000000000..d219916fb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/unlink_connection.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import connection as shared_connection +from ..shared import errormessage as shared_errormessage +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UnlinkConnectionRequestBody: + status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + + +@dataclasses.dataclass +class UnlinkConnectionRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + connection_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'connectionId', 'style': 'simple', 'explode': False }}) + request_body: Optional[UnlinkConnectionRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class UnlinkConnectionResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + connection: Optional[shared_connection.Connection] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_company.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_company.py new file mode 100755 index 000000000..22578dcd0 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_company.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import company as shared_company +from ..shared import companyrequestbody as shared_companyrequestbody +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class UpdateCompanyRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + company_request_body: Optional[shared_companyrequestbody.CompanyRequestBody] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + + +@dataclasses.dataclass +class UpdateCompanyResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + company: Optional[shared_company.Company] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""Your API request was not properly authorized.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_expense_dataset.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_expense_dataset.py new file mode 100755 index 000000000..e8419e9a5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/update_expense_dataset.py @@ -0,0 +1,45 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import errormessage as shared_errormessage +from ..shared import updateexpenserequest as shared_updateexpenserequest +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + + +@dataclasses.dataclass +class UpdateExpenseDatasetRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + transaction_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'transactionId', 'style': 'simple', 'explode': False }}) + r"""The unique identifier for your SMB's transaction.""" + update_expense_request: Optional[shared_updateexpenserequest.UpdateExpenseRequest] = dataclasses.field(default=None, metadata={'request': { 'media_type': 'application/json' }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UpdateExpenseDataset202ApplicationJSON: + r"""Accepted""" + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + + + + + +@dataclasses.dataclass +class UpdateExpenseDatasetResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + update_expense_dataset_202_application_json_object: Optional[UpdateExpenseDataset202ApplicationJSON] = dataclasses.field(default=None) + r"""Accepted""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/upload_attachment.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/upload_attachment.py new file mode 100755 index 000000000..42c2303cc --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/operations/upload_attachment.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from ..shared import attachment as shared_attachment +from ..shared import errormessage as shared_errormessage +from typing import Optional + + + +@dataclasses.dataclass +class UploadAttachmentRequestBody: + content: bytes = dataclasses.field(metadata={'multipart_form': { 'content': True }}) + request_body: str = dataclasses.field(metadata={'multipart_form': { 'field_name': 'requestBody' }}) + + + + + +@dataclasses.dataclass +class UploadAttachmentRequest: + company_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'companyId', 'style': 'simple', 'explode': False }}) + sync_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'syncId', 'style': 'simple', 'explode': False }}) + r"""Unique identifier for a sync.""" + transaction_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'transactionId', 'style': 'simple', 'explode': False }}) + r"""The unique identifier for your SMB's transaction.""" + request_body: Optional[UploadAttachmentRequestBody] = dataclasses.field(default=None, metadata={'multipart_form': { 'file': True }, 'request': { 'media_type': 'multipart/form-data' }}) + + + + + +@dataclasses.dataclass +class UploadAttachmentResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + attachment: Optional[shared_attachment.Attachment] = dataclasses.field(default=None) + r"""OK""" + error_message: Optional[shared_errormessage.ErrorMessage] = dataclasses.field(default=None) + r"""The request made is not valid.""" + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/__init__.py new file mode 100755 index 000000000..e59708ca8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/__init__.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .accountmappinginfo import * +from .attachment import * +from .bankaccount import * +from .companies import * +from .company import * +from .companyconfiguration import * +from .companyrequestbody import * +from .companysyncstatus import * +from .connection import * +from .connections import * +from .contactref import * +from .createexpenserequest import * +from .createexpenseresponse import * +from .customer import * +from .dataconnectionerror import * +from .dataconnectionstatus import * +from .errormessage import * +from .expensetransaction import * +from .expensetransactionline import * +from .halref import * +from .integrationtype import * +from .links import * +from .mappingoptions import * +from .postsync import * +from .recordref import * +from .security import * +from .supplier import * +from .synccompletewebhook import * +from .syncfailedwebhook import * +from .syncinitiated import * +from .syncstartedwebhook import * +from .taxratemappinginfo import * +from .trackingcategorymappinginfo import * +from .transactionmetadata import * +from .transactionmetadatalist import * +from .transactionstatus import * +from .updateexpenserequest import * + +__all__ = ["AccountMappingInfo","AccountMappingInfoAccountType","AccountMappingInfoValidTransactionTypes","Attachment","BankAccount","Companies","Company","CompanyConfiguration","CompanyRequestBody","CompanySyncStatus","Connection","ConnectionSourceType","Connections","ContactRef","ContactRefContactType","CreateExpenseRequest","CreateExpenseResponse","Customer","DataConnectionError","DataConnectionStatus","ErrorMessage","ExpenseTransaction","ExpenseTransactionLine","ExpenseTransactionType","HalRef","IntegrationType","Links","MappingOptions","PostSync","RecordRef","Security","Supplier","SyncCompleteWebhook","SyncCompleteWebhookData","SyncFailedWebhook","SyncFailedWebhookData","SyncInitiated","SyncStartedWebhook","SyncStartedWebhookData","TaxRateMappingInfo","TaxRateMappingInfoValidTransactionTypes","TrackingCategoryMappingInfo","TransactionMetadata","TransactionMetadataList","TransactionStatus","UpdateExpenseRequest"] diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/accountmappinginfo.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/accountmappinginfo.py new file mode 100755 index 000000000..c8b62b2e2 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/accountmappinginfo.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + +class AccountMappingInfoAccountType(str, Enum): + r"""Type of the account.""" + ASSET = 'Asset' + LIABILITY = 'Liability' + INCOME = 'Income' + EXPENSE = 'Expense' + EQUITY = 'Equity' + +class AccountMappingInfoValidTransactionTypes(str, Enum): + PAYMENT = 'Payment' + REFUND = 'Refund' + REWARD = 'Reward' + CHARGEBACK = 'Chargeback' + TRANSFER_IN = 'TransferIn' + TRANSFER_OUT = 'TransferOut' + ADJUSTMENT_IN = 'AdjustmentIn' + ADJUSTMENT_OUT = 'AdjustmentOut' + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class AccountMappingInfo: + account_type: Optional[AccountMappingInfoAccountType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountType'), 'exclude': lambda f: f is None }}) + r"""Type of the account.""" + currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) + r"""Currency of the account.""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of account.""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the account as it appears in the companies accounting software.""" + valid_transaction_types: Optional[list[AccountMappingInfoValidTransactionTypes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validTransactionTypes'), 'exclude': lambda f: f is None }}) + r"""Supported transaction types for the account.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/attachment.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/attachment.py new file mode 100755 index 000000000..07bd3dbbd --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/attachment.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Attachment: + r"""OK""" + company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is None }}) + r"""Unique ID of company in Codat""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of attachment""" + transaction_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactionId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of transaction""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/bankaccount.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/bankaccount.py new file mode 100755 index 000000000..a5261ca91 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/bankaccount.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class BankAccount: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""The id of the account from which purchases are made""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companies.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companies.py new file mode 100755 index 000000000..54fd2cd68 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companies.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import company as shared_company +from ..shared import links as shared_links +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Companies: + r"""OK""" + links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) + page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) + page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) + total_results: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalResults') }}) + results: Optional[list[shared_company.Company]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/company.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/company.py new file mode 100755 index 000000000..25a10c225 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/company.py @@ -0,0 +1,76 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import connection as shared_connection +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Company: + r"""In Codat, a company represents a business sharing access to their data. Each company can have multiple [connections](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Connection) to different data sources such as one connection to [Xero](https://docs.codat.io/integrations/accounting/xero/accounting-xero) for accounting data, two connections to [Plaid](https://docs.codat.io/integrations/banking/plaid/banking-plaid) for two bank accounts and a connection to [Zettle](https://docs.codat.io/integrations/commerce/zettle/commerce-zettle) for POS data. + + Typically each company is one of your customers. + + When you create a company, you can specify a `name` and we will automatically generate a unique `id` for the company. You can also add a `description` to store any additional information about the company. + """ + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + r"""Unique identifier for your SMB in Codat.""" + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + r"""The name of the company""" + redirect: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('redirect') }}) + r"""The `redirect` [Link URL](https://docs.codat.io/auth-flow/authorize-hosted-link) enabling the customer to start their auth flow journey for the company.""" + created: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + created_by_user_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdByUserName'), 'exclude': lambda f: f is None }}) + data_connections: Optional[list[shared_connection.Connection]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnections'), 'exclude': lambda f: f is None }}) + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + r"""Additional information about the company. This can be used to store foreign IDs, references, etc.""" + last_sync: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSync'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + platform: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platform'), 'exclude': lambda f: f is None }}) + r"""Deprecated field: This will be removed in a future release, please migrate away from it as soon as possible.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyconfiguration.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyconfiguration.py new file mode 100755 index 000000000..83f10996c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyconfiguration.py @@ -0,0 +1,21 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import bankaccount as shared_bankaccount +from ..shared import customer as shared_customer +from ..shared import supplier as shared_supplier +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CompanyConfiguration: + r"""Success""" + bank_account: shared_bankaccount.BankAccount = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bankAccount') }}) + customer: shared_customer.Customer = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('customer') }}) + supplier: shared_supplier.Supplier = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('supplier') }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyrequestbody.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyrequestbody.py new file mode 100755 index 000000000..cdc393cd6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companyrequestbody.py @@ -0,0 +1,19 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CompanyRequestBody: + name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name') }}) + r"""Name of company being connected.""" + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + r"""Additional information about the company. This can be used to store foreign IDs, references, etc.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companysyncstatus.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companysyncstatus.py new file mode 100755 index 000000000..c48f4fe71 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/companysyncstatus.py @@ -0,0 +1,51 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CompanySyncStatus: + r"""Success""" + company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companyId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your SMB in Codat.""" + data_pushed: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataPushed'), 'exclude': lambda f: f is None }}) + r"""Boolean of whether the sync resulted in data being pushed.""" + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + r"""Error message of the sync.""" + sync_exception_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncExceptionMessage'), 'exclude': lambda f: f is None }}) + r"""Exception message of the sync.""" + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of the sync.""" + sync_status: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncStatus'), 'exclude': lambda f: f is None }}) + r"""Text status of the sync.""" + sync_status_code: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncStatusCode'), 'exclude': lambda f: f is None }}) + r"""Status code of the sync.""" + sync_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connection.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connection.py new file mode 100755 index 000000000..ac8d97fe8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connection.py @@ -0,0 +1,96 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import dataconnectionerror as shared_dataconnectionerror +from ..shared import dataconnectionstatus as shared_dataconnectionstatus +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Any, Optional + +class ConnectionSourceType(str, Enum): + r"""The type of platform of the connection.""" + ACCOUNTING = 'Accounting' + BANKING = 'Banking' + COMMERCE = 'Commerce' + OTHER = 'Other' + UNKNOWN = 'Unknown' + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Connection: + r"""A connection represents a [company's](https://docs.codat.io/sync-for-expenses-v1-api#/schemas/Company) connection to a data source and allows you to synchronize data (pull and/or push) with that source. + + A company can have multiple data connections depending on the type of data source it is connecting to. For example, a single company can link to: + + - [Accounting data](https://docs.codat.io/accounting-api/overview) - 1 active connection. + - [Banking data](https://docs.codat.io/banking-api/overview) - Multiple active connections. + - [Commerce data](https://docs.codat.io/commerce-api/overview) - Multiple active connections. + Any combination of accounting, banking, and commerce data connections is allowed. + + Before you can use a data connection to pull or push data, the company must grant you access to their business data by [linking the connection](https://docs.codat.io/auth-flow/overview). + """ + created: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('created') }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + r"""Unique identifier for a company's data connection.""" + integration_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('integrationId') }}) + r"""A Codat ID representing the integration.""" + integration_key: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('integrationKey') }}) + r"""A unique four-character ID that identifies the platform of the company's data connection. This ensures continuity if the platform changes its name in the future.""" + link_url: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('linkUrl') }}) + platform_name: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platformName') }}) + source_id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceId') }}) + r"""A source-specific ID used to distinguish between different sources originating from the same data connection. In general, a data connection is a single data source. However, for TrueLayer, `sourceId` is associated with a specific bank and has a many-to-one relationship with the `integrationId`.""" + source_type: ConnectionSourceType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceType') }}) + r"""The type of platform of the connection.""" + status: shared_dataconnectionstatus.DataConnectionStatus = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status') }}) + r"""The current authorization status of the data connection.""" + additional_properties: Optional[Any] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('additionalProperties'), 'exclude': lambda f: f is None }}) + connection_info: Optional[dict[str, str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('connectionInfo'), 'exclude': lambda f: f is None }}) + data_connection_errors: Optional[list[shared_dataconnectionerror.DataConnectionError]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('dataConnectionErrors'), 'exclude': lambda f: f is None }}) + last_sync: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastSync'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connections.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connections.py new file mode 100755 index 000000000..e7988ab73 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/connections.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import connection as shared_connection +from ..shared import links as shared_links +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Connections: + r"""OK""" + links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) + page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) + page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) + total_results: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalResults') }}) + results: Optional[list[shared_connection.Connection]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/contactref.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/contactref.py new file mode 100755 index 000000000..7f0ac3ad1 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/contactref.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + +class ContactRefContactType(str, Enum): + r"""The type of contact.""" + SUPPLIER = 'Supplier' + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ContactRef: + contact_type: Optional[ContactRefContactType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactType'), 'exclude': lambda f: f is None }}) + r"""The type of contact.""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Identifier of supplier or customer.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenserequest.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenserequest.py new file mode 100755 index 000000000..2fb2d1c75 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenserequest.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import expensetransaction as shared_expensetransaction +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CreateExpenseRequest: + items: Optional[list[shared_expensetransaction.ExpenseTransaction]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('items'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenseresponse.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenseresponse.py new file mode 100755 index 000000000..828e91391 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/createexpenseresponse.py @@ -0,0 +1,18 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CreateExpenseResponse: + r"""OK""" + dataset_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('datasetId'), 'exclude': lambda f: f is None }}) + r"""Unique id of dataset created""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/customer.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/customer.py new file mode 100755 index 000000000..e4324bb86 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/customer.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Customer: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""id of the customer for all income related activities to be associated to.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionerror.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionerror.py new file mode 100755 index 000000000..eec7600d2 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionerror.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class DataConnectionError: + errored_on_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('erroredOnUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + error_message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errorMessage'), 'exclude': lambda f: f is None }}) + status_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('statusCode'), 'exclude': lambda f: f is None }}) + status_text: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('statusText'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionstatus.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionstatus.py new file mode 100755 index 000000000..377013d42 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/dataconnectionstatus.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + +class DataConnectionStatus(str, Enum): + r"""The current authorization status of the data connection.""" + PENDING_AUTH = 'PendingAuth' + LINKED = 'Linked' + UNLINKED = 'Unlinked' + DEAUTHORIZED = 'Deauthorized' diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/errormessage.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/errormessage.py new file mode 100755 index 000000000..8b3e8624c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/errormessage.py @@ -0,0 +1,22 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ErrorMessage: + r"""Your `query` parameter was not correctly formed""" + can_be_retried: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('canBeRetried'), 'exclude': lambda f: f is None }}) + correlation_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('correlationId'), 'exclude': lambda f: f is None }}) + detailed_error_code: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('detailedErrorCode'), 'exclude': lambda f: f is None }}) + error: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error'), 'exclude': lambda f: f is None }}) + service: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('service'), 'exclude': lambda f: f is None }}) + status_code: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('statusCode'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransaction.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransaction.py new file mode 100755 index 000000000..bddbfa5f5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransaction.py @@ -0,0 +1,90 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import contactref as shared_contactref +from ..shared import expensetransactionline as shared_expensetransactionline +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + +class ExpenseTransactionType(str, Enum): + r"""The type of transaction.""" + PAYMENT = 'Payment' + REFUND = 'Refund' + REWARD = 'Reward' + CHARGEBACK = 'Chargeback' + TRANSFER_IN = 'TransferIn' + TRANSFER_OUT = 'TransferOut' + ADJUSTMENT_IN = 'AdjustmentIn' + ADJUSTMENT_OUT = 'AdjustmentOut' + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ExpenseTransaction: + currency: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency') }}) + r"""Currency the transaction was recorded in.""" + id: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id') }}) + r"""Your unique identifier for the transaction.""" + issue_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('issueDate') }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + type: ExpenseTransactionType = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + r"""The type of transaction.""" + contact_ref: Optional[shared_contactref.ContactRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactRef'), 'exclude': lambda f: f is None }}) + currency_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'exclude': lambda f: f is None }}) + r"""Rate to convert the total amount of the payment into the base currency for the company at the time of the payment. + + Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit. + + It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR. + + Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places). + + For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places. + + ## Examples with base currency of GBP + + | Foreign Currency | Foreign Amount | Currency Rate | Base Currency Amount (GBP) | + | :--------------- | :------------- | :------------ | :------------------------- | + | **USD** | $20 | 0.781 | £15.62 | + | **EUR** | €20 | 0.885 | £17.70 | + | **RUB** | ₽20 | 0.011 | £0.22 | + + ## Examples with base currency of USD + + | Foreign Currency | Foreign Amount | Currency Rate | Base Currency Amount (USD) | + | :--------------- | :------------- | :------------ | :------------------------- | + | **GBP** | £20 | 1.277 | $25.54 | + | **EUR** | €20 | 1.134 | $22.68 | + | **RUB** | ₽20 | 0.015 | $0.30 | + """ + lines: Optional[list[shared_expensetransactionline.ExpenseTransactionLine]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lines'), 'exclude': lambda f: f is None }}) + r"""Array of transaction lines.""" + merchant_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('merchantName'), 'exclude': lambda f: f is None }}) + r"""Name of the merchant where the purchase took place""" + notes: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('notes'), 'exclude': lambda f: f is None }}) + r"""Any private, company notes about the transaction.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransactionline.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransactionline.py new file mode 100755 index 000000000..e59c2f1e3 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/expensetransactionline.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import recordref as shared_recordref +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ExpenseTransactionLine: + account_ref: shared_recordref.RecordRef = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountRef') }}) + net_amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('netAmount') }}) + r"""Amount of the line, exclusive of tax.""" + tax_amount: float = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxAmount') }}) + r"""Amount of tax for the line.""" + tax_rate_ref: Optional[shared_recordref.RecordRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxRateRef'), 'exclude': lambda f: f is None }}) + tracking_refs: Optional[list[shared_recordref.RecordRef]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('trackingRefs'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/halref.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/halref.py new file mode 100755 index 000000000..762bd1a09 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/halref.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class HalRef: + href: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('href'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/integrationtype.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/integrationtype.py new file mode 100755 index 000000000..bb8db2b2c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/integrationtype.py @@ -0,0 +1,9 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + +class IntegrationType(str, Enum): + r"""Type of transaction that has been processed e.g. Expense or Bank Feed.""" + EXPENSES = 'expenses' + BANKFEEDS = 'bankfeeds' diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/links.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/links.py new file mode 100755 index 000000000..2d8fff4f8 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/links.py @@ -0,0 +1,20 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import halref as shared_halref +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Links: + current: shared_halref.HalRef = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('current') }}) + self_: shared_halref.HalRef = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('self') }}) + next: Optional[shared_halref.HalRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('next'), 'exclude': lambda f: f is None }}) + previous: Optional[shared_halref.HalRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('previous'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/mappingoptions.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/mappingoptions.py new file mode 100755 index 000000000..61717aeb6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/mappingoptions.py @@ -0,0 +1,27 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import accountmappinginfo as shared_accountmappinginfo +from ..shared import taxratemappinginfo as shared_taxratemappinginfo +from ..shared import trackingcategorymappinginfo as shared_trackingcategorymappinginfo +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class MappingOptions: + r"""Success""" + accounts: Optional[list[shared_accountmappinginfo.AccountMappingInfo]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accounts'), 'exclude': lambda f: f is None }}) + r"""Array of available accounts for mapping.""" + expense_provider: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expenseProvider'), 'exclude': lambda f: f is None }}) + r"""Name of the expense integration.""" + tax_rates: Optional[list[shared_taxratemappinginfo.TaxRateMappingInfo]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('taxRates'), 'exclude': lambda f: f is None }}) + r"""Array of available tax rates for mapping.""" + tracking_categories: Optional[list[shared_trackingcategorymappinginfo.TrackingCategoryMappingInfo]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('trackingCategories'), 'exclude': lambda f: f is None }}) + r"""Array of available tracking categories for mapping.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/postsync.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/postsync.py new file mode 100755 index 000000000..6f28c5ecb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/postsync.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PostSync: + dataset_ids: Optional[list[str]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('datasetIds'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/recordref.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/recordref.py new file mode 100755 index 000000000..b08641300 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/recordref.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class RecordRef: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""identifier of linked reference from mapping options.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/security.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/security.py new file mode 100755 index 000000000..a72246378 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/security.py @@ -0,0 +1,12 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + + +@dataclasses.dataclass +class Security: + auth_header: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'Authorization' }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/supplier.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/supplier.py new file mode 100755 index 000000000..5537da005 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/supplier.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class Supplier: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""id of the supplier for all purchases to be associated to""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/synccompletewebhook.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/synccompletewebhook.py new file mode 100755 index 000000000..aaaba043e --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/synccompletewebhook.py @@ -0,0 +1,84 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncCompleteWebhookData: + sync_date_range_finish_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeFinishUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_date_range_start_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeStartUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + sync_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncType'), 'exclude': lambda f: f is None }}) + r"""The type of sync being performed.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncCompleteWebhook: + r"""Webhook request body used to notify that a sync has completed.""" + alert_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('AlertId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of the webhook event.""" + client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your client in Codat.""" + client_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientName'), 'exclude': lambda f: f is None }}) + r"""Name of your client in Codat.""" + company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('CompanyId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your SMB in Codat.""" + data: Optional[SyncCompleteWebhookData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Data'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) + r"""A human readable message about the webhook.""" + rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for the rule.""" + rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) + r"""The type of rule.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncfailedwebhook.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncfailedwebhook.py new file mode 100755 index 000000000..5a63fb499 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncfailedwebhook.py @@ -0,0 +1,86 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncFailedWebhookData: + failure_stage: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('FailureStage'), 'exclude': lambda f: f is None }}) + r"""The stage of the job the sync failed.""" + sync_date_range_finish_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeFinishUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_date_range_start_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeStartUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + sync_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncType'), 'exclude': lambda f: f is None }}) + r"""The type of sync being performed.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncFailedWebhook: + r"""Webhook request body used to notify that a sync has failed.""" + alert_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('AlertId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of the webhook event.""" + client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your client in Codat.""" + client_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientName'), 'exclude': lambda f: f is None }}) + r"""Name of your client in Codat.""" + company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('CompanyId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your SMB in Codat.""" + data: Optional[SyncFailedWebhookData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Data'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) + r"""A human readable message about the webhook.""" + rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for the rule.""" + rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) + r"""The type of rule.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncinitiated.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncinitiated.py new file mode 100755 index 000000000..fff030d65 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncinitiated.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncInitiated: + r"""Returns the newly created SyncId""" + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncstartedwebhook.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncstartedwebhook.py new file mode 100755 index 000000000..802ed4159 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/syncstartedwebhook.py @@ -0,0 +1,84 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncStartedWebhookData: + sync_date_range_finish_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeFinishUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_date_range_start_utc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('SyncDateRangeStartUtc'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + sync_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncId'), 'exclude': lambda f: f is None }}) + sync_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('syncType'), 'exclude': lambda f: f is None }}) + r"""The type of sync being performed.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class SyncStartedWebhook: + r"""Webhook request body used to notify that a sync has started.""" + alert_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('AlertId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of the webhook event.""" + client_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your client in Codat.""" + client_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ClientName'), 'exclude': lambda f: f is None }}) + r"""Name of your client in Codat.""" + company_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('CompanyId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for your SMB in Codat.""" + data: Optional[SyncStartedWebhookData] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Data'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Message'), 'exclude': lambda f: f is None }}) + r"""A human readable message about the webhook.""" + rule_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleId'), 'exclude': lambda f: f is None }}) + r"""Unique identifier for the rule.""" + rule_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('RuleType'), 'exclude': lambda f: f is None }}) + r"""The type of rule.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/taxratemappinginfo.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/taxratemappinginfo.py new file mode 100755 index 000000000..aae649e63 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/taxratemappinginfo.py @@ -0,0 +1,38 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from typing import Optional + +class TaxRateMappingInfoValidTransactionTypes(str, Enum): + PAYMENT = 'Payment' + REFUND = 'Refund' + REWARD = 'Reward' + CHARGEBACK = 'Chargeback' + TRANSFER_IN = 'TransferIn' + TRANSFER_OUT = 'TransferOut' + ADJUSTMENT_IN = 'AdjustmentIn' + ADJUSTMENT_OUT = 'AdjustmentOut' + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class TaxRateMappingInfo: + code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + r"""Code for the tax rate from the accounting platform.""" + effective_tax_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('effectiveTaxRate'), 'exclude': lambda f: f is None }}) + r"""Effective tax rate.""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of tax rate.""" + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the tax rate in the accounting platform.""" + total_tax_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalTaxRate'), 'exclude': lambda f: f is None }}) + r"""Total (not compounded) sum of the components of a tax rate.""" + valid_transaction_types: Optional[list[TaxRateMappingInfoValidTransactionTypes]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('validTransactionTypes'), 'exclude': lambda f: f is None }}) + r"""Supported transaction types for the account.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/trackingcategorymappinginfo.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/trackingcategorymappinginfo.py new file mode 100755 index 000000000..d1f63852b --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/trackingcategorymappinginfo.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class TrackingCategoryMappingInfo: + has_children: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasChildren'), 'exclude': lambda f: f is None }}) + r"""Boolean of whether the tracking category has child categories.""" + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""Unique identifier of the tracking category.""" + modified_date: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('modifiedDate'), 'exclude': lambda f: f is None }}) + r"""In Codat's data model, dates and times are represented using the ISO 8601 standard. Date and time fields are formatted as strings; for example: + + ``` + 2020-10-08T22:40:50Z + 2021-01-01T00:00:00 + ``` + + + + When syncing data that contains `DateTime` fields from Codat, make sure you support the following cases when reading time information: + + - Coordinated Universal Time (UTC): `2021-11-15T06:00:00Z` + - Unqualified local time: `2021-11-15T01:00:00` + - UTC time offsets: `2021-11-15T01:00:00-05:00` + + > Time zones + > + > Not all dates from Codat will contain information about time zones. + > Where it is not available from the underlying platform, Codat will return these as times local to the business whose data has been synced. + """ + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + r"""Name of the tracking category as it appears in the accounting software.""" + parent_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentId'), 'exclude': lambda f: f is None }}) + r"""ID of the parent tracking category""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadata.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadata.py new file mode 100755 index 000000000..fc1270935 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadata.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import integrationtype as shared_integrationtype +from ..shared import transactionstatus as shared_transactionstatus +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class TransactionMetadata: + integration_type: Optional[shared_integrationtype.IntegrationType] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('integrationType'), 'exclude': lambda f: f is None }}) + r"""Type of transaction that has been processed e.g. Expense or Bank Feed.""" + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + r"""Metadata such as validation errors or the resulting record created in the accounting software.""" + status: Optional[shared_transactionstatus.TransactionStatus] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + r"""Status of the transaction.""" + transaction_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transactionId'), 'exclude': lambda f: f is None }}) + r"""Your unique idenfier of the transaction.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadatalist.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadatalist.py new file mode 100755 index 000000000..38994a789 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionmetadatalist.py @@ -0,0 +1,23 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import links as shared_links +from ..shared import transactionmetadata as shared_transactionmetadata +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class TransactionMetadataList: + r"""Success""" + links: shared_links.Links = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('_links') }}) + page_number: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageNumber') }}) + page_size: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pageSize') }}) + total_results: int = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('totalResults') }}) + results: Optional[list[shared_transactionmetadata.TransactionMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('results'), 'exclude': lambda f: f is None }}) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionstatus.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionstatus.py new file mode 100755 index 000000000..97f4a2f26 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/transactionstatus.py @@ -0,0 +1,12 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +from enum import Enum + +class TransactionStatus(str, Enum): + r"""Status of the transaction.""" + UNKNOWN = 'Unknown' + PENDING = 'Pending' + VALIDATION_ERROR = 'ValidationError' + COMPLETED = 'Completed' + PUSH_ERROR = 'PushError' diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/updateexpenserequest.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/updateexpenserequest.py new file mode 100755 index 000000000..43ba8780a --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/shared/updateexpenserequest.py @@ -0,0 +1,56 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +from ..shared import contactref as shared_contactref +from ..shared import expensetransactionline as shared_expensetransactionline +from codatsyncexpenses import utils +from dataclasses_json import Undefined, dataclass_json +from typing import Any, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UpdateExpenseRequest: + issue_date: str = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('issueDate') }}) + r"""Date the transaction was recorded.""" + type: Any = dataclasses.field(metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type') }}) + contact_ref: Optional[shared_contactref.ContactRef] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contactRef'), 'exclude': lambda f: f is None }}) + currency: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currency'), 'exclude': lambda f: f is None }}) + r"""Currency the transaction was recorded in.""" + currency_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('currencyRate'), 'exclude': lambda f: f is None }}) + r"""Rate to convert the total amount of the payment into the base currency for the company at the time of the payment. + + Currency rates in Codat are implemented as the multiple of foreign currency units to each base currency unit. + + It is not possible to perform the currency conversion with two or more non-base currencies participating in the transaction. For example, if a company's base currency is USD, and it has a bill issued in EUR, then the bill payment must happen in USD or EUR. + + Where the currency rate is provided by the underlying accounting platform, it will be available from Codat with the same precision (up to a maximum of 9 decimal places). + + For accounting platforms which do not provide an explicit currency rate, it is calculated as `baseCurrency / foreignCurrency` and will be returned to 9 decimal places. + + ## Examples with base currency of GBP + + | Foreign Currency | Foreign Amount | Currency Rate | Base Currency Amount (GBP) | + | :--------------- | :------------- | :------------ | :------------------------- | + | **USD** | $20 | 0.781 | £15.62 | + | **EUR** | €20 | 0.885 | £17.70 | + | **RUB** | ₽20 | 0.011 | £0.22 | + + ## Examples with base currency of USD + + | Foreign Currency | Foreign Amount | Currency Rate | Base Currency Amount (USD) | + | :--------------- | :------------- | :------------ | :------------------------- | + | **GBP** | £20 | 1.277 | $25.54 | + | **EUR** | €20 | 1.134 | $22.68 | + | **RUB** | ₽20 | 0.015 | $0.30 | + """ + lines: Optional[list[shared_expensetransactionline.ExpenseTransactionLine]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lines'), 'exclude': lambda f: f is None }}) + r"""Array of transaction lines.""" + merchant_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('merchantName'), 'exclude': lambda f: f is None }}) + r"""Name of the merchant where the purchase took place""" + notes: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('notes'), 'exclude': lambda f: f is None }}) + r"""Any private, company notes about the transaction.""" + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/__init__.py new file mode 100755 index 000000000..a9296338c --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/__init__.py @@ -0,0 +1,7 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sync_complete import * +from .sync_failed import * +from .sync_started import * + +__all__ = ["SyncCompleteResponse","SyncFailedResponse","SyncStartedResponse"] diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_complete.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_complete.py new file mode 100755 index 000000000..f396d61c7 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_complete.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + + +@dataclasses.dataclass +class SyncCompleteResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_failed.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_failed.py new file mode 100755 index 000000000..e43ccd28f --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_failed.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + + +@dataclasses.dataclass +class SyncFailedResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_started.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_started.py new file mode 100755 index 000000000..5815a03a5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/models/webhooks/sync_started.py @@ -0,0 +1,16 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + + +@dataclasses.dataclass +class SyncStartedResponse: + content_type: str = dataclasses.field() + status_code: int = dataclasses.field() + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None) + + diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdk.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdk.py new file mode 100755 index 000000000..7cc082f4f --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdk.py @@ -0,0 +1,90 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .companies import Companies +from .configuration import Configuration +from .connections import Connections +from .expenses import Expenses +from .mapping_options import MappingOptions +from .sdkconfiguration import SDKConfiguration +from .sync import Sync +from .sync_status import SyncStatus +from .transaction_status import TransactionStatus +from codatsyncexpenses import utils +from codatsyncexpenses.models import shared + +class CodatSyncExpenses: + r"""Sync for Expenses (v1): The API for Sync for Expenses. + + Sync for Expenses is an API and a set of supporting tools. It has been built to + enable corporate card and expense management platforms to provide high-quality + integrations with multiple accounting platforms through a standardized API. + + + [Read more...](https://docs.codat.io/sync-for-expenses/overview) + + + [See our OpenAPI spec](https://github.com/codatio/oas) + """ + companies: Companies + r"""Create and manage your Codat companies.""" + configuration: Configuration + r"""Companies sync configuration.""" + connections: Connections + r"""Create and manage partner expense connection.""" + expenses: Expenses + r"""Create expense datasets and upload receipts.""" + mapping_options: MappingOptions + r"""Mapping options for a companies expenses.""" + sync: Sync + r"""Triggering a new sync of expenses to accounting software.""" + sync_status: SyncStatus + r"""Check the status of ongoing or previous expense syncs.""" + transaction_status: TransactionStatus + r"""Retrieve the status of transactions within a sync.""" + + sdk_configuration: SDKConfiguration + + def __init__(self, + security: shared.Security = None, + server_idx: int = None, + server_url: str = None, + url_params: dict[str, str] = None, + client: requests_http.Session = None + ) -> None: + """Instantiates the SDK configuring it with the provided parameters. + + :param security: The security details required for authentication + :type security: shared.Security + :param server_idx: The index of the server to use for all operations + :type server_idx: int + :param server_url: The server URL to use for all operations + :type server_url: str + :param url_params: Parameters to optionally template the server URL with + :type url_params: dict[str, str] + :param client: The requests.Session HTTP client to use for all operations + :type client: requests_http.Session + """ + if client is None: + client = requests_http.Session() + + security_client = utils.configure_security_client(client, security) + + if server_url is not None: + if url_params is not None: + server_url = utils.template_url(server_url, url_params) + + self.sdk_configuration = SDKConfiguration(client, security_client, server_url, server_idx) + + self._init_sdks() + + def _init_sdks(self): + self.companies = Companies(self.sdk_configuration) + self.configuration = Configuration(self.sdk_configuration) + self.connections = Connections(self.sdk_configuration) + self.expenses = Expenses(self.sdk_configuration) + self.mapping_options = MappingOptions(self.sdk_configuration) + self.sync = Sync(self.sdk_configuration) + self.sync_status = SyncStatus(self.sdk_configuration) + self.transaction_status = TransactionStatus(self.sdk_configuration) + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdkconfiguration.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdkconfiguration.py new file mode 100755 index 000000000..e8de106e6 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sdkconfiguration.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests +from dataclasses import dataclass + + +SERVERS = [ + 'https://api.codat.io', +] +"""Contains the list of servers available to the SDK""" + +@dataclass +class SDKConfiguration: + client: requests.Session + security_client: requests.Session + server_url: str = '' + server_idx: int = 0 + language: str = 'python' + openapi_doc_version: str = 'prealpha' + sdk_version: str = '0.1.0' + gen_version: str = '2.91.4' + + def get_server_details(self) -> tuple[str, dict[str, str]]: + if self.server_url: + return self.server_url.removesuffix('/'), {} + if self.server_idx is None: + self.server_idx = 0 + + return SERVERS[self.server_idx], {} diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync.py new file mode 100755 index 000000000..bd2f634e5 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync.py @@ -0,0 +1,63 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class Sync: + r"""Triggering a new sync of expenses to accounting software.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def intiate_sync(self, request: operations.IntiateSyncRequest, retries: Optional[utils.RetryConfig] = None) -> operations.IntiateSyncResponse: + r"""Initiate sync + Initiate sync of pending transactions. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.IntiateSyncRequest, base_url, '/companies/{companyId}/sync/expenses/syncs', request) + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, "post_sync", 'json') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('POST', url, data=data, files=form, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.IntiateSyncResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 202: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.SyncInitiated]) + res.sync_initiated = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [400, 404, 422]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync_status.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync_status.py new file mode 100755 index 000000000..a82906aeb --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/sync_status.py @@ -0,0 +1,195 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class SyncStatus: + r"""Check the status of ongoing or previous expense syncs.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def get_last_successful_sync(self, request: operations.GetLastSuccessfulSyncRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetLastSuccessfulSyncResponse: + r"""Last successful sync + Gets the status of the last successful sync + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetLastSuccessfulSyncRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/lastSuccessful/status', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLastSuccessfulSyncResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CompanySyncStatus]) + res.company_sync_status = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def get_latest_sync(self, request: operations.GetLatestSyncRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetLatestSyncResponse: + r"""Latest sync status + Gets the latest sync status + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetLatestSyncRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/latest/status', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLatestSyncResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CompanySyncStatus]) + res.company_sync_status = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def get_sync_by_id(self, request: operations.GetSyncByIDRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetSyncByIDResponse: + r"""Get Sync status + Get the sync status for a specified sync + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetSyncByIDRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/{syncId}/status', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSyncByIDResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.CompanySyncStatus]) + res.company_sync_status = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def list_syncs(self, request: operations.ListSyncsRequest, retries: Optional[utils.RetryConfig] = None) -> operations.ListSyncsResponse: + r"""List sync statuses + Gets a list of sync statuses + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.ListSyncsRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/list/status', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.ListSyncsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[list[shared.CompanySyncStatus]]) + res.company_sync_statuses = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/transaction_status.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/transaction_status.py new file mode 100755 index 000000000..1deb24d52 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/transaction_status.py @@ -0,0 +1,106 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from codatsyncexpenses import utils +from codatsyncexpenses.models import errors, operations, shared +from typing import Optional + +class TransactionStatus: + r"""Retrieve the status of transactions within a sync.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + def get_sync_transaction(self, request: operations.GetSyncTransactionRequest, retries: Optional[utils.RetryConfig] = None) -> operations.GetSyncTransactionResponse: + r"""Get Sync Transaction + Gets the status of a transaction for a sync + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetSyncTransactionRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/{syncId}/transactions/{transactionId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSyncTransactionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[list[shared.TransactionMetadata]]) + res.transaction_metadata = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + def list_sync_transactions(self, request: operations.ListSyncTransactionsRequest, retries: Optional[utils.RetryConfig] = None) -> operations.ListSyncTransactionsResponse: + r"""Get Sync transactions + Get's the transactions and status for a sync + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.ListSyncTransactionsRequest, base_url, '/companies/{companyId}/sync/expenses/syncs/{syncId}/transactions', request) + headers = {} + query_params = utils.get_query_params(operations.ListSyncTransactionsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = f'speakeasy-sdk/{self.sdk_configuration.language} {self.sdk_configuration.sdk_version} {self.sdk_configuration.gen_version} {self.sdk_configuration.openapi_doc_version}' + + client = self.sdk_configuration.security_client + + retry_config = retries + if retry_config is None: + retry_config = utils.RetryConfig('backoff', utils.BackoffStrategy(500, 60000, 1.5, 3600000), True) + + def do_request(): + return client.request('GET', url, params=query_params, headers=headers) + + http_res = utils.retry(do_request, utils.Retries(retry_config, [ + '408', + '429', + '5XX' + ])) + content_type = http_res.headers.get('Content-Type') + + res = operations.ListSyncTransactionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.TransactionMetadataList]) + res.transaction_metadata_list = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code in [401, 404, 429]: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[shared.ErrorMessage]) + res.error_message = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/__init__.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/__init__.py new file mode 100755 index 000000000..94b739857 --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .retries import * +from .utils import * diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/retries.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/retries.py new file mode 100755 index 000000000..2138c1b5e --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/retries.py @@ -0,0 +1,119 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import random +import time + +import requests + + +class BackoffStrategy: + initial_interval: int + max_interval: int + exponent: float + max_elapsed_time: int + + def __init__(self, initial_interval: int, max_interval: int, exponent: float, max_elapsed_time: int): + self.initial_interval = initial_interval + self.max_interval = max_interval + self.exponent = exponent + self.max_elapsed_time = max_elapsed_time + + +class RetryConfig: + strategy: str + backoff: BackoffStrategy + retry_connection_errors: bool + + def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool): + self.strategy = strategy + self.backoff = backoff + self.retry_connection_errors = retry_connection_errors + + +class Retries: + config: RetryConfig + status_codes: list[str] + + def __init__(self, config: RetryConfig, status_codes: list[str]): + self.config = config + self.status_codes = status_codes + + +class TemporaryError(Exception): + response: requests.Response + + def __init__(self, response: requests.Response): + self.response = response + + +class PermanentError(Exception): + inner: Exception + + def __init__(self, inner: Exception): + self.inner = inner + + +def retry(func, retries: Retries): + if retries.config.strategy == 'backoff': + def do_request(): + res: requests.Response + try: + res = func() + + for code in retries.status_codes: + if "X" in code.upper(): + code_range = int(code[0]) + + status_major = res.status_code / 100 + + if status_major >= code_range and status_major < code_range + 1: + raise TemporaryError(res) + else: + parsed_code = int(code) + + if res.status_code == parsed_code: + raise TemporaryError(res) + except requests.exceptions.ConnectionError as exception: + if not retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except requests.exceptions.Timeout as exception: + if not retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except TemporaryError: + raise + except Exception as exception: + raise PermanentError(exception) from exception + + return res + + return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time) + + return func() + + +def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): + start = round(time.time()*1000) + retries = 0 + + while True: + try: + return func() + except PermanentError as exception: + raise exception.inner + except Exception as exception: # pylint: disable=broad-exception-caught + now = round(time.time()*1000) + if now - start > max_elapsed_time: + if isinstance(exception, TemporaryError): + return exception.response + + raise + sleep = ((initial_interval/1000) * + exponent**retries + random.uniform(0, 1)) + if sleep > max_interval/1000: + sleep = max_interval/1000 + time.sleep(sleep) + retries += 1 diff --git a/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/utils.py b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/utils.py new file mode 100755 index 000000000..ea9792d0d --- /dev/null +++ b/previous-versions/sync-for-expenses-version-1/src/codatsyncexpenses/utils/utils.py @@ -0,0 +1,764 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import base64 +import json +import re +from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass +from datetime import date, datetime +from email.message import Message +from enum import Enum +from typing import Any, Callable, Optional, Tuple, Union, get_args, get_origin +from xmlrpc.client import boolean + +import dateutil.parser +import requests +from dataclasses_json import DataClassJsonMixin + + +class SecurityClient: + client: requests.Session + query_params: dict[str, str] = {} + + def __init__(self, client: requests.Session): + self.client = client + + def request(self, method, url, **kwargs): + params = kwargs.get('params', {}) + kwargs["params"] = self.query_params | params + + return self.client.request(method, url, **kwargs) + + +def configure_security_client(client: requests.Session, security: dataclass): + client = SecurityClient(client) + + if security is None: + return client + + sec_fields: Tuple[Field, ...] = fields(security) + for sec_field in sec_fields: + value = getattr(security, sec_field.name) + if value is None: + continue + + metadata = sec_field.metadata.get('security') + if metadata is None: + continue + if metadata.get('option'): + _parse_security_option(client, value) + return client + if metadata.get('scheme'): + # Special case for basic auth which could be a flattened struct + if metadata.get("sub_type") == "basic" and not is_dataclass(value): + _parse_security_scheme(client, metadata, security) + else: + _parse_security_scheme(client, metadata, value) + + return client + + +def _parse_security_option(client: SecurityClient, option: dataclass): + opt_fields: Tuple[Field, ...] = fields(option) + for opt_field in opt_fields: + metadata = opt_field.metadata.get('security') + if metadata is None or metadata.get('scheme') is None: + continue + _parse_security_scheme( + client, metadata, getattr(option, opt_field.name)) + + +def _parse_security_scheme(client: SecurityClient, scheme_metadata: dict, scheme: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + if is_dataclass(scheme): + if scheme_type == 'http' and sub_type == 'basic': + _parse_basic_auth_scheme(client, scheme) + return + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + value = getattr(scheme, scheme_field.name) + + _parse_security_scheme_value( + client, scheme_metadata, metadata, value) + else: + _parse_security_scheme_value( + client, scheme_metadata, scheme_metadata, scheme) + + +def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: dict, security_metadata: dict, value: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + header_name = security_metadata.get('field_name') + + if scheme_type == "apiKey": + if sub_type == 'header': + client.client.headers[header_name] = value + elif sub_type == 'query': + client.query_params[header_name] = value + elif sub_type == 'cookie': + client.client.cookies[header_name] = value + else: + raise Exception('not supported') + elif scheme_type == "openIdConnect": + client.client.headers[header_name] = value + elif scheme_type == 'oauth2': + client.client.headers[header_name] = value + elif scheme_type == 'http': + if sub_type == 'bearer': + client.client.headers[header_name] = value.lower().startswith('bearer ') and value or f'Bearer {value}' + else: + raise Exception('not supported') + else: + raise Exception('not supported') + + +def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass): + username = "" + password = "" + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + field_name = metadata.get('field_name') + value = getattr(scheme, scheme_field.name) + + if field_name == 'username': + username = value + if field_name == 'password': + password = value + + data = f'{username}:{password}'.encode() + client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}' + + +def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, + gbls: dict[str, dict[str, dict[str, Any]]] = None) -> str: + path_param_fields: Tuple[Field, ...] = fields(clazz) + for field in path_param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + param_metadata = field.metadata.get('path_param') + if param_metadata is None: + continue + + param = getattr( + path_params, field.name) if path_params is not None else None + param = _populate_from_globals( + field.name, param, 'pathParam', gbls) + + if param is None: + continue + + f_name = param_metadata.get("field_name", field.name) + serialization = param_metadata.get('serialization', '') + if serialization != '': + serialized_params = _get_serialized_params( + param_metadata, f_name, param) + for key, value in serialized_params.items(): + path = path.replace( + '{' + key + '}', value, 1) + else: + if param_metadata.get('style', 'simple') == 'simple': + if isinstance(param, list): + pp_vals: list[str] = [] + for pp_val in param: + if pp_val is None: + continue + pp_vals.append(_val_to_string(pp_val)) + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif isinstance(param, dict): + pp_vals: list[str] = [] + for pp_key in param: + if param[pp_key] is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{pp_key}={_val_to_string(param[pp_key])}") + else: + pp_vals.append( + f"{pp_key},{_val_to_string(param[pp_key])}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif not isinstance(param, (str, int, float, complex, bool)): + pp_vals: list[str] = [] + param_fields: Tuple[Field, ...] = fields(param) + for param_field in param_fields: + param_value_metadata = param_field.metadata.get( + 'path_param') + if not param_value_metadata: + continue + + parm_name = param_value_metadata.get( + 'field_name', field.name) + + param_field_val = getattr(param, param_field.name) + if param_field_val is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{parm_name}={_val_to_string(param_field_val)}") + else: + pp_vals.append( + f"{parm_name},{_val_to_string(param_field_val)}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + else: + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1) + + return server_url.removesuffix("/") + path + + +def is_optional(field): + return get_origin(field) is Union and type(None) in get_args(field) + + +def template_url(url_with_params: str, params: dict[str, str]) -> str: + for key, value in params.items(): + url_with_params = url_with_params.replace( + '{' + key + '}', value) + + return url_with_params + + +def get_query_params(clazz: type, query_params: dataclass, gbls: dict[str, dict[str, dict[str, Any]]] = None) -> dict[ + str, list[str]]: + params: dict[str, list[str]] = {} + + param_fields: Tuple[Field, ...] = fields(clazz) + for field in param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + metadata = field.metadata.get('query_param') + if not metadata: + continue + + param_name = field.name + value = getattr( + query_params, param_name) if query_params is not None else None + + value = _populate_from_globals(param_name, value, 'queryParam', gbls) + + f_name = metadata.get("field_name") + serialization = metadata.get('serialization', '') + if serialization != '': + serialized_parms = _get_serialized_params(metadata, f_name, value) + for key, value in serialized_parms.items(): + if key in params: + params[key].extend(value) + else: + params[key] = [value] + else: + style = metadata.get('style', 'form') + if style == 'deepObject': + params = params | _get_deep_object_query_params( + metadata, f_name, value) + elif style == 'form': + params = params | _get_delimited_query_params( + metadata, f_name, value, ",") + elif style == 'pipeDelimited': + params = params | _get_delimited_query_params( + metadata, f_name, value, "|") + else: + raise Exception('not yet implemented') + return params + + +def get_headers(headers_params: dataclass) -> dict[str, str]: + if headers_params is None: + return {} + + headers: dict[str, str] = {} + + param_fields: Tuple[Field, ...] = fields(headers_params) + for field in param_fields: + metadata = field.metadata.get('header') + if not metadata: + continue + + value = _serialize_header(metadata.get( + 'explode', False), getattr(headers_params, field.name)) + + if value != '': + headers[metadata.get('field_name', field.name)] = value + + return headers + + +def _get_serialized_params(metadata: dict, field_name: str, obj: any) -> dict[str, str]: + params: dict[str, str] = {} + + serialization = metadata.get('serialization', '') + if serialization == 'json': + params[metadata.get("field_name", field_name)] = marshal_json(obj) + + return params + + +def _get_deep_object_query_params(metadata: dict, field_name: str, obj: any) -> dict[str, list[str]]: + params: dict[str, list[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('query_param') + if not obj_param_metadata: + continue + + obj_val = getattr(obj, obj_field.name) + if obj_val is None: + continue + + if isinstance(obj_val, list): + for val in obj_val: + if val is None: + continue + + if params.get( + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append( + _val_to_string(val)) + else: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + _val_to_string(obj_val)] + elif isinstance(obj, dict): + for key, value in obj.items(): + if value is None: + continue + + if isinstance(value, list): + for val in value: + if val is None: + continue + + if params.get(f'{metadata.get("field_name", field_name)}[{key}]') is None: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val)) + else: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + _val_to_string(value)] + return params + + +def _get_query_param_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('query_param') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _get_delimited_query_params(metadata: dict, field_name: str, obj: any, delimiter: str) -> dict[ + str, list[str]]: + return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter) + + +SERIALIZATION_METHOD_TO_CONTENT_TYPE = { + 'json': 'application/json', + 'form': 'application/x-www-form-urlencoded', + 'multipart': 'multipart/form-data', + 'raw': 'application/octet-stream', + 'string': 'text/plain', +} + + +def serialize_request_body(request: dataclass, request_field_name: str, serialization_method: str) -> Tuple[ + str, any, any]: + if request is None: + return None, None, None, None + + if not is_dataclass(request) or not hasattr(request, request_field_name): + return serialize_content_type(request_field_name, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], + request) + + request_val = getattr(request, request_field_name) + + request_fields: Tuple[Field, ...] = fields(request) + request_metadata = None + + for field in request_fields: + if field.name == request_field_name: + request_metadata = field.metadata.get('request') + break + + if request_metadata is None: + raise Exception('invalid request type') + + return serialize_content_type(request_field_name, request_metadata.get('media_type', 'application/octet-stream'), + request_val) + + +def serialize_content_type(field_name: str, media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]: + if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None: + return media_type, marshal_json(request), None + if re.match(r'multipart\/.*', media_type) is not None: + return serialize_multipart_form(media_type, request) + if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None: + return media_type, serialize_form_data(field_name, request), None + if isinstance(request, (bytes, bytearray)): + return media_type, request, None + if isinstance(request, str): + return media_type, request, None + + raise Exception( + f"invalid request body type {type(request)} for mediaType {media_type}") + + +def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, list[list[any]]]: + form: list[list[any]] = [] + request_fields = fields(request) + + for field in request_fields: + val = getattr(request, field.name) + if val is None: + continue + + field_metadata = field.metadata.get('multipart_form') + if not field_metadata: + continue + + if field_metadata.get("file") is True: + file_fields = fields(val) + + file_name = "" + field_name = "" + content = bytes() + + for file_field in file_fields: + file_metadata = file_field.metadata.get('multipart_form') + if file_metadata is None: + continue + + if file_metadata.get("content") is True: + content = getattr(val, file_field.name) + else: + field_name = file_metadata.get( + "field_name", file_field.name) + file_name = getattr(val, file_field.name) + if field_name == "" or file_name == "" or content == bytes(): + raise Exception('invalid multipart/form-data file') + + form.append([field_name, [file_name, content]]) + elif field_metadata.get("json") is True: + to_append = [field_metadata.get("field_name", field.name), [ + None, marshal_json(val), "application/json"]] + form.append(to_append) + else: + field_name = field_metadata.get( + "field_name", field.name) + if isinstance(val, list): + for value in val: + if value is None: + continue + form.append( + [field_name + "[]", [None, _val_to_string(value)]]) + else: + form.append([field_name, [None, _val_to_string(val)]]) + return media_type, None, form + + +def serialize_dict(original: dict, explode: bool, field_name, existing: Optional[dict[str, list[str]]]) -> dict[ + str, list[str]]: + if existing is None: + existing = [] + + if explode is True: + for key, val in original.items(): + if key not in existing: + existing[key] = [] + existing[key].append(val) + else: + temp = [] + for key, val in original.items(): + temp.append(str(key)) + temp.append(str(val)) + if field_name not in existing: + existing[field_name] = [] + existing[field_name].append(",".join(temp)) + return existing + + +def serialize_form_data(field_name: str, data: dataclass) -> dict[str, any]: + form: dict[str, list[str]] = {} + + if is_dataclass(data): + for field in fields(data): + val = getattr(data, field.name) + if val is None: + continue + + metadata = field.metadata.get('form') + if metadata is None: + continue + + field_name = metadata.get('field_name', field.name) + + if metadata.get('json'): + form[field_name] = [marshal_json(val)] + else: + if metadata.get('style', 'form') == 'form': + form = form | _populate_form( + field_name, metadata.get('explode', True), val, _get_form_field_name, ",") + else: + raise Exception( + f'Invalid form style for field {field.name}') + elif isinstance(data, dict): + for key, value in data.items(): + form[key] = [_val_to_string(value)] + else: + raise Exception(f'Invalid request body type for field {field_name}') + + return form + + +def _get_form_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('form') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \ + dict[str, list[str]]: + params: dict[str, list[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + items = [] + + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_field_name = get_field_name_func(obj_field) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + params[obj_field_name] = [_val_to_string(val)] + else: + items.append( + f'{obj_field_name}{delimiter}{_val_to_string(val)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, dict): + items = [] + for key, value in obj.items(): + if value is None: + continue + + if explode: + params[key] = _val_to_string(value) + else: + items.append(f'{key}{delimiter}{_val_to_string(value)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, list): + items = [] + + for value in obj: + if value is None: + continue + + if explode: + if not field_name in params: + params[field_name] = [] + params[field_name].append(_val_to_string(value)) + else: + items.append(_val_to_string(value)) + + if len(items) > 0: + params[field_name] = [delimiter.join([str(item) for item in items])] + else: + params[field_name] = [_val_to_string(obj)] + + return params + + +def _serialize_header(explode: bool, obj: any) -> str: + if obj is None: + return '' + + if is_dataclass(obj): + items = [] + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('header') + + if not obj_param_metadata: + continue + + obj_field_name = obj_param_metadata.get( + 'field_name', obj_field.name) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + items.append( + f'{obj_field_name}={_val_to_string(val)}') + else: + items.append(obj_field_name) + items.append(_val_to_string(val)) + + if len(items) > 0: + return ','.join(items) + elif isinstance(obj, dict): + items = [] + + for key, value in obj.items(): + if value is None: + continue + + if explode: + items.append(f'{key}={_val_to_string(value)}') + else: + items.append(key) + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join([str(item) for item in items]) + elif isinstance(obj, list): + items = [] + + for value in obj: + if value is None: + continue + + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join(items) + else: + return f'{_val_to_string(obj)}' + + return '' + + +def unmarshal_json(data, typ): + unmarshal = make_dataclass('Unmarshal', [('res', typ)], + bases=(DataClassJsonMixin,)) + json_dict = json.loads(data) + try: + out = unmarshal.from_dict({"res": json_dict}) + except AttributeError as attr_err: + raise AttributeError(f'unable to unmarshal {data} as {typ}') from attr_err + return out.res + + +def marshal_json(val): + marshal = make_dataclass('Marshal', [('res', type(val))], + bases=(DataClassJsonMixin,)) + marshaller = marshal(res=val) + json_dict = marshaller.to_dict() + return json.dumps(json_dict["res"]) + + +def match_content_type(content_type: str, pattern: str) -> boolean: + if pattern in (content_type, "*", "*/*"): + return True + + msg = Message() + msg['content-type'] = content_type + media_type = msg.get_content_type() + + if media_type == pattern: + return True + + parts = media_type.split("/") + if len(parts) == 2: + if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'): + return True + + return False + + +def datetimeisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return _val_to_string(val) + + return isoformatoptional + + +def dateisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return date.isoformat(val) + + return isoformatoptional + + +def datefromisoformat(date_str: str): + return dateutil.parser.parse(date_str).date() + + +def get_field_name(name): + def override(_, _field_name=name): + return _field_name + + return override + + +def _val_to_string(val): + if isinstance(val, bool): + return str(val).lower() + if isinstance(val, datetime): + return val.isoformat().replace('+00:00', 'Z') + if isinstance(val, Enum): + return str(val.value) + + return str(val) + + +def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: dict[str, dict[str, dict[str, Any]]]): + if value is None and gbls is not None: + if 'parameters' in gbls: + if param_type in gbls['parameters']: + if param_name in gbls['parameters'][param_type]: + global_value = gbls['parameters'][param_type][param_name] + if global_value is not None: + value = global_value + + return value