Changelog/April 11, 2025
April 11, 2025

Announcing Our Plastic Card Encoding API

Announcing Our Plastic Card Encoding API

This week, we are thrilled to release our plastic card encoding API. This new standardized API enables you to encode and issue plastic card credentials across systems like Assa Abloy Visionline and Vostio, Salto Space, Dormakaba Community, and many more coming soon.

With this API you can…

  • Encode cards to issue to users, such as hotel guests.
  • Read cards to retrieve the data encoded on them.

For complete documentation, see Working with Card Encoders and Scanners.

Encode and scan plastic key cards with the Seam API

Encode and Scan Plastic Key Cards with a Few Lines of Code

Using the access control system API that we released last week, you create users in the access system that you've connected to your Seam workspace and assign credentials to the users. Then, encode cards using a physical encoder.

JavaScript
1// After creating an acs_user and acs_credential,
2// list available encoders within your access control system.
3const availableEncoders = await seam.acs.encoders.list({
4  acs_system_ids: [acsSystemId]
5});
6
7// Identify the encoder that you want to use.
8const encoder = availableEncoders[0];
9
10// Now, encode the credential onto a card.
11const encodingActionAttempt = await seam.acs.encoders.encodeCredential({
12  acs_credential_id: credential.acs_credential_id,
13  acs_encoder_id: encoder.acs_encoder_id
14});
15
16// You can also scan the card.
17const scanningActionAttempt = await seam.acs.encoders.scanCredential({
18  acs_encoder_id: encoder.acs_encoder_id
19});

After you have encoded the plastic card, verify that the encoding action completed successfully using polling or a webhook.

When the encoder has finished encoding the card, Seam assigns values to some card-related properties on the credential. For example, acs_credential.is_issued becomes true, and acs_credential.card_number and acs_credential.issued_at receive values.

JSON
1{
2  "acs_credential_id": "22222222-2222-2222-2222-222222222222",
3  "acs_user_id": "33333333-3333-3333-3333-333333333333",
4  "access_method": "card",
5  "starts_at": "2025-04-10T01:20:00.000Z",
6  "ends_at": "2025-04-12T12:30:00.000Z",
7  "is_issued": true,
8  "card_number": "1234abc",
9  "issued_at": "2025-04-10T01:18:00.000Z",
10  ...
11}

2025.04.11 Changelog

Changed

  • Remote lock/unlock improvements: We made an improvement to the performance of remote lock and unlock actions.

Fixes

  • Missing SmartThings events: We corrected an issue that was causing Seam not to receive some events from some SmartThings locks.
  • False TTLock flaky connections: We corrected the way in which we determine the online status for TTLock Wi-Fi locks.
By subscribing you agree to our Privacy Policy.
One API for All Devices
Global Infrastructure for Controlling the Physical World
Seam makes controlling IoT devices seamless and programmable. Our teams operate globally,
enabling businesses of all sizes.
Smart Locks
Access Systems
Knowledge
Lock Capabilities
Thermostats
Sensors
© 2026 Seam Labs, Inc.