Skip to main content
Creating an APC setting has more required fields than a typical create call, and several of them have a real, discoverable set of valid options — don’t ask for these blind, and don’t guess a shape for the ones with no dedicated list endpoint either.

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

Lists your available templates by name and 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

Lists the connector’s root folders, or a subfolder if you pass one. Browse and present the real folders/projects found — don’t ask the user to type a path from memory, and don’t guess a template like /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.
Once a folder is chosen, translate it into the create payload’s 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 week
  • HOUR_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
Each option has its own sub-fields (e.g. weeklyFixedTimes[], monthlyFixedTimes[]) — check the full request schema for the shape once you know which one applies.

5. Translation-export rule

At least one translationExports[] entry is required. Again, no list endpoint, but the schema constrains the valid values:
  • exportFrom.type: FINAL_WORKFLOW_STEP or WORKFLOW_STEP (with workflowStep number, if the latter)
  • exportWhen.exportTrigger: SELECTED_WORKFLOW_STEP_COMPLETED, FINAL_WORKFLOW_STEP_COMPLETED, or PROJECT_COMPLETED
A reasonable default to suggest is exporting when the final workflow step completes — but present the actual options rather than assuming silently, and don’t invent a webhook-based trigger; it isn’t part of this schema.

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.

Putting it together

Resolve every field above — connector, template (and its languages), folder, schedule, export rule — before presenting a single confirmation message with real values for all of them. Don’t send the user a list of field names to fill in one at a time, and don’t offer to fetch a list “if you’d like” — fetch it, then ask.