---
title: "Create or update a trip draft"
method: POST
path: "/trips"
tags: ["trips"]
---

# Create or update a trip draft

`POST /trips`

## Request

- Base URL: `https://www.extralingo.com/api/v1`
- URL: `https://www.extralingo.com/api/v1/trips`
- Auth: none declared

Returns trip_id, url (legacy), trip_url, and continue_url (/s/{id}) so the student can continue on Extralingo.com with selections restored. Not a booking. No OTP.

## Request body

- object
  - `school_id` integer
  - `trip_id` string
  - `configuration` object
  - `locale` string

## Response `200`

OK

- TripSavedResponse
  - `success` boolean
  - `trip_id` string
  - `url` string: Saved trip URL (/s/{trip_id}). Alias of continue_url; kept for backwards compatibility.
  - `trip_url` string: Same as url: the /s/{trip_id} link for this saved trip draft.
  - `continue_url` string: URL for the student to continue this configured trip on Extralingo.com with their current school, dates, course, accommodation and other saved selections restored.
  - `school_url` string: Locale-specific school page URL for browsing without the saved configuration.
  - `school_id` integer
  - `school_name` string
  - `configuration` object
  - `summary` string
  - `note` string

## Other responses

- `400`: Bad request
- `401`: Email verification required
- `404`: Not found
- `422`: Validation failed or idempotency key reused with a different payload
- `429`: Rate limited

---

[API](https://skmtc.dev/extralingo/apis/extralingo-public-api.md) · [All operations](https://skmtc.dev/extralingo/apis/extralingo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/extralingo/apis/extralingo-public-api/revisions/e30a5e5bf44c?raw)
