diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -31,3 +31,7 @@
 ## 1.0.2.8 - 2021-06-05
 
 Support GHC 9.0, `bytestring` 0.11
+
+## 1.0.3 - 2021-07-01
+
+Add standard instances to many types
diff --git a/library/Stripe/Concepts.hs b/library/Stripe/Concepts.hs
--- a/library/Stripe/Concepts.hs
+++ b/library/Stripe/Concepts.hs
@@ -1,4 +1,5 @@
 {-# OPTIONS_GHC -Wall #-}
+{-# language DeriveFunctor, DerivingStrategies, DeriveDataTypeable, DeriveGeneric #-}
 
 module Stripe.Concepts
   (
@@ -26,6 +27,10 @@
 
   ) where
 
+-- base
+import Data.Data (Data)
+import GHC.Generics (Generic)
+
 -- bytestring
 import qualified Data.ByteString
 
@@ -48,6 +53,7 @@
 - 'isTestMode' (and its inverse, 'isTestMode'') -}
 
 data Mode = LiveMode | TestMode
+  deriving stock (Eq, Ord, Show, Enum, Bounded, Data, Generic)
 
 -- | LiveMode → True; TestMode → False
 isLiveMode :: Mode -> Bool
@@ -76,10 +82,7 @@
 and test mode. -}
 
 data BothModes a = BothModes { liveMode :: a, testMode :: a }
-
-instance Functor BothModes
-  where
-    fmap f (BothModes a b) = BothModes (f a) (f b)
+  deriving stock (Eq, Show, Data, Generic, Functor)
 
 applyMode :: Mode -> BothModes a -> a
 applyMode LiveMode = liveMode
@@ -111,6 +114,7 @@
 'textToApiSecretKey' to do this conversion. -}
 
 newtype ApiSecretKey = ApiSecretKey Data.ByteString.ByteString
+  deriving stock (Eq, Ord)
 
 {- | Publishable API keys are used in client-side code.
 
@@ -121,6 +125,7 @@
 -}
 
 newtype PublishableApiKey = PublishableApiKey Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | Webhook secrets are used to verify the authenticity of webhook events that
 you receive from Stripe.
@@ -137,6 +142,7 @@
 'textToWebhookSecretKey' to do this conversion. -}
 
 newtype WebhookSecretKey = WebhookSecretKey Data.ByteString.ByteString
+  deriving stock (Eq, Ord)
 
 {- | Convert a 'Data.Text.Text' representation of a Stripe API key (that looks
 something like @"sk_test_BQokikJOvBiI2HlWgH4olfQ2"@) to an 'ApiSecretKey'. -}
@@ -160,7 +166,8 @@
 integration to operate in a PCI-compliant way." -
 <https://stripe.com/docs/api/tokens Stripe> -}
 
-newtype TokenId = TokenId Data.Text.Text deriving Eq
+newtype TokenId = TokenId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | A customer identifier assigned by Stripe.
 
@@ -168,7 +175,8 @@
 charges, that are associated with the same customer." -
 <https://stripe.com/docs/api/customers Stripe> -}
 
-newtype CustomerId = CustomerId Data.Text.Text deriving Eq
+newtype CustomerId = CustomerId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | The ID of a Stripe product.
 
@@ -176,7 +184,8 @@
 Subscription. An associated Plan determines the product pricing." -
 <https://stripe.com/docs/api/service_products Stripe> -}
 
-newtype ProductId = ProductId Data.Text.Text deriving Eq
+newtype ProductId = ProductId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | The ID of a Stripe subscription plan.
 
@@ -185,7 +194,8 @@
 products, and a $15/month plan that allows full access." -
 <https://stripe.com/docs/api/plans Stripe> -}
 
-newtype PlanId = PlanId Data.Text.Text deriving Eq
+newtype PlanId = PlanId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | Identifier for a customer's subscription to a product.
 
@@ -193,7 +203,8 @@
 subscription ties a customer to a particular plan you've created." -
 <https://stripe.com/docs/api/subscriptions Stripe> -}
 
-newtype SubscriptionId = SubscriptionId Data.Text.Text deriving Eq
+newtype SubscriptionId = SubscriptionId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | The ID of a Stripe invoice.
 
@@ -201,7 +212,8 @@
 one-off, or generated periodically from a subscription." -
 <https://stripe.com/docs/api/invoices Stripe> -}
 
-newtype InvoiceId = InvoiceId Data.Text.Text deriving Eq
+newtype InvoiceId = InvoiceId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- | The ID of a Stripe coupon.
 
@@ -210,7 +222,8 @@
 orders." -
 <https://stripe.com/docs/api/coupons Stripe> -}
 
-newtype CouponId = CouponId Data.Text.Text deriving Eq
+newtype CouponId = CouponId Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 ------------------------------------------------------------
 
@@ -218,7 +231,8 @@
 a new API version. The versions are named by the date of their release (e.g.
 "2019-09-09"). -}
 
-newtype ApiVersion = ApiVersion Data.Text.Text deriving Eq
+newtype ApiVersion = ApiVersion Data.Text.Text
+  deriving stock (Eq, Ord, Show, Data, Generic)
 
 {- |  Your account API settings specify:
 
@@ -236,4 +250,4 @@
       {- ^ Use a specific API version for this request. (Please note however
            that any webhook events generated as a result of this request will
            still use your account's default API version.) -}
-    deriving Eq
+    deriving stock (Eq, Ord, Show, Data, Generic)
diff --git a/stripe-concepts.cabal b/stripe-concepts.cabal
--- a/stripe-concepts.cabal
+++ b/stripe-concepts.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.0
 
 name: stripe-concepts
-version: 1.0.2.8
+version: 1.0.3
 
 synopsis: Types for the Stripe API
 category: Web
