diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@
 
 ## Description
 
-A client library for the Google Cloud Trace.
+A client library for the Google Stackdriver Trace.
 
 
 ## Contribute
diff --git a/gen/Network/Google/CloudTrace.hs b/gen/Network/Google/CloudTrace.hs
--- a/gen/Network/Google/CloudTrace.hs
+++ b/gen/Network/Google/CloudTrace.hs
@@ -13,12 +13,14 @@
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
 --
--- Send and retrieve trace data from Google Cloud Trace. Data is generated
--- and available by default for all App Engine applications. Data from
--- other applications can be written to Cloud Trace for display, reporting,
--- and analysis.
+-- Sends application trace data to Stackdriver Trace for viewing. Trace
+-- data is collected for all App Engine applications by default. Trace data
+-- from other applications can be provided using this API. This library is
+-- used to interact with the Trace API directly. If you are looking to
+-- instrument your application for Stackdriver Trace, we recommend using
+-- OpenCensus.
 --
--- /See:/ <https://cloud.google.com/tools/cloud-trace Google Cloud Trace API Reference>
+-- /See:/ <https://cloud.google.com/trace Stackdriver Trace API Reference>
 module Network.Google.CloudTrace
     (
     -- * Service Configuration
@@ -26,7 +28,6 @@
 
     -- * OAuth Scopes
     , traceAppendScope
-    , traceReadOnlyScope
     , cloudPlatformScope
 
     -- * API Declaration
@@ -34,68 +35,167 @@
 
     -- * Resources
 
-    -- ** cloudtrace.projects.patchTraces
-    , module Network.Google.Resource.CloudTrace.Projects.PatchTraces
-
-    -- ** cloudtrace.projects.traces.get
-    , module Network.Google.Resource.CloudTrace.Projects.Traces.Get
+    -- ** cloudtrace.projects.traces.batchWrite
+    , module Network.Google.Resource.CloudTrace.Projects.Traces.BatchWrite
 
-    -- ** cloudtrace.projects.traces.list
-    , module Network.Google.Resource.CloudTrace.Projects.Traces.List
+    -- ** cloudtrace.projects.traces.spans.createSpan
+    , module Network.Google.Resource.CloudTrace.Projects.Traces.Spans.CreateSpan
 
     -- * Types
 
+    -- ** Span
+    , Span
+    , span
+    , sStatus
+    , sStartTime
+    , sChildSpanCount
+    , sSameProcessAsParentSpan
+    , sName
+    , sStackTrace
+    , sAttributes
+    , sEndTime
+    , sTimeEvents
+    , sDisplayName
+    , sParentSpanId
+    , sLinks
+    , sSpanId
+
+    -- ** TruncatableString
+    , TruncatableString
+    , truncatableString
+    , tsValue
+    , tsTruncatedByteCount
+
+    -- ** Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- ** AttributesAttributeMap
+    , AttributesAttributeMap
+    , attributesAttributeMap
+    , aamAddtional
+
+    -- ** Annotation
+    , Annotation
+    , annotation
+    , aAttributes
+    , aDescription
+
+    -- ** AttributeValue
+    , AttributeValue
+    , attributeValue
+    , avBoolValue
+    , avIntValue
+    , avStringValue
+
+    -- ** MessageEvent
+    , MessageEvent
+    , messageEvent
+    , meId
+    , meUncompressedSizeBytes
+    , meType
+    , meCompressedSizeBytes
+
     -- ** Empty
     , Empty
     , empty
 
-    -- ** TraceSpanLabels
-    , TraceSpanLabels
-    , traceSpanLabels
-    , tslAddtional
+    -- ** Link
+    , Link
+    , link
+    , lTraceId
+    , lAttributes
+    , lType
+    , lSpanId
 
-    -- ** Traces
-    , Traces
-    , traces
-    , tTraces
+    -- ** StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
 
-    -- ** TraceSpan
-    , TraceSpan
-    , traceSpan
-    , tsStartTime
-    , tsKind
-    , tsName
-    , tsEndTime
-    , tsLabels
-    , tsParentSpanId
-    , tsSpanId
+    -- ** StackTrace
+    , StackTrace
+    , stackTrace
+    , stStackTraceHashId
+    , stStackFrames
 
-    -- ** ListTracesResponse
-    , ListTracesResponse
-    , listTracesResponse
-    , ltrNextPageToken
-    , ltrTraces
+    -- ** BatchWriteSpansRequest
+    , BatchWriteSpansRequest
+    , batchWriteSpansRequest
+    , bwsrSpans
 
-    -- ** Trace
-    , Trace
-    , trace
-    , tTraceId
-    , tSpans
-    , tProjectId
+    -- ** MessageEventType
+    , MessageEventType (..)
+
+    -- ** Attributes
+    , Attributes
+    , attributes
+    , aDroppedAttributesCount
+    , aAttributeMap
+
+    -- ** Module
+    , Module
+    , module'
+    , mBuildId
+    , mModule
+
+    -- ** TimeEvents
+    , TimeEvents
+    , timeEvents
+    , teDroppedMessageEventsCount
+    , teDroppedAnnotationsCount
+    , teTimeEvent
+
+    -- ** Xgafv
+    , Xgafv (..)
+
+    -- ** StackFrames
+    , StackFrames
+    , stackFrames
+    , sfDroppedFramesCount
+    , sfFrame
+
+    -- ** LinkType
+    , LinkType (..)
+
+    -- ** StackFrame
+    , StackFrame
+    , stackFrame
+    , sfLoadModule
+    , sfOriginalFunctionName
+    , sfLineNumber
+    , sfSourceVersion
+    , sfFunctionName
+    , sfColumnNumber
+    , sfFileName
+
+    -- ** Links
+    , Links
+    , links
+    , lDroppedLinksCount
+    , lLink
+
+    -- ** TimeEvent
+    , TimeEvent
+    , timeEvent
+    , teMessageEvent
+    , teAnnotation
+    , teTime
     ) where
 
 import           Network.Google.CloudTrace.Types
 import           Network.Google.Prelude
-import           Network.Google.Resource.CloudTrace.Projects.PatchTraces
-import           Network.Google.Resource.CloudTrace.Projects.Traces.Get
-import           Network.Google.Resource.CloudTrace.Projects.Traces.List
+import           Network.Google.Resource.CloudTrace.Projects.Traces.BatchWrite
+import           Network.Google.Resource.CloudTrace.Projects.Traces.Spans.CreateSpan
 
 {- $resources
 TODO
 -}
 
--- | Represents the entirety of the methods and resources available for the Google Cloud Trace API service.
+-- | Represents the entirety of the methods and resources available for the Stackdriver Trace API service.
 type CloudTraceAPI =
-     ProjectsTracesListResource :<|>
-       ProjectsTracesGetResource
-       :<|> ProjectsPatchTracesResource
+     ProjectsTracesSpansCreateSpanResource :<|>
+       ProjectsTracesBatchWriteResource
diff --git a/gen/Network/Google/CloudTrace/Types.hs b/gen/Network/Google/CloudTrace/Types.hs
--- a/gen/Network/Google/CloudTrace/Types.hs
+++ b/gen/Network/Google/CloudTrace/Types.hs
@@ -21,65 +21,164 @@
 
     -- * OAuth Scopes
     , traceAppendScope
-    , traceReadOnlyScope
     , cloudPlatformScope
 
+    -- * Span
+    , Span
+    , span
+    , sStatus
+    , sStartTime
+    , sChildSpanCount
+    , sSameProcessAsParentSpan
+    , sName
+    , sStackTrace
+    , sAttributes
+    , sEndTime
+    , sTimeEvents
+    , sDisplayName
+    , sParentSpanId
+    , sLinks
+    , sSpanId
+
+    -- * TruncatableString
+    , TruncatableString
+    , truncatableString
+    , tsValue
+    , tsTruncatedByteCount
+
+    -- * Status
+    , Status
+    , status
+    , sDetails
+    , sCode
+    , sMessage
+
+    -- * AttributesAttributeMap
+    , AttributesAttributeMap
+    , attributesAttributeMap
+    , aamAddtional
+
+    -- * Annotation
+    , Annotation
+    , annotation
+    , aAttributes
+    , aDescription
+
+    -- * AttributeValue
+    , AttributeValue
+    , attributeValue
+    , avBoolValue
+    , avIntValue
+    , avStringValue
+
+    -- * MessageEvent
+    , MessageEvent
+    , messageEvent
+    , meId
+    , meUncompressedSizeBytes
+    , meType
+    , meCompressedSizeBytes
+
     -- * Empty
     , Empty
     , empty
 
-    -- * TraceSpanLabels
-    , TraceSpanLabels
-    , traceSpanLabels
-    , tslAddtional
+    -- * Link
+    , Link
+    , link
+    , lTraceId
+    , lAttributes
+    , lType
+    , lSpanId
 
-    -- * Traces
-    , Traces
-    , traces
-    , tTraces
+    -- * StatusDetailsItem
+    , StatusDetailsItem
+    , statusDetailsItem
+    , sdiAddtional
 
-    -- * TraceSpan
-    , TraceSpan
-    , traceSpan
-    , tsStartTime
-    , tsKind
-    , tsName
-    , tsEndTime
-    , tsLabels
-    , tsParentSpanId
-    , tsSpanId
+    -- * StackTrace
+    , StackTrace
+    , stackTrace
+    , stStackTraceHashId
+    , stStackFrames
 
-    -- * ListTracesResponse
-    , ListTracesResponse
-    , listTracesResponse
-    , ltrNextPageToken
-    , ltrTraces
+    -- * BatchWriteSpansRequest
+    , BatchWriteSpansRequest
+    , batchWriteSpansRequest
+    , bwsrSpans
 
-    -- * Trace
-    , Trace
-    , trace
-    , tTraceId
-    , tSpans
-    , tProjectId
+    -- * MessageEventType
+    , MessageEventType (..)
+
+    -- * Attributes
+    , Attributes
+    , attributes
+    , aDroppedAttributesCount
+    , aAttributeMap
+
+    -- * Module
+    , Module
+    , module'
+    , mBuildId
+    , mModule
+
+    -- * TimeEvents
+    , TimeEvents
+    , timeEvents
+    , teDroppedMessageEventsCount
+    , teDroppedAnnotationsCount
+    , teTimeEvent
+
+    -- * Xgafv
+    , Xgafv (..)
+
+    -- * StackFrames
+    , StackFrames
+    , stackFrames
+    , sfDroppedFramesCount
+    , sfFrame
+
+    -- * LinkType
+    , LinkType (..)
+
+    -- * StackFrame
+    , StackFrame
+    , stackFrame
+    , sfLoadModule
+    , sfOriginalFunctionName
+    , sfLineNumber
+    , sfSourceVersion
+    , sfFunctionName
+    , sfColumnNumber
+    , sfFileName
+
+    -- * Links
+    , Links
+    , links
+    , lDroppedLinksCount
+    , lLink
+
+    -- * TimeEvent
+    , TimeEvent
+    , timeEvent
+    , teMessageEvent
+    , teAnnotation
+    , teTime
     ) where
 
 import           Network.Google.CloudTrace.Types.Product
 import           Network.Google.CloudTrace.Types.Sum
 import           Network.Google.Prelude
 
--- | Default request referring to version 'v1' of the Google Cloud Trace API. This contains the host and root path used as a starting point for constructing service requests.
+-- | Default request referring to version 'v2' of the Stackdriver Trace API. This contains the host and root path used as a starting point for constructing service requests.
 cloudTraceService :: ServiceConfig
 cloudTraceService
-  = defaultService (ServiceId "cloudtrace:v1")
+  = defaultService (ServiceId "cloudtrace:v2")
       "cloudtrace.googleapis.com"
 
 -- | Write Trace data for a project or application
 traceAppendScope :: Proxy '["https://www.googleapis.com/auth/trace.append"]
 traceAppendScope = Proxy;
-
--- | Read Trace data for a project or application
-traceReadOnlyScope :: Proxy '["https://www.googleapis.com/auth/trace.readonly"]
-traceReadOnlyScope = Proxy;
 
 -- | View and manage your data across Google Cloud Platform services
 cloudPlatformScope :: Proxy '["https://www.googleapis.com/auth/cloud-platform"]
diff --git a/gen/Network/Google/CloudTrace/Types/Product.hs b/gen/Network/Google/CloudTrace/Types/Product.hs
--- a/gen/Network/Google/CloudTrace/Types/Product.hs
+++ b/gen/Network/Google/CloudTrace/Types/Product.hs
@@ -20,318 +20,1249 @@
 import           Network.Google.CloudTrace.Types.Sum
 import           Network.Google.Prelude
 
--- | A generic empty message that you can re-use to avoid defining duplicated
--- empty messages in your APIs. A typical example is to use it as the
--- request or the response type of an API method. For instance: service Foo
--- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
--- JSON representation for \`Empty\` is empty JSON object \`{}\`.
---
--- /See:/ 'empty' smart constructor.
-data Empty =
-    Empty'
-    deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Empty' with the minimum fields required to make a request.
---
-empty
-    :: Empty
-empty = Empty'
-
-instance FromJSON Empty where
-        parseJSON = withObject "Empty" (\ o -> pure Empty')
-
-instance ToJSON Empty where
-        toJSON = const emptyObject
-
--- | Collection of labels associated with the span.
---
--- /See:/ 'traceSpanLabels' smart constructor.
-newtype TraceSpanLabels = TraceSpanLabels'
-    { _tslAddtional :: HashMap Text Text
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TraceSpanLabels' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tslAddtional'
-traceSpanLabels
-    :: HashMap Text Text -- ^ 'tslAddtional'
-    -> TraceSpanLabels
-traceSpanLabels pTslAddtional_ =
-    TraceSpanLabels'
-    { _tslAddtional = _Coerce # pTslAddtional_
-    }
-
-tslAddtional :: Lens' TraceSpanLabels (HashMap Text Text)
-tslAddtional
-  = lens _tslAddtional (\ s a -> s{_tslAddtional = a})
-      . _Coerce
-
-instance FromJSON TraceSpanLabels where
-        parseJSON
-          = withObject "TraceSpanLabels"
-              (\ o -> TraceSpanLabels' <$> (parseJSONObject o))
-
-instance ToJSON TraceSpanLabels where
-        toJSON = toJSON . _tslAddtional
-
--- | List of new or updated traces.
---
--- /See:/ 'traces' smart constructor.
-newtype Traces = Traces'
-    { _tTraces :: Maybe [Trace]
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Traces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tTraces'
-traces
-    :: Traces
-traces =
-    Traces'
-    { _tTraces = Nothing
-    }
-
--- | List of traces.
-tTraces :: Lens' Traces [Trace]
-tTraces
-  = lens _tTraces (\ s a -> s{_tTraces = a}) . _Default
-      . _Coerce
-
-instance FromJSON Traces where
-        parseJSON
-          = withObject "Traces"
-              (\ o -> Traces' <$> (o .:? "traces" .!= mempty))
-
-instance ToJSON Traces where
-        toJSON Traces'{..}
-          = object (catMaybes [("traces" .=) <$> _tTraces])
-
--- | A span represents a single timed event within a trace. Spans can be
--- nested and form a trace tree. Often, a trace contains a root span that
--- describes the end-to-end latency of an operation and, optionally, one or
--- more subspans for its suboperations. Spans do not need to be contiguous.
--- There may be gaps between spans in a trace.
---
--- /See:/ 'traceSpan' smart constructor.
-data TraceSpan = TraceSpan'
-    { _tsStartTime    :: !(Maybe Text)
-    , _tsKind         :: !(Maybe Text)
-    , _tsName         :: !(Maybe Text)
-    , _tsEndTime      :: !(Maybe Text)
-    , _tsLabels       :: !(Maybe TraceSpanLabels)
-    , _tsParentSpanId :: !(Maybe (Textual Word64))
-    , _tsSpanId       :: !(Maybe (Textual Word64))
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'TraceSpan' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tsStartTime'
---
--- * 'tsKind'
---
--- * 'tsName'
---
--- * 'tsEndTime'
---
--- * 'tsLabels'
---
--- * 'tsParentSpanId'
---
--- * 'tsSpanId'
-traceSpan
-    :: TraceSpan
-traceSpan =
-    TraceSpan'
-    { _tsStartTime = Nothing
-    , _tsKind = Nothing
-    , _tsName = Nothing
-    , _tsEndTime = Nothing
-    , _tsLabels = Nothing
-    , _tsParentSpanId = Nothing
-    , _tsSpanId = Nothing
-    }
-
--- | Start time of the span in nanoseconds from the UNIX epoch.
-tsStartTime :: Lens' TraceSpan (Maybe Text)
-tsStartTime
-  = lens _tsStartTime (\ s a -> s{_tsStartTime = a})
-
--- | Distinguishes between spans generated in a particular context. For
--- example, two spans with the same name may be distinguished using
--- \`RPC_CLIENT\` and \`RPC_SERVER\` to identify queueing latency
--- associated with the span.
-tsKind :: Lens' TraceSpan (Maybe Text)
-tsKind = lens _tsKind (\ s a -> s{_tsKind = a})
-
--- | Name of the trace. The trace name is sanitized and displayed in the
--- Stackdriver Trace tool in the {% dynamic print site_values.console_name
--- %}. The name may be a method name or some other per-call site name. For
--- the same executable and the same call point, a best practice is to use a
--- consistent name, which makes it easier to correlate cross-trace spans.
-tsName :: Lens' TraceSpan (Maybe Text)
-tsName = lens _tsName (\ s a -> s{_tsName = a})
-
--- | End time of the span in nanoseconds from the UNIX epoch.
-tsEndTime :: Lens' TraceSpan (Maybe Text)
-tsEndTime
-  = lens _tsEndTime (\ s a -> s{_tsEndTime = a})
-
--- | Collection of labels associated with the span.
-tsLabels :: Lens' TraceSpan (Maybe TraceSpanLabels)
-tsLabels = lens _tsLabels (\ s a -> s{_tsLabels = a})
-
--- | ID of the parent span, if any. Optional.
-tsParentSpanId :: Lens' TraceSpan (Maybe Word64)
-tsParentSpanId
-  = lens _tsParentSpanId
-      (\ s a -> s{_tsParentSpanId = a})
-      . mapping _Coerce
-
--- | Identifier for the span. This identifier must be unique within a trace.
-tsSpanId :: Lens' TraceSpan (Maybe Word64)
-tsSpanId
-  = lens _tsSpanId (\ s a -> s{_tsSpanId = a}) .
-      mapping _Coerce
-
-instance FromJSON TraceSpan where
-        parseJSON
-          = withObject "TraceSpan"
-              (\ o ->
-                 TraceSpan' <$>
-                   (o .:? "startTime") <*> (o .:? "kind") <*>
-                     (o .:? "name")
-                     <*> (o .:? "endTime")
-                     <*> (o .:? "labels")
-                     <*> (o .:? "parentSpanId")
-                     <*> (o .:? "spanId"))
-
-instance ToJSON TraceSpan where
-        toJSON TraceSpan'{..}
-          = object
-              (catMaybes
-                 [("startTime" .=) <$> _tsStartTime,
-                  ("kind" .=) <$> _tsKind, ("name" .=) <$> _tsName,
-                  ("endTime" .=) <$> _tsEndTime,
-                  ("labels" .=) <$> _tsLabels,
-                  ("parentSpanId" .=) <$> _tsParentSpanId,
-                  ("spanId" .=) <$> _tsSpanId])
-
--- | The response message for the \`ListTraces\` method.
---
--- /See:/ 'listTracesResponse' smart constructor.
-data ListTracesResponse = ListTracesResponse'
-    { _ltrNextPageToken :: !(Maybe Text)
-    , _ltrTraces        :: !(Maybe [Trace])
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ListTracesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltrNextPageToken'
---
--- * 'ltrTraces'
-listTracesResponse
-    :: ListTracesResponse
-listTracesResponse =
-    ListTracesResponse'
-    { _ltrNextPageToken = Nothing
-    , _ltrTraces = Nothing
-    }
-
--- | If defined, indicates that there are more traces that match the request
--- and that this value should be passed to the next request to continue
--- retrieving additional traces.
-ltrNextPageToken :: Lens' ListTracesResponse (Maybe Text)
-ltrNextPageToken
-  = lens _ltrNextPageToken
-      (\ s a -> s{_ltrNextPageToken = a})
-
--- | List of trace records returned.
-ltrTraces :: Lens' ListTracesResponse [Trace]
-ltrTraces
-  = lens _ltrTraces (\ s a -> s{_ltrTraces = a}) .
-      _Default
-      . _Coerce
-
-instance FromJSON ListTracesResponse where
-        parseJSON
-          = withObject "ListTracesResponse"
-              (\ o ->
-                 ListTracesResponse' <$>
-                   (o .:? "nextPageToken") <*>
-                     (o .:? "traces" .!= mempty))
-
-instance ToJSON ListTracesResponse where
-        toJSON ListTracesResponse'{..}
-          = object
-              (catMaybes
-                 [("nextPageToken" .=) <$> _ltrNextPageToken,
-                  ("traces" .=) <$> _ltrTraces])
-
--- | A trace describes how long it takes for an application to perform an
--- operation. It consists of a set of spans, each of which represent a
--- single timed event within the operation.
---
--- /See:/ 'trace' smart constructor.
-data Trace = Trace'
-    { _tTraceId   :: !(Maybe Text)
-    , _tSpans     :: !(Maybe [TraceSpan])
-    , _tProjectId :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'Trace' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'tTraceId'
---
--- * 'tSpans'
---
--- * 'tProjectId'
-trace
-    :: Trace
-trace =
-    Trace'
-    { _tTraceId = Nothing
-    , _tSpans = Nothing
-    , _tProjectId = Nothing
-    }
-
--- | Globally unique identifier for the trace. This identifier is a 128-bit
--- numeric value formatted as a 32-byte hex string.
-tTraceId :: Lens' Trace (Maybe Text)
-tTraceId = lens _tTraceId (\ s a -> s{_tTraceId = a})
-
--- | Collection of spans in the trace.
-tSpans :: Lens' Trace [TraceSpan]
-tSpans
-  = lens _tSpans (\ s a -> s{_tSpans = a}) . _Default .
-      _Coerce
-
--- | Project ID of the Cloud project where the trace data is stored.
-tProjectId :: Lens' Trace (Maybe Text)
-tProjectId
-  = lens _tProjectId (\ s a -> s{_tProjectId = a})
-
-instance FromJSON Trace where
-        parseJSON
-          = withObject "Trace"
-              (\ o ->
-                 Trace' <$>
-                   (o .:? "traceId") <*> (o .:? "spans" .!= mempty) <*>
-                     (o .:? "projectId"))
-
-instance ToJSON Trace where
-        toJSON Trace'{..}
-          = object
-              (catMaybes
-                 [("traceId" .=) <$> _tTraceId,
-                  ("spans" .=) <$> _tSpans,
-                  ("projectId" .=) <$> _tProjectId])
+-- | A span represents a single operation within a trace. Spans can be nested
+-- to form a trace tree. Often, a trace contains a root span that describes
+-- the end-to-end latency, and one or more subspans for its sub-operations.
+-- A trace can also contain multiple root spans, or none at all. Spans do
+-- not need to be contiguous—there may be gaps or overlaps between spans in
+-- a trace.
+--
+-- /See:/ 'span' smart constructor.
+data Span = Span'
+    { _sStatus                  :: !(Maybe Status)
+    , _sStartTime               :: !(Maybe DateTime')
+    , _sChildSpanCount          :: !(Maybe (Textual Int32))
+    , _sSameProcessAsParentSpan :: !(Maybe Bool)
+    , _sName                    :: !(Maybe Text)
+    , _sStackTrace              :: !(Maybe StackTrace)
+    , _sAttributes              :: !(Maybe Attributes)
+    , _sEndTime                 :: !(Maybe DateTime')
+    , _sTimeEvents              :: !(Maybe TimeEvents)
+    , _sDisplayName             :: !(Maybe TruncatableString)
+    , _sParentSpanId            :: !(Maybe Text)
+    , _sLinks                   :: !(Maybe Links)
+    , _sSpanId                  :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Span' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sStatus'
+--
+-- * 'sStartTime'
+--
+-- * 'sChildSpanCount'
+--
+-- * 'sSameProcessAsParentSpan'
+--
+-- * 'sName'
+--
+-- * 'sStackTrace'
+--
+-- * 'sAttributes'
+--
+-- * 'sEndTime'
+--
+-- * 'sTimeEvents'
+--
+-- * 'sDisplayName'
+--
+-- * 'sParentSpanId'
+--
+-- * 'sLinks'
+--
+-- * 'sSpanId'
+span
+    :: Span
+span =
+    Span'
+    { _sStatus = Nothing
+    , _sStartTime = Nothing
+    , _sChildSpanCount = Nothing
+    , _sSameProcessAsParentSpan = Nothing
+    , _sName = Nothing
+    , _sStackTrace = Nothing
+    , _sAttributes = Nothing
+    , _sEndTime = Nothing
+    , _sTimeEvents = Nothing
+    , _sDisplayName = Nothing
+    , _sParentSpanId = Nothing
+    , _sLinks = Nothing
+    , _sSpanId = Nothing
+    }
+
+-- | An optional final status for this span.
+sStatus :: Lens' Span (Maybe Status)
+sStatus = lens _sStatus (\ s a -> s{_sStatus = a})
+
+-- | The start time of the span. On the client side, this is the time kept by
+-- the local machine where the span execution starts. On the server side,
+-- this is the time when the server\'s application handler starts running.
+sStartTime :: Lens' Span (Maybe UTCTime)
+sStartTime
+  = lens _sStartTime (\ s a -> s{_sStartTime = a}) .
+      mapping _DateTime
+
+-- | An optional number of child spans that were generated while this span
+-- was active. If set, allows implementation to detect missing child spans.
+sChildSpanCount :: Lens' Span (Maybe Int32)
+sChildSpanCount
+  = lens _sChildSpanCount
+      (\ s a -> s{_sChildSpanCount = a})
+      . mapping _Coerce
+
+-- | (Optional) Set this parameter to indicate whether this span is in the
+-- same process as its parent. If you do not set this parameter,
+-- Stackdriver Trace is unable to take advantage of this helpful
+-- information.
+sSameProcessAsParentSpan :: Lens' Span (Maybe Bool)
+sSameProcessAsParentSpan
+  = lens _sSameProcessAsParentSpan
+      (\ s a -> s{_sSameProcessAsParentSpan = a})
+
+-- | The resource name of the span in the following format:
+-- projects\/[PROJECT_ID]\/traces\/[TRACE_ID]\/spans\/SPAN_ID is a unique
+-- identifier for a trace within a project; it is a 32-character
+-- hexadecimal encoding of a 16-byte array. [SPAN_ID] is a unique
+-- identifier for a span within a trace; it is a 16-character hexadecimal
+-- encoding of an 8-byte array.
+sName :: Lens' Span (Maybe Text)
+sName = lens _sName (\ s a -> s{_sName = a})
+
+-- | Stack trace captured at the start of the span.
+sStackTrace :: Lens' Span (Maybe StackTrace)
+sStackTrace
+  = lens _sStackTrace (\ s a -> s{_sStackTrace = a})
+
+-- | A set of attributes on the span. You can have up to 32 attributes per
+-- span.
+sAttributes :: Lens' Span (Maybe Attributes)
+sAttributes
+  = lens _sAttributes (\ s a -> s{_sAttributes = a})
+
+-- | The end time of the span. On the client side, this is the time kept by
+-- the local machine where the span execution ends. On the server side,
+-- this is the time when the server application handler stops running.
+sEndTime :: Lens' Span (Maybe UTCTime)
+sEndTime
+  = lens _sEndTime (\ s a -> s{_sEndTime = a}) .
+      mapping _DateTime
+
+-- | A set of time events. You can have up to 32 annotations and 128 message
+-- events per span.
+sTimeEvents :: Lens' Span (Maybe TimeEvents)
+sTimeEvents
+  = lens _sTimeEvents (\ s a -> s{_sTimeEvents = a})
+
+-- | A description of the span\'s operation (up to 128 bytes). Stackdriver
+-- Trace displays the description in the Google Cloud Platform Console. For
+-- example, the display name can be a qualified method name or a file name
+-- and a line number where the operation is called. A best practice is to
+-- use the same display name within an application and at the same call
+-- point. This makes it easier to correlate spans in different traces.
+sDisplayName :: Lens' Span (Maybe TruncatableString)
+sDisplayName
+  = lens _sDisplayName (\ s a -> s{_sDisplayName = a})
+
+-- | The [SPAN_ID] of this span\'s parent span. If this is a root span, then
+-- this field must be empty.
+sParentSpanId :: Lens' Span (Maybe Text)
+sParentSpanId
+  = lens _sParentSpanId
+      (\ s a -> s{_sParentSpanId = a})
+
+-- | Links associated with the span. You can have up to 128 links per Span.
+sLinks :: Lens' Span (Maybe Links)
+sLinks = lens _sLinks (\ s a -> s{_sLinks = a})
+
+-- | The [SPAN_ID] portion of the span\'s resource name.
+sSpanId :: Lens' Span (Maybe Text)
+sSpanId = lens _sSpanId (\ s a -> s{_sSpanId = a})
+
+instance FromJSON Span where
+        parseJSON
+          = withObject "Span"
+              (\ o ->
+                 Span' <$>
+                   (o .:? "status") <*> (o .:? "startTime") <*>
+                     (o .:? "childSpanCount")
+                     <*> (o .:? "sameProcessAsParentSpan")
+                     <*> (o .:? "name")
+                     <*> (o .:? "stackTrace")
+                     <*> (o .:? "attributes")
+                     <*> (o .:? "endTime")
+                     <*> (o .:? "timeEvents")
+                     <*> (o .:? "displayName")
+                     <*> (o .:? "parentSpanId")
+                     <*> (o .:? "links")
+                     <*> (o .:? "spanId"))
+
+instance ToJSON Span where
+        toJSON Span'{..}
+          = object
+              (catMaybes
+                 [("status" .=) <$> _sStatus,
+                  ("startTime" .=) <$> _sStartTime,
+                  ("childSpanCount" .=) <$> _sChildSpanCount,
+                  ("sameProcessAsParentSpan" .=) <$>
+                    _sSameProcessAsParentSpan,
+                  ("name" .=) <$> _sName,
+                  ("stackTrace" .=) <$> _sStackTrace,
+                  ("attributes" .=) <$> _sAttributes,
+                  ("endTime" .=) <$> _sEndTime,
+                  ("timeEvents" .=) <$> _sTimeEvents,
+                  ("displayName" .=) <$> _sDisplayName,
+                  ("parentSpanId" .=) <$> _sParentSpanId,
+                  ("links" .=) <$> _sLinks,
+                  ("spanId" .=) <$> _sSpanId])
+
+-- | Represents a string that might be shortened to a specified length.
+--
+-- /See:/ 'truncatableString' smart constructor.
+data TruncatableString = TruncatableString'
+    { _tsValue              :: !(Maybe Text)
+    , _tsTruncatedByteCount :: !(Maybe (Textual Int32))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TruncatableString' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsValue'
+--
+-- * 'tsTruncatedByteCount'
+truncatableString
+    :: TruncatableString
+truncatableString =
+    TruncatableString'
+    { _tsValue = Nothing
+    , _tsTruncatedByteCount = Nothing
+    }
+
+-- | The shortened string. For example, if the original string is 500 bytes
+-- long and the limit of the string is 128 bytes, then \`value\` contains
+-- the first 128 bytes of the 500-byte string. Truncation always happens on
+-- a UTF8 character boundary. If there are multi-byte characters in the
+-- string, then the length of the shortened string might be less than the
+-- size limit.
+tsValue :: Lens' TruncatableString (Maybe Text)
+tsValue = lens _tsValue (\ s a -> s{_tsValue = a})
+
+-- | The number of bytes removed from the original string. If this value is
+-- 0, then the string was not shortened.
+tsTruncatedByteCount :: Lens' TruncatableString (Maybe Int32)
+tsTruncatedByteCount
+  = lens _tsTruncatedByteCount
+      (\ s a -> s{_tsTruncatedByteCount = a})
+      . mapping _Coerce
+
+instance FromJSON TruncatableString where
+        parseJSON
+          = withObject "TruncatableString"
+              (\ o ->
+                 TruncatableString' <$>
+                   (o .:? "value") <*> (o .:? "truncatedByteCount"))
+
+instance ToJSON TruncatableString where
+        toJSON TruncatableString'{..}
+          = object
+              (catMaybes
+                 [("value" .=) <$> _tsValue,
+                  ("truncatedByteCount" .=) <$> _tsTruncatedByteCount])
+
+-- | The \`Status\` type defines a logical error model that is suitable for
+-- different programming environments, including REST APIs and RPC APIs. It
+-- is used by [gRPC](https:\/\/github.com\/grpc). The error model is
+-- designed to be: - Simple to use and understand for most users - Flexible
+-- enough to meet unexpected needs # Overview The \`Status\` message
+-- contains three pieces of data: error code, error message, and error
+-- details. The error code should be an enum value of google.rpc.Code, but
+-- it may accept additional error codes if needed. The error message should
+-- be a developer-facing English message that helps developers *understand*
+-- and *resolve* the error. If a localized user-facing error message is
+-- needed, put the localized message in the error details or localize it in
+-- the client. The optional error details may contain arbitrary information
+-- about the error. There is a predefined set of error detail types in the
+-- package \`google.rpc\` that can be used for common error conditions. #
+-- Language mapping The \`Status\` message is the logical representation of
+-- the error model, but it is not necessarily the actual wire format. When
+-- the \`Status\` message is exposed in different client libraries and
+-- different wire protocols, it can be mapped differently. For example, it
+-- will likely be mapped to some exceptions in Java, but more likely mapped
+-- to some error codes in C. # Other uses The error model and the
+-- \`Status\` message can be used in a variety of environments, either with
+-- or without APIs, to provide a consistent developer experience across
+-- different environments. Example uses of this error model include: -
+-- Partial errors. If a service needs to return partial errors to the
+-- client, it may embed the \`Status\` in the normal response to indicate
+-- the partial errors. - Workflow errors. A typical workflow has multiple
+-- steps. Each step may have a \`Status\` message for error reporting. -
+-- Batch operations. If a client uses batch request and batch response, the
+-- \`Status\` message should be used directly inside batch response, one
+-- for each error sub-response. - Asynchronous operations. If an API call
+-- embeds asynchronous operation results in its response, the status of
+-- those operations should be represented directly using the \`Status\`
+-- message. - Logging. If some API errors are stored in logs, the message
+-- \`Status\` could be used directly after any stripping needed for
+-- security\/privacy reasons.
+--
+-- /See:/ 'status' smart constructor.
+data Status = Status'
+    { _sDetails :: !(Maybe [StatusDetailsItem])
+    , _sCode    :: !(Maybe (Textual Int32))
+    , _sMessage :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Status' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sDetails'
+--
+-- * 'sCode'
+--
+-- * 'sMessage'
+status
+    :: Status
+status =
+    Status'
+    { _sDetails = Nothing
+    , _sCode = Nothing
+    , _sMessage = Nothing
+    }
+
+-- | A list of messages that carry the error details. There is a common set
+-- of message types for APIs to use.
+sDetails :: Lens' Status [StatusDetailsItem]
+sDetails
+  = lens _sDetails (\ s a -> s{_sDetails = a}) .
+      _Default
+      . _Coerce
+
+-- | The status code, which should be an enum value of google.rpc.Code.
+sCode :: Lens' Status (Maybe Int32)
+sCode
+  = lens _sCode (\ s a -> s{_sCode = a}) .
+      mapping _Coerce
+
+-- | A developer-facing error message, which should be in English. Any
+-- user-facing error message should be localized and sent in the
+-- google.rpc.Status.details field, or localized by the client.
+sMessage :: Lens' Status (Maybe Text)
+sMessage = lens _sMessage (\ s a -> s{_sMessage = a})
+
+instance FromJSON Status where
+        parseJSON
+          = withObject "Status"
+              (\ o ->
+                 Status' <$>
+                   (o .:? "details" .!= mempty) <*> (o .:? "code") <*>
+                     (o .:? "message"))
+
+instance ToJSON Status where
+        toJSON Status'{..}
+          = object
+              (catMaybes
+                 [("details" .=) <$> _sDetails,
+                  ("code" .=) <$> _sCode,
+                  ("message" .=) <$> _sMessage])
+
+-- | The set of attributes. Each attribute\'s key can be up to 128 bytes
+-- long. The value can be a string up to 256 bytes, a signed 64-bit
+-- integer, or the Boolean values \`true\` and \`false\`. For example:
+-- \"\/instance_id\": \"my-instance\" \"\/http\/user_agent\": \"\"
+-- \"\/http\/request_bytes\": 300 \"abc.com\/myattribute\": true
+--
+-- /See:/ 'attributesAttributeMap' smart constructor.
+newtype AttributesAttributeMap = AttributesAttributeMap'
+    { _aamAddtional :: HashMap Text AttributeValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttributesAttributeMap' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aamAddtional'
+attributesAttributeMap
+    :: HashMap Text AttributeValue -- ^ 'aamAddtional'
+    -> AttributesAttributeMap
+attributesAttributeMap pAamAddtional_ =
+    AttributesAttributeMap'
+    { _aamAddtional = _Coerce # pAamAddtional_
+    }
+
+aamAddtional :: Lens' AttributesAttributeMap (HashMap Text AttributeValue)
+aamAddtional
+  = lens _aamAddtional (\ s a -> s{_aamAddtional = a})
+      . _Coerce
+
+instance FromJSON AttributesAttributeMap where
+        parseJSON
+          = withObject "AttributesAttributeMap"
+              (\ o ->
+                 AttributesAttributeMap' <$> (parseJSONObject o))
+
+instance ToJSON AttributesAttributeMap where
+        toJSON = toJSON . _aamAddtional
+
+-- | Text annotation with a set of attributes.
+--
+-- /See:/ 'annotation' smart constructor.
+data Annotation = Annotation'
+    { _aAttributes  :: !(Maybe Attributes)
+    , _aDescription :: !(Maybe TruncatableString)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Annotation' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aAttributes'
+--
+-- * 'aDescription'
+annotation
+    :: Annotation
+annotation =
+    Annotation'
+    { _aAttributes = Nothing
+    , _aDescription = Nothing
+    }
+
+-- | A set of attributes on the annotation. You can have up to 4 attributes
+-- per Annotation.
+aAttributes :: Lens' Annotation (Maybe Attributes)
+aAttributes
+  = lens _aAttributes (\ s a -> s{_aAttributes = a})
+
+-- | A user-supplied message describing the event. The maximum length for the
+-- description is 256 bytes.
+aDescription :: Lens' Annotation (Maybe TruncatableString)
+aDescription
+  = lens _aDescription (\ s a -> s{_aDescription = a})
+
+instance FromJSON Annotation where
+        parseJSON
+          = withObject "Annotation"
+              (\ o ->
+                 Annotation' <$>
+                   (o .:? "attributes") <*> (o .:? "description"))
+
+instance ToJSON Annotation where
+        toJSON Annotation'{..}
+          = object
+              (catMaybes
+                 [("attributes" .=) <$> _aAttributes,
+                  ("description" .=) <$> _aDescription])
+
+-- | The allowed types for [VALUE] in a \`[KEY]:[VALUE]\` attribute.
+--
+-- /See:/ 'attributeValue' smart constructor.
+data AttributeValue = AttributeValue'
+    { _avBoolValue   :: !(Maybe Bool)
+    , _avIntValue    :: !(Maybe (Textual Int64))
+    , _avStringValue :: !(Maybe TruncatableString)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AttributeValue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'avBoolValue'
+--
+-- * 'avIntValue'
+--
+-- * 'avStringValue'
+attributeValue
+    :: AttributeValue
+attributeValue =
+    AttributeValue'
+    { _avBoolValue = Nothing
+    , _avIntValue = Nothing
+    , _avStringValue = Nothing
+    }
+
+-- | A Boolean value represented by \`true\` or \`false\`.
+avBoolValue :: Lens' AttributeValue (Maybe Bool)
+avBoolValue
+  = lens _avBoolValue (\ s a -> s{_avBoolValue = a})
+
+-- | A 64-bit signed integer.
+avIntValue :: Lens' AttributeValue (Maybe Int64)
+avIntValue
+  = lens _avIntValue (\ s a -> s{_avIntValue = a}) .
+      mapping _Coerce
+
+-- | A string up to 256 bytes long.
+avStringValue :: Lens' AttributeValue (Maybe TruncatableString)
+avStringValue
+  = lens _avStringValue
+      (\ s a -> s{_avStringValue = a})
+
+instance FromJSON AttributeValue where
+        parseJSON
+          = withObject "AttributeValue"
+              (\ o ->
+                 AttributeValue' <$>
+                   (o .:? "boolValue") <*> (o .:? "intValue") <*>
+                     (o .:? "stringValue"))
+
+instance ToJSON AttributeValue where
+        toJSON AttributeValue'{..}
+          = object
+              (catMaybes
+                 [("boolValue" .=) <$> _avBoolValue,
+                  ("intValue" .=) <$> _avIntValue,
+                  ("stringValue" .=) <$> _avStringValue])
+
+-- | An event describing a message sent\/received between Spans.
+--
+-- /See:/ 'messageEvent' smart constructor.
+data MessageEvent = MessageEvent'
+    { _meId                    :: !(Maybe (Textual Int64))
+    , _meUncompressedSizeBytes :: !(Maybe (Textual Int64))
+    , _meType                  :: !(Maybe MessageEventType)
+    , _meCompressedSizeBytes   :: !(Maybe (Textual Int64))
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'MessageEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'meId'
+--
+-- * 'meUncompressedSizeBytes'
+--
+-- * 'meType'
+--
+-- * 'meCompressedSizeBytes'
+messageEvent
+    :: MessageEvent
+messageEvent =
+    MessageEvent'
+    { _meId = Nothing
+    , _meUncompressedSizeBytes = Nothing
+    , _meType = Nothing
+    , _meCompressedSizeBytes = Nothing
+    }
+
+-- | An identifier for the MessageEvent\'s message that can be used to match
+-- SENT and RECEIVED MessageEvents. It is recommended to be unique within a
+-- Span.
+meId :: Lens' MessageEvent (Maybe Int64)
+meId
+  = lens _meId (\ s a -> s{_meId = a}) .
+      mapping _Coerce
+
+-- | The number of uncompressed bytes sent or received.
+meUncompressedSizeBytes :: Lens' MessageEvent (Maybe Int64)
+meUncompressedSizeBytes
+  = lens _meUncompressedSizeBytes
+      (\ s a -> s{_meUncompressedSizeBytes = a})
+      . mapping _Coerce
+
+-- | Type of MessageEvent. Indicates whether the message was sent or
+-- received.
+meType :: Lens' MessageEvent (Maybe MessageEventType)
+meType = lens _meType (\ s a -> s{_meType = a})
+
+-- | The number of compressed bytes sent or received. If missing assumed to
+-- be the same size as uncompressed.
+meCompressedSizeBytes :: Lens' MessageEvent (Maybe Int64)
+meCompressedSizeBytes
+  = lens _meCompressedSizeBytes
+      (\ s a -> s{_meCompressedSizeBytes = a})
+      . mapping _Coerce
+
+instance FromJSON MessageEvent where
+        parseJSON
+          = withObject "MessageEvent"
+              (\ o ->
+                 MessageEvent' <$>
+                   (o .:? "id") <*> (o .:? "uncompressedSizeBytes") <*>
+                     (o .:? "type")
+                     <*> (o .:? "compressedSizeBytes"))
+
+instance ToJSON MessageEvent where
+        toJSON MessageEvent'{..}
+          = object
+              (catMaybes
+                 [("id" .=) <$> _meId,
+                  ("uncompressedSizeBytes" .=) <$>
+                    _meUncompressedSizeBytes,
+                  ("type" .=) <$> _meType,
+                  ("compressedSizeBytes" .=) <$>
+                    _meCompressedSizeBytes])
+
+-- | A generic empty message that you can re-use to avoid defining duplicated
+-- empty messages in your APIs. A typical example is to use it as the
+-- request or the response type of an API method. For instance: service Foo
+-- { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The
+-- JSON representation for \`Empty\` is empty JSON object \`{}\`.
+--
+-- /See:/ 'empty' smart constructor.
+data Empty =
+    Empty'
+    deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Empty' with the minimum fields required to make a request.
+--
+empty
+    :: Empty
+empty = Empty'
+
+instance FromJSON Empty where
+        parseJSON = withObject "Empty" (\ o -> pure Empty')
+
+instance ToJSON Empty where
+        toJSON = const emptyObject
+
+-- | A pointer from the current span to another span in the same trace or in
+-- a different trace. For example, this can be used in batching operations,
+-- where a single batch handler processes multiple requests from different
+-- traces or when the handler receives a request from a different project.
+--
+-- /See:/ 'link' smart constructor.
+data Link = Link'
+    { _lTraceId    :: !(Maybe Text)
+    , _lAttributes :: !(Maybe Attributes)
+    , _lType       :: !(Maybe LinkType)
+    , _lSpanId     :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Link' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lTraceId'
+--
+-- * 'lAttributes'
+--
+-- * 'lType'
+--
+-- * 'lSpanId'
+link
+    :: Link
+link =
+    Link'
+    { _lTraceId = Nothing
+    , _lAttributes = Nothing
+    , _lType = Nothing
+    , _lSpanId = Nothing
+    }
+
+-- | The [TRACE_ID] for a trace within a project.
+lTraceId :: Lens' Link (Maybe Text)
+lTraceId = lens _lTraceId (\ s a -> s{_lTraceId = a})
+
+-- | A set of attributes on the link. You have have up to 32 attributes per
+-- link.
+lAttributes :: Lens' Link (Maybe Attributes)
+lAttributes
+  = lens _lAttributes (\ s a -> s{_lAttributes = a})
+
+-- | The relationship of the current span relative to the linked span.
+lType :: Lens' Link (Maybe LinkType)
+lType = lens _lType (\ s a -> s{_lType = a})
+
+-- | The [SPAN_ID] for a span within a trace.
+lSpanId :: Lens' Link (Maybe Text)
+lSpanId = lens _lSpanId (\ s a -> s{_lSpanId = a})
+
+instance FromJSON Link where
+        parseJSON
+          = withObject "Link"
+              (\ o ->
+                 Link' <$>
+                   (o .:? "traceId") <*> (o .:? "attributes") <*>
+                     (o .:? "type")
+                     <*> (o .:? "spanId"))
+
+instance ToJSON Link where
+        toJSON Link'{..}
+          = object
+              (catMaybes
+                 [("traceId" .=) <$> _lTraceId,
+                  ("attributes" .=) <$> _lAttributes,
+                  ("type" .=) <$> _lType, ("spanId" .=) <$> _lSpanId])
+
+--
+-- /See:/ 'statusDetailsItem' smart constructor.
+newtype StatusDetailsItem = StatusDetailsItem'
+    { _sdiAddtional :: HashMap Text JSONValue
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StatusDetailsItem' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiAddtional'
+statusDetailsItem
+    :: HashMap Text JSONValue -- ^ 'sdiAddtional'
+    -> StatusDetailsItem
+statusDetailsItem pSdiAddtional_ =
+    StatusDetailsItem'
+    { _sdiAddtional = _Coerce # pSdiAddtional_
+    }
+
+-- | Properties of the object. Contains field \'type with type URL.
+sdiAddtional :: Lens' StatusDetailsItem (HashMap Text JSONValue)
+sdiAddtional
+  = lens _sdiAddtional (\ s a -> s{_sdiAddtional = a})
+      . _Coerce
+
+instance FromJSON StatusDetailsItem where
+        parseJSON
+          = withObject "StatusDetailsItem"
+              (\ o -> StatusDetailsItem' <$> (parseJSONObject o))
+
+instance ToJSON StatusDetailsItem where
+        toJSON = toJSON . _sdiAddtional
+
+-- | A call stack appearing in a trace.
+--
+-- /See:/ 'stackTrace' smart constructor.
+data StackTrace = StackTrace'
+    { _stStackTraceHashId :: !(Maybe (Textual Int64))
+    , _stStackFrames      :: !(Maybe StackFrames)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackTrace' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stStackTraceHashId'
+--
+-- * 'stStackFrames'
+stackTrace
+    :: StackTrace
+stackTrace =
+    StackTrace'
+    { _stStackTraceHashId = Nothing
+    , _stStackFrames = Nothing
+    }
+
+-- | The hash ID is used to conserve network bandwidth for duplicate stack
+-- traces within a single trace. Often multiple spans will have identical
+-- stack traces. The first occurrence of a stack trace should contain both
+-- the \`stackFrame\` content and a value in \`stackTraceHashId\`.
+-- Subsequent spans within the same request can refer to that stack trace
+-- by only setting \`stackTraceHashId\`.
+stStackTraceHashId :: Lens' StackTrace (Maybe Int64)
+stStackTraceHashId
+  = lens _stStackTraceHashId
+      (\ s a -> s{_stStackTraceHashId = a})
+      . mapping _Coerce
+
+-- | Stack frames in this stack trace. A maximum of 128 frames are allowed.
+stStackFrames :: Lens' StackTrace (Maybe StackFrames)
+stStackFrames
+  = lens _stStackFrames
+      (\ s a -> s{_stStackFrames = a})
+
+instance FromJSON StackTrace where
+        parseJSON
+          = withObject "StackTrace"
+              (\ o ->
+                 StackTrace' <$>
+                   (o .:? "stackTraceHashId") <*> (o .:? "stackFrames"))
+
+instance ToJSON StackTrace where
+        toJSON StackTrace'{..}
+          = object
+              (catMaybes
+                 [("stackTraceHashId" .=) <$> _stStackTraceHashId,
+                  ("stackFrames" .=) <$> _stStackFrames])
+
+-- | The request message for the \`BatchWriteSpans\` method.
+--
+-- /See:/ 'batchWriteSpansRequest' smart constructor.
+newtype BatchWriteSpansRequest = BatchWriteSpansRequest'
+    { _bwsrSpans :: Maybe [Span]
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'BatchWriteSpansRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bwsrSpans'
+batchWriteSpansRequest
+    :: BatchWriteSpansRequest
+batchWriteSpansRequest =
+    BatchWriteSpansRequest'
+    { _bwsrSpans = Nothing
+    }
+
+-- | A list of new spans. The span names must not match existing spans, or
+-- the results are undefined.
+bwsrSpans :: Lens' BatchWriteSpansRequest [Span]
+bwsrSpans
+  = lens _bwsrSpans (\ s a -> s{_bwsrSpans = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON BatchWriteSpansRequest where
+        parseJSON
+          = withObject "BatchWriteSpansRequest"
+              (\ o ->
+                 BatchWriteSpansRequest' <$>
+                   (o .:? "spans" .!= mempty))
+
+instance ToJSON BatchWriteSpansRequest where
+        toJSON BatchWriteSpansRequest'{..}
+          = object (catMaybes [("spans" .=) <$> _bwsrSpans])
+
+-- | A set of attributes, each in the format \`[KEY]:[VALUE]\`.
+--
+-- /See:/ 'attributes' smart constructor.
+data Attributes = Attributes'
+    { _aDroppedAttributesCount :: !(Maybe (Textual Int32))
+    , _aAttributeMap           :: !(Maybe AttributesAttributeMap)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Attributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aDroppedAttributesCount'
+--
+-- * 'aAttributeMap'
+attributes
+    :: Attributes
+attributes =
+    Attributes'
+    { _aDroppedAttributesCount = Nothing
+    , _aAttributeMap = Nothing
+    }
+
+-- | The number of attributes that were discarded. Attributes can be
+-- discarded because their keys are too long or because there are too many
+-- attributes. If this value is 0 then all attributes are valid.
+aDroppedAttributesCount :: Lens' Attributes (Maybe Int32)
+aDroppedAttributesCount
+  = lens _aDroppedAttributesCount
+      (\ s a -> s{_aDroppedAttributesCount = a})
+      . mapping _Coerce
+
+-- | The set of attributes. Each attribute\'s key can be up to 128 bytes
+-- long. The value can be a string up to 256 bytes, a signed 64-bit
+-- integer, or the Boolean values \`true\` and \`false\`. For example:
+-- \"\/instance_id\": \"my-instance\" \"\/http\/user_agent\": \"\"
+-- \"\/http\/request_bytes\": 300 \"abc.com\/myattribute\": true
+aAttributeMap :: Lens' Attributes (Maybe AttributesAttributeMap)
+aAttributeMap
+  = lens _aAttributeMap
+      (\ s a -> s{_aAttributeMap = a})
+
+instance FromJSON Attributes where
+        parseJSON
+          = withObject "Attributes"
+              (\ o ->
+                 Attributes' <$>
+                   (o .:? "droppedAttributesCount") <*>
+                     (o .:? "attributeMap"))
+
+instance ToJSON Attributes where
+        toJSON Attributes'{..}
+          = object
+              (catMaybes
+                 [("droppedAttributesCount" .=) <$>
+                    _aDroppedAttributesCount,
+                  ("attributeMap" .=) <$> _aAttributeMap])
+
+-- | Binary module.
+--
+-- /See:/ 'module'' smart constructor.
+data Module = Module'
+    { _mBuildId :: !(Maybe TruncatableString)
+    , _mModule  :: !(Maybe TruncatableString)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Module' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mBuildId'
+--
+-- * 'mModule'
+module'
+    :: Module
+module' =
+    Module'
+    { _mBuildId = Nothing
+    , _mModule = Nothing
+    }
+
+-- | A unique identifier for the module, usually a hash of its contents (up
+-- to 128 bytes).
+mBuildId :: Lens' Module (Maybe TruncatableString)
+mBuildId = lens _mBuildId (\ s a -> s{_mBuildId = a})
+
+-- | For example: main binary, kernel modules, and dynamic libraries such as
+-- libc.so, sharedlib.so (up to 256 bytes).
+mModule :: Lens' Module (Maybe TruncatableString)
+mModule = lens _mModule (\ s a -> s{_mModule = a})
+
+instance FromJSON Module where
+        parseJSON
+          = withObject "Module"
+              (\ o ->
+                 Module' <$> (o .:? "buildId") <*> (o .:? "module"))
+
+instance ToJSON Module where
+        toJSON Module'{..}
+          = object
+              (catMaybes
+                 [("buildId" .=) <$> _mBuildId,
+                  ("module" .=) <$> _mModule])
+
+-- | A collection of \`TimeEvent\`s. A \`TimeEvent\` is a time-stamped
+-- annotation on the span, consisting of either user-supplied key:value
+-- pairs, or details of a message sent\/received between Spans.
+--
+-- /See:/ 'timeEvents' smart constructor.
+data TimeEvents = TimeEvents'
+    { _teDroppedMessageEventsCount :: !(Maybe (Textual Int32))
+    , _teDroppedAnnotationsCount   :: !(Maybe (Textual Int32))
+    , _teTimeEvent                 :: !(Maybe [TimeEvent])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeEvents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'teDroppedMessageEventsCount'
+--
+-- * 'teDroppedAnnotationsCount'
+--
+-- * 'teTimeEvent'
+timeEvents
+    :: TimeEvents
+timeEvents =
+    TimeEvents'
+    { _teDroppedMessageEventsCount = Nothing
+    , _teDroppedAnnotationsCount = Nothing
+    , _teTimeEvent = Nothing
+    }
+
+-- | The number of dropped message events in all the included time events. If
+-- the value is 0, then no message events were dropped.
+teDroppedMessageEventsCount :: Lens' TimeEvents (Maybe Int32)
+teDroppedMessageEventsCount
+  = lens _teDroppedMessageEventsCount
+      (\ s a -> s{_teDroppedMessageEventsCount = a})
+      . mapping _Coerce
+
+-- | The number of dropped annotations in all the included time events. If
+-- the value is 0, then no annotations were dropped.
+teDroppedAnnotationsCount :: Lens' TimeEvents (Maybe Int32)
+teDroppedAnnotationsCount
+  = lens _teDroppedAnnotationsCount
+      (\ s a -> s{_teDroppedAnnotationsCount = a})
+      . mapping _Coerce
+
+-- | A collection of \`TimeEvent\`s.
+teTimeEvent :: Lens' TimeEvents [TimeEvent]
+teTimeEvent
+  = lens _teTimeEvent (\ s a -> s{_teTimeEvent = a}) .
+      _Default
+      . _Coerce
+
+instance FromJSON TimeEvents where
+        parseJSON
+          = withObject "TimeEvents"
+              (\ o ->
+                 TimeEvents' <$>
+                   (o .:? "droppedMessageEventsCount") <*>
+                     (o .:? "droppedAnnotationsCount")
+                     <*> (o .:? "timeEvent" .!= mempty))
+
+instance ToJSON TimeEvents where
+        toJSON TimeEvents'{..}
+          = object
+              (catMaybes
+                 [("droppedMessageEventsCount" .=) <$>
+                    _teDroppedMessageEventsCount,
+                  ("droppedAnnotationsCount" .=) <$>
+                    _teDroppedAnnotationsCount,
+                  ("timeEvent" .=) <$> _teTimeEvent])
+
+-- | A collection of stack frames, which can be truncated.
+--
+-- /See:/ 'stackFrames' smart constructor.
+data StackFrames = StackFrames'
+    { _sfDroppedFramesCount :: !(Maybe (Textual Int32))
+    , _sfFrame              :: !(Maybe [StackFrame])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackFrames' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfDroppedFramesCount'
+--
+-- * 'sfFrame'
+stackFrames
+    :: StackFrames
+stackFrames =
+    StackFrames'
+    { _sfDroppedFramesCount = Nothing
+    , _sfFrame = Nothing
+    }
+
+-- | The number of stack frames that were dropped because there were too many
+-- stack frames. If this value is 0, then no stack frames were dropped.
+sfDroppedFramesCount :: Lens' StackFrames (Maybe Int32)
+sfDroppedFramesCount
+  = lens _sfDroppedFramesCount
+      (\ s a -> s{_sfDroppedFramesCount = a})
+      . mapping _Coerce
+
+-- | Stack frames in this call stack.
+sfFrame :: Lens' StackFrames [StackFrame]
+sfFrame
+  = lens _sfFrame (\ s a -> s{_sfFrame = a}) . _Default
+      . _Coerce
+
+instance FromJSON StackFrames where
+        parseJSON
+          = withObject "StackFrames"
+              (\ o ->
+                 StackFrames' <$>
+                   (o .:? "droppedFramesCount") <*>
+                     (o .:? "frame" .!= mempty))
+
+instance ToJSON StackFrames where
+        toJSON StackFrames'{..}
+          = object
+              (catMaybes
+                 [("droppedFramesCount" .=) <$> _sfDroppedFramesCount,
+                  ("frame" .=) <$> _sfFrame])
+
+-- | Represents a single stack frame in a stack trace.
+--
+-- /See:/ 'stackFrame' smart constructor.
+data StackFrame = StackFrame'
+    { _sfLoadModule           :: !(Maybe Module)
+    , _sfOriginalFunctionName :: !(Maybe TruncatableString)
+    , _sfLineNumber           :: !(Maybe (Textual Int64))
+    , _sfSourceVersion        :: !(Maybe TruncatableString)
+    , _sfFunctionName         :: !(Maybe TruncatableString)
+    , _sfColumnNumber         :: !(Maybe (Textual Int64))
+    , _sfFileName             :: !(Maybe TruncatableString)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StackFrame' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sfLoadModule'
+--
+-- * 'sfOriginalFunctionName'
+--
+-- * 'sfLineNumber'
+--
+-- * 'sfSourceVersion'
+--
+-- * 'sfFunctionName'
+--
+-- * 'sfColumnNumber'
+--
+-- * 'sfFileName'
+stackFrame
+    :: StackFrame
+stackFrame =
+    StackFrame'
+    { _sfLoadModule = Nothing
+    , _sfOriginalFunctionName = Nothing
+    , _sfLineNumber = Nothing
+    , _sfSourceVersion = Nothing
+    , _sfFunctionName = Nothing
+    , _sfColumnNumber = Nothing
+    , _sfFileName = Nothing
+    }
+
+-- | The binary module from where the code was loaded.
+sfLoadModule :: Lens' StackFrame (Maybe Module)
+sfLoadModule
+  = lens _sfLoadModule (\ s a -> s{_sfLoadModule = a})
+
+-- | An un-mangled function name, if \`function_name\` is
+-- [mangled](http:\/\/www.avabodh.com\/cxxin\/namemangling.html). The name
+-- can be fully-qualified (up to 1024 bytes).
+sfOriginalFunctionName :: Lens' StackFrame (Maybe TruncatableString)
+sfOriginalFunctionName
+  = lens _sfOriginalFunctionName
+      (\ s a -> s{_sfOriginalFunctionName = a})
+
+-- | The line number in \`file_name\` where the function call appears.
+sfLineNumber :: Lens' StackFrame (Maybe Int64)
+sfLineNumber
+  = lens _sfLineNumber (\ s a -> s{_sfLineNumber = a})
+      . mapping _Coerce
+
+-- | The version of the deployed source code (up to 128 bytes).
+sfSourceVersion :: Lens' StackFrame (Maybe TruncatableString)
+sfSourceVersion
+  = lens _sfSourceVersion
+      (\ s a -> s{_sfSourceVersion = a})
+
+-- | The fully-qualified name that uniquely identifies the function or method
+-- that is active in this frame (up to 1024 bytes).
+sfFunctionName :: Lens' StackFrame (Maybe TruncatableString)
+sfFunctionName
+  = lens _sfFunctionName
+      (\ s a -> s{_sfFunctionName = a})
+
+-- | The column number where the function call appears, if available. This is
+-- important in JavaScript because of its anonymous functions.
+sfColumnNumber :: Lens' StackFrame (Maybe Int64)
+sfColumnNumber
+  = lens _sfColumnNumber
+      (\ s a -> s{_sfColumnNumber = a})
+      . mapping _Coerce
+
+-- | The name of the source file where the function call appears (up to 256
+-- bytes).
+sfFileName :: Lens' StackFrame (Maybe TruncatableString)
+sfFileName
+  = lens _sfFileName (\ s a -> s{_sfFileName = a})
+
+instance FromJSON StackFrame where
+        parseJSON
+          = withObject "StackFrame"
+              (\ o ->
+                 StackFrame' <$>
+                   (o .:? "loadModule") <*>
+                     (o .:? "originalFunctionName")
+                     <*> (o .:? "lineNumber")
+                     <*> (o .:? "sourceVersion")
+                     <*> (o .:? "functionName")
+                     <*> (o .:? "columnNumber")
+                     <*> (o .:? "fileName"))
+
+instance ToJSON StackFrame where
+        toJSON StackFrame'{..}
+          = object
+              (catMaybes
+                 [("loadModule" .=) <$> _sfLoadModule,
+                  ("originalFunctionName" .=) <$>
+                    _sfOriginalFunctionName,
+                  ("lineNumber" .=) <$> _sfLineNumber,
+                  ("sourceVersion" .=) <$> _sfSourceVersion,
+                  ("functionName" .=) <$> _sfFunctionName,
+                  ("columnNumber" .=) <$> _sfColumnNumber,
+                  ("fileName" .=) <$> _sfFileName])
+
+-- | A collection of links, which are references from this span to a span in
+-- the same or different trace.
+--
+-- /See:/ 'links' smart constructor.
+data Links = Links'
+    { _lDroppedLinksCount :: !(Maybe (Textual Int32))
+    , _lLink              :: !(Maybe [Link])
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Links' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lDroppedLinksCount'
+--
+-- * 'lLink'
+links
+    :: Links
+links =
+    Links'
+    { _lDroppedLinksCount = Nothing
+    , _lLink = Nothing
+    }
+
+-- | The number of dropped links after the maximum size was enforced. If this
+-- value is 0, then no links were dropped.
+lDroppedLinksCount :: Lens' Links (Maybe Int32)
+lDroppedLinksCount
+  = lens _lDroppedLinksCount
+      (\ s a -> s{_lDroppedLinksCount = a})
+      . mapping _Coerce
+
+-- | A collection of links.
+lLink :: Lens' Links [Link]
+lLink
+  = lens _lLink (\ s a -> s{_lLink = a}) . _Default .
+      _Coerce
+
+instance FromJSON Links where
+        parseJSON
+          = withObject "Links"
+              (\ o ->
+                 Links' <$>
+                   (o .:? "droppedLinksCount") <*>
+                     (o .:? "link" .!= mempty))
+
+instance ToJSON Links where
+        toJSON Links'{..}
+          = object
+              (catMaybes
+                 [("droppedLinksCount" .=) <$> _lDroppedLinksCount,
+                  ("link" .=) <$> _lLink])
+
+-- | A time-stamped annotation or message event in the Span.
+--
+-- /See:/ 'timeEvent' smart constructor.
+data TimeEvent = TimeEvent'
+    { _teMessageEvent :: !(Maybe MessageEvent)
+    , _teAnnotation   :: !(Maybe Annotation)
+    , _teTime         :: !(Maybe DateTime')
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TimeEvent' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'teMessageEvent'
+--
+-- * 'teAnnotation'
+--
+-- * 'teTime'
+timeEvent
+    :: TimeEvent
+timeEvent =
+    TimeEvent'
+    { _teMessageEvent = Nothing
+    , _teAnnotation = Nothing
+    , _teTime = Nothing
+    }
+
+-- | An event describing a message sent\/received between Spans.
+teMessageEvent :: Lens' TimeEvent (Maybe MessageEvent)
+teMessageEvent
+  = lens _teMessageEvent
+      (\ s a -> s{_teMessageEvent = a})
+
+-- | Text annotation with a set of attributes.
+teAnnotation :: Lens' TimeEvent (Maybe Annotation)
+teAnnotation
+  = lens _teAnnotation (\ s a -> s{_teAnnotation = a})
+
+-- | The timestamp indicating the time the event occurred.
+teTime :: Lens' TimeEvent (Maybe UTCTime)
+teTime
+  = lens _teTime (\ s a -> s{_teTime = a}) .
+      mapping _DateTime
+
+instance FromJSON TimeEvent where
+        parseJSON
+          = withObject "TimeEvent"
+              (\ o ->
+                 TimeEvent' <$>
+                   (o .:? "messageEvent") <*> (o .:? "annotation") <*>
+                     (o .:? "time"))
+
+instance ToJSON TimeEvent where
+        toJSON TimeEvent'{..}
+          = object
+              (catMaybes
+                 [("messageEvent" .=) <$> _teMessageEvent,
+                  ("annotation" .=) <$> _teAnnotation,
+                  ("time" .=) <$> _teTime])
diff --git a/gen/Network/Google/CloudTrace/Types/Sum.hs b/gen/Network/Google/CloudTrace/Types/Sum.hs
--- a/gen/Network/Google/CloudTrace/Types/Sum.hs
+++ b/gen/Network/Google/CloudTrace/Types/Sum.hs
@@ -16,4 +16,102 @@
 --
 module Network.Google.CloudTrace.Types.Sum where
 
-import           Network.Google.Prelude
+import           Network.Google.Prelude hiding (Bytes)
+
+-- | Type of MessageEvent. Indicates whether the message was sent or
+-- received.
+data MessageEventType
+    = TypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- Unknown event type.
+    | Sent
+      -- ^ @SENT@
+      -- Indicates a sent message.
+    | Received
+      -- ^ @RECEIVED@
+      -- Indicates a received message.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable MessageEventType
+
+instance FromHttpApiData MessageEventType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right TypeUnspecified
+        "SENT" -> Right Sent
+        "RECEIVED" -> Right Received
+        x -> Left ("Unable to parse MessageEventType from: " <> x)
+
+instance ToHttpApiData MessageEventType where
+    toQueryParam = \case
+        TypeUnspecified -> "TYPE_UNSPECIFIED"
+        Sent -> "SENT"
+        Received -> "RECEIVED"
+
+instance FromJSON MessageEventType where
+    parseJSON = parseJSONText "MessageEventType"
+
+instance ToJSON MessageEventType where
+    toJSON = toJSONText
+
+-- | V1 error format.
+data Xgafv
+    = X1
+      -- ^ @1@
+      -- v1 error format
+    | X2
+      -- ^ @2@
+      -- v2 error format
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable Xgafv
+
+instance FromHttpApiData Xgafv where
+    parseQueryParam = \case
+        "1" -> Right X1
+        "2" -> Right X2
+        x -> Left ("Unable to parse Xgafv from: " <> x)
+
+instance ToHttpApiData Xgafv where
+    toQueryParam = \case
+        X1 -> "1"
+        X2 -> "2"
+
+instance FromJSON Xgafv where
+    parseJSON = parseJSONText "Xgafv"
+
+instance ToJSON Xgafv where
+    toJSON = toJSONText
+
+-- | The relationship of the current span relative to the linked span.
+data LinkType
+    = LTTypeUnspecified
+      -- ^ @TYPE_UNSPECIFIED@
+      -- The relationship of the two spans is unknown.
+    | LTChildLinkedSpan
+      -- ^ @CHILD_LINKED_SPAN@
+      -- The linked span is a child of the current span.
+    | LTParentLinkedSpan
+      -- ^ @PARENT_LINKED_SPAN@
+      -- The linked span is a parent of the current span.
+      deriving (Eq, Ord, Enum, Read, Show, Data, Typeable, Generic)
+
+instance Hashable LinkType
+
+instance FromHttpApiData LinkType where
+    parseQueryParam = \case
+        "TYPE_UNSPECIFIED" -> Right LTTypeUnspecified
+        "CHILD_LINKED_SPAN" -> Right LTChildLinkedSpan
+        "PARENT_LINKED_SPAN" -> Right LTParentLinkedSpan
+        x -> Left ("Unable to parse LinkType from: " <> x)
+
+instance ToHttpApiData LinkType where
+    toQueryParam = \case
+        LTTypeUnspecified -> "TYPE_UNSPECIFIED"
+        LTChildLinkedSpan -> "CHILD_LINKED_SPAN"
+        LTParentLinkedSpan -> "PARENT_LINKED_SPAN"
+
+instance FromJSON LinkType where
+    parseJSON = parseJSONText "LinkType"
+
+instance ToJSON LinkType where
+    toJSON = toJSONText
diff --git a/gen/Network/Google/Resource/CloudTrace/Projects/PatchTraces.hs b/gen/Network/Google/Resource/CloudTrace/Projects/PatchTraces.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/CloudTrace/Projects/PatchTraces.hs
+++ /dev/null
@@ -1,193 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE FlexibleInstances  #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-{-# LANGUAGE TypeOperators      #-}
-
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-
--- |
--- Module      : Network.Google.Resource.CloudTrace.Projects.PatchTraces
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Sends new traces to Stackdriver Trace or updates existing traces. If the
--- ID of a trace that you send matches that of an existing trace, any
--- fields in the existing trace and its spans are overwritten by the
--- provided values, and any new fields provided are merged with the
--- existing trace data. If the ID does not match, a new trace is created.
---
--- /See:/ <https://cloud.google.com/tools/cloud-trace Google Cloud Trace API Reference> for @cloudtrace.projects.patchTraces@.
-module Network.Google.Resource.CloudTrace.Projects.PatchTraces
-    (
-    -- * REST Resource
-      ProjectsPatchTracesResource
-
-    -- * Creating a Request
-    , projectsPatchTraces
-    , ProjectsPatchTraces
-
-    -- * Request Lenses
-    , pptXgafv
-    , pptUploadProtocol
-    , pptPp
-    , pptAccessToken
-    , pptUploadType
-    , pptPayload
-    , pptBearerToken
-    , pptProjectId
-    , pptCallback
-    ) where
-
-import           Network.Google.CloudTrace.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @cloudtrace.projects.patchTraces@ method which the
--- 'ProjectsPatchTraces' request conforms to.
-type ProjectsPatchTracesResource =
-     "v1" :>
-       "projects" :>
-         Capture "projectId" Text :>
-           "traces" :>
-             QueryParam "$.xgafv" Text :>
-               QueryParam "upload_protocol" Text :>
-                 QueryParam "pp" Bool :>
-                   QueryParam "access_token" Text :>
-                     QueryParam "uploadType" Text :>
-                       QueryParam "bearer_token" Text :>
-                         QueryParam "callback" Text :>
-                           QueryParam "alt" AltJSON :>
-                             ReqBody '[JSON] Traces :> Patch '[JSON] Empty
-
--- | Sends new traces to Stackdriver Trace or updates existing traces. If the
--- ID of a trace that you send matches that of an existing trace, any
--- fields in the existing trace and its spans are overwritten by the
--- provided values, and any new fields provided are merged with the
--- existing trace data. If the ID does not match, a new trace is created.
---
--- /See:/ 'projectsPatchTraces' smart constructor.
-data ProjectsPatchTraces = ProjectsPatchTraces'
-    { _pptXgafv          :: !(Maybe Text)
-    , _pptUploadProtocol :: !(Maybe Text)
-    , _pptPp             :: !Bool
-    , _pptAccessToken    :: !(Maybe Text)
-    , _pptUploadType     :: !(Maybe Text)
-    , _pptPayload        :: !Traces
-    , _pptBearerToken    :: !(Maybe Text)
-    , _pptProjectId      :: !Text
-    , _pptCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectsPatchTraces' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'pptXgafv'
---
--- * 'pptUploadProtocol'
---
--- * 'pptPp'
---
--- * 'pptAccessToken'
---
--- * 'pptUploadType'
---
--- * 'pptPayload'
---
--- * 'pptBearerToken'
---
--- * 'pptProjectId'
---
--- * 'pptCallback'
-projectsPatchTraces
-    :: Traces -- ^ 'pptPayload'
-    -> Text -- ^ 'pptProjectId'
-    -> ProjectsPatchTraces
-projectsPatchTraces pPptPayload_ pPptProjectId_ =
-    ProjectsPatchTraces'
-    { _pptXgafv = Nothing
-    , _pptUploadProtocol = Nothing
-    , _pptPp = True
-    , _pptAccessToken = Nothing
-    , _pptUploadType = Nothing
-    , _pptPayload = pPptPayload_
-    , _pptBearerToken = Nothing
-    , _pptProjectId = pPptProjectId_
-    , _pptCallback = Nothing
-    }
-
--- | V1 error format.
-pptXgafv :: Lens' ProjectsPatchTraces (Maybe Text)
-pptXgafv = lens _pptXgafv (\ s a -> s{_pptXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-pptUploadProtocol :: Lens' ProjectsPatchTraces (Maybe Text)
-pptUploadProtocol
-  = lens _pptUploadProtocol
-      (\ s a -> s{_pptUploadProtocol = a})
-
--- | Pretty-print response.
-pptPp :: Lens' ProjectsPatchTraces Bool
-pptPp = lens _pptPp (\ s a -> s{_pptPp = a})
-
--- | OAuth access token.
-pptAccessToken :: Lens' ProjectsPatchTraces (Maybe Text)
-pptAccessToken
-  = lens _pptAccessToken
-      (\ s a -> s{_pptAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-pptUploadType :: Lens' ProjectsPatchTraces (Maybe Text)
-pptUploadType
-  = lens _pptUploadType
-      (\ s a -> s{_pptUploadType = a})
-
--- | Multipart request metadata.
-pptPayload :: Lens' ProjectsPatchTraces Traces
-pptPayload
-  = lens _pptPayload (\ s a -> s{_pptPayload = a})
-
--- | OAuth bearer token.
-pptBearerToken :: Lens' ProjectsPatchTraces (Maybe Text)
-pptBearerToken
-  = lens _pptBearerToken
-      (\ s a -> s{_pptBearerToken = a})
-
--- | ID of the Cloud project where the trace data is stored.
-pptProjectId :: Lens' ProjectsPatchTraces Text
-pptProjectId
-  = lens _pptProjectId (\ s a -> s{_pptProjectId = a})
-
--- | JSONP
-pptCallback :: Lens' ProjectsPatchTraces (Maybe Text)
-pptCallback
-  = lens _pptCallback (\ s a -> s{_pptCallback = a})
-
-instance GoogleRequest ProjectsPatchTraces where
-        type Rs ProjectsPatchTraces = Empty
-        type Scopes ProjectsPatchTraces =
-             '["https://www.googleapis.com/auth/cloud-platform",
-               "https://www.googleapis.com/auth/trace.append"]
-        requestClient ProjectsPatchTraces'{..}
-          = go _pptProjectId _pptXgafv _pptUploadProtocol
-              (Just _pptPp)
-              _pptAccessToken
-              _pptUploadType
-              _pptBearerToken
-              _pptCallback
-              (Just AltJSON)
-              _pptPayload
-              cloudTraceService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy ProjectsPatchTracesResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/BatchWrite.hs b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/BatchWrite.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/BatchWrite.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudTrace.Projects.Traces.BatchWrite
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sends new spans to new or existing traces. You cannot update existing
+-- spans.
+--
+-- /See:/ <https://cloud.google.com/trace Stackdriver Trace API Reference> for @cloudtrace.projects.traces.batchWrite@.
+module Network.Google.Resource.CloudTrace.Projects.Traces.BatchWrite
+    (
+    -- * REST Resource
+      ProjectsTracesBatchWriteResource
+
+    -- * Creating a Request
+    , projectsTracesBatchWrite
+    , ProjectsTracesBatchWrite
+
+    -- * Request Lenses
+    , ptbwXgafv
+    , ptbwUploadProtocol
+    , ptbwAccessToken
+    , ptbwUploadType
+    , ptbwPayload
+    , ptbwName
+    , ptbwCallback
+    ) where
+
+import           Network.Google.CloudTrace.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudtrace.projects.traces.batchWrite@ method which the
+-- 'ProjectsTracesBatchWrite' request conforms to.
+type ProjectsTracesBatchWriteResource =
+     "v2" :>
+       Capture "name" Text :>
+         "traces:batchWrite" :>
+           QueryParam "$.xgafv" Xgafv :>
+             QueryParam "upload_protocol" Text :>
+               QueryParam "access_token" Text :>
+                 QueryParam "uploadType" Text :>
+                   QueryParam "callback" Text :>
+                     QueryParam "alt" AltJSON :>
+                       ReqBody '[JSON] BatchWriteSpansRequest :>
+                         Post '[JSON] Empty
+
+-- | Sends new spans to new or existing traces. You cannot update existing
+-- spans.
+--
+-- /See:/ 'projectsTracesBatchWrite' smart constructor.
+data ProjectsTracesBatchWrite = ProjectsTracesBatchWrite'
+    { _ptbwXgafv          :: !(Maybe Xgafv)
+    , _ptbwUploadProtocol :: !(Maybe Text)
+    , _ptbwAccessToken    :: !(Maybe Text)
+    , _ptbwUploadType     :: !(Maybe Text)
+    , _ptbwPayload        :: !BatchWriteSpansRequest
+    , _ptbwName           :: !Text
+    , _ptbwCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsTracesBatchWrite' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptbwXgafv'
+--
+-- * 'ptbwUploadProtocol'
+--
+-- * 'ptbwAccessToken'
+--
+-- * 'ptbwUploadType'
+--
+-- * 'ptbwPayload'
+--
+-- * 'ptbwName'
+--
+-- * 'ptbwCallback'
+projectsTracesBatchWrite
+    :: BatchWriteSpansRequest -- ^ 'ptbwPayload'
+    -> Text -- ^ 'ptbwName'
+    -> ProjectsTracesBatchWrite
+projectsTracesBatchWrite pPtbwPayload_ pPtbwName_ =
+    ProjectsTracesBatchWrite'
+    { _ptbwXgafv = Nothing
+    , _ptbwUploadProtocol = Nothing
+    , _ptbwAccessToken = Nothing
+    , _ptbwUploadType = Nothing
+    , _ptbwPayload = pPtbwPayload_
+    , _ptbwName = pPtbwName_
+    , _ptbwCallback = Nothing
+    }
+
+-- | V1 error format.
+ptbwXgafv :: Lens' ProjectsTracesBatchWrite (Maybe Xgafv)
+ptbwXgafv
+  = lens _ptbwXgafv (\ s a -> s{_ptbwXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ptbwUploadProtocol :: Lens' ProjectsTracesBatchWrite (Maybe Text)
+ptbwUploadProtocol
+  = lens _ptbwUploadProtocol
+      (\ s a -> s{_ptbwUploadProtocol = a})
+
+-- | OAuth access token.
+ptbwAccessToken :: Lens' ProjectsTracesBatchWrite (Maybe Text)
+ptbwAccessToken
+  = lens _ptbwAccessToken
+      (\ s a -> s{_ptbwAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ptbwUploadType :: Lens' ProjectsTracesBatchWrite (Maybe Text)
+ptbwUploadType
+  = lens _ptbwUploadType
+      (\ s a -> s{_ptbwUploadType = a})
+
+-- | Multipart request metadata.
+ptbwPayload :: Lens' ProjectsTracesBatchWrite BatchWriteSpansRequest
+ptbwPayload
+  = lens _ptbwPayload (\ s a -> s{_ptbwPayload = a})
+
+-- | Required. The name of the project where the spans belong. The format is
+-- \`projects\/[PROJECT_ID]\`.
+ptbwName :: Lens' ProjectsTracesBatchWrite Text
+ptbwName = lens _ptbwName (\ s a -> s{_ptbwName = a})
+
+-- | JSONP
+ptbwCallback :: Lens' ProjectsTracesBatchWrite (Maybe Text)
+ptbwCallback
+  = lens _ptbwCallback (\ s a -> s{_ptbwCallback = a})
+
+instance GoogleRequest ProjectsTracesBatchWrite where
+        type Rs ProjectsTracesBatchWrite = Empty
+        type Scopes ProjectsTracesBatchWrite =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/trace.append"]
+        requestClient ProjectsTracesBatchWrite'{..}
+          = go _ptbwName _ptbwXgafv _ptbwUploadProtocol
+              _ptbwAccessToken
+              _ptbwUploadType
+              _ptbwCallback
+              (Just AltJSON)
+              _ptbwPayload
+              cloudTraceService
+          where go
+                  = buildClient
+                      (Proxy :: Proxy ProjectsTracesBatchWriteResource)
+                      mempty
diff --git a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Get.hs b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Get.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Get.hs
+++ /dev/null
@@ -1,185 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE FlexibleInstances  #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-{-# LANGUAGE TypeOperators      #-}
-
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-
--- |
--- Module      : Network.Google.Resource.CloudTrace.Projects.Traces.Get
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Gets a single trace by its ID.
---
--- /See:/ <https://cloud.google.com/tools/cloud-trace Google Cloud Trace API Reference> for @cloudtrace.projects.traces.get@.
-module Network.Google.Resource.CloudTrace.Projects.Traces.Get
-    (
-    -- * REST Resource
-      ProjectsTracesGetResource
-
-    -- * Creating a Request
-    , projectsTracesGet
-    , ProjectsTracesGet
-
-    -- * Request Lenses
-    , ptgTraceId
-    , ptgXgafv
-    , ptgUploadProtocol
-    , ptgPp
-    , ptgAccessToken
-    , ptgUploadType
-    , ptgBearerToken
-    , ptgProjectId
-    , ptgCallback
-    ) where
-
-import           Network.Google.CloudTrace.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @cloudtrace.projects.traces.get@ method which the
--- 'ProjectsTracesGet' request conforms to.
-type ProjectsTracesGetResource =
-     "v1" :>
-       "projects" :>
-         Capture "projectId" Text :>
-           "traces" :>
-             Capture "traceId" Text :>
-               QueryParam "$.xgafv" Text :>
-                 QueryParam "upload_protocol" Text :>
-                   QueryParam "pp" Bool :>
-                     QueryParam "access_token" Text :>
-                       QueryParam "uploadType" Text :>
-                         QueryParam "bearer_token" Text :>
-                           QueryParam "callback" Text :>
-                             QueryParam "alt" AltJSON :> Get '[JSON] Trace
-
--- | Gets a single trace by its ID.
---
--- /See:/ 'projectsTracesGet' smart constructor.
-data ProjectsTracesGet = ProjectsTracesGet'
-    { _ptgTraceId        :: !Text
-    , _ptgXgafv          :: !(Maybe Text)
-    , _ptgUploadProtocol :: !(Maybe Text)
-    , _ptgPp             :: !Bool
-    , _ptgAccessToken    :: !(Maybe Text)
-    , _ptgUploadType     :: !(Maybe Text)
-    , _ptgBearerToken    :: !(Maybe Text)
-    , _ptgProjectId      :: !Text
-    , _ptgCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectsTracesGet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ptgTraceId'
---
--- * 'ptgXgafv'
---
--- * 'ptgUploadProtocol'
---
--- * 'ptgPp'
---
--- * 'ptgAccessToken'
---
--- * 'ptgUploadType'
---
--- * 'ptgBearerToken'
---
--- * 'ptgProjectId'
---
--- * 'ptgCallback'
-projectsTracesGet
-    :: Text -- ^ 'ptgTraceId'
-    -> Text -- ^ 'ptgProjectId'
-    -> ProjectsTracesGet
-projectsTracesGet pPtgTraceId_ pPtgProjectId_ =
-    ProjectsTracesGet'
-    { _ptgTraceId = pPtgTraceId_
-    , _ptgXgafv = Nothing
-    , _ptgUploadProtocol = Nothing
-    , _ptgPp = True
-    , _ptgAccessToken = Nothing
-    , _ptgUploadType = Nothing
-    , _ptgBearerToken = Nothing
-    , _ptgProjectId = pPtgProjectId_
-    , _ptgCallback = Nothing
-    }
-
--- | ID of the trace to return.
-ptgTraceId :: Lens' ProjectsTracesGet Text
-ptgTraceId
-  = lens _ptgTraceId (\ s a -> s{_ptgTraceId = a})
-
--- | V1 error format.
-ptgXgafv :: Lens' ProjectsTracesGet (Maybe Text)
-ptgXgafv = lens _ptgXgafv (\ s a -> s{_ptgXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-ptgUploadProtocol :: Lens' ProjectsTracesGet (Maybe Text)
-ptgUploadProtocol
-  = lens _ptgUploadProtocol
-      (\ s a -> s{_ptgUploadProtocol = a})
-
--- | Pretty-print response.
-ptgPp :: Lens' ProjectsTracesGet Bool
-ptgPp = lens _ptgPp (\ s a -> s{_ptgPp = a})
-
--- | OAuth access token.
-ptgAccessToken :: Lens' ProjectsTracesGet (Maybe Text)
-ptgAccessToken
-  = lens _ptgAccessToken
-      (\ s a -> s{_ptgAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-ptgUploadType :: Lens' ProjectsTracesGet (Maybe Text)
-ptgUploadType
-  = lens _ptgUploadType
-      (\ s a -> s{_ptgUploadType = a})
-
--- | OAuth bearer token.
-ptgBearerToken :: Lens' ProjectsTracesGet (Maybe Text)
-ptgBearerToken
-  = lens _ptgBearerToken
-      (\ s a -> s{_ptgBearerToken = a})
-
--- | ID of the Cloud project where the trace data is stored.
-ptgProjectId :: Lens' ProjectsTracesGet Text
-ptgProjectId
-  = lens _ptgProjectId (\ s a -> s{_ptgProjectId = a})
-
--- | JSONP
-ptgCallback :: Lens' ProjectsTracesGet (Maybe Text)
-ptgCallback
-  = lens _ptgCallback (\ s a -> s{_ptgCallback = a})
-
-instance GoogleRequest ProjectsTracesGet where
-        type Rs ProjectsTracesGet = Trace
-        type Scopes ProjectsTracesGet =
-             '["https://www.googleapis.com/auth/cloud-platform",
-               "https://www.googleapis.com/auth/trace.readonly"]
-        requestClient ProjectsTracesGet'{..}
-          = go _ptgProjectId _ptgTraceId _ptgXgafv
-              _ptgUploadProtocol
-              (Just _ptgPp)
-              _ptgAccessToken
-              _ptgUploadType
-              _ptgBearerToken
-              _ptgCallback
-              (Just AltJSON)
-              cloudTraceService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy ProjectsTracesGetResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/List.hs b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/List.hs
deleted file mode 100644
--- a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/List.hs
+++ /dev/null
@@ -1,270 +0,0 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE FlexibleInstances  #-}
-{-# LANGUAGE NoImplicitPrelude  #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-{-# LANGUAGE TypeOperators      #-}
-
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-
--- |
--- Module      : Network.Google.Resource.CloudTrace.Projects.Traces.List
--- Copyright   : (c) 2015-2016 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Returns of a list of traces that match the specified filter conditions.
---
--- /See:/ <https://cloud.google.com/tools/cloud-trace Google Cloud Trace API Reference> for @cloudtrace.projects.traces.list@.
-module Network.Google.Resource.CloudTrace.Projects.Traces.List
-    (
-    -- * REST Resource
-      ProjectsTracesListResource
-
-    -- * Creating a Request
-    , projectsTracesList
-    , ProjectsTracesList
-
-    -- * Request Lenses
-    , ptlXgafv
-    , ptlUploadProtocol
-    , ptlOrderBy
-    , ptlStartTime
-    , ptlPp
-    , ptlAccessToken
-    , ptlUploadType
-    , ptlBearerToken
-    , ptlEndTime
-    , ptlView
-    , ptlFilter
-    , ptlPageToken
-    , ptlProjectId
-    , ptlPageSize
-    , ptlCallback
-    ) where
-
-import           Network.Google.CloudTrace.Types
-import           Network.Google.Prelude
-
--- | A resource alias for @cloudtrace.projects.traces.list@ method which the
--- 'ProjectsTracesList' request conforms to.
-type ProjectsTracesListResource =
-     "v1" :>
-       "projects" :>
-         Capture "projectId" Text :>
-           "traces" :>
-             QueryParam "$.xgafv" Text :>
-               QueryParam "upload_protocol" Text :>
-                 QueryParam "orderBy" Text :>
-                   QueryParam "startTime" Text :>
-                     QueryParam "pp" Bool :>
-                       QueryParam "access_token" Text :>
-                         QueryParam "uploadType" Text :>
-                           QueryParam "bearer_token" Text :>
-                             QueryParam "endTime" Text :>
-                               QueryParam "view" Text :>
-                                 QueryParam "filter" Text :>
-                                   QueryParam "pageToken" Text :>
-                                     QueryParam "pageSize" (Textual Int32) :>
-                                       QueryParam "callback" Text :>
-                                         QueryParam "alt" AltJSON :>
-                                           Get '[JSON] ListTracesResponse
-
--- | Returns of a list of traces that match the specified filter conditions.
---
--- /See:/ 'projectsTracesList' smart constructor.
-data ProjectsTracesList = ProjectsTracesList'
-    { _ptlXgafv          :: !(Maybe Text)
-    , _ptlUploadProtocol :: !(Maybe Text)
-    , _ptlOrderBy        :: !(Maybe Text)
-    , _ptlStartTime      :: !(Maybe Text)
-    , _ptlPp             :: !Bool
-    , _ptlAccessToken    :: !(Maybe Text)
-    , _ptlUploadType     :: !(Maybe Text)
-    , _ptlBearerToken    :: !(Maybe Text)
-    , _ptlEndTime        :: !(Maybe Text)
-    , _ptlView           :: !(Maybe Text)
-    , _ptlFilter         :: !(Maybe Text)
-    , _ptlPageToken      :: !(Maybe Text)
-    , _ptlProjectId      :: !Text
-    , _ptlPageSize       :: !(Maybe (Textual Int32))
-    , _ptlCallback       :: !(Maybe Text)
-    } deriving (Eq,Show,Data,Typeable,Generic)
-
--- | Creates a value of 'ProjectsTracesList' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ptlXgafv'
---
--- * 'ptlUploadProtocol'
---
--- * 'ptlOrderBy'
---
--- * 'ptlStartTime'
---
--- * 'ptlPp'
---
--- * 'ptlAccessToken'
---
--- * 'ptlUploadType'
---
--- * 'ptlBearerToken'
---
--- * 'ptlEndTime'
---
--- * 'ptlView'
---
--- * 'ptlFilter'
---
--- * 'ptlPageToken'
---
--- * 'ptlProjectId'
---
--- * 'ptlPageSize'
---
--- * 'ptlCallback'
-projectsTracesList
-    :: Text -- ^ 'ptlProjectId'
-    -> ProjectsTracesList
-projectsTracesList pPtlProjectId_ =
-    ProjectsTracesList'
-    { _ptlXgafv = Nothing
-    , _ptlUploadProtocol = Nothing
-    , _ptlOrderBy = Nothing
-    , _ptlStartTime = Nothing
-    , _ptlPp = True
-    , _ptlAccessToken = Nothing
-    , _ptlUploadType = Nothing
-    , _ptlBearerToken = Nothing
-    , _ptlEndTime = Nothing
-    , _ptlView = Nothing
-    , _ptlFilter = Nothing
-    , _ptlPageToken = Nothing
-    , _ptlProjectId = pPtlProjectId_
-    , _ptlPageSize = Nothing
-    , _ptlCallback = Nothing
-    }
-
--- | V1 error format.
-ptlXgafv :: Lens' ProjectsTracesList (Maybe Text)
-ptlXgafv = lens _ptlXgafv (\ s a -> s{_ptlXgafv = a})
-
--- | Upload protocol for media (e.g. \"raw\", \"multipart\").
-ptlUploadProtocol :: Lens' ProjectsTracesList (Maybe Text)
-ptlUploadProtocol
-  = lens _ptlUploadProtocol
-      (\ s a -> s{_ptlUploadProtocol = a})
-
--- | Field used to sort the returned traces. Optional. Can be one of the
--- following: * \`trace_id\` * \`name\` (\`name\` field of root span in the
--- trace) * \`duration\` (difference between \`end_time\` and
--- \`start_time\` fields of the root span) * \`start\` (\`start_time\`
--- field of the root span) Descending order can be specified by appending
--- \`desc\` to the sort field (for example, \`name desc\`). Only one sort
--- field is permitted.
-ptlOrderBy :: Lens' ProjectsTracesList (Maybe Text)
-ptlOrderBy
-  = lens _ptlOrderBy (\ s a -> s{_ptlOrderBy = a})
-
--- | End of the time interval (inclusive) during which the trace data was
--- collected from the application.
-ptlStartTime :: Lens' ProjectsTracesList (Maybe Text)
-ptlStartTime
-  = lens _ptlStartTime (\ s a -> s{_ptlStartTime = a})
-
--- | Pretty-print response.
-ptlPp :: Lens' ProjectsTracesList Bool
-ptlPp = lens _ptlPp (\ s a -> s{_ptlPp = a})
-
--- | OAuth access token.
-ptlAccessToken :: Lens' ProjectsTracesList (Maybe Text)
-ptlAccessToken
-  = lens _ptlAccessToken
-      (\ s a -> s{_ptlAccessToken = a})
-
--- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
-ptlUploadType :: Lens' ProjectsTracesList (Maybe Text)
-ptlUploadType
-  = lens _ptlUploadType
-      (\ s a -> s{_ptlUploadType = a})
-
--- | OAuth bearer token.
-ptlBearerToken :: Lens' ProjectsTracesList (Maybe Text)
-ptlBearerToken
-  = lens _ptlBearerToken
-      (\ s a -> s{_ptlBearerToken = a})
-
--- | Start of the time interval (inclusive) during which the trace data was
--- collected from the application.
-ptlEndTime :: Lens' ProjectsTracesList (Maybe Text)
-ptlEndTime
-  = lens _ptlEndTime (\ s a -> s{_ptlEndTime = a})
-
--- | Type of data returned for traces in the list. Optional. Default is
--- \`MINIMAL\`.
-ptlView :: Lens' ProjectsTracesList (Maybe Text)
-ptlView = lens _ptlView (\ s a -> s{_ptlView = a})
-
--- | An optional filter for the request.
-ptlFilter :: Lens' ProjectsTracesList (Maybe Text)
-ptlFilter
-  = lens _ptlFilter (\ s a -> s{_ptlFilter = a})
-
--- | Token identifying the page of results to return. If provided, use the
--- value of the \`next_page_token\` field from a previous request.
--- Optional.
-ptlPageToken :: Lens' ProjectsTracesList (Maybe Text)
-ptlPageToken
-  = lens _ptlPageToken (\ s a -> s{_ptlPageToken = a})
-
--- | ID of the Cloud project where the trace data is stored.
-ptlProjectId :: Lens' ProjectsTracesList Text
-ptlProjectId
-  = lens _ptlProjectId (\ s a -> s{_ptlProjectId = a})
-
--- | Maximum number of traces to return. If not specified or \<= 0, the
--- implementation selects a reasonable value. The implementation may return
--- fewer traces than the requested page size. Optional.
-ptlPageSize :: Lens' ProjectsTracesList (Maybe Int32)
-ptlPageSize
-  = lens _ptlPageSize (\ s a -> s{_ptlPageSize = a}) .
-      mapping _Coerce
-
--- | JSONP
-ptlCallback :: Lens' ProjectsTracesList (Maybe Text)
-ptlCallback
-  = lens _ptlCallback (\ s a -> s{_ptlCallback = a})
-
-instance GoogleRequest ProjectsTracesList where
-        type Rs ProjectsTracesList = ListTracesResponse
-        type Scopes ProjectsTracesList =
-             '["https://www.googleapis.com/auth/cloud-platform",
-               "https://www.googleapis.com/auth/trace.readonly"]
-        requestClient ProjectsTracesList'{..}
-          = go _ptlProjectId _ptlXgafv _ptlUploadProtocol
-              _ptlOrderBy
-              _ptlStartTime
-              (Just _ptlPp)
-              _ptlAccessToken
-              _ptlUploadType
-              _ptlBearerToken
-              _ptlEndTime
-              _ptlView
-              _ptlFilter
-              _ptlPageToken
-              _ptlPageSize
-              _ptlCallback
-              (Just AltJSON)
-              cloudTraceService
-          where go
-                  = buildClient
-                      (Proxy :: Proxy ProjectsTracesListResource)
-                      mempty
diff --git a/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Spans/CreateSpan.hs b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Spans/CreateSpan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/Google/Resource/CloudTrace/Projects/Traces/Spans/CreateSpan.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DataKinds          #-}
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE FlexibleInstances  #-}
+{-# LANGUAGE NoImplicitPrelude  #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+{-# LANGUAGE TypeOperators      #-}
+
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds      #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+
+-- |
+-- Module      : Network.Google.Resource.CloudTrace.Projects.Traces.Spans.CreateSpan
+-- Copyright   : (c) 2015-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new span.
+--
+-- /See:/ <https://cloud.google.com/trace Stackdriver Trace API Reference> for @cloudtrace.projects.traces.spans.createSpan@.
+module Network.Google.Resource.CloudTrace.Projects.Traces.Spans.CreateSpan
+    (
+    -- * REST Resource
+      ProjectsTracesSpansCreateSpanResource
+
+    -- * Creating a Request
+    , projectsTracesSpansCreateSpan
+    , ProjectsTracesSpansCreateSpan
+
+    -- * Request Lenses
+    , ptscsXgafv
+    , ptscsUploadProtocol
+    , ptscsAccessToken
+    , ptscsUploadType
+    , ptscsPayload
+    , ptscsName
+    , ptscsCallback
+    ) where
+
+import           Network.Google.CloudTrace.Types
+import           Network.Google.Prelude
+
+-- | A resource alias for @cloudtrace.projects.traces.spans.createSpan@ method which the
+-- 'ProjectsTracesSpansCreateSpan' request conforms to.
+type ProjectsTracesSpansCreateSpanResource =
+     "v2" :>
+       Capture "name" Text :>
+         QueryParam "$.xgafv" Xgafv :>
+           QueryParam "upload_protocol" Text :>
+             QueryParam "access_token" Text :>
+               QueryParam "uploadType" Text :>
+                 QueryParam "callback" Text :>
+                   QueryParam "alt" AltJSON :>
+                     ReqBody '[JSON] Span :> Post '[JSON] Span
+
+-- | Creates a new span.
+--
+-- /See:/ 'projectsTracesSpansCreateSpan' smart constructor.
+data ProjectsTracesSpansCreateSpan = ProjectsTracesSpansCreateSpan'
+    { _ptscsXgafv          :: !(Maybe Xgafv)
+    , _ptscsUploadProtocol :: !(Maybe Text)
+    , _ptscsAccessToken    :: !(Maybe Text)
+    , _ptscsUploadType     :: !(Maybe Text)
+    , _ptscsPayload        :: !Span
+    , _ptscsName           :: !Text
+    , _ptscsCallback       :: !(Maybe Text)
+    } deriving (Eq,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ProjectsTracesSpansCreateSpan' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ptscsXgafv'
+--
+-- * 'ptscsUploadProtocol'
+--
+-- * 'ptscsAccessToken'
+--
+-- * 'ptscsUploadType'
+--
+-- * 'ptscsPayload'
+--
+-- * 'ptscsName'
+--
+-- * 'ptscsCallback'
+projectsTracesSpansCreateSpan
+    :: Span -- ^ 'ptscsPayload'
+    -> Text -- ^ 'ptscsName'
+    -> ProjectsTracesSpansCreateSpan
+projectsTracesSpansCreateSpan pPtscsPayload_ pPtscsName_ =
+    ProjectsTracesSpansCreateSpan'
+    { _ptscsXgafv = Nothing
+    , _ptscsUploadProtocol = Nothing
+    , _ptscsAccessToken = Nothing
+    , _ptscsUploadType = Nothing
+    , _ptscsPayload = pPtscsPayload_
+    , _ptscsName = pPtscsName_
+    , _ptscsCallback = Nothing
+    }
+
+-- | V1 error format.
+ptscsXgafv :: Lens' ProjectsTracesSpansCreateSpan (Maybe Xgafv)
+ptscsXgafv
+  = lens _ptscsXgafv (\ s a -> s{_ptscsXgafv = a})
+
+-- | Upload protocol for media (e.g. \"raw\", \"multipart\").
+ptscsUploadProtocol :: Lens' ProjectsTracesSpansCreateSpan (Maybe Text)
+ptscsUploadProtocol
+  = lens _ptscsUploadProtocol
+      (\ s a -> s{_ptscsUploadProtocol = a})
+
+-- | OAuth access token.
+ptscsAccessToken :: Lens' ProjectsTracesSpansCreateSpan (Maybe Text)
+ptscsAccessToken
+  = lens _ptscsAccessToken
+      (\ s a -> s{_ptscsAccessToken = a})
+
+-- | Legacy upload protocol for media (e.g. \"media\", \"multipart\").
+ptscsUploadType :: Lens' ProjectsTracesSpansCreateSpan (Maybe Text)
+ptscsUploadType
+  = lens _ptscsUploadType
+      (\ s a -> s{_ptscsUploadType = a})
+
+-- | Multipart request metadata.
+ptscsPayload :: Lens' ProjectsTracesSpansCreateSpan Span
+ptscsPayload
+  = lens _ptscsPayload (\ s a -> s{_ptscsPayload = a})
+
+-- | The resource name of the span in the following format:
+-- projects\/[PROJECT_ID]\/traces\/[TRACE_ID]\/spans\/SPAN_ID is a unique
+-- identifier for a trace within a project; it is a 32-character
+-- hexadecimal encoding of a 16-byte array. [SPAN_ID] is a unique
+-- identifier for a span within a trace; it is a 16-character hexadecimal
+-- encoding of an 8-byte array.
+ptscsName :: Lens' ProjectsTracesSpansCreateSpan Text
+ptscsName
+  = lens _ptscsName (\ s a -> s{_ptscsName = a})
+
+-- | JSONP
+ptscsCallback :: Lens' ProjectsTracesSpansCreateSpan (Maybe Text)
+ptscsCallback
+  = lens _ptscsCallback
+      (\ s a -> s{_ptscsCallback = a})
+
+instance GoogleRequest ProjectsTracesSpansCreateSpan
+         where
+        type Rs ProjectsTracesSpansCreateSpan = Span
+        type Scopes ProjectsTracesSpansCreateSpan =
+             '["https://www.googleapis.com/auth/cloud-platform",
+               "https://www.googleapis.com/auth/trace.append"]
+        requestClient ProjectsTracesSpansCreateSpan'{..}
+          = go _ptscsName _ptscsXgafv _ptscsUploadProtocol
+              _ptscsAccessToken
+              _ptscsUploadType
+              _ptscsCallback
+              (Just AltJSON)
+              _ptscsPayload
+              cloudTraceService
+          where go
+                  = buildClient
+                      (Proxy ::
+                         Proxy ProjectsTracesSpansCreateSpanResource)
+                      mempty
diff --git a/gogol-cloudtrace.cabal b/gogol-cloudtrace.cabal
--- a/gogol-cloudtrace.cabal
+++ b/gogol-cloudtrace.cabal
@@ -1,6 +1,6 @@
 name:                  gogol-cloudtrace
-version:               0.3.0
-synopsis:              Google Cloud Trace SDK.
+version:               0.4.0
+synopsis:              Google Stackdriver Trace SDK.
 homepage:              https://github.com/brendanhay/gogol
 bug-reports:           https://github.com/brendanhay/gogol/issues
 license:               OtherLicense
@@ -14,15 +14,17 @@
 extra-source-files:    README.md src/.gitkeep
 
 description:
-    Send and retrieve trace data from Google Cloud Trace. Data is generated
-    and available by default for all App Engine applications. Data from
-    other applications can be written to Cloud Trace for display, reporting,
-    and analysis.
+    Sends application trace data to Stackdriver Trace for viewing. Trace
+    data is collected for all App Engine applications by default. Trace data
+    from other applications can be provided using this API. This library is
+    used to interact with the Trace API directly. If you are looking to
+    instrument your application for Stackdriver Trace, we recommend using
+    OpenCensus.
     .
     /Warning:/ This is an experimental prototype/preview release which is still
     under exploratory development and not intended for public use, caveat emptor!
     .
-    This library is compatible with version @v1@
+    This library is compatible with version @v2@
     of the API.
 
 source-repository head
@@ -38,14 +40,13 @@
     exposed-modules:
           Network.Google.CloudTrace
         , Network.Google.CloudTrace.Types
-        , Network.Google.Resource.CloudTrace.Projects.PatchTraces
-        , Network.Google.Resource.CloudTrace.Projects.Traces.Get
-        , Network.Google.Resource.CloudTrace.Projects.Traces.List
+        , Network.Google.Resource.CloudTrace.Projects.Traces.BatchWrite
+        , Network.Google.Resource.CloudTrace.Projects.Traces.Spans.CreateSpan
 
     other-modules:
           Network.Google.CloudTrace.Types.Product
         , Network.Google.CloudTrace.Types.Sum
 
     build-depends:
-          gogol-core == 0.3.0.*
+          gogol-core == 0.4.0.*
         , base       >= 4.7 && < 5
