Modifying Access Codes
Learn how to update your access codes, and ensure that the changes are successfully set on the device.
1. Update the access code using the API
You can update any active or upcoming access codes using the Update Access Code request.
When modifying an access code, adjust the properties of the access code, such as the code, name, starts_at, and ends_at to the new desired values.
Code:
seam.access_codes.update(
access_code = "11111111-1111-1111-1111-555555555555",
name = "my updated code name",
code = "5432",
starts_at = "2025-02-01T16:00:00Z",
ends_at = "2025-02-22T12:00:00Z"
)Output:
NoneRequest:
curl -X 'POST' \
'https://connect.getseam.com/access_codes/update' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"name": "my updated code name",
"code": "5432",
"starts_at": "2025-02-01T16:00:00Z",
"ends_at": "2025-02-22T12:00:00Z"
}'Response:
{
"ok": true
}Code:
await seam.accessCodes.update({
access_code_id: "11111111-1111-1111-1111-555555555555",
name: "my updated code name",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z",
code: "5432"
})Output:
voidCode:
client.access_codes.update(
access_code_id: "11111111-1111-1111-1111-555555555555",
name: "my updated code name",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z",
code: "5432"
)Output:
nilCode:
$seam->access_codes->update(
access_code_id: "11111111-1111-1111-1111-555555555555",
name: "my updated code name",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z",
code: "5432"
);Output:
voidCode:
seam.AccessCodes.Update(
accessCodeId: "11111111-1111-1111-1111-555555555555",
name: "my updated code name",
startsAt: "2025-02-01T16:00:00Z",
endsAt: "2025-02-22T12:00:00Z",
code: "5432"
);Output:
void2. Verify that the access code has been updated
For a permanent access code
There are two methods to verify that a permanent access code has been set on the device:
Polling Method
Utilize the access_code_id returned in the response from the create endpoint to invoke the Get Access Code endpoint. A basic implementation would involve polling this endpoint until the status of the access code updates to set.
If the status remains setting for a very long time, or if the access_code object contains any warnings or errors properties, consult our guide on "Troubleshooting Access Code Issues" for further guidance.
Webhook Events Method
Monitor the incoming events on your webhook. Be on the lookout for the access_code.set_on_device event, which indicates the successful setting of the access code on the device.
However, if you receive access_code.failed_to_set_on_device or access_code.delay_in_setting_on_device events, it's crucial to refer to the "Troubleshooting access code issues" guide for assistance.
For a time-bound access code
There are two methods to verify that a time-bound access code has been set on the device:
Polling Method
Use the access_code_id provided in the response from the create endpoint to call the Get Access Code endpoint. In a basic implementation, you would poll this endpoint at the starts_at time to check if the access code's status is updated to set.
If the status remains setting, or if the access_code object displays any warnings or errors, refer to our "Troubleshooting Access Code Issues" guide for assistance.
Webhook Events Method
Monitor the incoming events on your webhook. Be on the lookout for the access_code.set_on_device event, which indicates the successful setting of the access code on the device.
However, if you receive access_code.failed_to_set_on_device or access_code.delay_in_setting_on_device events, it's crucial to refer to the "Troubleshooting access code issues" guide for assistance.
Special Case #1: Changing an ongoing access code to time-bound access
To convert a permanent access code to time-bound access, you must set the starts_at and ends_at properties to the timeframe that you want for the access code.
1. Confirm that the access code starts as an ongoing code.
Code:
access_code = seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)Output:
AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='ongoing',
...
)2. Update the code to set starts_at and ends_at timestamps.
Code:
seam.access_codes.update(
access_code = "11111111-1111-1111-1111-555555555555",
starts_at = "2025-01-01T16:00:00Z",
ends_at = "2025-01-22T12:00:00Z"
)Output:
None3. Confirm that the type has changed to time_bound.
Code:
seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)Output:
AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='time_bound',
starts_at='2025-01-01T16:00:00.000Z',
ends_at='2025-01-22T12:00:00.000Z',
...
)1. Confirm that the access code starts as an ongoing code.
Request:
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/access_codes/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555"
}'Response:
{
"access_code": {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
},
"ok": true
}2. Update the code to set starts_at and ends_at timestamps.
Request:
curl -X 'POST' \
'https://connect.getseam.com/access_codes/update' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"starts_at": "2025-01-01T16:00:00Z",
"ends_at": "2025-01-22T12:00:00Z"
}'Response:
{
"ok": true
}3. Confirm that the type has changed to time_bound.
Request:
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/access_codes/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555"
}'Response:
{
"access_code": {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-01-01T16:00:00.000Z",
"ends_at": "2025-01-22T12:00:00.000Z",
...
},
"ok": true
}1. Confirm that the access code starts as an ongoing code.
Code:
await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});Output:
{
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'ongoing',
...
}2. Update the code to set starts_at and ends_at timestamps.
Code:
await seam.accessCodes.update({
access_code_id: "11111111-1111-1111-1111-555555555555",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z"
});Output:
void3. Confirm that the type has changed to time_bound.
Code:
await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});Output:
{
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'time_bound',
starts_at: '2025-02-01T16:00:00.000Z',
ends_at: '2025-02-22T12:00:00.000Z',
...
}1. Confirm that the access code starts as an ongoing code.
Code:
client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)Output:
<Seam::AccessCode:0x00438
access_code_id="11111111-1111-1111-1111-555555555555"
type="ongoing"
...
>2. Update the code to set starts_at and ends_at timestamps.
Code:
client.access_codes.update(
access_code_id: "11111111-1111-1111-1111-555555555555",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z"
)Output:
nil3. Confirm that the type has changed to time_bound.
Code:
client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)Output:
<Seam::AccessCode:0x00438
access_code_id="11111111-1111-1111-1111-555555555555"
type="time_bound"
starts_at=2025-02-01 16:00:00 UTC
ends_at=2025-02-22 12:00:00 UTC
...
>1. Confirm that the access code starts as an ongoing code.
Code:
$seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}2. Update the code to set starts_at and ends_at timestamps.
Code:
$seam->access_codes->update(
access_code_id: "11111111-1111-1111-1111-555555555555",
starts_at: "2025-02-01T16:00:00Z",
ends_at: "2025-02-22T12:00:00Z"
);Output:
void3. Confirm that the type has changed to time_bound.
Code:
$seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-02-01T16:00:00.000Z",
"ends_at": "2025-02-22T12:00:00.000Z",
...
}1. Confirm that the access code starts as an ongoing code.
Code:
seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}2. Update the code to set starts_at and ends_at timestamps.
Code:
seam.AccessCodes.Update(
accessCodeId: "11111111-1111-1111-1111-555555555555",
startsAt: "2025-02-01T16:00:00Z",
endsAt: "2025-02-22T12:00:00Z"
);Output:
void3. Confirm that the type has changed to time_bound.
Code:
seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-02-01T16:00:00.000Z",
"ends_at": "2025-02-22T12:00:00.000Z",
...
}Special Case #2: Changing a time-bound access code to permanent access
When converting a time-bound code to a permanent one, you'll also need to set the type property of the access code to ongoing.
1. Confirm that the access code starts as a time-bound code.
Code:
seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)Output:
AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='time_bound',
starts_at='2025-01-01T16:00:00.000Z',
ends_at='2025-01-22T12:00:00.000Z',
...
)2. Update the code to set the type to ongoing.
Code:
seam.access_codes.update(
access_code_id = "11111111-1111-1111-1111-555555555555",
type = "ongoing"
)Output:
None3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Code:
seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)Output:
AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='ongoing',
...
)1. Confirm that the access code starts as a time-bound code.
Request:
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/access_codes/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555"
}'Response:
{
"access_code": {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-01-01T16:00:00.000Z",
"ends_at": "2025-01-22T12:00:00.000Z",
...
},
"ok": true
}2. Update the code to set the type to ongoing.
Request:
curl -X 'POST' \
'https://connect.getseam.com/access_codes/update' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing"
}'Response:
{
"ok": true
}3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Request:
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/access_codes/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"access_code_id": "11111111-1111-1111-1111-555555555555"
}'Response:
{
"access_code": {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
},
"ok": true
}1. Confirm that the access code starts as a time-bound code.
Code:
await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});Output:
{
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'time_bound',
starts_at: '2025-02-01T16:00:00.000Z',
ends_at: '2025-02-22T12:00:00.000Z',
...
}2. Update the code to set the type to ongoing.
Code:
await seam.accessCodes.update({
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
});Output:
void3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Code:
await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});Output:
{
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'ongoing',
...
}1. Confirm that the access code starts as a time-bound code.
Code:
client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)Output:
<Seam::AccessCode:0x00438
access_code_id="11111111-1111-1111-1111-555555555555"
type="time_bound"
starts_at=2025-02-01 16:00:00 UTC
ends_at=2025-02-22 12:00:00 UTC
...
>2. Update the code to set the type to ongoing.
Code:
client.access_codes.update(
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
)Output:
nil3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Code:
client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)Output:
<Seam::AccessCode:0x00438
access_code_id="11111111-1111-1111-1111-555555555555"
type="ongoing"
...
>1. Confirm that the access code starts as a time-bound code.
Code:
$seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-02-01T16:00:00.000Z",
"ends_at": "2025-02-22T12:00:00.000Z",
...
}2. Update the code to set the type to ongoing.
Code:
$seam->access_codes->update(
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
);Output:
void3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Code:
$seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}1. Confirm that the access code starts as a time-bound code.
Code:
seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "time_bound",
"starts_at": "2025-02-01T16:00:00.000Z",
"ends_at": "2025-02-22T12:00:00.000Z",
...
}2. Update the code to set the type to ongoing.
Code:
seam.AccessCodes.Update(
accessCodeId: "11111111-1111-1111-1111-555555555555",
type: Seam.Api.AccessCodes.UpdateRequest.TypeEnum.Ongoing
);Output:
void3. Confirm that the type has changed to ongoing and the starts_at and ends_at are None.
Code:
seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);Output:
{
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}Last updated
Was this helpful?

