{"id":41656240,"url":"https://github.com/tramlinehq/applelink","last_synced_at":"2026-01-24T16:28:11.273Z","repository":{"id":83151670,"uuid":"593622313","full_name":"tramlinehq/applelink","owner":"tramlinehq","description":"Practical API Recipes for App Store Connect Workflows","archived":false,"fork":false,"pushed_at":"2026-01-21T07:14:29.000Z","size":179,"stargazers_count":33,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-21T19:05:09.359Z","etag":null,"topics":["app-store","app-store-connect","applestoreconnect","appstore-api","fastlane","fastlane-ios","hanami-api","ruby"],"latest_commit_sha":null,"homepage":"https://www.tramline.app/blog/applelink-practical-api-recipes-for-app-store-connect-workflows","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tramlinehq.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-26T13:21:49.000Z","updated_at":"2026-01-21T07:14:33.000Z","dependencies_parsed_at":"2023-12-11T17:30:14.159Z","dependency_job_id":"0c481711-a75b-4c58-b540-9bc6529dd38d","html_url":"https://github.com/tramlinehq/applelink","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tramlinehq/applelink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramlinehq%2Fapplelink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramlinehq%2Fapplelink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramlinehq%2Fapplelink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramlinehq%2Fapplelink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tramlinehq","download_url":"https://codeload.github.com/tramlinehq/applelink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tramlinehq%2Fapplelink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28731234,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-store","app-store-connect","applestoreconnect","appstore-api","fastlane","fastlane-ios","hanami-api","ruby"],"created_at":"2026-01-24T16:28:11.202Z","updated_at":"2026-01-24T16:28:11.260Z","avatar_url":"https://github.com/tramlinehq.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg width=\"2428\" alt=\"applelink-banner-shado\" src=\"https://user-images.githubusercontent.com/50663/232988897-4f3bac02-0208-446e-a8b2-5709039f36fb.png\"\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/testdouble/standard\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/code_style-standard-brightgreen.svg\" /\u003e\n  \u003c/a\u003e\n\n  \u003ca href=\"CODE_OF_CONDUCT.md\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/Contributor%20Covenant-2.0-4baaaa.svg\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cstrong\u003ePractical recipes over the App Store Connect API via Fastlane\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  Read more about the why in this \u003ca href=\"https://www.tramline.app/blog/applelink-practical-api-recipes-for-app-store-connect-workflows\"\u003eblog post\u003c/a\u003e.\n\u003c/p\u003e\n\n## Rationale\n\nApplelink is a small, self-contained, rack-based service using [Hanami::API](https://github.com/hanami/api), that wraps over [Spaceship](https://spaceship.airforce) and exposes some nice common recipes as RESTful endpoints in an entirely stateless fashion.\n\nThese are based on the needs of the framework that [Tramline](https://tramline.app) implements over App Store. The API pulls its weight so Tramline has to do as little as possible. Currently, it exposes [13 API endpoints](#api).\n\nIn Applelink, a complex recipe, such as [release/prepare](#prepare-a-release-for-the-app), will perform the following tasks all bunched up:\n- Ensure that there is an App Store version that we can use for the release, or create a new one\n- Update the release metadata for that release version\n- Enable phased releases, if necessary\n\nSimilarly a simple fetch endpoint like [release/live](#fetch-the-status-of-current-live-release) will give you the current status of the latest release.\n\nApplelink is a separate service that is not reliant on Tramline’s internal state. It can be used in a standalone way, for e.g. from a CI workflow, or a Slack bot that spits out app release information.\n\n## Development\n\n### Running\n\n```bash\nbundle install\njust start\njust lint # run lint\n```\n\n### Auth token\n\nAll APIs (except ping) are secured by JWT auth. Please use standard authorization header:\n```\nAuthorization: Bearer \u003cAUTH_TOKEN\u003e\n```\n\nThe `AUTH_TOKEN` can be generated using `HS256` algo and the secret for generating and verifying the token is shared between Tramline/any other client and applelink.\n\nThese can be configured using the following env variables:\n\n```text\nAUTH_ISSUER=tramline.dev\nAUTH_SECRET=password\nAUTH_AUD=applelink\n```\nThese values can be set to whatever you want, as long as they are same between the caller and Applelink.\n\nExample code for generating the token can be taken from [this file](https://github.com/tramlinehq/tramline/blob/main/app/libs/installations/apple/app_store_connect/jwt.rb) in the Tramline repo.\n\nIn addition to the auth token, you also need the App Store Connect JWT token which is documented [here](https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests).\n\n#### Internal API\n\nFor the development environment, you can generate the above tokens using the following helper API:\n\n```shell\ncurl -i -X GET http://127.0.0.1:4000/internal/keys?key_id=KEY_ID\u0026issuer_id=ISSUER_ID\n\n{\n  \"store_token\": \"eyJraWQiOiJLRVlfSUQiLCJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NiJ9.eyJpc3MiOiJJU1NVRVJfSUQiLCJpYXQiOjE2ODIwNjA1MzYsImV4cCI6MTY4MjA2MTAzNiwiYXVkIjoiYXBwc3RvcmVjb25uZWN0LXYxIn0.-pFtamhBjsNKLr5Z2Ft2tW9H2NojBF1d8RqQBr7nNZF43KUNGMQIPQyp9BCSrFXJop1k7hk7jJstXRJ-WMH_8Q\",\n  \"auth_token\": \"eyJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2ODIwNjA1MzYsImV4cCI6MTY4MjA2MTUzNiwiYXVkIjoiYXBwbGVsaW5rIiwiaXNzIjoidHJhbWxpbmUuZGV2In0.HDJJw6o6YK-Jmzpl0Xu4SmlTcGtNeEFI0VIg6fqitdw\"\n}\n```\nThis expects the correct env variables to be set for `AUTH_TOKEN` and the App Store Connect `key.p8` file to be present in the Applelink directory along with the relevant `KEY_ID` and `ISSUER_iD` being passed to the API.\n\n## API\n\nOne can also use [requests](test/requests) in [restclient-mode](https://github.com/pashky/restclient.el) to interactively play around with the entire API including fetching and refreshing tokens.\n\n### Headers\n\n| Name | Description |\n|------|-------------|\n| `Authorization` | Bearer token signed by tramline |\n| `Content-Type` | Most endpoints expect `application/json` |\n| `X-AppStoreConnect-Key-Id` | App Store Connect key id acquired from the portal |\n| `X-AppStoreConnect-Issuer-Id` | App Store Connect issuer id acquired from the portal |\n| `X-AppStoreConnect-Token` | App Store Connect expirable JWT signed using the key-id and issuer-id |\n\n#### Fetch metadata for an App\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e {\n\u003e \"id\": \"1658845856\",\n\u003e \"name\": \"Ueno\",\n\u003e \"bundle_id\": \"com.tramline.ueno\",\n\u003e \"sku\": \"com.tramline.ueno\"\n\u003e }\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch live info for an app\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/current_status\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/:bundle-id/current_status\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e [\n\u003e   {\n\u003e     \"name\": \"Big External Group\",\n\u003e     \"builds\": [\n\u003e       {\n\u003e         \"id\": \"da720570-cb6e-4b25-b82f-790045a6038e\",\n\u003e         \"build_number\": \"10001\",\n\u003e         \"status\": \"BETA_APPROVED\",\n\u003e         \"version_string\": \"1.46.0\",\n\u003e         \"release_date\": \"2023-04-17T07:03:01-07:00\"\n\u003e       },\n\u003e       {\n\u003e         \"id\": \"1c4d0eb3-5cec-47f2-a843-949b12a69784\",\n\u003e         \"build_number\": \"9103\",\n\u003e         \"status\": \"BETA_APPROVED\",\n\u003e         \"version_string\": \"1.45.0\",\n\u003e         \"release_date\": \"2023-04-13T00:09:38-07:00\"\n\u003e       }\n\u003e     ]\n\u003e   },\n\u003e   {\n\u003e     \"name\": \"Small External Group\",\n\u003e     \"builds\": [\n\u003e       {\n\u003e         \"id\": \"e1aa4795-0df2-4d76-b899-8ee95fb8589e\",\n\u003e         \"build_number\": \"10002\",\n\u003e         \"status\": \"BETA_APPROVED\",\n\u003e         \"version_string\": \"1.47.0\",\n\u003e         \"release_date\": \"2023-04-17T10:00:19-07:00\"\n\u003e       },\n\u003e       {\n\u003e         \"id\": \"da720570-cb6e-4b25-b82f-790045a6038e\",\n\u003e         \"build_number\": \"10001\",\n\u003e         \"status\": \"BETA_APPROVED\",\n\u003e         \"version_string\": \"1.46.0\",\n\u003e         \"release_date\": \"2023-04-17T07:03:01-07:00\"\n\u003e       }\n\u003e     ]\n\u003e   },\n\u003e   {\n\u003e     \"name\": \"production\",\n\u003e     \"builds\": [\n\u003e       {\n\u003e         \"id\": \"bf11d7a3-fe1c-4c71-acae-a9dc8af57907\",\n\u003e         \"version_string\": \"1.44.1\",\n\u003e         \"status\": \"READY_FOR_SALE\",\n\u003e         \"release_date\": \"2023-04-11T22:45:25-07:00\",\n\u003e         \"build_number\": \"9086\"\n\u003e       }\n\u003e     ]\n\u003e   }\n\u003e ]\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch all beta groups for an app\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/groups\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/groups\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e [{\n\u003e\t\t\"name\": \"The Pledge\",\n\u003e\t\t\"id\": \"fcacfdf7-db62-44af-a0cb-0676e17c251b\",\n\u003e\t\t\"internal\": true\n\u003e\t},\n\u003e\t{\n\u003e\t\t\"name\": \"The Prestige\",\n\u003e\t\t\"id\": \"2cd6be09-d959-4ed3-a4e7-db8cabbe44d0\",\n\u003e\t\t\"internal\": true\n\u003e\t},\n\u003e\t{\n\u003e\t\t\"name\": \"The Trick\",\n\u003e\t\t\"id\": \"dab66de0-7af2-48ae-97af-cc8dfdbde51d\",\n\u003e\t\t\"internal\": true\n\u003e\t},\n\u003e\t{\n\u003e\t\t\"name\": \"Big External Group\",\n\u003e\t\t\"id\": \"3bc1ca3e-1d4f-4478-8f38-2dcae4dcbb69\",\n\u003e\t\t\"internal\": false\n\u003e\t},\n\u003e\t{\n\u003e\t\t\"name\": \"Small External Group\",\n\u003e\t\t\"id\": \"dc64b810-1157-4228-825b-eb9e95cc8fba\",\n\u003e\t\t\"internal\": false\n\u003e\t}]\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch a single build for an app\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/builds/:build-number\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\u003e | build-number | required  | integer   | build number  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/builds/9018\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e {\n\u003e \"id\": \"bc90d402-ed0c-4d05-887f-d300abc104e9\",\n\u003e \"build_number\": \"9018\",\n\u003e \"beta_internal_state\": \"IN_BETA_TESTING\",\n\u003e \"beta_external_state\": \"BETA_APPROVED\",\n\u003e \"uploaded_date\": \"2023-02-22T22:27:48-08:00\",\n\u003e \"expired\": false,\n\u003e \"processing_state\": \"VALID\",\n\u003e \"version_string\": \"1.5.0\"\n\u003e }\n\u003e ```\n\n\n\u003c/details\u003e\n\n#### Update the test notes for a build in TestFlight\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/builds/:build-number\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### JSON Parameters\n\n\u003e | name |  type     | data type               | description                                      |\n\u003e |------|-----------|--------------------------------------------------|-------------------------|\n\u003e | notes    | required  | string   | \"test the feature to add release notes to builds\" |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e -d '{\"notes\": \"test the feature to add release notes to builds\"}' \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/builds/latest\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch the latest build for an app\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/builds/latest\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/builds/latest\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e {\n\u003e \"id\": \"bc90d402-ed0c-4d05-887f-d300abc104e9\",\n\u003e \"build_number\": \"9018\",\n\u003e \"beta_internal_state\": \"IN_BETA_TESTING\",\n\u003e \"beta_external_state\": \"BETA_APPROVED\",\n\u003e \"uploaded_date\": \"2023-02-22T22:27:48-08:00\",\n\u003e \"expired\": false,\n\u003e \"processing_state\": \"VALID\",\n\u003e \"version_string\": \"1.5.0\"\n\u003e }\n\u003e ```\n\n\n\u003c/details\u003e\n\n#### Assign a build to a beta group\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/groups/:group-id/add_build\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\u003e | build-number | required  | integer   | build number  |\n\u003e | group-id | required  | string   | beta group id (uuid)  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/groups/3bc1ca3e-1d4f-4478-8f38-2dcae4dcbb69/add_build\n\u003e ```\n\n\u003c/details\u003e\n\n#### Prepare a release for the app\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePOST\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/prepare\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### JSON Parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | build-number | required  | integer   | build number  |\n\u003e | version | required  | string   | version name  |\n\u003e | is_phased_release | optional  | boolean   | flag to enable or disable phased release, defaults to false  |\n\u003e | metadata | required  | hash   | { \"promotional_text\": \"this is the app store version promo text\", \"whats_new\": \"release notes\"}  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X POST \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e -d '{\"build_number\": 9018, \"version\": \"1.6.2\", \"is_phased_release\": true, \"metadata\": {\"promotional_text\": \"app store version promo text\", \"whats_new\": \"release notes\"} }' \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/prepare\n\u003e ```\n\n\u003c/details\u003e\n\n#### Submit a release for review\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/submit\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### JSON Parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | build-number | required  | integer   | build number  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e -d '{\"build_number\": 9018}' \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/submit\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch the status of current inflight release\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/release?build_number=:build-number\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Query parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | build-number | required  | integer   | build number  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release?build_number=500\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e {\n\u003e   \"id\": \"bd31faa6-6a9a-4958-82de-d271ddc639a8\",\n\u003e   \"version_name\": \"1.8.0\",\n\u003e   \"app_store_state\": \"PENDING_DEVELOPER_RELEASE\",\n\u003e   \"release_type\": \"MANUAL\",\n\u003e   \"earliest_release_date\": null,\n\u003e   \"downloadable\": true,\n\u003e   \"created_date\": \"2023-02-25T03:02:46-08:00\",\n\u003e   \"build_number\": \"33417\",\n\u003e   \"build_id\": \"31aafef2-d5fb-45d4-9b02-f0ab5911c1b2\",\n\u003e   \"phased_release\": {\n\u003e     \"id\": \"bd31faa6-6a9a-4958-82de-d271ddc639a8\",\n\u003e     \"phased_release_state\": \"INACTIVE\",\n\u003e     \"start_date\": \"2023-02-28T06:38:39Z\",\n\u003e     \"total_pause_duration\": 0,\n\u003e     \"current_day_number\": 0\n\u003e   },\n\u003e   \"details\": {\n\u003e     \"id\": \"ef59d099-6154-4ccb-826b-3ffe6005ed59\",\n\u003e     \"description\": \"The true Yamanote line aural aesthetic.\",\n\u003e     \"locale\": \"en-US\",\n\u003e     \"keywords\": \"japanese, aural, subway\",\n\u003e     \"marketing_url\": null,\n\u003e     \"promotional_text\": null,\n\u003e     \"support_url\": \"http://tramline.app\",\n\u003e     \"whats_new\": \"We now have the total distance covered by each station across the line!\"\n\u003e   }\n\u003e }\n\u003e ```\n\n\u003c/details\u003e\n\n\n#### Start a release after review is approved\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/start\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### JSON Parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | build-number | required  | integer   | build number  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e -d '{\"build_number\": 9018}' \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/start\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fetch the status of current live release\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003eGET\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle-id/release/live\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X GET \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/live\n\u003e ```\n\n##### Success response\n\u003e ```json\n\u003e {\n\u003e   \"id\": \"bd31faa6-6a9a-4958-82de-d271ddc639a8\",\n\u003e   \"version_name\": \"1.8.0\",\n\u003e   \"app_store_state\": \"READY_FOR_SALE\",\n\u003e   \"release_type\": \"MANUAL\",\n\u003e   \"earliest_release_date\": null,\n\u003e   \"downloadable\": true,\n\u003e   \"created_date\": \"2023-02-25T03:02:46-08:00\",\n\u003e   \"build_number\": \"33417\",\n\u003e   \"build_id\": \"31aafef2-d5fb-45d4-9b02-f0ab5911c1b2\",\n\u003e   \"phased_release\": {\n\u003e     \"id\": \"bd31faa6-6a9a-4958-82de-d271ddc639a8\",\n\u003e     \"phased_release_state\": \"COMPLETE\",\n\u003e     \"start_date\": \"2023-02-28T06:38:39Z\",\n\u003e     \"total_pause_duration\": 0,\n\u003e     \"current_day_number\": 4\n\u003e   },\n\u003e   \"details\": {\n\u003e     \"id\": \"ef59d099-6154-4ccb-826b-3ffe6005ed59\",\n\u003e     \"description\": \"The true Yamanote line aural aesthetic.\",\n\u003e     \"locale\": \"en-US\",\n\u003e     \"keywords\": \"japanese, aural, subway\",\n\u003e     \"marketing_url\": null,\n\u003e     \"promotional_text\": null,\n\u003e     \"support_url\": \"http://tramline.app\",\n\u003e     \"whats_new\": \"We now have the total distance covered by each station across the line!\"\n\u003e   }\n\u003e }\n\u003e ```\n\n\n\u003c/details\u003e\n\n#### Pause the rollout of current live release\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/live/rollout/pause\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/live/rollout/pause\n\u003e ```\n\n\u003c/details\u003e\n\n#### Resume the rollout of current live release\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/live/rollout/resume\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/live/rollout/resume\n\u003e ```\n\n\u003c/details\u003e\n\n#### Fully release the current live release to all users\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/live/rollout/complete\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/live/rollout/complete\n\u003e ```\n\n\u003c/details\u003e\n\n#### Halt the current live release from distribution\n\n\u003cdetails\u003e\n \u003csummary\u003e\u003ccode\u003ePATCH\u003c/code\u003e \u003ccode\u003e\u003cb\u003e/apple/connect/v1/apps/:bundle_id/release/live/rollout/halt\u003c/b\u003e\u003c/code\u003e\u003c/summary\u003e\n\n##### Path parameters\n\n\u003e | name      |  type     | data type               | description                                                           |\n\u003e |-----------|-----------|-------------------------|-----------------------------------------------------------------------|\n\u003e | bundle-id | required  | string   | app's unique identifier  |\n\n##### Example cURL\n\n\u003e ```bash\n\u003e curl -X PATCH \\\n\u003e -H \"Authorization: Bearer token\" \\\n\u003e -H \"X-AppStoreConnect-Key-Id: key-id\" \\\n\u003e -H \"X-AppStoreConnect-Issuer-Id: iss-id\" \\\n\u003e -H \"X-AppStoreConnect-Token: token\" \\\n\u003e -H \"Content-Type: application/json\" \\\n\u003e http://localhost:4000/apple/connect/v1/apps/com.tramline.app/release/live/rollout/halt\n\u003e ```\n\n\u003c/details\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftramlinehq%2Fapplelink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftramlinehq%2Fapplelink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftramlinehq%2Fapplelink/lists"}