Get started with React and Client Session Tokens
Learn to use Seam Components with your React application
Overview
Seam provides React components and hooks to connect and control many types of smart devices. This guide provides a rapid introduction to using React components with Client Sessions.
For this guide, we expect you to have a backend server and a client frontend react application. If you want to integrate Seam using only a client without a backend, you'll need to use a Publishable Key.
What is a Client Session Token?
A Client Session Token allows a device owner to make API requests to Seam where interactions are restricted only to the devices they own. To enable your users to interact with their devices, you'll need to create a client session and pass its token to the <SeamProvider />
.
1 — Install the Seam SDK on your Server
Seam provides client libraries for many languages such as Javascript, Python, Ruby, and PHP, as well as a Postman collection and OpenAPI spec.
Once installed, sign-up for Seam to get your API key, and export it as an environment variable:
$ export SEAM_API_KEY=seam_test2ZTo_0mEYQW2TvNDCxG5Atpj85Ffw
2 - Install @seamapi/react
in your React application
@seamapi/react
in your React applicationnpm install --save @seamapi/react
# or via yarn
yarn add @seamapi/react
3 — Create a Seam Client Session on your Server, and pass it to the Client
We'll start by writing some server code that returns a client session. There are a lot of ways to do this depending on your server framework:
Create an endpoint such as
/api/seam/get_client_session
and call it from your frontend appInject the client session token in your html if you're using an HTML templating engine.
For this guide, we'll assume you're creating an endpoint that will return a client session token. This is often appropriate for Single Page Applications.
import { Seam } from "seamapi"
export default (req, res) => {
// Do authentication logic
const userId = req.auth.userId
// Pull any accounts associated with this user
// You can also use connect webview ids, or just pass an empty array if you'd
// like the user to make the connect webviews themselves in the frontend!
const accountsAssociatedWithUser = [{ seamConnectedAccountId: "..." }]
const seam = new Seam()
const clientSession = seam.client_sessions.create({
connected_account_ids: accountsAssociatedWithUser.map(
(acc) => acc.seamConnectedAccountId
),
})
res.status(200).json({
token: clientSession.token,
})
}
Awesome! We can now request this from the frontend client application using a hook like this:
// lib/hooks/use-seam-client-session-token.js
import { useState, useEffect } from "react"
export const useSeamClientSessionToken = () => {
const { myAppAuthToken } = useAuth() // or however you manage client side auth
const [token, setToken] = useState()
useEffect(async () => {
const res = await fetch("/api/seam/get_client_session", {
method: "POST",
headers: {
Authorization: `Bearer ${myAppAuthToken}`,
},
})
if (res.ok) {
const data = await res.json()
setToken(res.token)
}
}, [myAppAuthToken])
return token
}
4 - Use Your Client Session Token to Display a User's Devices
import { SeamProvider, DeviceTable } from "@seamapi/react"
import { useSeamClientSessionToken } from "lib/hooks/use-seam-client-session-token"
export const App = () => {
const clientSessionToken = useSeamClientSessionToken()
if (clientSessionToken == null) return <p>Loading...</p>
return (
<SeamProvider clientSessionToken={clientSessionToken}>
<DeviceTable />
</SeamProvider>
)
}
You should see a list of devices like what's shown below:

Next Steps
View and play with components in the interactive storybook component library
Check out some Full Example Apps
If you have any questions or want to report an issue, email us at [email protected].
Last updated
Was this helpful?