curl --request GET \
--url https://api.letsdothis.com/v0/bookings/import/{jobId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/bookings/import/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/bookings/import/{jobId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"jobId": "65d4e5f60718293a4b5c6d7e",
"status": "completed",
"counts": {
"pending": 0,
"processing": 0,
"success": 1,
"failure": 0,
"cancelled": 0,
"total": 1
},
"rowCounts": {
"succeeded": 1,
"alreadyImported": 0,
"failed": 1,
"total": 2
},
"results": [
{
"externalBookingId": "order-1042",
"bookingId": "65a1b2c3d4e5f60718293a4b",
"status": "succeeded",
"errors": []
},
{
"externalBookingId": "order-1043",
"status": "failed",
"errors": [
{
"code": "TICKET_NOT_OWNED",
"fieldId": "ticketId",
"message": "Ticket 65a1b2c3d4e5f60718293a4c was not found for this organizer"
}
]
}
]
}Get booking import status
Returns the progress of an asynchronous booking import and the per-row outcomes recorded so far. Poll until status is completed, then read results for each row — failures carry the same error vocabulary as the submit-time validation response.
To resolve a single row later, use the external-booking-id lookup endpoint.
curl --request GET \
--url https://api.letsdothis.com/v0/bookings/import/{jobId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.letsdothis.com/v0/bookings/import/{jobId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/bookings/import/{jobId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"jobId": "65d4e5f60718293a4b5c6d7e",
"status": "completed",
"counts": {
"pending": 0,
"processing": 0,
"success": 1,
"failure": 0,
"cancelled": 0,
"total": 1
},
"rowCounts": {
"succeeded": 1,
"alreadyImported": 0,
"failed": 1,
"total": 2
},
"results": [
{
"externalBookingId": "order-1042",
"bookingId": "65a1b2c3d4e5f60718293a4b",
"status": "succeeded",
"errors": []
},
{
"externalBookingId": "order-1043",
"status": "failed",
"errors": [
{
"code": "TICKET_NOT_OWNED",
"fieldId": "ticketId",
"message": "Ticket 65a1b2c3d4e5f60718293a4c was not found for this organizer"
}
]
}
]
}403. Contact your Let’s Do This representative if you’d like access.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Response
Default Response
The state of an asynchronous booking import.
results is the outcome. It holds one entry per submitted row, with that row's own status and errors, and it is the only field that reports whether any data landed. Decide what to action from it.
status and counts describe progress, and neither reports success. status is completed once the work finished, including work whose every row was rejected. counts tracks internal work units rather than rows: one unit covers a server-side chunk of the batch, so total does not correspond to the number of rows submitted, and a unit that runs to completion counts as success even when all of its rows failed validation.
results accumulates as the work completes, so a processing job reports the rows finished so far; poll until status is completed. rowCounts totals the row outcomes in results and accumulates the same way, so a non-zero rowCounts.failed is the signal to inspect results.
queued, processing, completed, cancelled Progress counts for an import job, tracking internal work units rather than rows. One unit covers a server-side chunk of the submitted batch, so total does not correspond to the number of rows submitted, and a unit that runs to completion counts as success even when every one of its rows failed validation. Per-row outcomes, including failures, are reported in results, not here.
Show child attributes
Show child attributes
Outcome totals for an import job, folded from results: one count per reported result, not per submitted row. Most imports report one result per submitted row, but an endpoint can report several — a reserved-entry participant row covering a booking reports one result per participant — so total can legitimately exceed the submitted row count and is not a reconciliation check against it. The totals accumulate the same way results does: a processing job counts the results reported so far. A non-zero failed is the signal to inspect results and act on the failures.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?

