Contact records will only show a property if they have had a value set for that property. A contact that has never had a firstname will not show that property in its data.
Additionally, any endpoint that returns a list of contact records (such as pulling all records in the portal) will only return a few specific properties:
You can change which properties are included in the response by adding &property= to the URL as a query parameter. You can add this parameter multiple times to specify multiple properties:
Please note that if you include the property parameter, you will only get the property or properties you explicitly include in the URL (notice that firstname and lastname are not included in the response for the example URL above).
Any endpoints returning a list will only return the specified properties, so if you need to see all of the properties that a record has set you will need to pull the individual record by its vid, email, or usertoken.