Include updated_at time stamps for all rows/tables to indicate when records were last modified.
Use more specific data types where possible. For example, VARCHAR with length limits can be used for fields like name and email to save space and improve data integrity.
Consider removing the ability to delete transactions. Instead, you could include a deleted_at column within the database. This would improve your ability to recover data and analyze historical trends.
Encrypt fields like 'email' to increase data security.
If you plan on implementing large scale analytics capabilities, consider creating a separate analytics schema that can be used for complex queries without affecting transaction performance.
Include versioning in the API path to improve transitions to future changes
Implement rate limiting to prevent abuse of your endpoints
Include functionality to allow for filtering/sorting in specific GET endpoints.
Add functionality for large bulk operations. This would reduce the number of API calls.
Include more standardization for structure of return statements from all types of endpoint calls.
Implement cascading deletes to correctly link together tables and save time/code when deleting or dropping tables.
Avoid using NULL default type for rows. Set a real default type as often as possible.