curl --request POST \
--url https://api.letsdothis.com/v0/teams/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"teams": [
{
"externalTeamId": "<string>",
"teamProgramId": "<string>",
"teamName": "<string>",
"memberParticipantIds": [
"<string>"
],
"isPrivate": true,
"captainParticipantId": "<string>"
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
teams: [
{
externalTeamId: '<string>',
teamProgramId: '<string>',
teamName: '<string>',
memberParticipantIds: ['<string>'],
isPrivate: true,
captainParticipantId: '<string>'
}
]
})
};
fetch('https://api.letsdothis.com/v0/teams/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/teams/import"
payload = { "teams": [
{
"externalTeamId": "<string>",
"teamProgramId": "<string>",
"teamName": "<string>",
"memberParticipantIds": ["<string>"],
"isPrivate": True,
"captainParticipantId": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"jobId": "6628293a4b5c6d7e8f901a2b",
"status": "queued"
}{
"statusCode": 400,
"error": "<string>",
"message": "<string>"
}{
"statusCode": 409,
"error": "<string>",
"message": "<string>"
}{
"statusCode": 413,
"error": "<string>",
"message": "<string>"
}{
"error": "validation_failed",
"message": "<string>",
"totalRows": 123,
"rowsWithErrors": 123,
"errorCount": 123,
"summary": [
{
"code": "<string>",
"count": 123,
"message": "<string>",
"examples": [
{
"rowIndex": 123,
"externalTeamId": "<string>",
"value": "<string>"
}
],
"fieldId": "<string>"
}
],
"errors": [
{
"rowIndex": 123,
"errors": [
{
"code": "<string>",
"message": "<string>",
"fieldId": "<string>"
}
],
"externalTeamId": "<string>"
}
],
"truncated": true
}{
"statusCode": 429,
"error": "<string>",
"message": "<string>"
}Import teams
Asynchronously creates teams and puts already-imported participants in them. Import the bookings first, then send each team with its members’ participant ids. Each team is created as a team created at checkout would be, and each member is put in it as an organizer edit from the dashboard would: a participant already in another team is moved, team size limits are not applied, and no emails are sent.
The whole batch is validated synchronously — either every team is accepted (202 with a job to poll) or nothing is (422 with every problem, aggregated by error class). Execution is per-team from there: one team failing never rejects the others.
Imports are create-once per externalTeamId within an event occurrence: re-importing the same id with the same details reuses the team and adds any missing members. The same id with a different program, name, privacy or non-participating captain fails that team.
Send an Idempotency-Key header to make the submission replayable: retrying the same key and body returns the original job; reusing a key with a different body is rejected (409). A 409 can also mean another request with the same key is still being accepted; retry it shortly to get its job.
curl --request POST \
--url https://api.letsdothis.com/v0/teams/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"teams": [
{
"externalTeamId": "<string>",
"teamProgramId": "<string>",
"teamName": "<string>",
"memberParticipantIds": [
"<string>"
],
"isPrivate": true,
"captainParticipantId": "<string>"
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
teams: [
{
externalTeamId: '<string>',
teamProgramId: '<string>',
teamName: '<string>',
memberParticipantIds: ['<string>'],
isPrivate: true,
captainParticipantId: '<string>'
}
]
})
};
fetch('https://api.letsdothis.com/v0/teams/import', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.letsdothis.com/v0/teams/import"
payload = { "teams": [
{
"externalTeamId": "<string>",
"teamProgramId": "<string>",
"teamName": "<string>",
"memberParticipantIds": ["<string>"],
"isPrivate": True,
"captainParticipantId": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"jobId": "6628293a4b5c6d7e8f901a2b",
"status": "queued"
}{
"statusCode": 400,
"error": "<string>",
"message": "<string>"
}{
"statusCode": 409,
"error": "<string>",
"message": "<string>"
}{
"statusCode": 413,
"error": "<string>",
"message": "<string>"
}{
"error": "validation_failed",
"message": "<string>",
"totalRows": 123,
"rowsWithErrors": 123,
"errorCount": 123,
"summary": [
{
"code": "<string>",
"count": 123,
"message": "<string>",
"examples": [
{
"rowIndex": 123,
"externalTeamId": "<string>",
"value": "<string>"
}
],
"fieldId": "<string>"
}
],
"errors": [
{
"rowIndex": 123,
"errors": [
{
"code": "<string>",
"message": "<string>",
"fieldId": "<string>"
}
],
"externalTeamId": "<string>"
}
],
"truncated": true
}{
"statusCode": 429,
"error": "<string>",
"message": "<string>"
}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.
Body
An asynchronous team import request: the whole batch is accepted or none of it. At most 2,000 members across the batch.
The teams to import.
1 - 500 elementsShow child attributes
Show child attributes
Was this page helpful?

