Skip to content

Instantly share code, notes, and snippets.

@BlakeStevenson
Last active March 24, 2024 01:20
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save BlakeStevenson/e0323256e4395752b6fea814d5e5ebcc to your computer and use it in GitHub Desktop.
Save BlakeStevenson/e0323256e4395752b6fea814d5e5ebcc to your computer and use it in GitHub Desktop.
Create an appointment at the Texas DPS at the closest location, soonest time, programatically.
const axios = require('axios');
async function getLocations() {
const locationsData = await axios.post("https://publicapi.txdpsscheduler.com/api/AvailableLocation", {
"TypeId": 71,
"ZipCode": "10001",
"CityName": "",
"PreferredDay": 0
});
return locationsData.data;
}
async function getTimes(lid) {
const timeData = await axios.post("https://publicapi.txdpsscheduler.com/api/AvailableLocationDates", {
LocationId: lid,
TypeId: 71,
SameDay: false,
StartDate: null,
PreferredDay: 0
});
return timeData.data;
}
async function createAppointment(time, site, respId) {
const appointmentData = await axios.post("https://publicapi.txdpsscheduler.com/api/NewBooking", {
"CardNumber": "",
"FirstName": "Blake",
"LastName": "Stevenson",
"DateOfBirth": "mm/dd/yyyy",
"Last4Ssn": "ssn4",
"Email": "email@example.com",
"CellPhone": "(123) 456-7890",
"HomePhone": "",
"ServiceTypeId": 71,
"BookingDateTime": time, //2020-10-16T08:00:00
"BookingDuration": 45,
"SpanishLanguage": "N",
"SiteId": site,
"SendSms": false,
"AdaRequired": false,
"ResponseId": respId
});
return appointmentData.data;
}
async function getResponseId() {
const respIdData = await axios.post("https://publicapi.txdpsscheduler.com/api/Eligibility", {
"FirstName": "Blake",
"LastName": "Stevenson",
"DateOfBirth": "mm/dd/yyyy",
"LastFourDigitsSsn": "ssn4",
"CardNumber": ""
});
return respIdData.data[0].ResponseId;
}
(async () => {
// get response id
const responseId = await getResponseId();
console.log(responseId);
// get locations
const locations = await getLocations();
console.log(locations[0]);
// get times
const times = await getTimes(locations[0].Id);
console.log(times.LocationAvailabilityDates[0]);
// create appointment
const appointment = await createAppointment(times.LocationAvailabilityDates[0].AvailableTimeSlots[0].StartDateTime, locations[0].Id, responseId);
console.log(appointment);
this.appointment = appointment;
})();
@potoole-viant
Copy link

this is awesome, i did find when trying this out in python that the post to 'Eligibility' required the "Origin" header set to https://public.txdpsscheduler.com otherwise it returned a 400.

@BlakeStevenson
Copy link
Author

this is awesome, i did find when trying this out in python that the post to 'Eligibility' required the "Origin" header set to https://public.txdpsscheduler.com otherwise it returned a 400.

I made this two and a half years ago when they opened after covid. It worked at the time, idk about now.

@spartan-g
Copy link

so how this works? how do i run it idk nothing about this i just want an appoiment for my Drivers license lol

@yerraeee
Copy link

yerraeee commented Mar 9, 2023

How do you get credentials to use this service from TexasDPS?

@zakaryaalsaba
Copy link

SSL: CERTIFICATE_VERIFY_FAILED:
Traceback (most recent call last):
File "C:\Python311\Lib\site-packages\urllib3\connectionpool.py", line 703, in urlopen
httplib_response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\urllib3\connectionpool.py", line 386, in _make_request
self._validate_conn(conn)
File "C:\Python311\Lib\site-packages\urllib3\connectionpool.py", line 1042, in validate_conn
conn.connect()
File "C:\Python311\Lib\site-packages\urllib3\connection.py", line 419, in connect
self.sock = ssl_wrap_socket(
^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\urllib3\util\ssl
.py", line 449, in ssl_wrap_socket
ssl_sock = ssl_wrap_socket_impl(
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\urllib3\util\ssl
.py", line 493, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\ssl.py", line 517, in wrap_socket
return self.sslsocket_class._create(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\ssl.py", line 1075, in _create
self.do_handshake()
File "C:\Python311\Lib\ssl.py", line 1346, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Python311\Lib\site-packages\requests\adapters.py", line 489, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\urllib3\connectionpool.py", line 787, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='publicapi.txdpsscheduler.com', port=443): Max retries exceeded with url: /api/AvailableLocation (Caused by SSLError(SSLCertVerificationError(1,
'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)')))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Vue\DMVQuery\makebooking.py", line 199, in
main()
File "C:\Vue\DMVQuery\makebooking.py", line 141, in main
results = get_available_locations()
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Vue\DMVQuery\makebooking.py", line 120, in get_available_locations
response = requests.request('POST', URL, headers=HEADERS, data=PAYLOAD)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\requests\api.py", line 59, in request
return session.request(method=method, url=url, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\requests\sessions.py", line 587, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\requests\sessions.py", line 701, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Python311\Lib\site-packages\requests\adapters.py", line 563, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='publicapi.txdpsscheduler.com', port=443): Max retries exceeded with url: /api/AvailableLocation (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:992)')))

@markdjones82
Copy link

How did you find out about the api? I don't see any info on it when googling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment