It may be a little late, but here is what I found by keywords / criteria. Take it with salt, but I think this is not too far from reality:
A keyword as an object containing text and a match type (or other attributes depending on the type of criteria) has a unique AdWords identifier. This means that whenever you use the keyword "supercalifragilisticexpialidocious" with the match type "BROAD", it will always have the same identifier.
However, only in conjunction with an ad group ID can you define attributes such as cost-per-click, status, approval status, etc. To continue the above example, if you have this keyword in two different AdWords accounts using different CPUs, the keyword IDs themselves are still identical: the CPC information is stored separately from the keyword itself.
This fits well with the type hierarchy in WSDL: AdGroupCriterionService returns AdGroupCriterion objects that themselves contain Criterion objects. Information about bets, status, etc. Available in the AdGroupCriterion object, and the keyword information itself is inside the Criterion object (which can be used by other AdGroupCriterion objects).
[ update ]. At an Adwords workshop, Google said it was “most likely” that new keywords with the same text and match type as existing ones would use the same criteria identifier, but this is not guaranteed. See @eshwar's answer for an example where the same keywords have different identifiers.
dorian
source share