---
agentTools:
  projectIndex: https://docs.mundipagg.com/llms.txt
---

# Criando uma assinatura

A API MundiPagg oferece uma funcionalidade prática para o gerenciamento de cobranças recorrentes: as **Assinaturas**(**Subscription**). Ela possibilita que você cobre os seus clientes com intervalos pré determinados, sem que seja necessário criar essa regra de negócio do seu lado. Nesse tutorial iremos descrever passo a passo como realizar a criação de uma assinatura avulsa e como criar uma assinatura a partir de um plano previamente cadastrado.

Nesse tutorial iremos utilizar a [SDK C#](https://docs.mundipagg.com/docs/sdk-c) da Mundipagg disponível no gerenciador de pacotes NuGet com o nome de MundiAPI.PCL.

\##Criando uma assinatura avulsa

Primeiro você deve importar o pacote **MundiAPI.PCL** para a nossa aplicação de teste e depois adicionar nossas credenciais instanciando a classe **MundiAPIClient**.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\n\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_4AdjlqpseatnmgbW\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

Em seguida, criará o objeto [Customer](https://docs.mundipagg.com/v1/reference#clientes), objeto esse que contém os dados do usuário final que está contratando a assinatura. Apenas o campo **Name** é obrigatório porém recomendamos que envie também o campo **Email**. Enviando esse campo, conseguiremos identificar se o cliente já esta na sua carteira de cliente, evitando assim qualquer duplicidade.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_4AdjlqpseatnmgbW\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

Caso já tenha cadastrado o **Customer** previamente, você pode informar o **CustomerId** na criação do **CreateSubscriptionRequest**.

[block:code]
{
  "codes": [
    {
      "code": "\n            var createSubscriptionRequest = new CreateSubscriptionRequest() {\n                CustomerId = \"Id do Customer\"\n            };\n                ",
      "language": "csharp"
    }
  ]
}
[/block]

O próximo passo é cadastrar os [Itens](https://docs.mundipagg.com/v1/reference#item-do-pedido) que irão compor a  [Assinatura](https://docs.mundipagg.com/v1/reference#assinaturas).

Para criação de um item você utilizará o **CreateSubscriptionItemRequest**. Os campos obrigatórios são:

* **Description** : descrição ou nome do item
* **Quantity** : quantidade do item
* **[Pricing Scheme](https://docs.mundipagg.com/v1/docs/price-scheme)** : template de precificação do item

Logo depois adicionará a uma lista de **CreateSubscriptionItemRequest**.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_4AdjlqpseatnmgbW\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var items = new List<CreateSubscriptionItemRequest> {\n                new CreateSubscriptionItemRequest {\n                Description = \"Musculação\",\n                Quantity = 1,\n                PricingScheme = new CreatePricingSchemeRequest {\n                Price = 18990\n                    }\n                }\n            };\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

**Intervalos**

Durante a requisição de criação de uma assinatura pode-se definir algumas informações de intervalo das cobranças utilizando as propriedades:

* **Interval** : possíveis valores -  **week**, **month** ou **year**
* **IntervalCount** : recebendo um numero inteiro

Assim pode-se criar intervalos de cobrança como :

* Interval : month
* IntervalCount : 3

Criando uma assinatura que sera cobrada a cada 3 meses.

**Formas de pagamento**

É possível escolher entre dois meios de pagamentos disponíveis para assinaturas :

* Boleto
* Cartão de crédito

\###**Utilizando boleto**

Você iniciará o processo de requisição de criação de uma assinatura instanciando um objeto chamado **CreateSubscriptionRequest**. Logo depois informará o meio de pagamento boleto na propriedade **PaymentMethod**.

Em seguida utilizará nossa classe **Client** para fazer a requisição de criação da **Subscription**.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_39joaPCZQFyxA8zx\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var items = new List<CreateSubscriptionItemRequest> {\n                new CreateSubscriptionItemRequest {\n                Description = \"Musculação\",\n                Quantity = 1,\n                PricingScheme = new CreatePricingSchemeRequest {\n                Price = 18990\n                    }\n                }\n            };\n           var subscrition = new CreateSubscriptionRequest(){\n                PaymentMethod = \"boleto\",\n                Interval = \"month\",\n                IntervalCount = 3,\n                Customer = customer,\n                Items = items\n            };\n\n            var response = client.Subscriptions.CreateSubscription(subscription);\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

\###**Utilizando cartão de crédito**

Para criação de uma assinatura com o meio de pagamento cartão de crédito,  você precisará de algumas informações adicionais além das solicitadas para criação com meio de pagamento boleto. É necessário o envio do objeto do objeto **Card** e do objeto **BillingAddress** para compor a requisição da **Subscription**.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_39joaPCZQFyxA8zx\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var items = new List<CreateSubscriptionItemRequest> {\n                new CreateSubscriptionItemRequest {\n                Description = \"Musculação\",\n                Quantity = 1,\n                PricingScheme = new CreatePricingSchemeRequest {\n                Price = 18990\n                    }\n                }\n            };\n            \n            var card = new CreateCardRequest() {\n                HolderName = \"Tony Stark\",\n                Number = \"5425019448107793\",\n                HolderDocument = \"93095135270\",\n                ExpMonth = 1,\n                ExpYear = 20,\n                Cvv = \"433\",\n                Brand = \"Mastercard\",\n                BillingAddress = new CreateAddressRequest(){\n                    Line1 = \"375, Av. General Justo, Centro\",\n                    Line2 = \"7º andar, sala 01\",\n                    City = \"Rio de Janeiro\",\n                    Country = \"BR\",\n                    State = \"RJ\",\n                    ZipCode = \"22000111\",\n                }\n            };\n\n            var subscription = new CreateSubscriptionRequest(){\n                PaymentMethod = \"credit_card\",\n                Card = card,\n                Interval = \"month\",\n                IntervalCount = 1,\n                Customer = customer,\n                Items = items\n            };\n\n            var response = client.Subscriptions.CreateSubscription(subscription);\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

Caso já tenha cadastrado o cartão do cliente previamente, você pode informar o **CardId** na requisição

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_39joaPCZQFyxA8zx\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var items = new List<CreateSubscriptionItemRequest> {\n                new CreateSubscriptionItemRequest {\n                Description = \"Musculação\",\n                Quantity = 1,\n                PricingScheme = new CreatePricingSchemeRequest {\n                Price = 18990\n                    }\n                }\n            };\n\n           \n            var subscription = new CreateSubscriptionRequest(){\n                PaymentMethod = \"credit_card\",\n                CardId = \"Card id previamente cadastrado\",\n                Interval = \"month\",\n                IntervalCount = 1,\n                Customer = customer,\n                Items = items\n            };\n\n            var response = client.Subscriptions.CreateSubscription(subscription);\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

\##Criando uma assinatura a partir de um plano

Além da criação de uma assinatura avulsa apresentada anteriormente é possível criar uma assinatura a partir de um \[Plano]\(colocar link:<https://docs.mundipagg.com/v1/reference#planos>). O Plano é um template pré-definido de assinatura, facilitando a organização e criação de diferentes tipos de assinaturas. O Plano possui todas as propriedades informadas na criação da assinatura avulsa.

É preciso realizar a criação de um plano utilizando o **CreatePlanRequest** informando o nome do plano e os itens, com suas respectivas informações, seguindo o mesmo modelo da assinatura avulsa. A única diferença nesse caso é que irá utilizar o **CreatePlanItemRequest**.

Na criação do **Plano**, você pode definir qual meio de pagamento será aceito utilizando a propriedade **PaymentMethods**. Importante atentar que nas assinaturas ou planos só são aceitos os meios de pagamento cartão de crédito e boleto.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_39joaPCZQFyxA8zx\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var request = new CreatePlanRequest {\n                Name = \"Plano Gold\",\n                PaymentMethods = new List<string>() { \"credit_card\",\"boleto\"},\n                Items = new List<CreatePlanItemRequest> {\n                    new CreatePlanItemRequest {\n                        Name = \"Musculação\",\n                        Quantity = 1,\n                        PricingScheme = new CreatePricingSchemeRequest {\n                        Price = 18990\n                        }\n                    }\n                }\n            };\n\n            var response = client.Plans.CreatePlan(request);\n\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

Após a criação do **Plano** recebemos o **PlanId**, o identificador daquele plano. Utilizaremos esse **PlanId** para criação da assinatura.

[block:code]
{
  "codes": [
    {
      "code": "using MundiAPI.PCL;\nusing MundiAPI.PCL.Models;\nusing System.Collections.Generic;\n\nnamespace TutorialAssinatura {\n    class Program {\n        static void Main(string[] args) {\n\n            string basicAuthUserName = \"sk_test_39joaPCZQFyxA8zx\";\n            // Senha em branco. Passando apenas a secret key\n            string basicAuthPassword = \"\";\n\n            var client = new MundiAPIClient(basicAuthUserName, basicAuthPassword);\n\n            var customer = new CreateCustomerRequest() {\n                Name = \"Gustavo Fonseca\",\n                Email = \"Gustavo.fonseca@mundipagg.com\"\n            };\n\n            var request = new CreatePlanRequest {\n                Name = \"Plano Gold\",\n                PaymentMethods = new List<string>() { \"credit_card\",\"boleto\"},\n                Items = new List<CreatePlanItemRequest> {\n                    new CreatePlanItemRequest {\n                        Name = \"Musculação\",\n                        Quantity = 1,\n                        PricingScheme = new CreatePricingSchemeRequest {\n                        Price = 18990\n                        }\n                    }\n                }\n            };\n\n            var plan = client.Plans.CreatePlan(request);\n\n            var subscriptionRequest = new CreateSubscriptionRequest() {\n                PlanId = plan.Id,\n                PaymentMethod = \"boleto\",\n                Interval = \"month\",\n                IntervalCount = 1,\n                Customer = customer,  \n            };\n\n            var subscritionRequest = client.Subscriptions.CreateSubscription(subscrition);\n        }\n    }\n}",
      "language": "csharp"
    }
  ]
}
[/block]

[block:callout]
{
  "type": "info",
  "body": "Para mais informações acesse a nossa [API Reference](https://docs.mundipagg.com/v1/reference#cobran%C3%A7as)."
}
[/block]