1. Confirm the connector
Every APC belongs to an existing connector. List your connectors (GET /api2/v1/connectors) and confirm the one to use before anything else — never guess or fabricate a connector identifier. See Managing TMS Connectors if you don’t have one set up yet.
2. Pick a project template — before languages, not after
uid. Resolve this before asking about languages: a project template’s detail response carries the source/target languages it was created with.
sourceLang and targetLangs on this response are inherited from the project the template was originally created from — this is exactly why the TMS UI only shows you language options once you’ve picked a template. Present those as your language choices; only fall back to the full, unscoped GET /api2/v1/languages list if the chosen template happens to have no languages set.
3. Browse the remote folder — don’t ask for a path
/project/{id} or /space/....
For a
PHRASE-type connector (TMS ↔ Phrase Strings), the browsable structure returned here is Strings projects/spaces rather than a literal filesystem path — present the real project/space names the endpoint returns. PHRASE is a real, valid connector type; if a browse call fails for a specific connector, that’s an operation-specific failure, not evidence the connector or its type doesn’t exist.monitoredFolders[] entry: remoteFolder (the folder path), folderNames (its path segments as a list), and humanReadableFolderPath — derive these from the browsed result, don’t fabricate them from the folder name alone. monitoredFolders[].localToken is the connector’s own localToken field (from its list/get response — not its id), which the backend needs to resolve which remote storage to read.
If a connector type doesn’t support folder browsing at all, say so and let the user pick the folder in the TMS UI instead, then continue the rest of the flow normally.
4. Schedule (frequency.frequencyOption)
There’s no list endpoint for this one — it’s a genuine question — but the valid values come straight from the create endpoint’s schema, so offer them as named options rather than an open “how often?”:
WEEKLY_FIXED_TIMES— runs at specific times on specific days of the weekHOUR_TIME_RANGE— runs every N hours (range)MINUTE_TIME_RANGE— runs every N minutes (range)MONTHLY_FIXED_TIMES— runs at specific times on specific days of the month
weeklyFixedTimes[], monthlyFixedTimes[]) — check the full request schema for the shape once you know which one applies.
5. Translation-export rule
At least onetranslationExports[] entry is required. Again, no list endpoint, but the schema constrains the valid values:
exportFrom.type:FINAL_WORKFLOW_STEPorWORKFLOW_STEP(withworkflowStepnumber, if the latter)exportWhen.exportTrigger:SELECTED_WORKFLOW_STEP_COMPLETED,FINAL_WORKFLOW_STEP_COMPLETED, orPROJECT_COMPLETED
6. Continuous vs. one-off projects
continuousProject: true imports files into a single, continuously-updated project instead of creating a new project on every run. This is a yes/no the user needs to decide — there’s no discoverable default.