{"id":19992739,"url":"https://github.com/telstra/MessagingAPI-SDK-dotnet","last_synced_at":"2025-05-04T11:31:49.329Z","repository":{"id":68954673,"uuid":"109788282","full_name":"telstra/MessagingAPI-SDK-dotnet","owner":"telstra","description":"Telstra Messaging SDK - .Net LIbrary","archived":false,"fork":false,"pushed_at":"2024-08-20T06:00:08.000Z","size":152,"stargazers_count":3,"open_issues_count":5,"forks_count":7,"subscribers_count":12,"default_branch":"release/msg-v3","last_synced_at":"2024-11-13T04:55:38.820Z","etag":null,"topics":["dotnet","mms","sdk","sdk-dotnet","sms","telstradev"],"latest_commit_sha":null,"homepage":"https://dev.telstra.com","language":"C#","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/telstra.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":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-07T04:51:05.000Z","updated_at":"2024-08-16T07:43:08.000Z","dependencies_parsed_at":"2023-12-13T23:30:11.333Z","dependency_job_id":"34915003-2d95-4c59-aab2-36cc9889ca36","html_url":"https://github.com/telstra/MessagingAPI-SDK-dotnet","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telstra%2FMessagingAPI-SDK-dotnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telstra%2FMessagingAPI-SDK-dotnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telstra%2FMessagingAPI-SDK-dotnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telstra%2FMessagingAPI-SDK-dotnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/telstra","download_url":"https://codeload.github.com/telstra/MessagingAPI-SDK-dotnet/tar.gz/refs/heads/release/msg-v3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252329660,"owners_count":21730660,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["dotnet","mms","sdk","sdk-dotnet","sms","telstradev"],"created_at":"2024-11-13T04:52:18.094Z","updated_at":"2025-05-04T11:31:48.477Z","avatar_url":"https://github.com/telstra.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"# com.telstra.messaging - the C# library for the Messaging API v3.1.2\n\nSend and receive SMS \u0026 MMS programmatically, leveraging Australia's leading mobile network.\nWith Telstra's Messaging API, we take out the complexity to allow seamless messaging integration into your app, with just a few lines of code.\nOur REST API is enterprise grade, allowing you to communicate with engaging SMS \u0026 MMS messaging in your web and mobile apps in near real-time on a global scale.\n\n- API version: 3.0.0\n- SDK version: 3.1.2\n\n\u003ca id=\"frameworks-supported\"\u003e\u003c/a\u003e\n## Frameworks supported\n\n\u003ca id=\"dependencies\"\u003e\u003c/a\u003e\n## Dependencies\n\n- [RestSharp](https://www.nuget.org/packages/RestSharp) - 106.13.0 or later\n- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/) - 13.0.2 or later\n- [JsonSubTypes](https://www.nuget.org/packages/JsonSubTypes/) - 1.8.0 or later\n- [System.ComponentModel.Annotations](https://www.nuget.org/packages/System.ComponentModel.Annotations) - 5.0.0 or later\n\nThe DLLs included in the package may not be the latest version. We recommend using [NuGet](https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages:\n```\nInstall-Package RestSharp\nInstall-Package Newtonsoft.Json\nInstall-Package JsonSubTypes\nInstall-Package System.ComponentModel.Annotations\n```\n\nNOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See [RestSharp#742](https://github.com/restsharp/RestSharp/issues/742).\nNOTE: RestSharp for .Net Core creates a new socket for each api call, which can lead to a socket exhaustion problem. See [RestSharp#1406](https://github.com/restsharp/RestSharp/issues/1406).\n\n\u003ca id=\"installation\"\u003e\u003c/a\u003e\n## Installation\n\nThen include the DLL (under the `bin` folder) in the C# project, and use the namespaces:\n```csharp\nusing com.telstra.messaging.Api;\nusing com.telstra.messaging.Client;\nusing com.telstra.messaging.Model;\n```\n\u003ca id=\"packaging\"\u003e\u003c/a\u003e\n## Packaging\n\nA `.nuspec` is included with the project. You can follow the Nuget quickstart to [create](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#create-the-package) and [publish](https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package#publish-the-package) packages.\n\nThis `.nuspec` uses placeholders from the `.csproj`, so build the `.csproj` directly:\n\n```\nnuget pack -Build -OutputDirectory out com.telstra.messaging.csproj\n```\n\nThen, publish to a [local feed](https://docs.microsoft.com/en-us/nuget/hosting-packages/local-feeds) or [other host](https://docs.microsoft.com/en-us/nuget/hosting-packages/overview) and consume the new package via Nuget as usual.\n\nThe nuget package for Messaging V3 is published in https://www.nuget.org/packages/TelstraMessaging/, please install nuget package TelstraMessaging v3.1.2 for developing.\n\nInstall-Package TelstraMessaging -Version 3.1.2\n\n\u003ca id=\"usage\"\u003e\u003c/a\u003e\n## Usage\n\nTo use the API client with a HTTP proxy, setup a `System.Net.WebProxy`\n```csharp\nConfiguration c = new Configuration();\nSystem.Net.WebProxy webProxy = new System.Net.WebProxy(\"http://myProxyUrl:80/\");\nwebProxy.Credentials = System.Net.CredentialCache.DefaultCredentials;\nc.Proxy = webProxy;\n```\n\n\u003ca id=\"getting-started\"\u003e\u003c/a\u003e\n## Getting Started\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing com.telstra.messaging;\nusing Newtonsoft.Json;\n\nnamespace Example\n{\n    public class Example\n    {\n        public static void Main()\n        {\n\n            // Initialize credentials with desired values\n            Credentials credentials = new Credentials();\n            credentials.ClientId = \"YOUR CLIENT ID\";\n            credentials.ClientSecret = \"YOUR CLIENT SECRET\";\n\n            try\n            {\n                var vn = new VirtualNumbers(credentials);\n                var response = await vn.GetAll();\n                Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n            }\n            catch (Exception ex)\n            {\n                Assert.Fail(\"Exception occurred. Response is not as expected.\");\n                Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n            }\n\n        }\n    }\n}\n```\n\n\u003ca id=\"documentation-for-api-endpoints\"\u003e\u003c/a\u003e\n## Documentation for API Endpoints\n\nAll URIs are relative to *https://products.api.telstra.com/messaging/v3*\n\nClass | Method | HTTP request | Description\n------------ | ------------- | ------------- | -------------\n*AuthenticationApi* | [**AuthToken**](docs/AuthenticationApi.md#authtoken) | **POST** /oauth/token | Generate an access token\n*FreeTrialNumbersApi* | [**CreateTrialNumbers**](docs/FreeTrialNumbersApi.md#createtrialnumbers) | **POST** /free-trial-numbers | create free trial number list\n*FreeTrialNumbersApi* | [**GetTrialNumbers**](docs/FreeTrialNumbersApi.md#gettrialnumbers) | **GET** /free-trial-numbers | get all free trial numbers\n*HealthCheckApi* | [**HealthCheck**](docs/HealthCheckApi.md#healthcheck) | **GET** /health-check | health check\n*MessagesApi* | [**DeleteMessageById**](docs/MessagesApi.md#deletemessagebyid) | **DELETE** /messages/{messageId} | delete a message\n*MessagesApi* | [**GetMessageById**](docs/MessagesApi.md#getmessagebyid) | **GET** /messages/{messageId} | fetch a specific message\n*MessagesApi* | [**GetMessages**](docs/MessagesApi.md#getmessages) | **GET** /messages | fetch all sent/received messages\n*MessagesApi* | [**SendMessages**](docs/MessagesApi.md#sendmessages) | **POST** /messages | send messages\n*MessagesApi* | [**UpdateMessageById**](docs/MessagesApi.md#updatemessagebyid) | **PUT** /messages/{messageId} | update a message\n*MessagesApi* | [**UpdateMessageTags**](docs/MessagesApi.md#updatemessagetags) | **PATCH** /messages/{messageId} | update message tags\n*ReportsApi* | [**GetReport**](docs/ReportsApi.md#getreport) | **GET** /reports/{reportId} | fetch a specific report\n*ReportsApi* | [**GetReports**](docs/ReportsApi.md#getreports) | **GET** /reports | fetch all reports\n*ReportsApi* | [**MessagesReport**](docs/ReportsApi.md#messagesreport) | **POST** /reports/messages | submit a request for a messages report\n*VirtualNumbersApi* | [**AssignNumber**](docs/VirtualNumbersApi.md#assignnumber) | **POST** /virtual-numbers | assign a virtual number\n*VirtualNumbersApi* | [**DeleteNumber**](docs/VirtualNumbersApi.md#deletenumber) | **DELETE** /virtual-numbers/{virtual-number} | delete a virtual number\n*VirtualNumbersApi* | [**GetNumbers**](docs/VirtualNumbersApi.md#getnumbers) | **GET** /virtual-numbers | fetch all virtual numbers\n*VirtualNumbersApi* | [**GetRecipientOptouts**](docs/VirtualNumbersApi.md#getrecipientoptouts) | **GET** /virtual-numbers/{virtual-number}/optouts | Get recipient optouts list\n*VirtualNumbersApi* | [**GetVirtualNumber**](docs/VirtualNumbersApi.md#getvirtualnumber) | **GET** /virtual-numbers/{virtual-number} | fetch a virtual number\n*VirtualNumbersApi* | [**UpdateNumber**](docs/VirtualNumbersApi.md#updatenumber) | **PUT** /virtual-numbers/{virtual-number} | update a virtual number\n\n\n\u003ca id=\"documentation-for-authorization\"\u003e\u003c/a\u003e\n## Documentation for Authorization\n\n\nAuthentication schemes defined for the API:\n\u003ca id=\"bearer_auth\"\u003e\u003c/a\u003e\n### bearer_auth\n\n- **Type**: OAuth\n- **Flow**: application\n- **Authorization URL**: \n- **Scopes**: \n  - free-trial-numbers:read: read information for free trial numbers\n  - free-trial-numbers:write: write information for free trial numbers\n  - messages:read: read information for messages\n  - messages:write: write information for messages\n  - reports:read: read information for reports\n  - reports:write: write information for reports\n  - virtual-numbers:read: read information for virtual-numbers\n  - virtual-numbers:write: write information for virtual numbers\n\n## Getting Started\n\nYou can find the `Client key` and `Client secret` here: \u003chttps://dev.telstra.com/user/me/apps\u003e.\n\nBefore `sending` and `receiving` messages you will need to get your dedicated `Australian number`, see `Subscription` section below.\n\nFor `free trial` accounts, you will need to setup a list of `registered destinations` first, see `Free Trial` section below.\n\n\nThis should be done before any interactions requiring authentication, such as\nsending a SMS.\n\n## Free Trial\n\nTelstra offers a free trial for the messaging API to help you evaluate whether\nit meets your needs. There are some restrictions that apply compared to the\nfull API, including a maximum number of messages that can be sent and requiring the\nregistration of a limited number of destinations before a message can be sent to that\ndestination. For more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#FreeTrial\u003e.\n\n### Registering Free Trial Numbers\n\n\u003e :information_source: **Only required for the free trial accounts**\n\nRegister destinations for the free trial. For more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#RegisteraFreeTrialNumber\u003e.\n\nThe function `freeTrialNumbers.create` can be used to register destinations.\n\nIt takes an object with following properties as argument:\n\n-   `freeTrialNumbers`: A list of destinations, expected to be phone numbers of the form `04XXXXXXXX`.\n\nIt returns the list of phone numbers that have been registered.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.FreeTrialNumbers;\n\n\ntry\n{\n\tvar ft = new FreeTrialNumbers(credentials);\n\tvar ftList = new FreeTrialNumbersList(new List\u003cstring\u003e() { \"0434000001\", \"0434000002\" });\n\tvar response = await ft.Create(ftList);\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n}\n```\n\n### Fetch all Free Trial Numbers\n\n\u003e :information_source: **Only required for the free trial**\n\nFetch the Free Trial Number(s) currently assigned to your account. For more information,\nplease see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#FetchyourFreeTrialNumbers\u003e.\n\nThe function `freeTrialNumbers.getAll` can be used to retrieve registered destinations.\n\nIt takes no arguments.\n\nIt returns the list of phone numbers that have been registered.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.FreeTrialNumbers;\n\n\ntry\n{\n   var ft = new FreeTrialNumbers(credentials);\n   var response = await ft.GetAll();\n\n   ((List\u003cstring\u003e)response.FreeTrialNumbers).ForEach(F =\u003e Console.WriteLine(F));\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n}\n```\n\n## Virtual Number\n\nGives you a dedicated mobile number tied to an application which\nenables you to receive replies from your customers. For more information,\nplease see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#VirtualNumbers\u003e.\n\n### Assign Virtual Number\n\nWhen a recipient receives your message, you can choose whether they'll see a privateNumber,\nVirtual Number or senderName (paid plans only) in the from field.\nIf you want to use a Virtual Number, use this function to assign one.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#AssignaVirtualNumber\u003e.\n\nThe function `virtualNumbers.assign` can be used to create a subscription.\n\nIt takes a object with following properties as argument:\n\n-   `replyCallbackUrl` (optional): The URL that replies to the Virtual Number will be posted to.\n-   `tags` (optional): Create your own tags and use them to fetch, sort and report on your Virtual Numbers through our other endpoints.\n    You can assign up to 10 tags per number.\n\nIt returns an object with the following properties:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n-   `lastUse`: The last time the Virtual Number was used to send a message.\n-   `replyCallbackUrl`: The URL that replies to the Virtual Number will be posted to.\n-   `tags`: Any customisable tags assigned to the Virtual Number.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n    var vn = new VirtualNumbers(credentials);\n    List\u003cstring\u003e tags = new() { \"reprehenderit\", \"Excepteur non labore\" };\n    var assignVirtualNumberParams = new AssignVirtualNumberParams(\"http://www.example.com\", tags);\n    var response = await vn.Assign(assignVirtualNumberParams);\n    Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n\n```\n\n### Fetch a Virtual Number\n\nFetch the tags, replyCallbackUrl and lastUse date for a Virtual Number.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#FetchaVirtualNumber\u003e.\n\nThe function `virtualNumbers.get` can be used to get the details of a Virtual Number.\n\nIt takes the following arguments:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n\nIt returns an object with the following properties:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n-   `lastUse`: The last time the Virtual Number was used to send a message.\n-   `replyCallbackUrl`: The URL that replies to the Virtual Number will be posted to.\n-   `tags`: Any customisable tags assigned to the Virtual Number.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n\tvar vn = new VirtualNumbers(credentials);               \n\tvar response = await vn.Get(\"0428180739\");\n\tConsole.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n\n```\n\n### Fetch all Virtual Numbers\n\nFetch all Virtual Numbers currently assigned to your account.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#FetchallVirtualNumbers\u003e.\n\nThe function `virtualNumbers.getAll` can be used to get the all virtual numbers associated to your account.\n\nIt takes an object with following prperties as argument:\n\n-   `limit` (optional): Tell us how many results you want us to return, up to a maximum of 50.\n-   `offset` (optional): Use the offset to navigate between the response results. An offset of 0 will display the first page of results, and so on.\n-   `filter` (optional): Filter your Virtual Numbers by tag or by number.\n\nIt returns an object with the following properties:\n\n-   `virtualNumbers`: A list of Virtual Numbers assigned to your account.\n-   `paging`: Paging information.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n\tvar vn = new VirtualNumbers(credentials);\n\tvar response = await vn.GetAll();\n\tConsole.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n\n### Update a Virtual Number\n\nUpdate a virtual number attributes. For more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#UpdateaVirtualNumber\u003e.\n\nThe function `virtualNumbers.update` can be used to update a virtual number.\n\nIt takes an object with following properties as argument:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n-   `updateData` (optional):\n    -   `reply_callback_url` (optional): The URL that replies to the Virtual Number will be posted to.\n    -   `tags` (optional): Create your own tags and use them to fetch, sort and report on your Virtual Numbers through our other endpoints.\n        You can assign up to 10 tags per number.\n\nIt returns an object with the following properties:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n-   `lastUse`: The last time the Virtual Number was used to send a message.\n-   `replyCallbackUrl`: The URL that replies to the Virtual Number will be posted to.\n-   `tags`: Any customisable tags assigned to the Virtual Number.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n\tvar vn = new VirtualNumbers(credentials);               \n\tList\u003cstring\u003e tags = new() { \"reprehenderit\", \"Excepteur non labore\", \"qui voluptate\" };\n\tvar assignVirtualNumberParams = new AssignVirtualNumberParams(\"http://www.example.com\", tags);\n\tvar updateVirtualNumberParams = new UpdateVirtualNumberParams(\"0428180739\", assignVirtualNumberParams);\n\tvar response = await vn.Update(updateVirtualNumberParams);\n\tConsole.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n\n### Delete Virtual Number\n\nDelete the a virtual number. For more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#DeleteaVirtualNumber\u003e.\n\nThe function `virtualNumbers.get` can be used to unassign a Virtual Number.\n\nIt takes the following arguments:\n\n-   `virtualNumber`: The Virtual Number assigned to your account.\n\nIt returns nothing.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n\tvar vn = new VirtualNumbers(credentials);\n\tawait vn.Delete(\"0428180739\");\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n\n\n### Fetch all Recipient Optouts list\n\nFetch any mobile number(s) that have opted out of receiving messages\nfrom a Virtual Number assigned to your account.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Fetchallrecipientoptoutslist\u003e.\n\nThe function `telstra.messaging.virtual_number.get_optouts` can be used to\nget the list of mobile numbers that have opted out of receiving messages\nfrom a virtual number associated to your account.\nIt takes the following arguments:\n\n- `virtual_number`: The Virtual Number assigned to your account.\n- `limit`: Tell us how many results you want us to return, up to a maximum of 50.\n- `offset`: Use the offset to navigate between the response results.\n  An offset of 0 will display the first page of results, and so on.\n\nRaises `telstra.messaging.exceptions.VirtualNumbersError` if anything goes wrong.\n\nIt returns an object with the following\nproperties:\n\n- `recipient_optouts`: A list of recipient optouts.\n- `paging`: Paging information.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.VirtualNumbers;\nusing Newtonsoft.Json;\n\ntry\n{\n    var vn = new VirtualNumbers(credentials);\n    var response = await vn.GetOptouts(\"0428180739\");\n    Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n\n\n## Message\n\nSend and receive messages. For more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Messages\u003e.\n\n### Send Message\n\nSend a message to a mobile number, or to multiple mobile numbers.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#SendanSMSorMMS\u003e.\n\nThe function `messages.send` can be used to send a message.\n\nIt takes an object with following properties as argument:\n\n-   `to`: The destination address, expected to be a phone number of the form `+614XXXXXXXX` or `04XXXXXXXX`.\n-   `from`: This will be either \"privateNumber\", one of your Virtual Numbers or your senderName.\n-   `messageContent` (Either one of messageContent or multimedia is required): The content of the message.\n-   `multimedia` (Either one of messageContent or multimedia is required): MMS multimedia content.\n-   `retryTimeout` (optional): How many minutes you asked the server to keep trying to send the message.\n-   `scheduleSend` (optional): The time (in Central Standard Time) the message is scheduled to send.\n-   `deliveryNotification` (optional): If set to true, you will receive a notification to the statusCallbackUrl when your\n    SMS or MMS is delivered (paid feature).\n-   `statusCallbackUrl` (optional): The URL the API will call when the status of the message changes.\n-   `tags` (optional): Any customisable tags assigned to the message.\n\nThe type `TMultimedia`can be used to build an mms payload. It has following properties:\n\n-   `type`: The content type of the attachment, for example \u003cTMultimediaContentType.IMAGE_GIF\u003e.\n-   `fileName` (optional): Optional field, for example `image.png`.\n-   `payload`: The payload of an mms encoded as base64.\n\nIt returns an object with the following properties:\n\n-   `messageId`: Use this UUID with our other endpoints to fetch, update or delete the message.\n-   `status`: The status will be either queued, sent, delivered or expired.\n-   `to`: The recipient's mobile number(s).\n-   `from`: This will be either \"privateNumber\", one of your Virtual Numbers or your senderName.\n-   `messageContent`: The content of the message.\n-   `multimedia`: The multimedia content of the message (MMS only).\n-   `retryTimeout`: How many minutes you asked the server to keep trying to send the message.\n-   `scheduleSend`: The time (in Central Standard Time) a message is scheduled to send.\n-   `deliveryNotification`: If set to true, you will receive a notification to the\n    statusCallbackUrl when your SMS or MMS is delivered (paid feature).\n-   `statusCallbackUrl`: The URL the API will call when the status of the message changes.\n-   `tags`: Any customisable tags assigned to the message.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    var multimediaAttachment = new Multimedia(MultiMediaContentType.IMAGE_GIF, \"bus.gif\", \"R0lGODlhPQBEAPeoAJosM//AwO/AwHVYZ/z595kzAP/s7P+goOXMv8+fhw/v739/f+8PD98fH/8mJl+fn/9ZWb8/PzWlwv///6wWGbImAPgTEMImIN9gUFCEm/gDALULDN8PAD6atYdCTX9gUNKlj8wZAKUsAOzZz+UMAOsJAP/Z2ccMDA8PD/95eX5NWvsJCOVNQPtfX/8zM8+QePLl38MGBr8JCP+zs9myn/8GBqwpAP/GxgwJCPny78lzYLgjAJ8vAP9fX/+MjMUcAN8zM/9wcM8ZGcATEL+QePdZWf/29uc/P9cmJu9MTDImIN+/r7+/vz8/P8VNQGNugV8AAF9fX8swMNgTAFlDOICAgPNSUnNWSMQ5MBAQEJE3QPIGAM9AQMqGcG9vb6MhJsEdGM8vLx8fH98AANIWAMuQeL8fABkTEPPQ0OM5OSYdGFl5jo+Pj/+pqcsTE78wMFNGQLYmID4dGPvd3UBAQJmTkP+8vH9QUK+vr8ZWSHpzcJMmILdwcLOGcHRQUHxwcK9PT9DQ0O/v70w5MLypoG8wKOuwsP/g4P/Q0IcwKEswKMl8aJ9fX2xjdOtGRs/Pz+Dg4GImIP8gIH0sKEAwKKmTiKZ8aB/f39Wsl+LFt8dgUE9PT5x5aHBwcP+AgP+WltdgYMyZfyywz78AAAAAAAD///8AAP9mZv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAKgALAAAAAA9AEQAAAj/AFEJHEiwoMGDCBMqXMiwocAbBww4nEhxoYkUpzJGrMixogkfGUNqlNixJEIDB0SqHGmyJSojM1bKZOmyop0gM3Oe2liTISKMOoPy7GnwY9CjIYcSRYm0aVKSLmE6nfq05QycVLPuhDrxBlCtYJUqNAq2bNWEBj6ZXRuyxZyDRtqwnXvkhACDV+euTeJm1Ki7A73qNWtFiF+/gA95Gly2CJLDhwEHMOUAAuOpLYDEgBxZ4GRTlC1fDnpkM+fOqD6DDj1aZpITp0dtGCDhr+fVuCu3zlg49ijaokTZTo27uG7Gjn2P+hI8+PDPERoUB318bWbfAJ5sUNFcuGRTYUqV/3ogfXp1rWlMc6awJjiAAd2fm4ogXjz56aypOoIde4OE5u/F9x199dlXnnGiHZWEYbGpsAEA3QXYnHwEFliKAgswgJ8LPeiUXGwedCAKABACCN+EA1pYIIYaFlcDhytd51sGAJbo3onOpajiihlO92KHGaUXGwWjUBChjSPiWJuOO/LYIm4v1tXfE6J4gCSJEZ7YgRYUNrkji9P55sF/ogxw5ZkSqIDaZBV6aSGYq/lGZplndkckZ98xoICbTcIJGQAZcNmdmUc210hs35nCyJ58fgmIKX5RQGOZowxaZwYA+JaoKQwswGijBV4C6SiTUmpphMspJx9unX4KaimjDv9aaXOEBteBqmuuxgEHoLX6Kqx+yXqqBANsgCtit4FWQAEkrNbpq7HSOmtwag5w57GrmlJBASEU18ADjUYb3ADTinIttsgSB1oJFfA63bduimuqKB1keqwUhoCSK374wbujvOSu4QG6UvxBRydcpKsav++Ca6G8A6Pr1x2kVMyHwsVxUALDq/krnrhPSOzXG1lUTIoffqGR7Goi2MAxbv6O2kEG56I7CSlRsEFKFVyovDJoIRTg7sugNRDGqCJzJgcKE0ywc0ELm6KBCCJo8DIPFeCWNGcyqNFE06ToAfV0HBRgxsvLThHn1oddQMrXj5DyAQgjEHSAJMWZwS3HPxT/QMbabI/iBCliMLEJKX2EEkomBAUCxRi42VDADxyTYDVogV+wSChqmKxEKCDAYFDFj4OmwbY7bDGdBhtrnTQYOigeChUmc1K3QTnAUfEgGFgAWt88hKA6aCRIXhxnQ1yg3BCayK44EWdkUQcBByEQChFXfCB776aQsG0BIlQgQgE8qO26X1h8cEUep8ngRBnOy74E9QgRgEAC8SvOfQkh7FDBDmS43PmGoIiKUUEGkMEC/PJHgxw0xH74yx/3XnaYRJgMB8obxQW6kL9QYEJ0FIFgByfIL7/IQAlvQwEpnAC7DtLNJCKUoO/w45c44GwCXiAFB/OXAATQryUxdN4LfFiwgjCNYg+kYMIEFkCKDs6PKAIJouyGWMS1FSKJOMRB/BoIxYJIUXFUxNwoIkEKPAgCBZSQHQ1A2EWDfDEUVLyADj5AChSIQW6gu10bE/JG2VnCZGfo4R4d0sdQoBAHhPjhIB94v/wRoRKQWGRHgrhGSQJxCS+0pCZbEhAAOw==\");\n    var sendMessageParams = new SendMessageParams(new List\u003cstring\u003e() { \"0434651022\" }, \"privateNumber\", \"Hello from .NET SDK\", new List\u003cMultimedia\u003e() { multimediaAttachment });\n    var response = await sm.Send(sendMessageParams);\n\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n\n### Get a Message\n\nUse the messageId to fetch a message that's been sent from/to\nyour account within the last 30 days.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Fetchamessage\u003e.\n\nThe function `messages.get` can be used to retrieve the a message.\n\nIt takes the following arguments:\n\n-   `messageId`: Unique identifier for the message.\n\nIt returns an object with the following properties:\n\n-   `messageId`: Use this UUID with our other endpoints to fetch, update or delete the message.\n-   `status`: The status will be either queued, sent, delivered or expired.\n-   `createTimestamp`: The time you submitted the message to the queue for sending.\n-   `sentTimestamp`: The time the message was sent from the server.\n-   `receivedTimestamp`: The time the message was received by the recipient's device.\n-   `to`: The recipient's mobile number(s).\n-   `from`: This will be either \"privateNumber\", one of your Virtual Numbers or your senderName.\n-   `messageContent`: The content of the message.\n-   `multimedia`: The multimedia content of the message (MMS only).\n-   `direction`: Direction of the message (outgoing or incoming).\n-   `retryTimeout`: How many minutes you asked the server to keep trying to send the message.\n-   `scheduleSend`: The time (in Central Standard Time) the message is scheduled to send.\n-   `deliveryNotification`: If set to true, you will receive a notification to the statusCallbackUrl when your SMS or MMS\n    is delivered (paid feature).\n-   `statusCallbackUrl`: The URL the API will call when the status of the message changes.\n-   `queuePriority`: The priority assigned to the message.\n-   `tags`: Any customisable tags assigned to the message.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    var response = await sm.Get(\"3247a620-4c38-11ee-a651-ad71114ff6eb\");\n    Console.WriteLine(\"response: \" + response);\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\t\n```\n\n### Get all Messages\n\nFetch messages that have been sent from/to your account in the last 30 days.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Fetchallsent/receivedmessages\u003e.\n\nThe function `messages.getAll` can be used to fetch all messages.\n\nIt takes an object with following properties as argument:\n\n-   `limit` (optional): Tell us how many results you want us to return, up to a maximum of 50.\n-   `offset` (optional): Use the offset to navigate between the response results. An offset of 0 will display the first page of results, and so on.\n-   `filter` (optional): Filter your Virtual Numbers by tag or by number.\n\nIt returns an object with the following properties:\n\n-   `messages`: List of all messages.\n-   `paging`: Paging information.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    var response = await sm.GetAll();\n    Console.WriteLine(\"response: \" + response);\n}\ncatch (Exception ex)\n{\n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\t\n```\n\n### Update a Message\n\nUpdate a message that's scheduled for sending, you can change any of\nthe below parameters, as long as the message hasn't been sent yet.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Updateamessage\u003e.\n\nThe function `messages.send` can be used to send a message.\n\nIt takes an object with following properties as argument:\n\n-   `messageId`: Use this UUID with our other endpoints to fetch, update or delete the message.\n-   `to`: The destination address, expected to be a phone number of the form `+614XXXXXXXX` or `04XXXXXXXX`.\n-   `from`: This will be either \"privateNumber\", one of your Virtual Numbers or your senderName.\n-   `messageContent` (Either one of messageContent or multimedia is required): The content of the message.\n-   `multimedia` (Either one of messageContent or multimedia is required): MMS multimedia content.\n-   `retryTimeout` (optional): How many minutes you asked the server to keep trying to send the message.\n-   `scheduleSend` (optional): The time (in Central Standard Time) the message is scheduled to send.\n-   `deliveryNotification` (optional): If set to true, you will receive a notification to the statusCallbackUrl when your\n    SMS or MMS is delivered (paid feature).\n-   `statusCallbackUrl` (optional): The URL the API will call when the status of the message changes.\n-   `tags` (optional): Any customisable tags assigned to the message.\n\nThe type `TMultimedia`can be used to build an mms payload. It has following properties:\n\n-   `type`: The content type of the attachment, for example \u003cTMultimediaContentType.IMAGE_GIF\u003e.\n-   `fileName` (optional): Optional field, for example `image.png`.\n-   `payload`: The payload of an mms encoded as base64.\n\nThe dataclass `telstra.messaging.message.Multimedia` can be used to build\na mms payload. It takes the following arguments:\n\n-   `type`: The content type of the attachment, for example `image/png`.\n-   `filename` (optional): Optional field, for example `image.png`.\n-   `payload`: The payload of an mms encoded as base64.\n\nIt returns an object with the following properties:\n\n-   `messageId`: Use this UUID with our other endpoints to fetch, update or delete the message.\n-   `status`: The status will be either queued, sent, delivered or expired.\n-   `to`: The recipient's mobile number(s).\n-   `from`: This will be either \"privateNumber\", one of your Virtual Numbers or your senderName.\n-   `messageContent`: The content of the message.\n-   `multimedia`: The multimedia content of the message (MMS only).\n-   `retryTimeout`: How many minutes you asked the server to keep trying to send the message.\n-   `scheduleSend`: The time (in Central Standard Time) a message is scheduled to send.\n-   `deliveryNotification`: If set to true, you will receive a notification to the\n    statusCallbackUrl when your SMS or MMS is delivered (paid feature).\n-   `statusCallbackUrl`: The URL the API will call when the status of the message changes.\n-   `tags`: Any customisable tags assigned to the message.\n\nFor example:\n\n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    string messageId = \"9773af40-58da-11ee-ab5d-b5c3bb7fbef4\";\n    string to = \"0434651022\";\n    string from = \"privateNumber\";\n    string messageContent = \"Hello from .NET SDK\";\n    var multimediaAttachment = new Multimedia(MultiMediaContentType.IMAGE_GIF, \"bus.gif\", \"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\");\n    DateTime scheduleSend = DateTime.UtcNow.AddHours(20);\n    List\u003cstring\u003e tags = new() { \"reprehenderit\", \"Excepteur non labore\", \"qui voluptate\" };            \n    var updateMessageParams = new UpdateMessageParams(to, from, messageContent, new List\u003cMultimedia\u003e() { multimediaAttachment }, 10, scheduleSend, false, \"http://www.example.com\", 2, tags);\n    var response = await sm.Update(messageId, updateMessageParams);\n    Console.WriteLine(\"response: \" + response);\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\t\n\t\n```\n   \n### Update Message Tags\n   \nUpdate message tags, you can update them even after your message has been delivered.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Updatemessagetags\u003e.\n   \nThe function `messages.updateTags` can be used to update message tags.\n   \nIt takes the following arguments:\n   \n-   `messageId`: Unique identifier for the message.\n-   `tags` (optional): Any customisable tags assigned to the message.\n   \nIt returns nothing.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    string messageId = \"9773af40-58da-11ee-ab5d-b5c3bb7fbef4\";\n    List\u003cstring\u003e tags = new List\u003cstring\u003e { \"marketing\", \"SMS\" };\n    UpdateMessageTagsParams updateMessageTagsParams = new UpdateMessageTagsParams(tags);\n    await sm.UpdateTags(messageId, updateMessageTagsParams);\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\n   \n```\n   \n### Delete a Message\n   \nDelete a scheduled message, but hasn't yet sent.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Deleteamessage\u003e.\n   \nThe function `messages.delete` can be used to delete a message.\n   \nIt takes the following arguments:\n   \n-   `messageId`: Unique identifier for the message.\n   \nIt returns nothing.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Messages;\n\ntry\n{\n    var sm = new Messages(credentials);\n    await sm.Delete(\"cd8cbda0-4c33-11ee-966e-7bcedb926a5d\");\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\n```\n   \n## Reports\n   \nCreate and fetch reports. For more information, please see here:\n\u003chttps://dev.telstra.com/content/messaging-api-v3#tag/reports\u003e.\n   \n### Request a Messages Report\n   \nRequest a CSV report of messages (both incoming and outgoing)\nthat have been sent to/from your account within the last three months.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Submitarequestforamessagesreport\u003e.\n   \nThe function `reports.create` can be used to create a report.\n   \nIt takes the following arguments:\n   \n-   `startDate`: Set the time period you want to generate a report for by typing the start date (inclusive) here.\n    Note that we only retain data for three months, so please ensure your startDate is not more than three months old.\n    Use ISO format(yyyy-mm-dd), e.g. \"2019-08-24\".\n-   `endDate`: Type the end date (inclusive) of your reporting period here.\n    Your endDate must be a date in the past, and less than three months from your startDate.\n    Use ISO format(yyyy-mm-dd), e.g. \"2019-08-24\".\n-   `reportCallbackUrl` (optional): The callbackUrl where notification is sent when report is ready for download.\n-   `filter` (optional): Filter report messages by:\n    tag - use one of the tags assigned to your message(s)\n    number - either the Virtual Number used to send the message,\n    or the Recipient Number the message was sent to.\n   \nIt returns an object with the following properties:\n   \n-   `reportId`: Use this UUID with our other endpoints to fetch the report.\n-   `reportCallbackUrl`: If you provided a reportCallbackUrl in your request, it will be returned here.\n-   `reportStatus`: The status of the report. It will be either:\n    -   queued – the report is in the queue for generation.\n    -   completed – the report is ready for download.\n    -   failed – the report failed to generate, please try again.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Reports;\nusing Newtonsoft.Json;\n\ntry\n{\n    var reports = new Reports(credentials);\n    var response = await reports.GetAll();\n    Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\n```\n   \n   \n   \n### Fetch a specific report\n   \nUse the report_id to fetch a download link for a report generated.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#FetchaReport\u003e.\n   \nThe function `reports.get` can be used to retrieve\nthe a report download link. It takes the following arguments:\n   \n-   `reportId`: Unique identifier for the report.\n   \nIt returns an object with the following properties:\n   \n-   `reportId`: Use this UUID with our other endpoints to fetch the report.\n-   `reportStatus`: The status of the report.\n-   `reportUrl`: Download link to download the CSV file.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Reports;\nusing Newtonsoft.Json;\n\ntry\n{\n    var reports = new Reports(credentials);\n    var response = await reports.Get(\"0eaf6960-580d-11ee-986c-e35ce4792749\");\n    Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\t\n```\n   \n### Fetch all reports\n   \nFetch details of all reports recently generated for your account.\nUse it to check the status of a report, plus fetch the report ID,\nstatus, report type and expiry date.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#Fetchallreports\u003e.\n   \nThe function `reports.getAll` can be used to fetch all reports.\n   \nIt doesn't take any arguments.\n   \nIt returns a list of objects with the following properties:\n   \n-   `reportId`: Use this UUID with our other endpoints to fetch the report.\n-   `reportStatus`: The status of the report.\n-   `reportType`: The type of report generated.\n-   `reportExpiry`: The expiry date of your report. After this date, you will be unable to download your report.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\nusing com.telstra.messaging.Models.Reports;\nusing Newtonsoft.Json;\n\ntry\n{\n    var reports = new Reports(credentials);\n    var response = await reports.GetAll();\n    Console.WriteLine($\"Response: {JsonConvert.SerializeObject(response)}\");\n}  \ncatch (Exception ex)\n{  \n    Assert.Fail(\"Exception occurred. Response is not as expected.\");\n    Console.WriteLine(\"Exception occurred: \" + ex.Message);\n   \n}\t\n```\n   \n## Health Check\n   \n### Get operational status of the messaging service\n   \nCheck the operational status of the messaging service.\nFor more information, please see here:\n\u003chttps://dev.telstra.com/docs/messaging-api/apiReference/apiReferenceOverviewEndpoints?version=3.x#HealthCheck\u003e.\n   \nThe function `healthCheck.get` can be used to get the status.\n   \nIt takes no arguments.\n   \nIt returns an object with following properties:\n   \n-   `status`: Denotes the status of the services Up/Down.\n   \nFor example:\n   \n```csharp\nusing com.telstra.messaging.Models.Common;\n\ntry\n{\n\tvar healthCheck = new HealthCheck(credentials);\n\tvar response = await healthCheck.GetStatus();\n\tAssert.Equal(\"up\", response.Status);\n\n}\ncatch (Exception ex)\n{\n\tAssert.Fail(\"Exception occurred. Response is not as expected.\");\n\tConsole.WriteLine(\"Exception occurred: \" + ex.Message);\n\n}\n```\n   \n   \n   \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelstra%2FMessagingAPI-SDK-dotnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftelstra%2FMessagingAPI-SDK-dotnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelstra%2FMessagingAPI-SDK-dotnet/lists"}