Quickstart
The simplest call fetches one analysis you already have and confirms your token works. Replace the base URL, token, and analysis UID with your own.200 response returns the analysis and its per language pair results. If you get a 401, your access token is missing or expired; refresh it and try again. See Get analysis for the full response shape.
Prerequisites
How analysis works
Analysis splits a job’s segments into bands, such as translation memory (TM) matches, machine translation (MT) matches, internal fuzzy matches, non-translatables, and repetitions. Each band carries its own counts. A segment is one translatable unit of text, usually a sentence. Results are always per language pair, calculated against that pair’s own TM, even when several target languages share one TM.Analysis types
Thetype you choose decides what gets measured.
A linguist is a translator or reviewer working on the job.
Creating an analysis
Create analysis takes a job selection and atype. The job selection is either jobs (job UIDs from the same project) or jobFilter (a project plus optional filename, status, target languages, workflow step, provider, or due-date filters). The type picks what gets measured.
Options common to every type:
includeTransMemory,includeMachineTranslationMatches,includeNonTranslatablesdecide which match sources count.includeFuzzyRepetitions,separateFuzzyRepetitionsfold internal fuzzy matches into the regular bands or break them out.includeNumbers,includeConfirmedSegments,includeLockedSegments,includeNotConfirmedSegmentsdecide which segments count at all.namesupports macros such as{projectName},{sourceLang}, and{targetLang}.netRateSchemeapplies a discount (see Net rate schemes and discounts).useProjectAnalysisSettingsfalls back to the project’s default analyse settings instead of specifying everything inline.
analyzeByLanguage or analyzeByProvider on the same request, or use the dedicated Create analyses by languages or Create analyses by providers endpoints for the same job selection. The by-providers endpoint also pre-applies a provider’s net rate scheme, if one is assigned.
A source file update marks its analyses
outdated. Recalculating re-applies the original settings. Vendors cannot recalculate analyses created by the buyer.Working with analysis over the API
Interpreting results
Each language pair’s result (analyseLanguageParts[].data) breaks counts into buckets. Every bucket carries segments, words, characters, normalizedPages, percent, and editingTime.
match95 means the 95 to 99 percent band, match85 means 85 to 94 percent, and so on. The label is the band’s lower bound, not an exact score. match101 exists only for TM matches, and marks in-context exact matches (the same source text and the same surrounding context, not just the same text).discountedData object with the same shape as data, reflecting the net rate scheme applied to that analysis, if any.
Net rate schemes and discounts
A net rate scheme applies a discount to words, characters, and pages in specific match buckets. For example, TM 100 percent matches can be billed at 20 percent of the normal rate. Applying one populatesdiscountedData alongside the raw data. The product shows this as the analysis’s Net rate row.
A scheme can also be applied automatically. Pass
netRateScheme on Create analysis, or use analyzeByProvider or Create analyses by providers to inherit the provider’s assigned scheme.
Export formats
Download analysis (GET /api2/v1/analyses/{analyseUid}/download?format=...) returns a file in one of four formats: CSV, CSV_EXTENDED, LOG, or JSON. These are the same formats offered by the Download button in the product. This section is the field-by-field reference for each.
All four formats download as
application/octet-stream, including JSON. Expect an attachment, not an inline JSON response.Shared concepts
Every format reports the same underlying counts, laid out differently. Match bands, how closely a segment matched something else, from best to worst:
Source levels, where a match came from: TM (translation memory), IF (internal fuzzy, matched against other segments in the same job rather than the TM), MT (machine translation), and NT (non-translatable).
CSV, CSV_EXTENDED, and LOG sum all levels together per band. JSON breaks each band down by level (see below).
Units per band: Segments, Words, Characters, Normalized pages, Percent (share of the job or part total), and Editing time.
Weighted counts: if the analysis has a net rate scheme (a discount), every count in every format is the discounted value, that is, raw units multiplied by the discount percentage for that level, band, and workflow step. Percent for the Total band is always 100; for other bands it is recomputed as band divided by total, times 100, when a discount scheme is present.
CSV and CSV_EXTENDED
The layout is the same for both.CSV_EXTENDED (labeled “CSV with chars” in the product) just adds a Characters column to every band. There are two header rows, then one data row per analyzed job. There is no per language pair or analysis-total row.
Row 1, band labels: three blank leading cells, then one label per band, in order: Context Match, Repetitions, 100%, 95%-99%, 85%-94%, 75%-84%, 50%-74%, No Match, Total.
Row 2, column headers: File, Tagging Errors, Chars/Word, then for each band above: Segments, Words, Characters (CSV_EXTENDED only), Placeables, Percent. The Total band drops Percent.
Data rows, one per job:
Numbers are formatted with the
en_US locale, up to two decimal places.
LOG
Plain fixed-width text, not delimited. It repeats the same block first per job, then once more per language part as an aggregate (Total: N files):
en_US locale, right-padded to 12 characters: two decimals for percent and pages, one decimal otherwise.
JSON
Structured and nested, the only format with a per source level breakdown. Shape (AnalyseExportDto):
DataExportDto:
CountsExportDto, flat counts for one band:
CountsWithCategoriesExportDto, the same six fields, but each value is broken down by source level instead of being a plain number:
sum is the total across levels. tm, if, mt, and nt are the TM, internal-fuzzy, MT, and non-translatable shares.
contextMatch, repetitions, and total are flat (CountsExportDto, no level breakdown). Only the match-percentage bands (match100 through match0) carry the tm, if, mt, and nt split. This export has no discounted or estimate field; those are available only from Get analysis, which uses a different, richer JSON shape than this download.Mapping to the live API
The Get analysis response uses different field names for the same bands. Itsmatch101 is this export’s contextMatch, and its match100, match95, match85, match75, match50, and match0 line up one-to-one with the same-named fields here. repetitions and all or total exist in both, named similarly.
Troubleshooting
For product or account questions, contact Phrase support. For help writing integration code against these endpoints, use your own developer or AI coding tools.
Next steps
Create analysis
Run a new analysis over a job selection.
Get analysis
Read the full result shape for a language pair.
Download analysis
Export results as CSV, CSV_EXTENDED, LOG, or JSON.
Net rate schemes
Apply match-band discounts to an analysis.