NAT-PT was the original translation scheme for communication between IPv4 and IPv6, but has since been deprecated and replaced by NAT64.
NAT64 allows one or multiple public IPv4 addresses are shared by many IPv6-only devices using overloading.
NAT64 performs both address and header translation.
The principal example of usage would be to provide IPv4 internet connectivity to IPv6 devices through an ISP that doesn't support IPv6 yet.
Router(config)#nat64 v6v4 list pool overload
Router(config)#nat64 v6v4 static
Router(config)#nat64 v6v4 list NAT64_ACL pool IPv6_Pool overload
Router(config)#nat64 v6v4 static fc00:aced::1:1/96 184.108.40.206
Network Prefix Translation (NPTv6, RFC 6296) is a one-to=one stateless translation. One IPv6 address in an inside network is translated to one IPv6 address in an outside network. The reason for using NPTv6 and the overriding idea behind it is that internal networks can be independent of an ISPs address space which makes changing ISP a simpler process. If you were to move ISP and were not able to take your existing address space with you then you would need to readdress everything in your network. If you are using NPTv6 then you can simply translate your existing addresses to a different address space from a different provider. Another reason for using NPTv6 would be if you have connections to two separate ISPs.
As the translations happen on a one=to-one basis NPTv6 only provides network layer translation and does not translate port numbers as there is no need for it to do this.
router(config)#nat66 prefix inside internal IPv6 prefix outside external IPv6 prefix
Router(config)#nat66 prefix inside fc00:aced::1:0/96 outside 2001:aced:fade::255:0/96
There are few Cisco devices which are able to implement NPTv6 and those that can are the more powerful devices. I checked the above config on a CSR1000 in GNS3