Hope this helps. No matter what software or environment you are integrating with, it is important to know your data structure including data types, data validations (including required yes/no) and data constraints (length, decimal places, etc.).
There are three ways you can integrate with Dynamics 365 factoring in the above.
1. Static code based on the Dynamics 365 configuration
If you can login to Dynamics 365, you can view the environment definition by going to Settings > Customizations > Customize the System.

From here you can view all Entity and Attribute definitions and and write your code accordingly. You can also "require" installation of your own solution with Entities and Attributes, giving you control over what your integrating with.

2. Creating Early-Bound classes
You can generate Early Bound classes with the Entity and Attribute definition from Dynamics 365 with the CrmSvcUtil tool. For more information.
For more information:
https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/create-early-bound-entity-classes-code-generation-tool
3. Dynamics 365 Metadata service
Dynamics 365 provides a Metadata service, enabling you to retrieve the exact definition of alle Entities and Attributes directly from the given Dynamics 365 environment. As such you can retrieve the definition prior to integrating.
I think considering the performance, this is definitly not something you would like to do every single message. To resolve this you could retrieve the definition on request (manual trigger) or daily.
For more information: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/customize/create-edit-metadata
When working with Dynamics 365, the XRMToolBox is a must have tool for any developer or consultant. With the tools Metadata Browser plugin you can view the data that you can retrieve by the Metadata service.
