phrase 0.4.33 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (620) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +6 -0
  3. data/LICENSE +17 -18
  4. data/README.md +712 -220
  5. data/Rakefile +7 -4
  6. data/docs/Account.md +25 -0
  7. data/docs/AccountDetails.md +27 -0
  8. data/docs/AccountDetails1.md +17 -0
  9. data/docs/AccountsApi.md +136 -0
  10. data/docs/AffectedCount.md +17 -0
  11. data/docs/AffectedResources.md +17 -0
  12. data/docs/Authorization.md +31 -0
  13. data/docs/AuthorizationCreateParameters.md +21 -0
  14. data/docs/AuthorizationUpdateParameters.md +21 -0
  15. data/docs/AuthorizationWithToken.md +33 -0
  16. data/docs/AuthorizationWithToken1.md +17 -0
  17. data/docs/AuthorizationsApi.md +325 -0
  18. data/docs/BitbucketSync.md +27 -0
  19. data/docs/BitbucketSyncApi.md +200 -0
  20. data/docs/BitbucketSyncExportParameters.md +17 -0
  21. data/docs/BitbucketSyncExportResponse.md +17 -0
  22. data/docs/BitbucketSyncImportParameters.md +17 -0
  23. data/docs/BlacklistedKey.md +23 -0
  24. data/docs/BlacklistedKeyCreateParameters.md +17 -0
  25. data/docs/BlacklistedKeyUpdateParameters.md +17 -0
  26. data/docs/BlacklistedKeysApi.md +335 -0
  27. data/docs/Branch.md +29 -0
  28. data/docs/BranchCreateParameters.md +17 -0
  29. data/docs/BranchMergeParameters.md +17 -0
  30. data/docs/BranchUpdateParameters.md +17 -0
  31. data/docs/BranchesApi.md +465 -0
  32. data/docs/Comment.md +25 -0
  33. data/docs/CommentCreateParameters.md +19 -0
  34. data/docs/CommentMarkReadParameters.md +17 -0
  35. data/docs/CommentUpdateParameters.md +19 -0
  36. data/docs/CommentsApi.md +555 -0
  37. data/docs/Distribution.md +29 -0
  38. data/docs/DistributionCreateParameters.md +29 -0
  39. data/docs/DistributionPreview.md +29 -0
  40. data/docs/DistributionUpdateParameters.md +29 -0
  41. data/docs/DistributionsApi.md +335 -0
  42. data/docs/Format.md +35 -0
  43. data/docs/FormatsApi.md +69 -0
  44. data/docs/GitLabSyncApi.md +470 -0
  45. data/docs/GitlabSync.md +37 -0
  46. data/docs/GitlabSyncExport.md +19 -0
  47. data/docs/GitlabSyncExportParameters.md +17 -0
  48. data/docs/GitlabSyncHistory.md +25 -0
  49. data/docs/GitlabSyncImportParameters.md +17 -0
  50. data/docs/Glossary.md +25 -0
  51. data/docs/GlossaryApi.md +335 -0
  52. data/docs/GlossaryCreateParameters.md +21 -0
  53. data/docs/GlossaryTerm.md +31 -0
  54. data/docs/GlossaryTermCreateParameters.md +23 -0
  55. data/docs/GlossaryTermTranslation.md +25 -0
  56. data/docs/GlossaryTermTranslationCreateParameters.md +19 -0
  57. data/docs/GlossaryTermTranslationUpdateParameters.md +19 -0
  58. data/docs/GlossaryTermTranslationsApi.md +215 -0
  59. data/docs/GlossaryTermUpdateParameters.md +23 -0
  60. data/docs/GlossaryTermsApi.md +345 -0
  61. data/docs/GlossaryUpdateParameters.md +21 -0
  62. data/docs/Invitation.md +35 -0
  63. data/docs/InvitationCreateParameters.md +25 -0
  64. data/docs/InvitationUpdateParameters.md +23 -0
  65. data/docs/InvitationsApi.md +400 -0
  66. data/docs/Job.md +29 -0
  67. data/docs/JobCompleteParameters.md +17 -0
  68. data/docs/JobCreateParameters.md +27 -0
  69. data/docs/JobDetails.md +37 -0
  70. data/docs/JobDetails1.md +23 -0
  71. data/docs/JobKeysCreateParameters.md +19 -0
  72. data/docs/JobLocale.md +23 -0
  73. data/docs/JobLocaleCompleteParameters.md +17 -0
  74. data/docs/JobLocaleReopenParameters.md +17 -0
  75. data/docs/JobLocaleUpdateParameters.md +21 -0
  76. data/docs/JobLocalesApi.md +489 -0
  77. data/docs/JobLocalesCreateParameters.md +21 -0
  78. data/docs/JobPreview.md +21 -0
  79. data/docs/JobReopenParameters.md +17 -0
  80. data/docs/JobStartParameters.md +17 -0
  81. data/docs/JobUpdateParameters.md +23 -0
  82. data/docs/JobsApi.md +683 -0
  83. data/docs/KeyCreateParameters.md +45 -0
  84. data/docs/KeyPreview.md +21 -0
  85. data/docs/KeyUpdateParameters.md +45 -0
  86. data/docs/KeysApi.md +617 -0
  87. data/docs/KeysSearchParameters.md +25 -0
  88. data/docs/KeysTagParameters.md +23 -0
  89. data/docs/KeysUntagParameters.md +23 -0
  90. data/docs/Locale.md +35 -0
  91. data/docs/LocaleCreateParameters.md +35 -0
  92. data/docs/LocaleDetails.md +37 -0
  93. data/docs/LocaleDetails1.md +17 -0
  94. data/docs/LocalePreview.md +21 -0
  95. data/docs/LocaleStatistics.md +29 -0
  96. data/docs/LocaleUpdateParameters.md +35 -0
  97. data/docs/LocalesApi.md +433 -0
  98. data/docs/Member.md +25 -0
  99. data/docs/MemberUpdateParameters.md +23 -0
  100. data/docs/MembersApi.md +271 -0
  101. data/docs/OrderConfirmParameters.md +17 -0
  102. data/docs/OrderCreateParameters.md +43 -0
  103. data/docs/OrdersApi.md +341 -0
  104. data/docs/Project.md +29 -0
  105. data/docs/ProjectCreateParameters.md +27 -0
  106. data/docs/ProjectDetails.md +33 -0
  107. data/docs/ProjectDetails1.md +19 -0
  108. data/docs/ProjectLocales.md +27 -0
  109. data/docs/ProjectLocales1.md +17 -0
  110. data/docs/ProjectShort.md +25 -0
  111. data/docs/ProjectUpdateParameters.md +27 -0
  112. data/docs/ProjectsApi.md +325 -0
  113. data/docs/Release.md +37 -0
  114. data/docs/ReleaseCreateParameters.md +21 -0
  115. data/docs/ReleasePreview.md +37 -0
  116. data/docs/ReleaseUpdateParameters.md +21 -0
  117. data/docs/ReleasesApi.md +412 -0
  118. data/docs/Screenshot.md +29 -0
  119. data/docs/ScreenshotCreateParameters.md +21 -0
  120. data/docs/ScreenshotMarker.md +27 -0
  121. data/docs/ScreenshotMarkerCreateParameters.md +19 -0
  122. data/docs/ScreenshotMarkerUpdateParameters.md +19 -0
  123. data/docs/ScreenshotMarkersApi.md +341 -0
  124. data/docs/ScreenshotUpdateParameters.md +21 -0
  125. data/docs/ScreenshotsApi.md +335 -0
  126. data/docs/Space.md +27 -0
  127. data/docs/SpaceCreateParameters.md +17 -0
  128. data/docs/SpaceUpdateParameters.md +17 -0
  129. data/docs/SpacesApi.md +536 -0
  130. data/docs/SpacesProjectsCreateParameters.md +17 -0
  131. data/docs/StyleGuidesApi.md +335 -0
  132. data/docs/Styleguide.md +23 -0
  133. data/docs/StyleguideCreateParameters.md +41 -0
  134. data/docs/StyleguideDetails.md +49 -0
  135. data/docs/StyleguideDetails1.md +41 -0
  136. data/docs/StyleguidePreview.md +19 -0
  137. data/docs/StyleguideUpdateParameters.md +41 -0
  138. data/docs/Tag.md +23 -0
  139. data/docs/TagCreateParameters.md +19 -0
  140. data/docs/TagWithStats.md +25 -0
  141. data/docs/TagWithStats1.md +17 -0
  142. data/docs/TagWithStats1Statistics.md +23 -0
  143. data/docs/TagWithStats1Statistics1.md +19 -0
  144. data/docs/TagsApi.md +274 -0
  145. data/docs/Translation.md +37 -0
  146. data/docs/TranslationCreateParameters.md +31 -0
  147. data/docs/TranslationDetails.md +41 -0
  148. data/docs/TranslationDetails1.md +19 -0
  149. data/docs/TranslationExcludeParameters.md +17 -0
  150. data/docs/TranslationIncludeParameters.md +17 -0
  151. data/docs/TranslationKey.md +33 -0
  152. data/docs/TranslationKeyDetails.md +51 -0
  153. data/docs/TranslationKeyDetails1.md +33 -0
  154. data/docs/TranslationOrder.md +49 -0
  155. data/docs/TranslationReviewParameters.md +17 -0
  156. data/docs/TranslationUnverifyParameters.md +17 -0
  157. data/docs/TranslationUpdateParameters.md +27 -0
  158. data/docs/TranslationVerifyParameters.md +17 -0
  159. data/docs/TranslationVersion.md +31 -0
  160. data/docs/TranslationVersionWithUser.md +33 -0
  161. data/docs/TranslationVersionWithUser1.md +17 -0
  162. data/docs/TranslationsApi.md +1164 -0
  163. data/docs/TranslationsExcludeParameters.md +23 -0
  164. data/docs/TranslationsIncludeParameters.md +23 -0
  165. data/docs/TranslationsReviewParameters.md +19 -0
  166. data/docs/TranslationsSearchParameters.md +23 -0
  167. data/docs/TranslationsUnverifyParameters.md +23 -0
  168. data/docs/TranslationsVerifyParameters.md +23 -0
  169. data/docs/Upload.md +31 -0
  170. data/docs/UploadCreateParameters.md +45 -0
  171. data/docs/UploadSummary.md +31 -0
  172. data/docs/UploadsApi.md +232 -0
  173. data/docs/User.md +29 -0
  174. data/docs/UserPreview.md +21 -0
  175. data/docs/UsersApi.md +69 -0
  176. data/docs/VersionsHistoryApi.md +148 -0
  177. data/docs/Webhook.md +29 -0
  178. data/docs/WebhookCreateParameters.md +23 -0
  179. data/docs/WebhookUpdateParameters.md +23 -0
  180. data/docs/WebhooksApi.md +399 -0
  181. data/git_push.sh +58 -0
  182. data/lib/phrase.rb +197 -55
  183. data/lib/phrase/api/accounts_api.rb +142 -0
  184. data/lib/phrase/api/authorizations_api.rb +346 -0
  185. data/lib/phrase/api/bitbucket_sync_api.rb +219 -0
  186. data/lib/phrase/api/blacklisted_keys_api.rb +376 -0
  187. data/lib/phrase/api/branches_api.rb +524 -0
  188. data/lib/phrase/api/comments_api.rb +657 -0
  189. data/lib/phrase/api/distributions_api.rb +376 -0
  190. data/lib/phrase/api/formats_api.rb +70 -0
  191. data/lib/phrase/api/git_lab_sync_api.rb +510 -0
  192. data/lib/phrase/api/glossary_api.rb +376 -0
  193. data/lib/phrase/api/glossary_term_translations_api.rb +268 -0
  194. data/lib/phrase/api/glossary_terms_api.rb +406 -0
  195. data/lib/phrase/api/invitations_api.rb +448 -0
  196. data/lib/phrase/api/job_locales_api.rb +587 -0
  197. data/lib/phrase/api/jobs_api.rb +790 -0
  198. data/lib/phrase/api/keys_api.rb +700 -0
  199. data/lib/phrase/api/locales_api.rb +497 -0
  200. data/lib/phrase/api/members_api.rb +304 -0
  201. data/lib/phrase/api/orders_api.rb +385 -0
  202. data/lib/phrase/api/projects_api.rb +346 -0
  203. data/lib/phrase/api/releases_api.rb +484 -0
  204. data/lib/phrase/api/screenshot_markers_api.rb +394 -0
  205. data/lib/phrase/api/screenshots_api.rb +376 -0
  206. data/lib/phrase/api/spaces_api.rb +608 -0
  207. data/lib/phrase/api/style_guides_api.rb +376 -0
  208. data/lib/phrase/api/tags_api.rb +305 -0
  209. data/lib/phrase/api/translations_api.rb +1351 -0
  210. data/lib/phrase/api/uploads_api.rb +265 -0
  211. data/lib/phrase/api/users_api.rb +70 -0
  212. data/lib/phrase/api/versions_history_api.rb +172 -0
  213. data/lib/phrase/api/webhooks_api.rb +446 -0
  214. data/lib/phrase/api_client.rb +376 -0
  215. data/lib/phrase/api_error.rb +45 -0
  216. data/lib/phrase/configuration.rb +243 -0
  217. data/lib/phrase/models/account.rb +230 -0
  218. data/lib/phrase/models/account_details.rb +247 -0
  219. data/lib/phrase/models/account_details1.rb +194 -0
  220. data/lib/phrase/models/affected_count.rb +194 -0
  221. data/lib/phrase/models/affected_resources.rb +194 -0
  222. data/lib/phrase/models/authorization.rb +259 -0
  223. data/lib/phrase/models/authorization_create_parameters.rb +217 -0
  224. data/lib/phrase/models/authorization_update_parameters.rb +217 -0
  225. data/lib/phrase/models/authorization_with_token.rb +276 -0
  226. data/lib/phrase/models/authorization_with_token1.rb +194 -0
  227. data/lib/phrase/models/bitbucket_sync.rb +241 -0
  228. data/lib/phrase/models/bitbucket_sync_export_parameters.rb +195 -0
  229. data/lib/phrase/models/bitbucket_sync_export_response.rb +194 -0
  230. data/lib/phrase/models/bitbucket_sync_import_parameters.rb +195 -0
  231. data/lib/phrase/models/blacklisted_key.rb +221 -0
  232. data/lib/phrase/models/blacklisted_key_create_parameters.rb +195 -0
  233. data/lib/phrase/models/blacklisted_key_update_parameters.rb +195 -0
  234. data/lib/phrase/models/branch.rb +248 -0
  235. data/lib/phrase/models/branch_create_parameters.rb +195 -0
  236. data/lib/phrase/models/branch_merge_parameters.rb +195 -0
  237. data/lib/phrase/models/branch_update_parameters.rb +195 -0
  238. data/lib/phrase/models/comment.rb +230 -0
  239. data/lib/phrase/models/comment_create_parameters.rb +205 -0
  240. data/lib/phrase/models/comment_mark_read_parameters.rb +195 -0
  241. data/lib/phrase/models/comment_update_parameters.rb +205 -0
  242. data/lib/phrase/models/distribution.rb +252 -0
  243. data/lib/phrase/models/distribution_create_parameters.rb +259 -0
  244. data/lib/phrase/models/distribution_preview.rb +250 -0
  245. data/lib/phrase/models/distribution_update_parameters.rb +259 -0
  246. data/lib/phrase/models/format.rb +275 -0
  247. data/lib/phrase/models/gitlab_sync.rb +284 -0
  248. data/lib/phrase/models/gitlab_sync_export.rb +203 -0
  249. data/lib/phrase/models/gitlab_sync_export_parameters.rb +195 -0
  250. data/lib/phrase/models/gitlab_sync_history.rb +232 -0
  251. data/lib/phrase/models/gitlab_sync_import_parameters.rb +195 -0
  252. data/lib/phrase/models/glossary.rb +232 -0
  253. data/lib/phrase/models/glossary_create_parameters.rb +217 -0
  254. data/lib/phrase/models/glossary_term.rb +259 -0
  255. data/lib/phrase/models/glossary_term_create_parameters.rb +225 -0
  256. data/lib/phrase/models/glossary_term_translation.rb +230 -0
  257. data/lib/phrase/models/glossary_term_translation_create_parameters.rb +205 -0
  258. data/lib/phrase/models/glossary_term_translation_update_parameters.rb +205 -0
  259. data/lib/phrase/models/glossary_term_update_parameters.rb +225 -0
  260. data/lib/phrase/models/glossary_update_parameters.rb +217 -0
  261. data/lib/phrase/models/invitation.rb +279 -0
  262. data/lib/phrase/models/invitation_create_parameters.rb +237 -0
  263. data/lib/phrase/models/invitation_update_parameters.rb +227 -0
  264. data/lib/phrase/models/job.rb +248 -0
  265. data/lib/phrase/models/job_complete_parameters.rb +195 -0
  266. data/lib/phrase/models/job_create_parameters.rb +249 -0
  267. data/lib/phrase/models/job_details.rb +296 -0
  268. data/lib/phrase/models/job_details1.rb +225 -0
  269. data/lib/phrase/models/job_keys_create_parameters.rb +207 -0
  270. data/lib/phrase/models/job_locale.rb +223 -0
  271. data/lib/phrase/models/job_locale_complete_parameters.rb +195 -0
  272. data/lib/phrase/models/job_locale_reopen_parameters.rb +195 -0
  273. data/lib/phrase/models/job_locale_update_parameters.rb +217 -0
  274. data/lib/phrase/models/job_locales_create_parameters.rb +217 -0
  275. data/lib/phrase/models/job_preview.rb +212 -0
  276. data/lib/phrase/models/job_reopen_parameters.rb +195 -0
  277. data/lib/phrase/models/job_start_parameters.rb +195 -0
  278. data/lib/phrase/models/job_update_parameters.rb +225 -0
  279. data/lib/phrase/models/key_create_parameters.rb +335 -0
  280. data/lib/phrase/models/key_preview.rb +212 -0
  281. data/lib/phrase/models/key_update_parameters.rb +335 -0
  282. data/lib/phrase/models/keys_search_parameters.rb +235 -0
  283. data/lib/phrase/models/keys_tag_parameters.rb +225 -0
  284. data/lib/phrase/models/keys_untag_parameters.rb +225 -0
  285. data/lib/phrase/models/locale.rb +277 -0
  286. data/lib/phrase/models/locale_create_parameters.rb +285 -0
  287. data/lib/phrase/models/locale_details.rb +294 -0
  288. data/lib/phrase/models/locale_details1.rb +194 -0
  289. data/lib/phrase/models/locale_preview.rb +212 -0
  290. data/lib/phrase/models/locale_statistics.rb +248 -0
  291. data/lib/phrase/models/locale_update_parameters.rb +285 -0
  292. data/lib/phrase/models/member.rb +232 -0
  293. data/lib/phrase/models/member_update_parameters.rb +227 -0
  294. data/lib/phrase/models/order_confirm_parameters.rb +195 -0
  295. data/lib/phrase/models/order_create_parameters.rb +327 -0
  296. data/lib/phrase/models/project.rb +248 -0
  297. data/lib/phrase/models/project_create_parameters.rb +245 -0
  298. data/lib/phrase/models/project_details.rb +274 -0
  299. data/lib/phrase/models/project_details1.rb +203 -0
  300. data/lib/phrase/models/project_locales.rb +249 -0
  301. data/lib/phrase/models/project_locales1.rb +196 -0
  302. data/lib/phrase/models/project_short.rb +230 -0
  303. data/lib/phrase/models/project_update_parameters.rb +245 -0
  304. data/lib/phrase/models/release.rb +290 -0
  305. data/lib/phrase/models/release_create_parameters.rb +217 -0
  306. data/lib/phrase/models/release_preview.rb +290 -0
  307. data/lib/phrase/models/release_update_parameters.rb +217 -0
  308. data/lib/phrase/models/screenshot.rb +248 -0
  309. data/lib/phrase/models/screenshot_create_parameters.rb +215 -0
  310. data/lib/phrase/models/screenshot_marker.rb +239 -0
  311. data/lib/phrase/models/screenshot_marker_create_parameters.rb +205 -0
  312. data/lib/phrase/models/screenshot_marker_update_parameters.rb +205 -0
  313. data/lib/phrase/models/screenshot_update_parameters.rb +215 -0
  314. data/lib/phrase/models/space.rb +241 -0
  315. data/lib/phrase/models/space_create_parameters.rb +195 -0
  316. data/lib/phrase/models/space_update_parameters.rb +195 -0
  317. data/lib/phrase/models/spaces_projects_create_parameters.rb +195 -0
  318. data/lib/phrase/models/styleguide.rb +221 -0
  319. data/lib/phrase/models/styleguide_create_parameters.rb +315 -0
  320. data/lib/phrase/models/styleguide_details.rb +346 -0
  321. data/lib/phrase/models/styleguide_details1.rb +302 -0
  322. data/lib/phrase/models/styleguide_preview.rb +203 -0
  323. data/lib/phrase/models/styleguide_update_parameters.rb +315 -0
  324. data/lib/phrase/models/tag.rb +221 -0
  325. data/lib/phrase/models/tag_create_parameters.rb +205 -0
  326. data/lib/phrase/models/tag_with_stats.rb +240 -0
  327. data/lib/phrase/models/tag_with_stats1.rb +196 -0
  328. data/lib/phrase/models/tag_with_stats1_statistics.rb +221 -0
  329. data/lib/phrase/models/tag_with_stats1_statistics1.rb +203 -0
  330. data/lib/phrase/models/translation.rb +286 -0
  331. data/lib/phrase/models/translation_create_parameters.rb +265 -0
  332. data/lib/phrase/models/translation_details.rb +312 -0
  333. data/lib/phrase/models/translation_details1.rb +203 -0
  334. data/lib/phrase/models/translation_exclude_parameters.rb +195 -0
  335. data/lib/phrase/models/translation_include_parameters.rb +195 -0
  336. data/lib/phrase/models/translation_key.rb +268 -0
  337. data/lib/phrase/models/translation_key_details.rb +357 -0
  338. data/lib/phrase/models/translation_key_details1.rb +266 -0
  339. data/lib/phrase/models/translation_order.rb +340 -0
  340. data/lib/phrase/models/translation_review_parameters.rb +195 -0
  341. data/lib/phrase/models/translation_unverify_parameters.rb +195 -0
  342. data/lib/phrase/models/translation_update_parameters.rb +245 -0
  343. data/lib/phrase/models/translation_verify_parameters.rb +195 -0
  344. data/lib/phrase/models/translation_version.rb +257 -0
  345. data/lib/phrase/models/translation_version_with_user.rb +274 -0
  346. data/lib/phrase/models/translation_version_with_user1.rb +194 -0
  347. data/lib/phrase/models/translations_exclude_parameters.rb +225 -0
  348. data/lib/phrase/models/translations_include_parameters.rb +225 -0
  349. data/lib/phrase/models/translations_review_parameters.rb +205 -0
  350. data/lib/phrase/models/translations_search_parameters.rb +225 -0
  351. data/lib/phrase/models/translations_unverify_parameters.rb +225 -0
  352. data/lib/phrase/models/translations_verify_parameters.rb +225 -0
  353. data/lib/phrase/models/upload.rb +257 -0
  354. data/lib/phrase/models/upload_create_parameters.rb +339 -0
  355. data/lib/phrase/models/upload_summary.rb +257 -0
  356. data/lib/phrase/models/user.rb +248 -0
  357. data/lib/phrase/models/user_preview.rb +212 -0
  358. data/lib/phrase/models/webhook.rb +250 -0
  359. data/lib/phrase/models/webhook_create_parameters.rb +225 -0
  360. data/lib/phrase/models/webhook_update_parameters.rb +225 -0
  361. data/lib/phrase/response.rb +41 -0
  362. data/lib/phrase/version.rb +1 -1
  363. data/phrase.gemspec +27 -27
  364. data/spec/api/accounts_api_spec.rb +50 -0
  365. data/spec/api/authorizations_api_spec.rb +90 -0
  366. data/spec/api/bitbucket_sync_api_spec.rb +64 -0
  367. data/spec/api/blacklisted_keys_api_spec.rb +95 -0
  368. data/spec/api/branches_api_spec.rb +124 -0
  369. data/spec/api/comments_api_spec.rb +151 -0
  370. data/spec/api/distributions_api_spec.rb +95 -0
  371. data/spec/api/formats_api_spec.rb +35 -0
  372. data/spec/api/git_lab_sync_api_spec.rb +125 -0
  373. data/spec/api/glossary_api_spec.rb +95 -0
  374. data/spec/api/glossary_term_translations_api_spec.rb +72 -0
  375. data/spec/api/glossary_terms_api_spec.rb +100 -0
  376. data/spec/api/invitations_api_spec.rb +109 -0
  377. data/spec/api/job_locales_api_spec.rb +135 -0
  378. data/spec/api/jobs_api_spec.rb +177 -0
  379. data/spec/api/keys_api_spec.rb +162 -0
  380. data/spec/api/locales_api_spec.rb +126 -0
  381. data/spec/api/members_api_spec.rb +81 -0
  382. data/spec/api/orders_api_spec.rb +98 -0
  383. data/spec/api/projects_api_spec.rb +90 -0
  384. data/spec/api/releases_api_spec.rb +115 -0
  385. data/spec/api/screenshot_markers_api_spec.rb +98 -0
  386. data/spec/api/screenshots_api_spec.rb +95 -0
  387. data/spec/api/spaces_api_spec.rb +141 -0
  388. data/spec/api/style_guides_api_spec.rb +95 -0
  389. data/spec/api/tags_api_spec.rb +83 -0
  390. data/spec/api/translations_api_spec.rb +287 -0
  391. data/spec/api/uploads_api_spec.rb +80 -0
  392. data/spec/api/users_api_spec.rb +35 -0
  393. data/spec/api/versions_history_api_spec.rb +56 -0
  394. data/spec/api/webhooks_api_spec.rb +109 -0
  395. data/spec/api_client_spec.rb +214 -0
  396. data/spec/configuration_spec.rb +30 -0
  397. data/spec/models/account_details1_spec.rb +29 -0
  398. data/spec/models/account_details_spec.rb +59 -0
  399. data/spec/models/account_spec.rb +53 -0
  400. data/spec/models/affected_count_spec.rb +29 -0
  401. data/spec/models/affected_resources_spec.rb +29 -0
  402. data/spec/models/authorization_create_parameters_spec.rb +41 -0
  403. data/spec/models/authorization_spec.rb +71 -0
  404. data/spec/models/authorization_update_parameters_spec.rb +41 -0
  405. data/spec/models/authorization_with_token1_spec.rb +29 -0
  406. data/spec/models/authorization_with_token_spec.rb +77 -0
  407. data/spec/models/bitbucket_sync_export_parameters_spec.rb +29 -0
  408. data/spec/models/bitbucket_sync_export_response_spec.rb +29 -0
  409. data/spec/models/bitbucket_sync_import_parameters_spec.rb +29 -0
  410. data/spec/models/bitbucket_sync_spec.rb +59 -0
  411. data/spec/models/blacklisted_key_create_parameters_spec.rb +29 -0
  412. data/spec/models/blacklisted_key_spec.rb +47 -0
  413. data/spec/models/blacklisted_key_update_parameters_spec.rb +29 -0
  414. data/spec/models/branch_create_parameters_spec.rb +29 -0
  415. data/spec/models/branch_merge_parameters_spec.rb +29 -0
  416. data/spec/models/branch_spec.rb +65 -0
  417. data/spec/models/branch_update_parameters_spec.rb +29 -0
  418. data/spec/models/comment_create_parameters_spec.rb +35 -0
  419. data/spec/models/comment_mark_read_parameters_spec.rb +29 -0
  420. data/spec/models/comment_spec.rb +53 -0
  421. data/spec/models/comment_update_parameters_spec.rb +35 -0
  422. data/spec/models/distribution_create_parameters_spec.rb +65 -0
  423. data/spec/models/distribution_preview_spec.rb +65 -0
  424. data/spec/models/distribution_spec.rb +65 -0
  425. data/spec/models/distribution_update_parameters_spec.rb +65 -0
  426. data/spec/models/format_spec.rb +83 -0
  427. data/spec/models/gitlab_sync_export_parameters_spec.rb +29 -0
  428. data/spec/models/gitlab_sync_export_spec.rb +35 -0
  429. data/spec/models/gitlab_sync_history_spec.rb +53 -0
  430. data/spec/models/gitlab_sync_import_parameters_spec.rb +29 -0
  431. data/spec/models/gitlab_sync_spec.rb +89 -0
  432. data/spec/models/glossary_create_parameters_spec.rb +41 -0
  433. data/spec/models/glossary_spec.rb +53 -0
  434. data/spec/models/glossary_term_create_parameters_spec.rb +47 -0
  435. data/spec/models/glossary_term_spec.rb +71 -0
  436. data/spec/models/glossary_term_translation_create_parameters_spec.rb +35 -0
  437. data/spec/models/glossary_term_translation_spec.rb +53 -0
  438. data/spec/models/glossary_term_translation_update_parameters_spec.rb +35 -0
  439. data/spec/models/glossary_term_update_parameters_spec.rb +47 -0
  440. data/spec/models/glossary_update_parameters_spec.rb +41 -0
  441. data/spec/models/invitation_create_parameters_spec.rb +53 -0
  442. data/spec/models/invitation_spec.rb +83 -0
  443. data/spec/models/invitation_update_parameters_spec.rb +47 -0
  444. data/spec/models/job_complete_parameters_spec.rb +29 -0
  445. data/spec/models/job_create_parameters_spec.rb +59 -0
  446. data/spec/models/job_details1_spec.rb +47 -0
  447. data/spec/models/job_details_spec.rb +89 -0
  448. data/spec/models/job_keys_create_parameters_spec.rb +35 -0
  449. data/spec/models/job_locale_complete_parameters_spec.rb +29 -0
  450. data/spec/models/job_locale_reopen_parameters_spec.rb +29 -0
  451. data/spec/models/job_locale_spec.rb +47 -0
  452. data/spec/models/job_locale_update_parameters_spec.rb +41 -0
  453. data/spec/models/job_locales_create_parameters_spec.rb +41 -0
  454. data/spec/models/job_preview_spec.rb +41 -0
  455. data/spec/models/job_reopen_parameters_spec.rb +29 -0
  456. data/spec/models/job_spec.rb +65 -0
  457. data/spec/models/job_start_parameters_spec.rb +29 -0
  458. data/spec/models/job_update_parameters_spec.rb +47 -0
  459. data/spec/models/key_create_parameters_spec.rb +113 -0
  460. data/spec/models/key_preview_spec.rb +41 -0
  461. data/spec/models/key_update_parameters_spec.rb +113 -0
  462. data/spec/models/keys_search_parameters_spec.rb +53 -0
  463. data/spec/models/keys_tag_parameters_spec.rb +47 -0
  464. data/spec/models/keys_untag_parameters_spec.rb +47 -0
  465. data/spec/models/locale_create_parameters_spec.rb +83 -0
  466. data/spec/models/locale_details1_spec.rb +29 -0
  467. data/spec/models/locale_details_spec.rb +89 -0
  468. data/spec/models/locale_preview_spec.rb +41 -0
  469. data/spec/models/locale_spec.rb +83 -0
  470. data/spec/models/locale_statistics_spec.rb +65 -0
  471. data/spec/models/locale_update_parameters_spec.rb +83 -0
  472. data/spec/models/member_spec.rb +53 -0
  473. data/spec/models/member_update_parameters_spec.rb +47 -0
  474. data/spec/models/order_confirm_parameters_spec.rb +29 -0
  475. data/spec/models/order_create_parameters_spec.rb +107 -0
  476. data/spec/models/project_create_parameters_spec.rb +59 -0
  477. data/spec/models/project_details1_spec.rb +35 -0
  478. data/spec/models/project_details_spec.rb +77 -0
  479. data/spec/models/project_locales1_spec.rb +29 -0
  480. data/spec/models/project_locales_spec.rb +59 -0
  481. data/spec/models/project_short_spec.rb +53 -0
  482. data/spec/models/project_spec.rb +65 -0
  483. data/spec/models/project_update_parameters_spec.rb +59 -0
  484. data/spec/models/release_create_parameters_spec.rb +41 -0
  485. data/spec/models/release_preview_spec.rb +89 -0
  486. data/spec/models/release_spec.rb +89 -0
  487. data/spec/models/release_update_parameters_spec.rb +41 -0
  488. data/spec/models/screenshot_create_parameters_spec.rb +41 -0
  489. data/spec/models/screenshot_marker_create_parameters_spec.rb +35 -0
  490. data/spec/models/screenshot_marker_spec.rb +59 -0
  491. data/spec/models/screenshot_marker_update_parameters_spec.rb +35 -0
  492. data/spec/models/screenshot_spec.rb +65 -0
  493. data/spec/models/screenshot_update_parameters_spec.rb +41 -0
  494. data/spec/models/space_create_parameters_spec.rb +29 -0
  495. data/spec/models/space_spec.rb +59 -0
  496. data/spec/models/space_update_parameters_spec.rb +29 -0
  497. data/spec/models/spaces_projects_create_parameters_spec.rb +29 -0
  498. data/spec/models/styleguide_create_parameters_spec.rb +101 -0
  499. data/spec/models/styleguide_details1_spec.rb +101 -0
  500. data/spec/models/styleguide_details_spec.rb +125 -0
  501. data/spec/models/styleguide_preview_spec.rb +35 -0
  502. data/spec/models/styleguide_spec.rb +47 -0
  503. data/spec/models/styleguide_update_parameters_spec.rb +101 -0
  504. data/spec/models/tag_create_parameters_spec.rb +35 -0
  505. data/spec/models/tag_spec.rb +47 -0
  506. data/spec/models/tag_with_stats1_spec.rb +29 -0
  507. data/spec/models/tag_with_stats1_statistics1_spec.rb +35 -0
  508. data/spec/models/tag_with_stats1_statistics_spec.rb +47 -0
  509. data/spec/models/tag_with_stats_spec.rb +53 -0
  510. data/spec/models/translation_create_parameters_spec.rb +71 -0
  511. data/spec/models/translation_details1_spec.rb +35 -0
  512. data/spec/models/translation_details_spec.rb +101 -0
  513. data/spec/models/translation_exclude_parameters_spec.rb +29 -0
  514. data/spec/models/translation_include_parameters_spec.rb +29 -0
  515. data/spec/models/translation_key_details1_spec.rb +77 -0
  516. data/spec/models/translation_key_details_spec.rb +131 -0
  517. data/spec/models/translation_key_spec.rb +77 -0
  518. data/spec/models/translation_order_spec.rb +125 -0
  519. data/spec/models/translation_review_parameters_spec.rb +29 -0
  520. data/spec/models/translation_spec.rb +89 -0
  521. data/spec/models/translation_unverify_parameters_spec.rb +29 -0
  522. data/spec/models/translation_update_parameters_spec.rb +59 -0
  523. data/spec/models/translation_verify_parameters_spec.rb +29 -0
  524. data/spec/models/translation_version_spec.rb +71 -0
  525. data/spec/models/translation_version_with_user1_spec.rb +29 -0
  526. data/spec/models/translation_version_with_user_spec.rb +77 -0
  527. data/spec/models/translations_exclude_parameters_spec.rb +47 -0
  528. data/spec/models/translations_include_parameters_spec.rb +47 -0
  529. data/spec/models/translations_review_parameters_spec.rb +35 -0
  530. data/spec/models/translations_search_parameters_spec.rb +47 -0
  531. data/spec/models/translations_unverify_parameters_spec.rb +47 -0
  532. data/spec/models/translations_verify_parameters_spec.rb +47 -0
  533. data/spec/models/upload_create_parameters_spec.rb +113 -0
  534. data/spec/models/upload_spec.rb +71 -0
  535. data/spec/models/upload_summary_spec.rb +71 -0
  536. data/spec/models/user_preview_spec.rb +41 -0
  537. data/spec/models/user_spec.rb +65 -0
  538. data/spec/models/webhook_create_parameters_spec.rb +47 -0
  539. data/spec/models/webhook_spec.rb +65 -0
  540. data/spec/models/webhook_update_parameters_spec.rb +47 -0
  541. data/spec/spec_helper.rb +99 -0
  542. metadata +759 -190
  543. data/.gitignore +0 -25
  544. data/.travis.yml +0 -6
  545. data/Guardfile +0 -29
  546. data/bin/phrase +0 -8
  547. data/cacert.pem +0 -3366
  548. data/lib/ext/all.rb +0 -5
  549. data/lib/ext/hash.rb +0 -8
  550. data/lib/ext/object.rb +0 -130
  551. data/lib/ext/try.rb +0 -57
  552. data/lib/generators/phrase/install_generator.rb +0 -37
  553. data/lib/generators/templates/README +0 -11
  554. data/lib/generators/templates/phrase.rb +0 -21
  555. data/lib/phrase/adapters/fast_gettext.rb +0 -25
  556. data/lib/phrase/adapters/i18n.rb +0 -12
  557. data/lib/phrase/api.rb +0 -7
  558. data/lib/phrase/api/client.rb +0 -308
  559. data/lib/phrase/api/client/http.rb +0 -56
  560. data/lib/phrase/api/config.rb +0 -34
  561. data/lib/phrase/api/exceptions.rb +0 -9
  562. data/lib/phrase/api/query_params.rb +0 -22
  563. data/lib/phrase/backend.rb +0 -7
  564. data/lib/phrase/backend/base.rb +0 -6
  565. data/lib/phrase/backend/phrase_service.rb +0 -163
  566. data/lib/phrase/cache.rb +0 -34
  567. data/lib/phrase/config.rb +0 -94
  568. data/lib/phrase/delegate.rb +0 -36
  569. data/lib/phrase/delegate/fast_gettext.rb +0 -27
  570. data/lib/phrase/delegate/i18n.rb +0 -166
  571. data/lib/phrase/engine.rb +0 -17
  572. data/lib/phrase/formats.rb +0 -176
  573. data/lib/phrase/formats/angular_translate.rb +0 -19
  574. data/lib/phrase/formats/csv.rb +0 -19
  575. data/lib/phrase/formats/custom.rb +0 -40
  576. data/lib/phrase/formats/gettext.rb +0 -27
  577. data/lib/phrase/formats/gettext_template.rb +0 -19
  578. data/lib/phrase/formats/go_i18n.rb +0 -23
  579. data/lib/phrase/formats/ini.rb +0 -19
  580. data/lib/phrase/formats/json.rb +0 -19
  581. data/lib/phrase/formats/laravel.rb +0 -19
  582. data/lib/phrase/formats/mozilla_properties.rb +0 -8
  583. data/lib/phrase/formats/nested_json.rb +0 -19
  584. data/lib/phrase/formats/node_json.rb +0 -23
  585. data/lib/phrase/formats/php_array.rb +0 -19
  586. data/lib/phrase/formats/play_properties.rb +0 -15
  587. data/lib/phrase/formats/plist.rb +0 -19
  588. data/lib/phrase/formats/properties.rb +0 -19
  589. data/lib/phrase/formats/properties_xml.rb +0 -19
  590. data/lib/phrase/formats/qt_phrase_book.rb +0 -19
  591. data/lib/phrase/formats/qt_translation_source.rb +0 -19
  592. data/lib/phrase/formats/resx.rb +0 -19
  593. data/lib/phrase/formats/resx_windowsphone.rb +0 -19
  594. data/lib/phrase/formats/simple_json.rb +0 -19
  595. data/lib/phrase/formats/strings.rb +0 -45
  596. data/lib/phrase/formats/stringsdict.rb +0 -15
  597. data/lib/phrase/formats/tmx.rb +0 -19
  598. data/lib/phrase/formats/windows8_resource.rb +0 -19
  599. data/lib/phrase/formats/xliff.rb +0 -19
  600. data/lib/phrase/formats/xml.rb +0 -49
  601. data/lib/phrase/formats/yaml.rb +0 -19
  602. data/lib/phrase/formats/yaml_symfony.rb +0 -19
  603. data/lib/phrase/formats/yaml_symfony2.rb +0 -8
  604. data/lib/phrase/hash_flattener.rb +0 -21
  605. data/lib/phrase/tool.rb +0 -46
  606. data/lib/phrase/tool/commands.rb +0 -56
  607. data/lib/phrase/tool/commands/base.rb +0 -73
  608. data/lib/phrase/tool/commands/init.rb +0 -51
  609. data/lib/phrase/tool/commands/pull.rb +0 -109
  610. data/lib/phrase/tool/commands/push.rb +0 -163
  611. data/lib/phrase/tool/commands/show_help.rb +0 -26
  612. data/lib/phrase/tool/commands/show_version.rb +0 -17
  613. data/lib/phrase/tool/commands/tags.rb +0 -29
  614. data/lib/phrase/tool/config.rb +0 -122
  615. data/lib/phrase/tool/encoding_detector.rb +0 -17
  616. data/lib/phrase/tool/locale.rb +0 -41
  617. data/lib/phrase/tool/options.rb +0 -32
  618. data/lib/phrase/tool/options_factory.rb +0 -150
  619. data/lib/phrase/tool/tag_validator.rb +0 -9
  620. data/lib/phrase/view_helpers.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: bce5f6cd606ca0bdfc071785dc74e4a834e4859c
4
- data.tar.gz: 3f7d9c9887126414462f3c85c94b4103d93a6af9
2
+ SHA256:
3
+ metadata.gz: 81b736c400bd14fa12c034c9edf4f092c79752e020a939fccf50fb644d170c59
4
+ data.tar.gz: 812950a9669bd65446db81be50bee989f742711d828eb9867812c133ddb85a1a
5
5
  SHA512:
6
- metadata.gz: 4f47766faf09cff7f68f90da527ac5ee5bce49c164b29ebff050c581702c9d2f6fd4ab357b8e6c6561700397556dcb73e9ef21e04211aa5491c502838e6b4873
7
- data.tar.gz: bdf82438c3d4bacc08da1fb50183695c08f6ebd6bb2821fbc5b3002eeef87ed765cf2d47bde1f14d7053018ad407a385ff362376b0c8e24ea0d63269ae19c651
6
+ metadata.gz: 6413b5c0db05a6187b54e74ee5860676e80e5c1180ac955c39643473de49679bbfbd13bc78810d5530d531f2b66531931e1292e7f8b2fdfb5dd554a01bc0bff2
7
+ data.tar.gz: fc9573784f02330794d3fb352a7af346b200eaf9b8dff7140d0336f3659f07259de64fa438c203bbe3e415f5ea0ab510e6f238edb060d7e05bc9bc2fdbebb512
data/Gemfile CHANGED
@@ -1,3 +1,9 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
+
5
+ group :development, :test do
6
+ gem 'rake', '~> 13.0.1'
7
+ gem 'pry-byebug'
8
+ gem 'rubocop', '~> 0.66.0'
9
+ end
data/LICENSE CHANGED
@@ -1,22 +1,21 @@
1
- Copyright (c) 2012 Dynport GmbH
2
-
3
1
  MIT License
4
2
 
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
3
+ Copyright (c) 2016 Dynport GmbH
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
12
11
 
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
15
14
 
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md CHANGED
@@ -1,303 +1,795 @@
1
- # PhraseApp #
2
- [![Code Climate](https://codeclimate.com/github/phrase/phrase.png)](https://codeclimate.com/github/phrase/phrase)
3
- [![Build Status](https://secure.travis-ci.org/phrase/phrase.png)](http://travis-ci.org/phrase/phrase)
4
-
5
- PhraseApp is a translation management software. Set up a professional translation process to boost the quality of your translations with our powerful In-Context Editor or simply share and edit locale files with your team.
6
-
7
- You can order professional translations through PhraseApp or work with your own translators. Our platform supports various programming languages and frameworks. Such as [Ruby on Rails, Symfony, Zend Framework, iOS, Android and many more](https://phraseapp.com/docs/general/supported-platforms).
8
-
9
- This ruby gem allows you to integrate PhraseApp into your project and access your locale files through the PhraseApp [API](https://phraseapp.com/docs/api/overview).
10
-
11
- [Try out PhraseApp for free](https://phraseapp.com/features) and start translating your app!
12
-
13
- ### In-Context Editor ###
14
- PhraseApp comes with an In-Context editor that allows you to translate directly on your website. See our documentation on how to set it up: [In-Context Editor Setup](http://docs.phraseapp.com/guides/in-context-editor/).
15
-
16
- ### Supported Formats ###
17
- You can manage your locale files with PhraseApp if you use one of the following formats:
18
-
19
- * Ruby/Rails YAML
20
- * Gettext
21
- * Gettext Template
22
- * Android Strings
23
- * iOS Localizable Strings
24
- * XLIFF
25
- * Qt Phrase Book
26
- * Qt Translation Source
27
- * Chrome JSON i18n
28
- * Simple JSON
29
- * Nested JSON
30
- * GoI18n JSON
31
- * i18n-node-2 JSON
32
- * .NET ResX
33
- * Windows Phone ResX
34
- * Windows 8 Resource
35
- * INI
36
- * Java Properties .properties
37
- * Java Properties XML
38
- * Objective-C/Cocoa Property List
39
- * Symfony YAML
40
- * Symfony2 YAML (Beta)
41
- * TMX Translation Memory eXchange
42
- * Excel XLSX (Beta)
43
- * CSV
44
- * PHP Array
45
- * Zendesk CSV
46
- * Laravel/Flask PHP
47
- * Angular Translate
48
- * Mozilla Properties
49
- * Play Properties
1
+ # phrase
2
+
3
+ Phrase - the Ruby gem for the Phrase API Reference
4
+
5
+ Phrase is a translation management platform for software projects. You can collaborate on language file translation with your team or order translations through our platform. The API allows you to import locale files, download locale files, tag keys or interact in other ways with the localization data stored in Phrase for your account.
6
+
7
+ ## API Endpoint
8
+
9
+ ```
10
+ https://api.phrase.com/v2/
11
+ ```
12
+
13
+ The API is only accessible via HTTPS, the base URL is <code>https://api.phrase.com/</code>, and the current version is <code>v2</code> which results in the base URL for all requests: <code>https://api.phrase.com/v2/</code>.
50
14
 
51
15
  ## Usage
52
16
 
53
- This command line client is a Ruby gem. If you haven't installed Ruby on your system yet, we have put together a [handy tutorial](https://phraseapp.com/docs/installation/ruby-installation) for you.
17
+ [curl](http://curl.haxx.se/) is used primarily to send requests to Phrase in the examples. On most you'll find a second variant using the [Phrase API v2 client](https://phrase.com/cli/) that might be more convenient to handle. For further information check its [documentation](https://help.phrase.com/help/phrase-in-your-terminal).
18
+
19
+ ## Use of HTTP Verbs
20
+
21
+ Phrase API v2 tries to use the appropriate HTTP verb for accessing each endpoint according to REST specification where possible:
22
+
23
+ <div class=\"table-responsive\">
24
+ <table class=\"basic-table\">
25
+ <thead>
26
+ <tr class=\"basic-table__row basic-table__row--header\">
27
+ <th class=\"basic-table__cell basic-table__cell--header\">Verb</th>
28
+ <th class=\"basic-table__cell basic-table__cell--header\">Description</th>
29
+ </tr>
30
+ </thead>
31
+ <tbody>
32
+ <tr>
33
+ <td class=\"basic-table__cell\">GET</td>
34
+ <td class=\"basic-table__cell\">Retrieve one or multiple resources</td>
35
+ </tr>
36
+ <tr>
37
+ <td class=\"basic-table__cell\">POST</td>
38
+ <td class=\"basic-table__cell\">Create a resource</td>
39
+ </tr>
40
+ <tr>
41
+ <td class=\"basic-table__cell\">PUT</td>
42
+ <td class=\"basic-table__cell\">Update a resource</td>
43
+ </tr>
44
+ <tr>
45
+ <td class=\"basic-table__cell\">PATCH</td>
46
+ <td class=\"basic-table__cell\">Update a resource (partially)</td>
47
+ </tr>
48
+ <tr>
49
+ <td class=\"basic-table__cell\">DELETE</td>
50
+ <td class=\"basic-table__cell\">Delete a resource</td>
51
+ </tr>
52
+ </tbody>
53
+ </table>
54
+ </div>
55
+
56
+
57
+ ## Identification via User-Agent
58
+
59
+ You must include the User-Agent header with the name of your application or project. It might be a good idea to include some sort of contact information as well, so that we can get in touch if necessary (e.g. to warn you about Rate-Limiting or badly formed requests). Examples of excellent User-Agent headers:
60
+
61
+ ```
62
+ User-Agent: Frederiks Mobile App (frederik@phrase.com)
63
+ User-Agent: ACME Inc Python Client (http://example.com/contact)
64
+ ```
65
+
66
+ If you don't send this header, you will receive a response with 400 Bad Request.
67
+
68
+
69
+ ## Lists
70
+
71
+ When you request a list of resources, the API will typically only return an array of resources including their most important attributes. For a detailed representation of the resource you should request its detailed representation.
72
+
73
+ Lists are usually [paginated](#pagination).
74
+
75
+
76
+ ## Parameters
77
+
78
+ Many endpoints support additional parameters, e.g. for pagination. When passing them in a GET request you can send them as HTTP query string parameters:
79
+
80
+ ```
81
+ $ curl -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects?page=2\"
82
+ ```
83
+
84
+ When performing a POST, PUT, PATCH or DELETE request, we recommend sending parameters that are not already included in the URL, as JSON body:
85
+
86
+ ```
87
+ $ curl -H 'Content-Type: application/json' -d '{\"name\":\"My new project\"}' -u EMAIL_OR_ACCESS_TOKEN https://api.phrase.com/v2/projects
88
+ ```
89
+
90
+ Encoding parameters as JSON means better support for types (boolean, integer) and usually better readability. Don't forget to set the correct Content-Type for your request.
91
+
92
+ *The Content-Type header is omitted in some of the following examples for better readbility.*
93
+
94
+
95
+ ## Errors
96
+
97
+
98
+ ### Request Errors
99
+
100
+ If a request contains invalid JSON or is missing a required parameter (besides resource attributes), the status `400 Bad Request` is returned:
54
101
 
55
- You don't have to use this client but can also use the [API directly](https://phraseapp.com/docs/api/overview).
102
+ ```
103
+ {
104
+ \"message\": \"JSON could not be parsed\"
105
+ }
106
+ ```
56
107
 
57
- ### Installation
58
108
 
59
- Install the gem via `gem install`
109
+ ### Validation Errors
60
110
 
61
- gem install phrase
62
-
63
- or add it to your `Gemfile` when using bundler:
111
+ When the validation for a resource fails, the status `422 Unprocessable Entity` is returned, along with information on the affected fields:
64
112
 
65
- gem 'phrase'
113
+ ```
114
+ {
115
+ \"message\": \"Validation Failed\",
116
+ \"errors\": [
117
+ {
118
+ \"resource\": \"Project\",
119
+ \"field\": \"name\",
120
+ \"message\": \"can't be blank\"
121
+ }
122
+ ]
123
+ }
124
+ ```
66
125
 
67
- and install it
68
126
 
69
- $ bundle install
70
-
71
- That's it!
127
+ ## Date Format
72
128
 
73
- ### Initialization
129
+ Times and dates are returned and expected in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) date format:
74
130
 
75
- Before you can use the phrase command line client you have to set up some configuration data. When using Rails we recommend using the Rails generator we provide. For all other environments you can use a simple command to initialize the setup.
131
+ ```
132
+ YYYY-MM-DDTHH:MM:SSZ
133
+ ```
76
134
 
77
- To initialize phrase, your project auth token (secret) is required. You can find the auth token next to the project on [your project overview](https://phraseapp.com/projects).
135
+ Instead of 'Z' for UTC time zone you can specify your time zone's locale offset using the following notation:
78
136
 
79
- #### When using Rails
137
+ ```
138
+ YYYY-MM-DDTHH:MM:SS±hh:mm
139
+ ```
80
140
 
81
- Install phrase by executing the Rails generator:
141
+ Example for CET (1 hour behind UTC):
82
142
 
83
- bundle exec rails generate phrase:install --auth-token=<YOUR_TOKEN>
84
-
85
- This will:
143
+ ```
144
+ 2015-03-31T13:00+01:00
145
+ ```
86
146
 
87
- * create a `phrase.rb` initializer file in `./config/initializers/`
88
- * initialize your phrase project by creating a default locale in PhraseApp
89
- * create a `.phrase` configuration file containing the secret
147
+ Please note that in HTTP headers, we will use the appropriate recommended date formats instead of ISO 8601.
90
148
 
91
- *Using the generator will automatically prepare your Rails application for use with the [In-Context-Editor](https://phraseapp.com/features).*
92
149
 
93
- #### Without Rails
150
+ ## Authentication
94
151
 
95
- You can use the `phrase init` command to initialize your project:
152
+ <div class=\"alert alert-info\">For more detailed information on authentication, check out the <a href=\"#authentication\">API v2 Authentication Guide</a>.</div>
96
153
 
97
- phrase init --secret=<YOUR_TOKEN>
98
-
99
- This will:
154
+ There are two different ways to authenticate when performing API requests:
100
155
 
101
- * initialize your phrase project by creating a default locale in PhraseApp
102
- * create a `.phrase` configuration file containing the secret
156
+ * E-Mail and password
157
+ * Oauth Access Token
103
158
 
104
- ### Pushing Locale Files
105
159
 
106
- Push your localization files to PhraseApp by using the push command:
160
+ ### E-Mail and password
107
161
 
108
- phrase push FILE|DIRECTORY
162
+ To get started easily, you can use HTTP Basic authentication with your email and password:
109
163
 
110
- This will push all files found in the given directory or push only the file if the given path points to a file. The path falls back to `./config/locales`, the default localization file path in Ruby on Rails applications.
164
+ ```
165
+ $ curl -u username:password \"https://api.phrase.com/v2/projects\"
166
+ ```
111
167
 
112
- * `--recursive, -R`
113
168
 
114
- To push all files in a given directory recursively you can use the `--recursive` parameter:
169
+ ### OAuth via Access Tokens
115
170
 
116
- phrase push </path/to/file.extension> --recursive
171
+ You can create and manage access tokens in your [profile settings](https://app.phrase.com/settings/oauth_access_tokens) in Translation Center or via the [Authorizations API](#authorizations).
117
172
 
118
- * `--tags`
173
+ Simply pass the access token as the username of your request:
119
174
 
120
- Attach one or multiple tags with your file upload. All keys added by the push will be tagged with the specified tags:
175
+ ```
176
+ $ curl -u ACCESS_TOKEN: \"https://api.phrase.com/v2/projects\"
177
+ ```
121
178
 
122
- phrase push --tags=foo,bar
179
+ or send the access token via the `Authorization` header field:
123
180
 
124
- * `--locale`
181
+ ```
182
+ $ curl -H \"Authorization: token ACCESS_TOKEN\" https://api.phrase.com/v2/projects
183
+ ```
125
184
 
126
- Some formats do not contain information about their content's locale. These formats (e.g. Java Properties) require you to specify the locale (name) with the push command:
127
-
128
- phrase push messages.properties --locale=en
185
+ For more detailed information on authentication, check out the <a href=\"#authentication\">API v2 Authentication Guide</a>.
129
186
 
130
- * `--format`
187
+ #### Send via parameter
131
188
 
132
- Specify the format of the files you want to push. We usually try to guess it by evaluating the file name but sometimes you need to tell us more:
133
-
134
- phrase push messages.json --format=simple_json
135
-
136
- For a full list of all supported formats check our [format guide](https://phraseapp.com/docs/format-guide/overview).
137
-
138
- * `--force-update-translations`
189
+ As JSONP (and other) requests cannot send HTTP Basic Auth credentials, a special query parameter `access_token` can be used:
139
190
 
140
- When pushing files to PhraseApp, we only add new resources (keys and translations) by default. Use this flag if you want to override existing translations as well.
141
-
142
- phrase push most-recent.yml --force-update-translations
143
-
144
- Please note that we do not delete resources from your project even when using this option. Still you have to make sure that your file contains the most recent translations since all translations in your project will be updated with the file content!
191
+ ```
192
+ curl \"https://api.phrase.com/v2/projects?access_token=ACCESS_TOKEN\"
193
+ ```
145
194
 
146
- * `--skip-unverification`
195
+ You should only use this transport method if sending the authentication via header or Basic authentication is not possible.
147
196
 
148
- When using the `--force-update-translations` flag (see above) we will automatically unverify updated translations if configured in your workflow. Use this flag to prevent all translations being unverified. This option is great if you have copy&replaced strings in your file and just want to update all translations:
149
-
150
- phrase push most-recent.yml --force-update-translations --skip-unverification
197
+ ### Two-Factor-Authentication
151
198
 
152
- * `--skip-upload-tags`
199
+ Users with Two-Factor-Authentication enabled have to send a valid token along their request with certain authentication methods (such as Basic authentication). The necessity of a Two-Factor-Authentication token is indicated by the `X-PhraseApp-OTP: required; :MFA-type` header in the response. The `:MFA-type`field indicates the source of the token, e.g. `app` (refers to your Authenticator application):
153
200
 
154
- When you push translations we will automatically attach new keys to an upload tag. To prevent this from happening, you can use this option:
155
-
156
- phrase push my-file.yml --skip-upload-tags
157
-
158
- This can be very useful if you replace your content very often and do not want to create hundreds of upload-tags.
159
-
160
- * `--convert-emoji`
201
+ ```
202
+ X-PhraseApp-OTP: required; app
203
+ ```
161
204
 
162
- When you use Emoji symbols in your locale files (i.e. in iOS Localizable strings files) you can tell us to convert them to more readable symbols:
163
-
164
- phrase push Localizable.strings --convert-emoji
165
-
166
- Please note that you should only use this option if your file definitely contains Emoji symbols since it slows down the upload time quite a bit.
205
+ To provide a Two-Factor-Authentication token you can simply send it in the header of the request:
167
206
 
168
- * `--secret`
207
+ ```
208
+ curl -H \"X-PhraseApp-OTP: MFA-TOKEN\" -u EMAIL https://api.phrase.com/v2/projects
209
+ ```
169
210
 
170
- Your project auth token. You can find the auth token in your project overview or project settings form. This will fall back to the token stored in your `.phrase` config file.
211
+ Since Two-Factor-Authentication tokens usually expire quickly, we recommend using an alternative authentication method such as OAuth access tokens.
171
212
 
172
- ### Pulling Locale files
213
+ ### Multiple Accounts
173
214
 
174
- Pull your most recent locale files by using the `pull` command:
215
+ Some endpoints require the account ID to be specified if the authenticated user is a member of multiple accounts. You can find the eight-digit account ID inside <a href=\"https://app.phrase.com/\" target=\"_blank\">Translation Center</a> by switching to the desired account and then visiting the account details page. If required, you can specify the account just like a normal parameter within the request.
175
216
 
176
- phrase pull
217
+ ## Pagination
177
218
 
178
- This will pull localization files for all of your locales available in the current project. Files are by default stored at `./phrase/locales` in YAML format.
219
+ Endpoints that return a list or resources will usually return paginated results and include 25 items by default. To access further pages, use the `page` parameter:
179
220
 
180
- * `--format`
221
+ ```
222
+ $ curl -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects?page=2\"
223
+ ```
181
224
 
182
- Specify the format you want to download your files in:
183
-
184
- phrase pull en --format=simple_json
185
-
186
- For a full list of all supported formats check our [format guide](https://phraseapp.com/docs/format-guide/overview).
225
+ Some endpoints also allow a custom page size by using the `per_page` parameter:
187
226
 
188
- * `--target`
227
+ ```
228
+ $ curl -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects?page=2&per_page=50\"
229
+ ```
189
230
 
190
- Specify where you want to download the files to:
191
-
192
- phrase pull fr --target="./config/locales"
193
-
194
- By default, files will be downloaded to `./phrase/locales`.
195
-
196
- * `--tag`
197
-
198
- Limit results to a given tag instead of downloading all translations:
199
-
200
- phrase pull de --tag=feature-messenger-v2
201
-
202
- * `--updated-since`
231
+ Unless specified otherwise in the description of the respective endpoint, `per_page` allows you to specify a page size up to 100 items.
203
232
 
204
- Limit results to translations being updated after the given date and time (UTC) in the format `YYYYMMDDHHMMSS`:
205
-
206
- phrase pull en --updated-since=20140601123000
207
233
 
208
- * `--include-empty-translations`
234
+ ## Link-Headers
209
235
 
210
- By default we will only return translated keys in the file. Use this flag to include empty translations as well:
211
-
212
- phrase pull en --include-empty-translations
236
+ We provide you with pagination URLs in the [Link Header field](http://tools.ietf.org/html/rfc5988). Make use of this information to avoid building pagination URLs yourself.
213
237
 
214
- * `--convert-emoji`
238
+ ```
239
+ Link: <https://api.phrase.com/v2/projects?page=1>; rel=\"first\", <https://api.phrase.com/v2/projects?page=3>; rel=\"prev\", <https://api.phrase.com/v2/projects?page=5>; rel=\"next\", <https://api.phrase.com/v2/projects?page=9>; rel=\"last\"
240
+ ```
215
241
 
216
- When you use Emoji symbols in your translations you can tell us to convert them back to correctly encoded symbols:
217
-
218
- phrase pull --convert-emoji
219
-
220
- Please note that you should only use this option if your translations definitely contains Emojis since it slows down the download time a bit.
242
+ Possible `rel` values are:
221
243
 
222
- * `--encoding`
223
-
224
- Set the encoding for your localization files to UTF-8, UTF-16 or Latin-1.
244
+ <div class=\"table-responsive\">
245
+ <table class=\"basic-table\">
246
+ <thead>
247
+ <tr class=\"basic-table__row basic-table__row--header\">
248
+ <th class=\"basic-table__cell basic-table__cell--header\">Value</th>
249
+ <th class=\"basic-table__cell basic-table__cell--header\">Description</th>
250
+ </tr>
251
+ </thead>
252
+ <tbody>
253
+ <tr>
254
+ <td class=\"basic-table__cell\">next</td>
255
+ <td class=\"basic-table__cell\">URL of the next page of results</td>
256
+ </tr>
257
+ <tr>
258
+ <td class=\"basic-table__cell\">last</td>
259
+ <td class=\"basic-table__cell\">URL of the last page of results</td>
260
+ </tr>
261
+ <tr>
262
+ <td class=\"basic-table__cell\">first</td>
263
+ <td class=\"basic-table__cell\">URL of the first page of results</td>
264
+ </tr>
265
+ <tr>
266
+ <td class=\"basic-table__cell\">prev</td>
267
+ <td class=\"basic-table__cell\">URL of the previous page of results</td>
268
+ </tr>
269
+ </tbody>
270
+ </table>
271
+ </div>
225
272
 
226
- phrase pull --encoding=UTF-8
273
+ ## Rate Limiting
227
274
 
228
- Please note that the encodings only work for a handful of formats like IOS .strings or Java .properties. The default will be UTF-8. If none is provided the default encoding of the formats is used.
275
+ All API endpoints are subject to rate limiting to ensure good performance for all customers. The rate limit is calculated per user:
229
276
 
230
- * `--skip-unverified-translations`
231
-
232
- By default all translations are downloaded. Use this flag to skip all unverified translations.
277
+ * 1000 requests per 5 minutes
278
+ * 4 concurrent (parallel) requests
233
279
 
234
- phrase pull --skip-unverified-translations
280
+ For your convenience we send information on the current rate limit within the response headers:
235
281
 
282
+ <div class=\"table-responsive\">
283
+ <table class=\"basic-table\">
284
+ <thead>
285
+ <tr class=\"basic-table__row basic-table__row--header\">
286
+ <th class=\"basic-table__cell basic-table__cell--header\">Header</th>
287
+ <th class=\"basic-table__cell basic-table__cell--header\">Description</th>
288
+ </tr>
289
+ </thead>
290
+ <tbody>
291
+ <tr>
292
+ <td class=\"basic-table__cell\" style=\"white-space: nowrap;\"><code>X-Rate-Limit-Limit</code></td>
293
+ <td class=\"basic-table__cell\">Number of max requests allowed in the current time period</td>
294
+ </tr>
295
+ <tr>
296
+ <td class=\"basic-table__cell\" style=\"white-space: nowrap;\"><code>X-Rate-Limit-Remaining</code></td>
297
+ <td class=\"basic-table__cell\">Number of remaining requests in the current time period</td>
298
+ </tr>
299
+ <tr>
300
+ <td class=\"basic-table__cell\" style=\"white-space: nowrap;\"><code>X-Rate-Limit-Reset</code></td>
301
+ <td class=\"basic-table__cell\">Timestamp of end of current time period as UNIX timestamp</td>
302
+ </tr>
303
+ </tbody>
304
+ </table>
305
+ </div>
236
306
 
237
- * `--secret`
307
+ If you should run into the rate limit, you will receive the HTTP status code `429: Too many requests`.
238
308
 
239
- Your project auth token. You can find the auth token in your project overview or project settings form. This will fall back to the token stored in your `.phrase` config file.
240
-
241
- ### Advanced configuration
309
+ If you should need higher rate limits, [contact us](https://phrase.com/contact).
242
310
 
243
- The `phrase init` command allows several advanced configuration options to further customize the setup:
244
311
 
245
- * `--default-locale`
312
+ ## Conditional GET requests / HTTP Caching
246
313
 
247
- You can specify a locale that should be used as the default locale when setting up your PhraseApp project (default is `en`).
248
-
249
- phrase init --secret=<YOUR_TOKEN> --default-locale=fr
314
+ <div class=\"alert alert-info\"><p><strong>Note:</strong> Conditional GET requests are currently only supported for <a href=\"#locales_download\">locales#download</a> and <a href=\"#translations_index\">translations#index</a></p></div>
250
315
 
251
- * `--default-format`
316
+ We will return an ETag or Last-Modified header with most GET requests. When you request a resource we recommend to store this value and submit them on subsequent requests as `If-Modified-Since` and `If-None-Match` headers. If the resource has not changed in the meantime, we will return the status `304 Not Modified` instead of rendering and returning the resource again. In most cases this is less time-consuming and makes your application/integration faster.
252
317
 
253
- Specify a format that should be used as the default format when downloading files (default is `yml`). For a full list of all supported formats check our [format guide](https://phraseapp.com/docs/format-guide/overview).
254
-
255
- * `--domain`
318
+ Please note that all conditional requests that return a response with status 304 don't count against your rate limits.
256
319
 
257
- Set a domain for use with Gettext translation files (default is `phrase`).
258
-
259
- * `--locale-directory`
320
+ ```
321
+ $ curl -i -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects/1234abcd1234abcdefefabcd1234efab/locales/en/download\"
322
+ HTTP/1.1 200 OK
323
+ ETag: \"abcd1234abcdefefabcd1234efab1234\"
324
+ Last-Modified: Wed, 28 Jan 2015 15:31:30 UTC
325
+ Status: 200 OK
260
326
 
261
- Set the directory that contains your source locales (used by the `phrase push` command). Allows [placeholders](#allowed-placeholders-for-advanced-configuration).
262
-
263
- * `--locale-filename`
327
+ $ curl -i -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects/1234abcd1234abcdefefabcd1234efab/locales/en/download\" -H 'If-None-Match: \"abcd1234abcdefefabcd1234efab1234\"'
328
+ HTTP/1.1 304 Not Modified
329
+ ETag: \"abcd1234abcdefefabcd1234efab1234\"
330
+ Last-Modified: Wed, 28 Jan 2015 15:31:30 UTC
331
+ Status: 304 Not Modified
264
332
 
265
- Set the filename for files you download from PhraseApp via `phrase pull`. Allows [placeholders](#allowed-placeholders-for-advanced-configuration).
266
-
267
- * `--default-target`
333
+ $ curl -i -u EMAIL_OR_ACCESS_TOKEN \"https://api.phrase.com/v2/projects/1234abcd1234abcdefefabcd1234efab/locales/en/download\" -H \"If-Modified-Since: Wed, 28 Jan 2015 15:31:30 UTC\"
334
+ HTTP/1.1 304 Not Modified
335
+ Last-Modified: Wed, 28 Jan 2015 15:31:30 UTC
336
+ Status: 304 Not Modified
337
+ ```
268
338
 
269
- Set the target directly to store your localization files retrieved by `phrase pull`. Allows [placeholders](#allowed-placeholders-for-advanced-configuration).
270
339
 
271
-
272
- These options will be stored in your `.phrase` config file where you can edit them later on as well.
340
+ ## JSONP
273
341
 
274
- ### Allowed placeholders for advanced configuration
342
+ The Phrase API supports [JSONP](http://en.wikipedia.org/wiki/JSONP) for all GET requests in order to deal with cross-domain request issues. Just send a `?callback` parameter along with the request to specify the Javascript function name to be called with the response content:
275
343
 
276
- Some advanced configuration options support placeholders. These will be replaced with the actual content. This allows you to create more flexible path and filename settings.
344
+ ```
345
+ $ curl \"https://api.phrase.com/v2/projects?callback=myFunction\"
346
+ ```
347
+
348
+ The response will include the normal output for that endpoint, along with a `meta` section including header data:
349
+
350
+ ```
351
+ myFunction({
352
+ {
353
+ \"meta\": {
354
+ \"status\": 200,
355
+ ...
356
+ },
357
+ \"data\": [
358
+ {
359
+ \"id\": \"1234abcd1234abc1234abcd1234abc\"
360
+ ...
361
+ }
362
+ ]
363
+ }
364
+ });
365
+ ```
277
366
 
278
- | Placeholder | Description | Default |
279
- | --------------- | ---------------------- | ------- |
280
- | \<domain\> | Name of the domain | phrase |
281
- | \<format\> | Format name/identifier | yml |
282
- | \<locale\> | Locale name | en |
283
- | \<locale.name\> | Locale name | en |
284
- | \<locale.code\> | Locale code | - |
367
+ To authenticate a JSONP request, you can send a valid [access token](#authentication) as the `?access_token` parameter along the request:
285
368
 
286
- For example you can specify a different file name for files you retrieve via the `phrase pull` command:
369
+ ```
370
+ $ curl \"https://api.phrase.com/v2/projects?callback=myFunction&access_token=ACCESS-TOKEN\"
371
+ ```
287
372
 
288
- phrase init --secret=<YOUR_TOKEN> --locale-filename="<locale.name>.yml"
289
373
 
290
- ## Further Information
291
- * [Read the PhraseApp Documentation](http://docs.phraseapp.com/)
292
- * [Software Translation Managemeny with PhraseApp](https://phraseapp.com/features)
293
- * [Get in touch with PhraseApp Team](https://phraseapp.com/contact)
374
+ ## This SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project:
294
375
 
295
- ## References
296
- * [PhraseApp API Documentation](http://docs.phraseapp.com/api/v1/)
297
- * [Demo of the In-Context Editor](http://demo.phraseapp.com)
298
- * [Localization Guides and Software Translation Best Practices](http://localize-software.phraseapp.com/)
376
+ - API version: 2.0.0
377
+ - Package version: 1.0.0
378
+ - Build package: org.openapitools.codegen.languages.RubyClientCodegen
379
+ For more information, please visit [https://developers.phrase.com/api/](https://developers.phrase.com/api/)
380
+
381
+ ## Installation
382
+
383
+ ### Build a gem
384
+
385
+ To build the Ruby code into a gem:
386
+
387
+ ```shell
388
+ gem build phrase.gemspec
389
+ ```
390
+
391
+ Then either install the gem locally:
392
+
393
+ ```shell
394
+ gem install ./phrase-1.0.0.gem
395
+ ```
396
+
397
+ (for development, run `gem install --dev ./phrase-1.0.0.gem` to install the development dependencies)
398
+
399
+ or publish the gem to a gem hosting service, e.g. [RubyGems](https://rubygems.org/).
400
+
401
+ Finally add this to the Gemfile:
402
+
403
+ gem 'phrase', '~> 1.0.0'
404
+
405
+ ### Install from Git
406
+
407
+ If the Ruby gem is hosted at a git repository: https://github.com/GIT_USER_ID/GIT_REPO_ID, then add the following in the Gemfile:
408
+
409
+ gem 'phrase', :git => 'https://github.com/GIT_USER_ID/GIT_REPO_ID.git'
410
+
411
+ ### Include the Ruby code directly
412
+
413
+ Include the Ruby code directly using `-I` as follows:
414
+
415
+ ```shell
416
+ ruby -Ilib script.rb
417
+ ```
418
+
419
+ ## Getting Started
420
+
421
+ Please follow the [installation](#installation) procedure and then run the following code:
422
+
423
+ ```ruby
424
+ # Load the gem
425
+ require 'phrase'
426
+
427
+ # Setup authorization
428
+ Phrase.configure do |config|
429
+ # Configure HTTP basic authorization: Basic
430
+ config.username = 'YOUR_USERNAME'
431
+ config.password = 'YOUR_PASSWORD'
432
+
433
+ # Or configure API key authorization: Token
434
+ config.api_key['Authorization'] = 'YOUR API KEY'
435
+ config.api_key_prefix['Authorization'] = 'token'
436
+ end
437
+
438
+ api_instance = Phrase::AccountsApi.new
439
+ id = 'id_example' # String | ID
440
+ opts = {
441
+ x_phrase_app_otp: 'x_phrase_app_otp_example' # String | Two-Factor-Authentication token (optional)
442
+ }
443
+
444
+ begin
445
+ #Get a single account
446
+ result = api_instance.account_show(id, opts)
447
+ pp result
448
+ pp result.next_page?
449
+ pp result.next_page
450
+ rescue Phrase::ApiError => e
451
+ puts "Exception when calling AccountsApi->account_show: #{e}"
452
+ end
453
+
454
+ ```
455
+
456
+ ## Documentation for API Endpoints
457
+
458
+ All URIs are relative to *https://api.phrase.com/v2*
459
+
460
+ Class | Method | HTTP request | Description
461
+ ------------ | ------------- | ------------- | -------------
462
+ *Phrase::AccountsApi* | [**account_show**](docs/AccountsApi.md#account_show) | **GET** /accounts/{id} | Get a single account
463
+ *Phrase::AccountsApi* | [**accounts_list**](docs/AccountsApi.md#accounts_list) | **GET** /accounts | List accounts
464
+ *Phrase::AuthorizationsApi* | [**authorization_create**](docs/AuthorizationsApi.md#authorization_create) | **POST** /authorizations | Create an authorization
465
+ *Phrase::AuthorizationsApi* | [**authorization_delete**](docs/AuthorizationsApi.md#authorization_delete) | **DELETE** /authorizations/{id} | Delete an authorization
466
+ *Phrase::AuthorizationsApi* | [**authorization_show**](docs/AuthorizationsApi.md#authorization_show) | **GET** /authorizations/{id} | Get a single authorization
467
+ *Phrase::AuthorizationsApi* | [**authorization_update**](docs/AuthorizationsApi.md#authorization_update) | **PATCH** /authorizations/{id} | Update an authorization
468
+ *Phrase::AuthorizationsApi* | [**authorizations_list**](docs/AuthorizationsApi.md#authorizations_list) | **GET** /authorizations | List authorizations
469
+ *Phrase::BitbucketSyncApi* | [**bitbucket_sync_export**](docs/BitbucketSyncApi.md#bitbucket_sync_export) | **POST** /bitbucket_syncs/{id}/export | Export from Phrase to Bitbucket
470
+ *Phrase::BitbucketSyncApi* | [**bitbucket_sync_import**](docs/BitbucketSyncApi.md#bitbucket_sync_import) | **POST** /bitbucket_syncs/{id}/import | Import to Phrase from Bitbucket
471
+ *Phrase::BitbucketSyncApi* | [**bitbucket_syncs_list**](docs/BitbucketSyncApi.md#bitbucket_syncs_list) | **GET** /bitbucket_syncs | List Bitbucket syncs
472
+ *Phrase::BlacklistedKeysApi* | [**blacklisted_key_create**](docs/BlacklistedKeysApi.md#blacklisted_key_create) | **POST** /projects/{project_id}/blacklisted_keys | Create a blacklisted key
473
+ *Phrase::BlacklistedKeysApi* | [**blacklisted_key_delete**](docs/BlacklistedKeysApi.md#blacklisted_key_delete) | **DELETE** /projects/{project_id}/blacklisted_keys/{id} | Delete a blacklisted key
474
+ *Phrase::BlacklistedKeysApi* | [**blacklisted_key_show**](docs/BlacklistedKeysApi.md#blacklisted_key_show) | **GET** /projects/{project_id}/blacklisted_keys/{id} | Get a single blacklisted key
475
+ *Phrase::BlacklistedKeysApi* | [**blacklisted_key_update**](docs/BlacklistedKeysApi.md#blacklisted_key_update) | **PATCH** /projects/{project_id}/blacklisted_keys/{id} | Update a blacklisted key
476
+ *Phrase::BlacklistedKeysApi* | [**blacklisted_keys_list**](docs/BlacklistedKeysApi.md#blacklisted_keys_list) | **GET** /projects/{project_id}/blacklisted_keys | List blacklisted keys
477
+ *Phrase::BranchesApi* | [**branch_compare**](docs/BranchesApi.md#branch_compare) | **GET** /projects/{project_id}/branches/{name}/compare | Compare branches
478
+ *Phrase::BranchesApi* | [**branch_create**](docs/BranchesApi.md#branch_create) | **POST** /projects/{project_id}/branches | Create a branch
479
+ *Phrase::BranchesApi* | [**branch_delete**](docs/BranchesApi.md#branch_delete) | **DELETE** /projects/{project_id}/branches/{name} | Delete a branch
480
+ *Phrase::BranchesApi* | [**branch_merge**](docs/BranchesApi.md#branch_merge) | **PATCH** /projects/{project_id}/branches/{name}/merge | Merge a branch
481
+ *Phrase::BranchesApi* | [**branch_show**](docs/BranchesApi.md#branch_show) | **GET** /projects/{project_id}/branches/{name} | Get a single branch
482
+ *Phrase::BranchesApi* | [**branch_update**](docs/BranchesApi.md#branch_update) | **PATCH** /projects/{project_id}/branches/{name} | Update a branch
483
+ *Phrase::BranchesApi* | [**branches_list**](docs/BranchesApi.md#branches_list) | **GET** /projects/{project_id}/branches | List branches
484
+ *Phrase::CommentsApi* | [**comment_create**](docs/CommentsApi.md#comment_create) | **POST** /projects/{project_id}/keys/{key_id}/comments | Create a comment
485
+ *Phrase::CommentsApi* | [**comment_delete**](docs/CommentsApi.md#comment_delete) | **DELETE** /projects/{project_id}/keys/{key_id}/comments/{id} | Delete a comment
486
+ *Phrase::CommentsApi* | [**comment_mark_check**](docs/CommentsApi.md#comment_mark_check) | **GET** /projects/{project_id}/keys/{key_id}/comments/{id}/read | Check if comment is read
487
+ *Phrase::CommentsApi* | [**comment_mark_read**](docs/CommentsApi.md#comment_mark_read) | **PATCH** /projects/{project_id}/keys/{key_id}/comments/{id}/read | Mark a comment as read
488
+ *Phrase::CommentsApi* | [**comment_mark_unread**](docs/CommentsApi.md#comment_mark_unread) | **DELETE** /projects/{project_id}/keys/{key_id}/comments/{id}/read | Mark a comment as unread
489
+ *Phrase::CommentsApi* | [**comment_show**](docs/CommentsApi.md#comment_show) | **GET** /projects/{project_id}/keys/{key_id}/comments/{id} | Get a single comment
490
+ *Phrase::CommentsApi* | [**comment_update**](docs/CommentsApi.md#comment_update) | **PATCH** /projects/{project_id}/keys/{key_id}/comments/{id} | Update a comment
491
+ *Phrase::CommentsApi* | [**comments_list**](docs/CommentsApi.md#comments_list) | **GET** /projects/{project_id}/keys/{key_id}/comments | List comments
492
+ *Phrase::DistributionsApi* | [**distribution_create**](docs/DistributionsApi.md#distribution_create) | **POST** /accounts/{account_id}/distributions | Create a distribution
493
+ *Phrase::DistributionsApi* | [**distribution_delete**](docs/DistributionsApi.md#distribution_delete) | **DELETE** /accounts/{account_id}/distributions/{id} | Delete a distribution
494
+ *Phrase::DistributionsApi* | [**distribution_show**](docs/DistributionsApi.md#distribution_show) | **GET** /accounts/{account_id}/distributions/{id} | Get a single distribution
495
+ *Phrase::DistributionsApi* | [**distribution_update**](docs/DistributionsApi.md#distribution_update) | **PATCH** /accounts/{account_id}/distributions/{id} | Update a distribution
496
+ *Phrase::DistributionsApi* | [**distributions_list**](docs/DistributionsApi.md#distributions_list) | **GET** /accounts/{account_id}/distributions | List distributions
497
+ *Phrase::FormatsApi* | [**formats_list**](docs/FormatsApi.md#formats_list) | **GET** /formats | List formats
498
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_delete**](docs/GitLabSyncApi.md#gitlab_sync_delete) | **DELETE** /gitlab_syncs/{id} | Delete single Sync Setting
499
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_export**](docs/GitLabSyncApi.md#gitlab_sync_export) | **POST** /gitlab_syncs/{gitlab_sync_id}/export | Export from Phrase to GitLab
500
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_history**](docs/GitLabSyncApi.md#gitlab_sync_history) | **GET** /gitlab_syncs/{gitlab_sync_id}/history | History of single Sync Setting
501
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_import**](docs/GitLabSyncApi.md#gitlab_sync_import) | **POST** /gitlab_syncs/{gitlab_sync_id}/import | Import from GitLab to Phrase
502
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_list**](docs/GitLabSyncApi.md#gitlab_sync_list) | **GET** /gitlab_syncs | List GitLab syncs
503
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_show**](docs/GitLabSyncApi.md#gitlab_sync_show) | **GET** /gitlab_syncs/{id} | Get single Sync Setting
504
+ *Phrase::GitLabSyncApi* | [**gitlab_sync_update**](docs/GitLabSyncApi.md#gitlab_sync_update) | **PUT** /gitlab_syncs/{id} | Update single Sync Setting
505
+ *Phrase::GlossaryApi* | [**glossaries_list**](docs/GlossaryApi.md#glossaries_list) | **GET** /accounts/{account_id}/glossaries | List glossaries
506
+ *Phrase::GlossaryApi* | [**glossary_create**](docs/GlossaryApi.md#glossary_create) | **POST** /accounts/{account_id}/glossaries | Create a glossary
507
+ *Phrase::GlossaryApi* | [**glossary_delete**](docs/GlossaryApi.md#glossary_delete) | **DELETE** /accounts/{account_id}/glossaries/{id} | Delete a glossary
508
+ *Phrase::GlossaryApi* | [**glossary_show**](docs/GlossaryApi.md#glossary_show) | **GET** /accounts/{account_id}/glossaries/{id} | Get a single glossary
509
+ *Phrase::GlossaryApi* | [**glossary_update**](docs/GlossaryApi.md#glossary_update) | **PATCH** /accounts/{account_id}/glossaries/{id} | Update a glossary
510
+ *Phrase::GlossaryTermTranslationsApi* | [**glossary_term_translation_create**](docs/GlossaryTermTranslationsApi.md#glossary_term_translation_create) | **POST** /accounts/{account_id}/glossaries/{glossary_id}/terms/{term_id}/translations | Create a glossary term translation
511
+ *Phrase::GlossaryTermTranslationsApi* | [**glossary_term_translation_delete**](docs/GlossaryTermTranslationsApi.md#glossary_term_translation_delete) | **DELETE** /accounts/{account_id}/glossaries/{glossary_id}/terms/{term_id}/translations/{id} | Delete a glossary term translation
512
+ *Phrase::GlossaryTermTranslationsApi* | [**glossary_term_translation_update**](docs/GlossaryTermTranslationsApi.md#glossary_term_translation_update) | **PATCH** /accounts/{account_id}/glossaries/{glossary_id}/terms/{term_id}/translations/{id} | Update a glossary term translation
513
+ *Phrase::GlossaryTermsApi* | [**glossary_term_create**](docs/GlossaryTermsApi.md#glossary_term_create) | **POST** /accounts/{account_id}/glossaries/{glossary_id}/terms | Create a glossary term
514
+ *Phrase::GlossaryTermsApi* | [**glossary_term_delete**](docs/GlossaryTermsApi.md#glossary_term_delete) | **DELETE** /accounts/{account_id}/glossaries/{glossary_id}/terms/{id} | Delete a glossary term
515
+ *Phrase::GlossaryTermsApi* | [**glossary_term_show**](docs/GlossaryTermsApi.md#glossary_term_show) | **GET** /accounts/{account_id}/glossaries/{glossary_id}/terms/{id} | Get a single glossary term
516
+ *Phrase::GlossaryTermsApi* | [**glossary_term_update**](docs/GlossaryTermsApi.md#glossary_term_update) | **PATCH** /accounts/{account_id}/glossaries/{glossary_id}/terms/{id} | Update a glossary term
517
+ *Phrase::GlossaryTermsApi* | [**glossary_terms_list**](docs/GlossaryTermsApi.md#glossary_terms_list) | **GET** /accounts/{account_id}/glossaries/{glossary_id}/terms | List glossary terms
518
+ *Phrase::InvitationsApi* | [**invitation_create**](docs/InvitationsApi.md#invitation_create) | **POST** /accounts/{account_id}/invitations | Create a new invitation
519
+ *Phrase::InvitationsApi* | [**invitation_delete**](docs/InvitationsApi.md#invitation_delete) | **DELETE** /accounts/{account_id}/invitations/{id} | Delete an invitation
520
+ *Phrase::InvitationsApi* | [**invitation_resend**](docs/InvitationsApi.md#invitation_resend) | **POST** /accounts/{account_id}/invitations/{id}/resend | Resend an invitation
521
+ *Phrase::InvitationsApi* | [**invitation_show**](docs/InvitationsApi.md#invitation_show) | **GET** /accounts/{account_id}/invitations/{id} | Get a single invitation
522
+ *Phrase::InvitationsApi* | [**invitation_update**](docs/InvitationsApi.md#invitation_update) | **PATCH** /accounts/{account_id}/invitations/{id} | Update an invitation
523
+ *Phrase::InvitationsApi* | [**invitations_list**](docs/InvitationsApi.md#invitations_list) | **GET** /accounts/{account_id}/invitations | List invitations
524
+ *Phrase::JobLocalesApi* | [**job_locale_complete**](docs/JobLocalesApi.md#job_locale_complete) | **POST** /projects/{project_id}/jobs/{job_id}/locales/{id}/complete | Complete a job locale
525
+ *Phrase::JobLocalesApi* | [**job_locale_delete**](docs/JobLocalesApi.md#job_locale_delete) | **DELETE** /projects/{project_id}/jobs/{job_id}/locales/{id} | Delete a job locale
526
+ *Phrase::JobLocalesApi* | [**job_locale_reopen**](docs/JobLocalesApi.md#job_locale_reopen) | **POST** /projects/{project_id}/jobs/{job_id}/locales/{id}/reopen | Reopen a job locale
527
+ *Phrase::JobLocalesApi* | [**job_locale_show**](docs/JobLocalesApi.md#job_locale_show) | **GET** /projects/{project_id}/jobs/{job_id}/locale/{id} | Get a single job locale
528
+ *Phrase::JobLocalesApi* | [**job_locale_update**](docs/JobLocalesApi.md#job_locale_update) | **PATCH** /projects/{project_id}/jobs/{job_id}/locales/{id} | Update a job locale
529
+ *Phrase::JobLocalesApi* | [**job_locales_create**](docs/JobLocalesApi.md#job_locales_create) | **POST** /projects/{project_id}/jobs/{job_id}/locales | Create a job locale
530
+ *Phrase::JobLocalesApi* | [**job_locales_list**](docs/JobLocalesApi.md#job_locales_list) | **GET** /projects/{project_id}/jobs/{job_id}/locales | List job locales
531
+ *Phrase::JobsApi* | [**job_complete**](docs/JobsApi.md#job_complete) | **POST** /projects/{project_id}/jobs/{id}/complete | Complete a job
532
+ *Phrase::JobsApi* | [**job_create**](docs/JobsApi.md#job_create) | **POST** /projects/{project_id}/jobs | Create a job
533
+ *Phrase::JobsApi* | [**job_delete**](docs/JobsApi.md#job_delete) | **DELETE** /projects/{project_id}/jobs/{id} | Delete a job
534
+ *Phrase::JobsApi* | [**job_keys_create**](docs/JobsApi.md#job_keys_create) | **POST** /projects/{project_id}/jobs/{id}/keys | Add keys to job
535
+ *Phrase::JobsApi* | [**job_keys_delete**](docs/JobsApi.md#job_keys_delete) | **DELETE** /projects/{project_id}/jobs/{id}/keys | Remove keys from job
536
+ *Phrase::JobsApi* | [**job_reopen**](docs/JobsApi.md#job_reopen) | **POST** /projects/{project_id}/jobs/{id}/reopen | Reopen a job
537
+ *Phrase::JobsApi* | [**job_show**](docs/JobsApi.md#job_show) | **GET** /projects/{project_id}/jobs/{id} | Get a single job
538
+ *Phrase::JobsApi* | [**job_start**](docs/JobsApi.md#job_start) | **POST** /projects/{project_id}/jobs/{id}/start | Start a job
539
+ *Phrase::JobsApi* | [**job_update**](docs/JobsApi.md#job_update) | **PATCH** /projects/{project_id}/jobs/{id} | Update a job
540
+ *Phrase::JobsApi* | [**jobs_list**](docs/JobsApi.md#jobs_list) | **GET** /projects/{project_id}/jobs | List jobs
541
+ *Phrase::KeysApi* | [**key_create**](docs/KeysApi.md#key_create) | **POST** /projects/{project_id}/keys | Create a key
542
+ *Phrase::KeysApi* | [**key_delete**](docs/KeysApi.md#key_delete) | **DELETE** /projects/{project_id}/keys/{id} | Delete a key
543
+ *Phrase::KeysApi* | [**key_show**](docs/KeysApi.md#key_show) | **GET** /projects/{project_id}/keys/{id} | Get a single key
544
+ *Phrase::KeysApi* | [**key_update**](docs/KeysApi.md#key_update) | **PATCH** /projects/{project_id}/keys/{id} | Update a key
545
+ *Phrase::KeysApi* | [**keys_delete**](docs/KeysApi.md#keys_delete) | **DELETE** /projects/{project_id}/keys | Delete collection of keys
546
+ *Phrase::KeysApi* | [**keys_list**](docs/KeysApi.md#keys_list) | **GET** /projects/{project_id}/keys | List keys
547
+ *Phrase::KeysApi* | [**keys_search**](docs/KeysApi.md#keys_search) | **POST** /projects/{project_id}/keys/search | Search keys
548
+ *Phrase::KeysApi* | [**keys_tag**](docs/KeysApi.md#keys_tag) | **PATCH** /projects/{project_id}/keys/tag | Add tags to collection of keys
549
+ *Phrase::KeysApi* | [**keys_untag**](docs/KeysApi.md#keys_untag) | **PATCH** /projects/{project_id}/keys/untag | Remove tags from collection of keys
550
+ *Phrase::LocalesApi* | [**locale_create**](docs/LocalesApi.md#locale_create) | **POST** /projects/{project_id}/locales | Create a locale
551
+ *Phrase::LocalesApi* | [**locale_delete**](docs/LocalesApi.md#locale_delete) | **DELETE** /projects/{project_id}/locales/{id} | Delete a locale
552
+ *Phrase::LocalesApi* | [**locale_download**](docs/LocalesApi.md#locale_download) | **GET** /projects/{project_id}/locales/{id}/download | Download a locale
553
+ *Phrase::LocalesApi* | [**locale_show**](docs/LocalesApi.md#locale_show) | **GET** /projects/{project_id}/locales/{id} | Get a single locale
554
+ *Phrase::LocalesApi* | [**locale_update**](docs/LocalesApi.md#locale_update) | **PATCH** /projects/{project_id}/locales/{id} | Update a locale
555
+ *Phrase::LocalesApi* | [**locales_list**](docs/LocalesApi.md#locales_list) | **GET** /projects/{project_id}/locales | List locales
556
+ *Phrase::MembersApi* | [**member_delete**](docs/MembersApi.md#member_delete) | **DELETE** /accounts/{account_id}/members/{id} | Remove a user from the account
557
+ *Phrase::MembersApi* | [**member_show**](docs/MembersApi.md#member_show) | **GET** /accounts/{account_id}/members/{id} | Get single member
558
+ *Phrase::MembersApi* | [**member_update**](docs/MembersApi.md#member_update) | **PATCH** /accounts/{account_id}/members/{id} | Update a member
559
+ *Phrase::MembersApi* | [**members_list**](docs/MembersApi.md#members_list) | **GET** /accounts/{account_id}/members | List members
560
+ *Phrase::OrdersApi* | [**order_confirm**](docs/OrdersApi.md#order_confirm) | **PATCH** /projects/{project_id}/orders/{id}/confirm | Confirm an order
561
+ *Phrase::OrdersApi* | [**order_create**](docs/OrdersApi.md#order_create) | **POST** /projects/{project_id}/orders | Create a new order
562
+ *Phrase::OrdersApi* | [**order_delete**](docs/OrdersApi.md#order_delete) | **DELETE** /projects/{project_id}/orders/{id} | Cancel an order
563
+ *Phrase::OrdersApi* | [**order_show**](docs/OrdersApi.md#order_show) | **GET** /projects/{project_id}/orders/{id} | Get a single order
564
+ *Phrase::OrdersApi* | [**orders_list**](docs/OrdersApi.md#orders_list) | **GET** /projects/{project_id}/orders | List orders
565
+ *Phrase::ProjectsApi* | [**project_create**](docs/ProjectsApi.md#project_create) | **POST** /projects | Create a project
566
+ *Phrase::ProjectsApi* | [**project_delete**](docs/ProjectsApi.md#project_delete) | **DELETE** /projects/{id} | Delete a project
567
+ *Phrase::ProjectsApi* | [**project_show**](docs/ProjectsApi.md#project_show) | **GET** /projects/{id} | Get a single project
568
+ *Phrase::ProjectsApi* | [**project_update**](docs/ProjectsApi.md#project_update) | **PATCH** /projects/{id} | Update a project
569
+ *Phrase::ProjectsApi* | [**projects_list**](docs/ProjectsApi.md#projects_list) | **GET** /projects | List projects
570
+ *Phrase::ReleasesApi* | [**release_create**](docs/ReleasesApi.md#release_create) | **POST** /accounts/{account_id}/distributions/{distribution_id}/releases | Create a release
571
+ *Phrase::ReleasesApi* | [**release_delete**](docs/ReleasesApi.md#release_delete) | **DELETE** /accounts/{account_id}/distributions/{distribution_id}/releases/{id} | Delete a release
572
+ *Phrase::ReleasesApi* | [**release_publish**](docs/ReleasesApi.md#release_publish) | **POST** /accounts/{account_id}/distributions/{distribution_id}/releases/{id}/publish | Publish a release
573
+ *Phrase::ReleasesApi* | [**release_show**](docs/ReleasesApi.md#release_show) | **GET** /accounts/{account_id}/distributions/{distribution_id}/releases/{id} | Get a single release
574
+ *Phrase::ReleasesApi* | [**release_update**](docs/ReleasesApi.md#release_update) | **PATCH** /accounts/{account_id}/distributions/{distribution_id}/releases/{id} | Update a release
575
+ *Phrase::ReleasesApi* | [**releases_list**](docs/ReleasesApi.md#releases_list) | **GET** /accounts/{account_id}/distributions/{distribution_id}/releases | List releases
576
+ *Phrase::ScreenshotMarkersApi* | [**screenshot_marker_create**](docs/ScreenshotMarkersApi.md#screenshot_marker_create) | **POST** /projects/{project_id}/screenshots/{screenshot_id}/markers | Create a screenshot marker
577
+ *Phrase::ScreenshotMarkersApi* | [**screenshot_marker_delete**](docs/ScreenshotMarkersApi.md#screenshot_marker_delete) | **DELETE** /projects/{project_id}/screenshots/{screenshot_id}/markers | Delete a screenshot marker
578
+ *Phrase::ScreenshotMarkersApi* | [**screenshot_marker_show**](docs/ScreenshotMarkersApi.md#screenshot_marker_show) | **GET** /projects/{project_id}/screenshots/{screenshot_id}/markers/{id} | Get a single screenshot marker
579
+ *Phrase::ScreenshotMarkersApi* | [**screenshot_marker_update**](docs/ScreenshotMarkersApi.md#screenshot_marker_update) | **PATCH** /projects/{project_id}/screenshots/{screenshot_id}/markers | Update a screenshot marker
580
+ *Phrase::ScreenshotMarkersApi* | [**screenshot_markers_list**](docs/ScreenshotMarkersApi.md#screenshot_markers_list) | **GET** /projects/{project_id}/screenshots/{id}/markers | List screenshot markers
581
+ *Phrase::ScreenshotsApi* | [**screenshot_create**](docs/ScreenshotsApi.md#screenshot_create) | **POST** /projects/{project_id}/screenshots | Create a screenshot
582
+ *Phrase::ScreenshotsApi* | [**screenshot_delete**](docs/ScreenshotsApi.md#screenshot_delete) | **DELETE** /projects/{project_id}/screenshots/{id} | Delete a screenshot
583
+ *Phrase::ScreenshotsApi* | [**screenshot_show**](docs/ScreenshotsApi.md#screenshot_show) | **GET** /projects/{project_id}/screenshots/{id} | Get a single screenshot
584
+ *Phrase::ScreenshotsApi* | [**screenshot_update**](docs/ScreenshotsApi.md#screenshot_update) | **PATCH** /projects/{project_id}/screenshots/{id} | Update a screenshot
585
+ *Phrase::ScreenshotsApi* | [**screenshots_list**](docs/ScreenshotsApi.md#screenshots_list) | **GET** /projects/{project_id}/screenshots | List screenshots
586
+ *Phrase::SpacesApi* | [**space_create**](docs/SpacesApi.md#space_create) | **POST** /accounts/{account_id}/spaces | Create a Space
587
+ *Phrase::SpacesApi* | [**space_delete**](docs/SpacesApi.md#space_delete) | **DELETE** /accounts/{account_id}/spaces/{id} | Delete Space
588
+ *Phrase::SpacesApi* | [**space_show**](docs/SpacesApi.md#space_show) | **GET** /accounts/{account_id}/spaces/{id} | Get Space
589
+ *Phrase::SpacesApi* | [**space_update**](docs/SpacesApi.md#space_update) | **PATCH** /accounts/{account_id}/spaces/{id} | Update Space
590
+ *Phrase::SpacesApi* | [**spaces_list**](docs/SpacesApi.md#spaces_list) | **GET** /accounts/{account_id}/spaces | List Spaces
591
+ *Phrase::SpacesApi* | [**spaces_projects_create**](docs/SpacesApi.md#spaces_projects_create) | **POST** /accounts/{account_id}/spaces/{space_id}/projects | Add Project
592
+ *Phrase::SpacesApi* | [**spaces_projects_delete**](docs/SpacesApi.md#spaces_projects_delete) | **DELETE** /accounts/{account_id}/spaces/{space_id}/projects/{id} | Remove Project
593
+ *Phrase::SpacesApi* | [**spaces_projects_list**](docs/SpacesApi.md#spaces_projects_list) | **GET** /accounts/{account_id}/spaces/{space_id}/projects | List Projects
594
+ *Phrase::StyleGuidesApi* | [**styleguide_create**](docs/StyleGuidesApi.md#styleguide_create) | **POST** /projects/{project_id}/styleguides | Create a style guide
595
+ *Phrase::StyleGuidesApi* | [**styleguide_delete**](docs/StyleGuidesApi.md#styleguide_delete) | **DELETE** /projects/{project_id}/styleguides/{id} | Delete a style guide
596
+ *Phrase::StyleGuidesApi* | [**styleguide_show**](docs/StyleGuidesApi.md#styleguide_show) | **GET** /projects/{project_id}/styleguides/{id} | Get a single style guide
597
+ *Phrase::StyleGuidesApi* | [**styleguide_update**](docs/StyleGuidesApi.md#styleguide_update) | **PATCH** /projects/{project_id}/styleguides/{id} | Update a style guide
598
+ *Phrase::StyleGuidesApi* | [**styleguides_list**](docs/StyleGuidesApi.md#styleguides_list) | **GET** /projects/{project_id}/styleguides | List style guides
599
+ *Phrase::TagsApi* | [**tag_create**](docs/TagsApi.md#tag_create) | **POST** /projects/{project_id}/tags | Create a tag
600
+ *Phrase::TagsApi* | [**tag_delete**](docs/TagsApi.md#tag_delete) | **DELETE** /projects/{project_id}/tags/{name} | Delete a tag
601
+ *Phrase::TagsApi* | [**tag_show**](docs/TagsApi.md#tag_show) | **GET** /projects/{project_id}/tags/{name} | Get a single tag
602
+ *Phrase::TagsApi* | [**tags_list**](docs/TagsApi.md#tags_list) | **GET** /projects/{project_id}/tags | List tags
603
+ *Phrase::TranslationsApi* | [**translation_create**](docs/TranslationsApi.md#translation_create) | **POST** /projects/{project_id}/translations | Create a translation
604
+ *Phrase::TranslationsApi* | [**translation_exclude**](docs/TranslationsApi.md#translation_exclude) | **PATCH** /projects/{project_id}/translations/{id}/exclude | Exclude a translation from export
605
+ *Phrase::TranslationsApi* | [**translation_include**](docs/TranslationsApi.md#translation_include) | **PATCH** /projects/{project_id}/translations/{id}/include | Revoke exclusion of a translation in export
606
+ *Phrase::TranslationsApi* | [**translation_review**](docs/TranslationsApi.md#translation_review) | **PATCH** /projects/{project_id}/translations/{id}/review | Review a translation
607
+ *Phrase::TranslationsApi* | [**translation_show**](docs/TranslationsApi.md#translation_show) | **GET** /projects/{project_id}/translations/{id} | Get a single translation
608
+ *Phrase::TranslationsApi* | [**translation_unverify**](docs/TranslationsApi.md#translation_unverify) | **PATCH** /projects/{project_id}/translations/{id}/unverify | Mark a translation as unverified
609
+ *Phrase::TranslationsApi* | [**translation_update**](docs/TranslationsApi.md#translation_update) | **PATCH** /projects/{project_id}/translations/{id} | Update a translation
610
+ *Phrase::TranslationsApi* | [**translation_verify**](docs/TranslationsApi.md#translation_verify) | **PATCH** /projects/{project_id}/translations/{id}/verify | Verify a translation
611
+ *Phrase::TranslationsApi* | [**translations_by_key**](docs/TranslationsApi.md#translations_by_key) | **GET** /projects/{project_id}/keys/{key_id}/translations | List translations by key
612
+ *Phrase::TranslationsApi* | [**translations_by_locale**](docs/TranslationsApi.md#translations_by_locale) | **GET** /projects/{project_id}/locales/{locale_id}/translations | List translations by locale
613
+ *Phrase::TranslationsApi* | [**translations_exclude**](docs/TranslationsApi.md#translations_exclude) | **PATCH** /projects/{project_id}/translations/exclude | Set exclude from export flag on translations selected by query
614
+ *Phrase::TranslationsApi* | [**translations_include**](docs/TranslationsApi.md#translations_include) | **PATCH** /projects/{project_id}/translations/include | Remove exlude from import flag from translations selected by query
615
+ *Phrase::TranslationsApi* | [**translations_list**](docs/TranslationsApi.md#translations_list) | **GET** /projects/{project_id}/translations | List all translations
616
+ *Phrase::TranslationsApi* | [**translations_review**](docs/TranslationsApi.md#translations_review) | **PATCH** /projects/{project_id}/translations/review | Review translations selected by query
617
+ *Phrase::TranslationsApi* | [**translations_search**](docs/TranslationsApi.md#translations_search) | **POST** /projects/{project_id}/translations/search | Search translations
618
+ *Phrase::TranslationsApi* | [**translations_unverify**](docs/TranslationsApi.md#translations_unverify) | **PATCH** /projects/{project_id}/translations/unverify | Mark translations selected by query as unverified
619
+ *Phrase::TranslationsApi* | [**translations_verify**](docs/TranslationsApi.md#translations_verify) | **PATCH** /projects/{project_id}/translations/verify | Verify translations selected by query
620
+ *Phrase::UploadsApi* | [**upload_create**](docs/UploadsApi.md#upload_create) | **POST** /projects/{project_id}/uploads | Upload a new file
621
+ *Phrase::UploadsApi* | [**upload_show**](docs/UploadsApi.md#upload_show) | **GET** /projects/{project_id}/uploads/{id} | View upload details
622
+ *Phrase::UploadsApi* | [**uploads_list**](docs/UploadsApi.md#uploads_list) | **GET** /projects/{project_id}/uploads | List uploads
623
+ *Phrase::UsersApi* | [**show_user**](docs/UsersApi.md#show_user) | **GET** /user | Show current User
624
+ *Phrase::VersionsHistoryApi* | [**version_show**](docs/VersionsHistoryApi.md#version_show) | **GET** /projects/{project_id}/translations/{translation_id}/versions/{id} | Get a single version
625
+ *Phrase::VersionsHistoryApi* | [**versions_list**](docs/VersionsHistoryApi.md#versions_list) | **GET** /projects/{project_id}/translations/{translation_id}/versions | List all versions
626
+ *Phrase::WebhooksApi* | [**webhook_create**](docs/WebhooksApi.md#webhook_create) | **POST** /projects/{project_id}/webhooks | Create a webhook
627
+ *Phrase::WebhooksApi* | [**webhook_delete**](docs/WebhooksApi.md#webhook_delete) | **DELETE** /projects/{project_id}/webhooks/{id} | Delete a webhook
628
+ *Phrase::WebhooksApi* | [**webhook_show**](docs/WebhooksApi.md#webhook_show) | **GET** /projects/{project_id}/webhooks/{id} | Get a single webhook
629
+ *Phrase::WebhooksApi* | [**webhook_test**](docs/WebhooksApi.md#webhook_test) | **POST** /projects/{project_id}/webhooks/{id}/test | Test a webhook
630
+ *Phrase::WebhooksApi* | [**webhook_update**](docs/WebhooksApi.md#webhook_update) | **PATCH** /projects/{project_id}/webhooks/{id} | Update a webhook
631
+ *Phrase::WebhooksApi* | [**webhooks_list**](docs/WebhooksApi.md#webhooks_list) | **GET** /projects/{project_id}/webhooks | List webhooks
632
+
633
+
634
+ ## Documentation for Models
635
+
636
+ - [Phrase::Account](docs/Account.md)
637
+ - [Phrase::AccountDetails](docs/AccountDetails.md)
638
+ - [Phrase::AccountDetails1](docs/AccountDetails1.md)
639
+ - [Phrase::AffectedCount](docs/AffectedCount.md)
640
+ - [Phrase::AffectedResources](docs/AffectedResources.md)
641
+ - [Phrase::Authorization](docs/Authorization.md)
642
+ - [Phrase::AuthorizationCreateParameters](docs/AuthorizationCreateParameters.md)
643
+ - [Phrase::AuthorizationUpdateParameters](docs/AuthorizationUpdateParameters.md)
644
+ - [Phrase::AuthorizationWithToken](docs/AuthorizationWithToken.md)
645
+ - [Phrase::AuthorizationWithToken1](docs/AuthorizationWithToken1.md)
646
+ - [Phrase::BitbucketSync](docs/BitbucketSync.md)
647
+ - [Phrase::BitbucketSyncExportParameters](docs/BitbucketSyncExportParameters.md)
648
+ - [Phrase::BitbucketSyncExportResponse](docs/BitbucketSyncExportResponse.md)
649
+ - [Phrase::BitbucketSyncImportParameters](docs/BitbucketSyncImportParameters.md)
650
+ - [Phrase::BlacklistedKey](docs/BlacklistedKey.md)
651
+ - [Phrase::BlacklistedKeyCreateParameters](docs/BlacklistedKeyCreateParameters.md)
652
+ - [Phrase::BlacklistedKeyUpdateParameters](docs/BlacklistedKeyUpdateParameters.md)
653
+ - [Phrase::Branch](docs/Branch.md)
654
+ - [Phrase::BranchCreateParameters](docs/BranchCreateParameters.md)
655
+ - [Phrase::BranchMergeParameters](docs/BranchMergeParameters.md)
656
+ - [Phrase::BranchUpdateParameters](docs/BranchUpdateParameters.md)
657
+ - [Phrase::Comment](docs/Comment.md)
658
+ - [Phrase::CommentCreateParameters](docs/CommentCreateParameters.md)
659
+ - [Phrase::CommentMarkReadParameters](docs/CommentMarkReadParameters.md)
660
+ - [Phrase::CommentUpdateParameters](docs/CommentUpdateParameters.md)
661
+ - [Phrase::Distribution](docs/Distribution.md)
662
+ - [Phrase::DistributionCreateParameters](docs/DistributionCreateParameters.md)
663
+ - [Phrase::DistributionPreview](docs/DistributionPreview.md)
664
+ - [Phrase::DistributionUpdateParameters](docs/DistributionUpdateParameters.md)
665
+ - [Phrase::Format](docs/Format.md)
666
+ - [Phrase::GitlabSync](docs/GitlabSync.md)
667
+ - [Phrase::GitlabSyncExport](docs/GitlabSyncExport.md)
668
+ - [Phrase::GitlabSyncExportParameters](docs/GitlabSyncExportParameters.md)
669
+ - [Phrase::GitlabSyncHistory](docs/GitlabSyncHistory.md)
670
+ - [Phrase::GitlabSyncImportParameters](docs/GitlabSyncImportParameters.md)
671
+ - [Phrase::Glossary](docs/Glossary.md)
672
+ - [Phrase::GlossaryCreateParameters](docs/GlossaryCreateParameters.md)
673
+ - [Phrase::GlossaryTerm](docs/GlossaryTerm.md)
674
+ - [Phrase::GlossaryTermCreateParameters](docs/GlossaryTermCreateParameters.md)
675
+ - [Phrase::GlossaryTermTranslation](docs/GlossaryTermTranslation.md)
676
+ - [Phrase::GlossaryTermTranslationCreateParameters](docs/GlossaryTermTranslationCreateParameters.md)
677
+ - [Phrase::GlossaryTermTranslationUpdateParameters](docs/GlossaryTermTranslationUpdateParameters.md)
678
+ - [Phrase::GlossaryTermUpdateParameters](docs/GlossaryTermUpdateParameters.md)
679
+ - [Phrase::GlossaryUpdateParameters](docs/GlossaryUpdateParameters.md)
680
+ - [Phrase::Invitation](docs/Invitation.md)
681
+ - [Phrase::InvitationCreateParameters](docs/InvitationCreateParameters.md)
682
+ - [Phrase::InvitationUpdateParameters](docs/InvitationUpdateParameters.md)
683
+ - [Phrase::Job](docs/Job.md)
684
+ - [Phrase::JobCompleteParameters](docs/JobCompleteParameters.md)
685
+ - [Phrase::JobCreateParameters](docs/JobCreateParameters.md)
686
+ - [Phrase::JobDetails](docs/JobDetails.md)
687
+ - [Phrase::JobDetails1](docs/JobDetails1.md)
688
+ - [Phrase::JobKeysCreateParameters](docs/JobKeysCreateParameters.md)
689
+ - [Phrase::JobLocale](docs/JobLocale.md)
690
+ - [Phrase::JobLocaleCompleteParameters](docs/JobLocaleCompleteParameters.md)
691
+ - [Phrase::JobLocaleReopenParameters](docs/JobLocaleReopenParameters.md)
692
+ - [Phrase::JobLocaleUpdateParameters](docs/JobLocaleUpdateParameters.md)
693
+ - [Phrase::JobLocalesCreateParameters](docs/JobLocalesCreateParameters.md)
694
+ - [Phrase::JobPreview](docs/JobPreview.md)
695
+ - [Phrase::JobReopenParameters](docs/JobReopenParameters.md)
696
+ - [Phrase::JobStartParameters](docs/JobStartParameters.md)
697
+ - [Phrase::JobUpdateParameters](docs/JobUpdateParameters.md)
698
+ - [Phrase::KeyCreateParameters](docs/KeyCreateParameters.md)
699
+ - [Phrase::KeyPreview](docs/KeyPreview.md)
700
+ - [Phrase::KeyUpdateParameters](docs/KeyUpdateParameters.md)
701
+ - [Phrase::KeysSearchParameters](docs/KeysSearchParameters.md)
702
+ - [Phrase::KeysTagParameters](docs/KeysTagParameters.md)
703
+ - [Phrase::KeysUntagParameters](docs/KeysUntagParameters.md)
704
+ - [Phrase::Locale](docs/Locale.md)
705
+ - [Phrase::LocaleCreateParameters](docs/LocaleCreateParameters.md)
706
+ - [Phrase::LocaleDetails](docs/LocaleDetails.md)
707
+ - [Phrase::LocaleDetails1](docs/LocaleDetails1.md)
708
+ - [Phrase::LocalePreview](docs/LocalePreview.md)
709
+ - [Phrase::LocaleStatistics](docs/LocaleStatistics.md)
710
+ - [Phrase::LocaleUpdateParameters](docs/LocaleUpdateParameters.md)
711
+ - [Phrase::Member](docs/Member.md)
712
+ - [Phrase::MemberUpdateParameters](docs/MemberUpdateParameters.md)
713
+ - [Phrase::OrderConfirmParameters](docs/OrderConfirmParameters.md)
714
+ - [Phrase::OrderCreateParameters](docs/OrderCreateParameters.md)
715
+ - [Phrase::Project](docs/Project.md)
716
+ - [Phrase::ProjectCreateParameters](docs/ProjectCreateParameters.md)
717
+ - [Phrase::ProjectDetails](docs/ProjectDetails.md)
718
+ - [Phrase::ProjectDetails1](docs/ProjectDetails1.md)
719
+ - [Phrase::ProjectLocales](docs/ProjectLocales.md)
720
+ - [Phrase::ProjectLocales1](docs/ProjectLocales1.md)
721
+ - [Phrase::ProjectShort](docs/ProjectShort.md)
722
+ - [Phrase::ProjectUpdateParameters](docs/ProjectUpdateParameters.md)
723
+ - [Phrase::Release](docs/Release.md)
724
+ - [Phrase::ReleaseCreateParameters](docs/ReleaseCreateParameters.md)
725
+ - [Phrase::ReleasePreview](docs/ReleasePreview.md)
726
+ - [Phrase::ReleaseUpdateParameters](docs/ReleaseUpdateParameters.md)
727
+ - [Phrase::Screenshot](docs/Screenshot.md)
728
+ - [Phrase::ScreenshotCreateParameters](docs/ScreenshotCreateParameters.md)
729
+ - [Phrase::ScreenshotMarker](docs/ScreenshotMarker.md)
730
+ - [Phrase::ScreenshotMarkerCreateParameters](docs/ScreenshotMarkerCreateParameters.md)
731
+ - [Phrase::ScreenshotMarkerUpdateParameters](docs/ScreenshotMarkerUpdateParameters.md)
732
+ - [Phrase::ScreenshotUpdateParameters](docs/ScreenshotUpdateParameters.md)
733
+ - [Phrase::Space](docs/Space.md)
734
+ - [Phrase::SpaceCreateParameters](docs/SpaceCreateParameters.md)
735
+ - [Phrase::SpaceUpdateParameters](docs/SpaceUpdateParameters.md)
736
+ - [Phrase::SpacesProjectsCreateParameters](docs/SpacesProjectsCreateParameters.md)
737
+ - [Phrase::Styleguide](docs/Styleguide.md)
738
+ - [Phrase::StyleguideCreateParameters](docs/StyleguideCreateParameters.md)
739
+ - [Phrase::StyleguideDetails](docs/StyleguideDetails.md)
740
+ - [Phrase::StyleguideDetails1](docs/StyleguideDetails1.md)
741
+ - [Phrase::StyleguidePreview](docs/StyleguidePreview.md)
742
+ - [Phrase::StyleguideUpdateParameters](docs/StyleguideUpdateParameters.md)
743
+ - [Phrase::Tag](docs/Tag.md)
744
+ - [Phrase::TagCreateParameters](docs/TagCreateParameters.md)
745
+ - [Phrase::TagWithStats](docs/TagWithStats.md)
746
+ - [Phrase::TagWithStats1](docs/TagWithStats1.md)
747
+ - [Phrase::TagWithStats1Statistics](docs/TagWithStats1Statistics.md)
748
+ - [Phrase::TagWithStats1Statistics1](docs/TagWithStats1Statistics1.md)
749
+ - [Phrase::Translation](docs/Translation.md)
750
+ - [Phrase::TranslationCreateParameters](docs/TranslationCreateParameters.md)
751
+ - [Phrase::TranslationDetails](docs/TranslationDetails.md)
752
+ - [Phrase::TranslationDetails1](docs/TranslationDetails1.md)
753
+ - [Phrase::TranslationExcludeParameters](docs/TranslationExcludeParameters.md)
754
+ - [Phrase::TranslationIncludeParameters](docs/TranslationIncludeParameters.md)
755
+ - [Phrase::TranslationKey](docs/TranslationKey.md)
756
+ - [Phrase::TranslationKeyDetails](docs/TranslationKeyDetails.md)
757
+ - [Phrase::TranslationKeyDetails1](docs/TranslationKeyDetails1.md)
758
+ - [Phrase::TranslationOrder](docs/TranslationOrder.md)
759
+ - [Phrase::TranslationReviewParameters](docs/TranslationReviewParameters.md)
760
+ - [Phrase::TranslationUnverifyParameters](docs/TranslationUnverifyParameters.md)
761
+ - [Phrase::TranslationUpdateParameters](docs/TranslationUpdateParameters.md)
762
+ - [Phrase::TranslationVerifyParameters](docs/TranslationVerifyParameters.md)
763
+ - [Phrase::TranslationVersion](docs/TranslationVersion.md)
764
+ - [Phrase::TranslationVersionWithUser](docs/TranslationVersionWithUser.md)
765
+ - [Phrase::TranslationVersionWithUser1](docs/TranslationVersionWithUser1.md)
766
+ - [Phrase::TranslationsExcludeParameters](docs/TranslationsExcludeParameters.md)
767
+ - [Phrase::TranslationsIncludeParameters](docs/TranslationsIncludeParameters.md)
768
+ - [Phrase::TranslationsReviewParameters](docs/TranslationsReviewParameters.md)
769
+ - [Phrase::TranslationsSearchParameters](docs/TranslationsSearchParameters.md)
770
+ - [Phrase::TranslationsUnverifyParameters](docs/TranslationsUnverifyParameters.md)
771
+ - [Phrase::TranslationsVerifyParameters](docs/TranslationsVerifyParameters.md)
772
+ - [Phrase::Upload](docs/Upload.md)
773
+ - [Phrase::UploadCreateParameters](docs/UploadCreateParameters.md)
774
+ - [Phrase::UploadSummary](docs/UploadSummary.md)
775
+ - [Phrase::User](docs/User.md)
776
+ - [Phrase::UserPreview](docs/UserPreview.md)
777
+ - [Phrase::Webhook](docs/Webhook.md)
778
+ - [Phrase::WebhookCreateParameters](docs/WebhookCreateParameters.md)
779
+ - [Phrase::WebhookUpdateParameters](docs/WebhookUpdateParameters.md)
780
+
781
+
782
+ ## Documentation for Authorization
783
+
784
+
785
+ ### Basic
786
+
787
+ - **Type**: HTTP basic authentication
788
+
789
+ ### Token
790
+
791
+
792
+ - **Type**: API key
793
+ - **API key parameter name**: Authorization
794
+ - **Location**: HTTP header
299
795
 
300
- ## Partner-Integrations
301
- * [Integrate PhraseApp with Ruby Motion](https://github.com/phrase/motion-phrase)
302
- * [Integrate PhraseApp as a Heroku Add-on](https://addons.heroku.com/phrase)
303
- * [Integrate PhraseApp as a Cloudcontrol Add-on](https://phraseapp.com/docs/cloudcontrol/introduction)