1. Update the access code using the API
You can update any active or upcoming access codes using the 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.
Python cURL (bash) JavaScript Ruby PHP C# Java Go
Code:
Copy 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:
Request:
Copy 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:
Code:
Copy 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:
Code:
Copy 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:
Code:
Copy $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:
Code:
Copy 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:
Code:
Copy seam.accessCodes().update(AccessCodesUpdateRequest.builder()
.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")
.build());
Output:
Code:
Copy startsAt, err := time.Parse(time.RFC3339, "2025-02-01T16:00:00Z")
endsAt, err := time.Parse(time.RFC3339, "2025-02-22T12:00:00Z")
if err != nil {
return err
}
client.AccessCodes.Update(
context.Background(),
&api.AccessCodesUpdateRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
Name: api.String("my updated code name"),
StartsAt: startsAt,
EndsAt: endsAt,
Code: api.String("5432"),
},
)
Output:
2. 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
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.
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
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.
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.
Python cURL (bash) JavaScript Ruby PHP C# Java Go
1. Confirm that the access code starts as an ongoing code.
Code:
Copy access_code = seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)
Output:
Copy AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='ongoing',
...
)
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy 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:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)
Output:
Copy 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:
Copy # 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:
Copy {
"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:
Copy 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:
3. Confirm that the type
has changed to time_bound
.
Request:
Copy # 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:
Copy {
"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:
Copy await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});
Output:
Copy {
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'ongoing',
...
}
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy 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:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});
Output:
Copy {
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:
Copy client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)
Output:
Copy <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:
Copy 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:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)
Output:
Copy <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:
Copy $seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy $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:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy $seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"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:
Copy seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy seam.AccessCodes.Update(
accessCodeId: "11111111-1111-1111-1111-555555555555",
startsAt: "2025-02-01T16:00:00Z",
endsAt: "2025-02-22T12:00:00Z"
);
Output:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"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:
Copy seam.accessCodes().get(AccessCodesGetRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.build());
Output:
Copy {
"access_code_id" : "11111111-1111-1111-1111-555555555555",
"type" : "ongoing",
...
}
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy seam.accessCodes().update(AccessCodesUpdateRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.startsAt("2025-02-01T16:00:00Z")
.endsAt("2025-02-22T12:00:00Z")
.build());
Output:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy seam.accessCodes().get(AccessCodesGetRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.build());
Output:
Copy {
"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:
Copy client.AccessCodes.Get(
context.Background(),
&api.AccessCodesGetRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
},
)
Output:
Copy {
"access_code_id" : "11111111-1111-1111-1111-555555555555",
"type" : "ongoing",
...
}
2. Update the code to set starts_at
and ends_at
timestamps.
Code:
Copy startsAt, err := time.Parse(time.RFC3339, "2025-02-01T16:00:00Z")
endsAt, err := time.Parse(time.RFC3339, "2025-02-22T12:00:00Z")
if err != nil {
return err
}
client.AccessCodes.Update(
context.Background(),
&api.AccessCodesUpdateRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
StartsAt: startsAt,
EndsAt: endsAt,
},
)
Output:
3. Confirm that the type
has changed to time_bound
.
Code:
Copy client.AccessCodes.Get(
context.Background(),
&api.AccessCodesGetRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
},
)
Output:
Copy {
"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
.
Python cURL (bash) JavaScript Ruby PHP C# Java Go
1. Confirm that the access code starts as a time-bound code.
Code:
Copy seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)
Output:
Copy 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:
Copy seam.access_codes.update(
access_code_id = "11111111-1111-1111-1111-555555555555",
type = "ongoing"
)
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy seam.access_codes.get(
access_code_id = "11111111-1111-1111-1111-555555555555"
)
Output:
Copy AccessCode(
access_code_id='11111111-1111-1111-1111-555555555555',
type='ongoing',
...
)
1. Confirm that the access code starts as a time-bound code.
Request:
Copy # 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:
Copy {
"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:
Copy 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:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Request:
Copy # 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:
Copy {
"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:
Copy await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});
Output:
Copy {
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:
Copy await seam.accessCodes.update({
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
});
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy await seam.accessCodes.get({
access_code_id: "11111111-1111-1111-1111-555555555555"
});
Output:
Copy {
access_code_id: '11111111-1111-1111-1111-555555555555',
type: 'ongoing',
...
}
1. Confirm that the access code starts as a time-bound code.
Code:
Copy client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)
Output:
Copy <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:
Copy client.access_codes.update(
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
)
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy client.access_codes.get(
access_code_id: "11111111-1111-1111-1111-555555555555"
)
Output:
Copy <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:
Copy $seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"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:
Copy $seam->access_codes->update(
access_code_id: "11111111-1111-1111-1111-555555555555",
type: "ongoing"
);
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy $seam->access_codes->get(
access_code_id: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}
1. Confirm that the access code starts as a time-bound code.
Code:
Copy seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"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:
Copy seam.AccessCodes.Update(
accessCodeId: "11111111-1111-1111-1111-555555555555",
type: Seam.Api.AccessCodes.UpdateRequest.TypeEnum.Ongoing
);
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy seam.AccessCodes.Get(
accessCodeId: "11111111-1111-1111-1111-555555555555"
);
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}
1. Confirm that the access code starts as a time-bound code.
Code:
Copy seam.accessCodes().get(AccessCodesGetRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.build());
Output:
Copy {
"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:
Copy seam.accessCodes().update(AccessCodesUpdateRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.type(AccessCodesUpdateRequestType.ONGOING)
.build());
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy seam.accessCodes().get(AccessCodesGetRequest.builder()
.accessCodeId("11111111-1111-1111-1111-555555555555")
.build());
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}
1. Confirm that the access code starts as a time-bound code.
Code:
Copy client.AccessCodes.Get(
context.Background(),
&api.AccessCodesGetRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
},
)
Output:
Copy {
"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:
Copy client.AccessCodes.Update(
context.Background(),
&api.AccessCodesUpdateRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
Type: api.AccessCodesUpdateRequestTypeOngoing.Ptr(),
},
)
Output:
3. Confirm that the type
has changed to ongoing
and the starts_at
and ends_at
are None
.
Code:
Copy client.AccessCodes.Get(
context.Background(),
&api.AccessCodesGetRequest{
AccessCodeId: api.String("11111111-1111-1111-1111-555555555555"),
},
)
Output:
Copy {
"access_code_id": "11111111-1111-1111-1111-555555555555",
"type": "ongoing",
...
}