{"_id":"57866ef2e5cdf20e007d3802","project":"575aeffae12cf20e002f306c","category":{"_id":"57866e72b2f4060e00fa39ca","project":"575aeffae12cf20e002f306c","version":"575aeffae12cf20e002f306f","__v":0,"sync":{"url":"","isSync":false},"reference":true,"createdAt":"2016-07-13T16:38:10.846Z","from_sync":false,"order":2,"slug":"ambiente-de-testes","title":"Ambiente de Testes"},"user":"57601a13af3e090e00108059","parentDoc":null,"version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":30,"createdAt":"2016-06-10T16:51:06.080Z","releaseDate":"2016-06-10T16:51:06.080Z","categories":["575aeffae12cf20e002f3070","575af039a083950e004487f7","575af5c7ba4ed70e000ca288","57602fe5b82256240055c657","57602ff6c811102000cef302","576030909b1a9a220067ca40","57604518b82256240055c722","5761a63d207db7170022fc14","5761b9a2b65324200072d79e","576832939f0bf4190014ffdf","576832c09f0bf4190014ffe1","576832cba151c10e004316f0","576832d5bb15f40e00a288ec","576832e107b1f30e0039c645","577680bf3cee3a0e00a000bc","577ff3b1ff48990e000c6806","5783f78c5cbce30e0074e2b7","5783f86292edb92200e6101c","5783f86dbfbba719003f0d8b","5783f8755cbce30e0074e2b8","5783f8b65cbce30e0074e2b9","5783f8bf5cbce30e0074e2ba","5783f8d8ce802f0e0087d574","578529f887c9280e0090394b","57852aeb87c9280e0090394d","57866e72b2f4060e00fa39ca","57ab6d5c39c2fd1900191879","57f39451ab0ee12000bef915","582499a0d90fa027009b259e","58c29df1258e5a1900b60478"],"is_deprecated":false,"is_hidden":false,"is_beta":false,"is_stable":true,"codename":"2016","version_clean":"1.0.0","version":"1"},"__v":17,"updates":[],"next":{"pages":[],"description":""},"createdAt":"2016-07-13T16:40:18.278Z","link_external":false,"link_url":"","githubsync":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":true,"order":3,"body":"Para acessar o ambiente de testes você precisa de uma conta Gerencianet. <a href=\"https://gerencianet.com.br/#abrirconta\" title=\"Cadastro ao nosso sistema, seja nosso cliente\" target=\"_blank\">Crie sua conta</a>.\n\nO Playground (também chamado de \"sandbox\") é um ambiente de desenvolvimento/testes no qual o integrador, independente da operação a ser realizada, pode utilizar para conhecer o mecanismo e o fluxo de pagamento em um ambiente 100% de teste e descomplicado. [Conheça mais](https://dev.gerencianet.com.br/docs/playground) sobre o Playground oferecido pela Gerencianet.\n\nUma assinatura é um conjunto de transações geradas de forma recorrente, podendo ser cobrada por boleto bancário ou cartão de crédito. Para mais detalhes sobre assinaturas, <a href=\"https://dev.gerencianet.com.br/docs/assinaturas-introducao\" target=\"_blank\">confira a seção específica</a>.\n\nPara criar uma assinatura, é bem simples e requer apenas três passos:\n\n1. Primeiro, [crie o plano de assinatura](https://dev.gerencianet.com.br/docs/playground-assinaturas#plan) através do endpoint <code>POST /plan</code>;\n\n2. Agora, [crie assinaturas](https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription) para vincular ao plano através do endpoint <code>POST /plan/:id/subscription</code>;\n\n3. Por fim, defina a [forma de pagamento da assinatura](https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay) através do endpoint <code>POST /subscription/:id/pay</code>.\n\nA seguir, confira todos os endpoints presentes em nosso Playground, dentro da modalidade de \"Assinaturas\":\n\n<ul><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan\">/plan</a> <em>(cria o plano de assinatura)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plans\">/plans</a> <em>(retorna informações de um plano)</em></div></li><li><div class=\"\"><span class=\"delete\">DELETE</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id\">/plan/:id</a> <em>(cancela um plano de assinatura)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription\">/plan/:id/subscription</a> <em>(cria assinaturas para vincular a planos)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id\">/subscription/:id</a> <em>(retorna informações de uma assinatura vinculada a um plano)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_cancel\">/subscription/:id/cancel</a> <em>(cancelar inscrições ativas em um plano de assinaturas)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_metadata\">/subscription/:id/metadata</a> <em>(incluir \"notification_url\" e \"custom_id\" em uma assinatura existente)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay\">/subscription/:id/pay</a> <em>(associa método de pagamento à uma assinatura já criada)</em></div></li></ul>\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plan\"><span class=\"post\">POST</span></a><strong class=\"text-endpoint\">/plan</strong></div>\n\nCria o plano de assinatura, sendo definido pelo integrador o nome do plano, intervalo (em meses) em que a assinatura será gerada e a quantidade de repetições que a cobrança será gerada.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /plan</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/clhGYT9QFCR5nOP84DHq_b2c4e65e98654643ab98cca2478797df.png\",\n        \"b2c4e65e98654643ab98cca2478797df.png\",\n        \"1432\",\n        \"369\",\n        \"#518865\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que cria plano de assinatura no Playground. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"name\\\": \\\"Plano de Internet - Velocidade 10 Mb\\\",\\n  \\\"interval\\\": 1,\\n  \\\"repeats\\\": 12\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200, // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n  \\\"data\\\": {\\n    \\\"plan_id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n    \\\"name\\\": \\\"Plano de Internet - Velocidade 10 Mb\\\", // nome do plano de assinatura\\n    \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n    \\\"repeats\\\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n    \\\"created_at\\\": \\\"2016-06-28 15:48:32\\\" // data e hora da criação da transação\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    },\n    {\n      \"code\": \"{\\n  \\\"id\\\": \\\"/Plan\\\",\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"properties\\\": {\\n    \\\"name\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"minLength\\\": 1,\\n      \\\"maxLength\\\": 255\\n    },\\n    \\\"interval\\\": {\\n      \\\"type\\\": \\\"integer\\\",\\n      \\\"minimum\\\": 1,\\n      \\\"exclusiveMinimum\\\": false,\\n      \\\"maximum\\\": 24,\\n      \\\"exclusiveMaximum\\\": false\\n    },\\n    \\\"repeats\\\": {\\n      \\\"type\\\": [\\n        \\\"integer\\\",\\n        \\\"null\\\"\\n      ],\\n      \\\"minimum\\\": 2,\\n      \\\"maximum\\\": 120,\\n      \\\"exclusiveMinimum\\\": false,\\n      \\\"exclusiveMaximum\\\": false\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"name\\\",\\n    \\\"interval\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON define que a assinatura é chamada \"Plano de Internet - Velocidade 10 Mb\", a cobrança é mensal (todo mês) e será gerada 12 cobranças (ou até que o plano seja cancelado).\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plans\"><span class=\"get\">GET</span></a><strong class=\"text-endpoint\">/plans</strong></div>\n\nBusca informações relacionadas à uma assinatura. Existem filtros avançados que podem ser utilizados para localizar, tais como:\n\n- <code>Name</code>: retorna resultados a partir da procura pelo nome do plano cadastrado previamente;\n- <code>Limit</code>: limite máximo de registros de resposta;\n- <code>Offset</code>: determina a partir de qual registro a busca será realizada.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>GET /plans</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/vazABL6QAamjzLh86QdC_2a92fe6ff7af4d28a1941d6212b4318a.png\",\n        \"2a92fe6ff7af4d28a1941d6212b4318a.png\",\n        \"1431\",\n        \"218\",\n        \"#19aabf\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para buscar informações relacionadas à uma assinatura criada previamente em Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar os parâmetros de entrada <code>name</code>, <code>limit</code> e <code>offset</code> da assinatura desejada.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Parâmetro de entrada: informe a \\\"name\\\", \\\"limit\\\" e \\\"offset\\\" da assinatura desejada\",\n      \"language\": \"text\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200, // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n  \\\"data\\\": [\\n    {\\n      \\\"plan_id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"name\\\": \\\"Plano de Internet - Velocidade 1 Mb\\\", // nome do plano de assinatura\\n      \\\"interval\\\": 1, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n      \\\"created_at\\\": \\\"2016-05-02\\\" // data e hora da criação da transação\\n    },\\n    {\\n      \\\"plan_id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"name\\\": \\\"Plano de Internet - Velocidade 10 Mb\\\", // nome do plano de assinatura\\n      \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n      \\\"created_at\\\": \\\"2016-06-28\\\" // data e hora da criação da transação\\n    },\\n    {\\n      \\\"plan_id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"name\\\": \\\"Plano de Internet - Velocidade 20 Mb\\\", // nome do plano de assinatura\\n      \\\"interval\\\": 10, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n      \\\"created_at\\\": \\\"2016-06-29\\\" // data e hora da criação da transação\\n    },\\n    {\\n      \\\"plan_id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"name\\\": \\\"Plano de Internet - Velocidade 30 Mb\\\", // nome do plano de assinatura\\n      \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n      \\\"created_at\\\": \\\"2016-06-29\\\" // data e hora da criação da transação\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    }\n  ]\n}\n[/block]\nEsse JSON retorna informações relacionadas à uma assinatura, podendo utilizar algum dos três parâmetros de entrada <code>name</code>, <code>limit</code> e <code>offset</code> para buscar - se nada for informado, retorna todas as assinaturas criadas em Playground.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plan_id\"><span class=\"delete\">DELETE</span></a><strong class=\"text-endpoint\">/plan/:id</strong></div>\n\nPermite cancelar um plano de assinatura. Para tal, você deve informar o <code>plan_id</code>.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>DELETE /plan/:id</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/2ST1rndQN2jiuMdatW2v_9d4fd04fbb6b426e83379297c6fe2610.png\",\n        \"9d4fd04fbb6b426e83379297c6fe2610.png\",\n        \"1431\",\n        \"126\",\n        \"#d33e1e\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para cancelar um plano de assinatura. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>plan_id</code> do plano de assinatura desejada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Parâmetro de entrada: informe o \\\"plan_id\\\" do plano de assinatura desejado\",\n      \"language\": \"text\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200 // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    }\n  ]\n}\n[/block]\nEsse JSON permite cancelar um plano de assinatura criado em Playground através de seu <code>plan_id</code>.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plan_id_subscription\"><span class=\"post\">POST</span></a><strong class=\"text-endpoint\">/plan/:id/subscription</strong></div>\n\nCria uma assinatura quando você precisa cobrar de forma recorrente seus clientes. Desta forma, os custos subsequentes serão criados automaticamente com base na configuração do plano. Para tal, você deve informar o <code>plan_id</code> do plano criado previamente no qual deseja associar a uma assinatura.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /plan/:id/subscription</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/OUOm10oXQgrnFiVHE7r5_c846266cb2a243388fdb5513720e1576.png\",\n        \"c846266cb2a243388fdb5513720e1576.png\",\n        \"1433\",\n        \"395\",\n        \"#538566\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que permite criar assinaturas e associá-las a planos para efetuar cobranças de forma recorrente, bem como a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que você deve informar o <code>plan_id</code> do plano que deseja associar à uma assinatura:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"items\\\": [\\n    {\\n      \\\"name\\\": \\\"Internet - Mensalidade\\\",\\n      \\\"value\\\": 6990,\\n      \\\"amount\\\": 1\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200, // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n  \\\"data\\\": {\\n    \\\"subscription_id\\\": numero_subscription_id, // número ID referente à inscrição gerada\\n    \\\"status\\\": \\\"new\\\", // cobrança gerada, aguardando definição da forma de pagamento\\n    \\\"custom_id\\\": null, // identificador próprio opcional\\n    \\\"charges\\\": [\\n      {\\n        \\\"charge_id\\\": numero_charge_id, // número da ID referente à transação gerada\\n        \\\"status\\\": \\\"new\\\", // cobrança gerada, aguardando definição da forma de pagamento\\n        \\\"total\\\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\\n        \\\"parcel\\\": 1 // número de parcelas\\n      }\\n    ],\\n    \\\"created_at\\\": \\\"2016-06-29 10:42:59\\\" // data e hora da criação da transação\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    },\n    {\n      \"code\": \"{\\n  \\\"id\\\": \\\"/Subscription\\\",\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"properties\\\": {\\n    \\\"items\\\": {\\n      \\\"id\\\": \\\"/Item\\\",\\n      \\\"type\\\": \\\"array\\\",\\n      \\\"minItems\\\": 1,\\n      \\\"items\\\": {\\n        \\\"type\\\": \\\"object\\\",\\n        \\\"properties\\\": {\\n          \\\"name\\\": {\\n            \\\"type\\\": \\\"string\\\",\\n            \\\"minLength\\\": 1,\\n            \\\"maxLength\\\": 255,\\n            \\\"pattern\\\": \\\"^[^<>]+$\\\"\\n          },\\n          \\\"value\\\": {\\n            \\\"type\\\": \\\"integer\\\",\\n            \\\"minimum\\\": 0\\n          },\\n          \\\"amount\\\": {\\n            \\\"type\\\": \\\"integer\\\",\\n            \\\"minimum\\\": 1,\\n            \\\"exclusiveMinimum\\\": false\\n          }\\n        },\\n        \\\"required\\\": [\\n          \\\"name\\\",\\n          \\\"value\\\"\\n        ]\\n      }\\n    },\\n    \\\"shippings\\\": {\\n      \\\"id\\\": \\\"/Shipping\\\",\\n      \\\"type\\\": \\\"array\\\",\\n      \\\"minItems\\\": 1,\\n      \\\"items\\\": {\\n        \\\"type\\\": \\\"object\\\",\\n        \\\"properties\\\": {\\n          \\\"name\\\": {\\n            \\\"type\\\": \\\"string\\\",\\n            \\\"maxLength\\\": 255\\n          },\\n          \\\"value\\\": {\\n            \\\"type\\\": \\\"integer\\\",\\n            \\\"minimum\\\": 0\\n          },\\n          \\\"payee_code\\\": {\\n            \\\"type\\\": \\\"string\\\",\\n            \\\"pattern\\\": \\\"^[a-fA-F0-9]{32}$\\\"\\n          }\\n        },\\n        \\\"required\\\": [\\n          \\\"name\\\",\\n          \\\"value\\\"\\n        ]\\n      }\\n    },\\n    \\\"metadata\\\": {\\n      \\\"type\\\": \\\"object\\\",\\n      \\\"properties\\\": {\\n        \\\"custom_id\\\": {\\n          \\\"type\\\": [\\n            \\\"string\\\",\\n            \\\"null\\\"\\n          ]\\n        },\\n        \\\"notification_url\\\": {\\n          \\\"type\\\": [\\n            \\\"string\\\",\\n            \\\"null\\\"\\n          ],\\n          \\\"format\\\": \\\"uri\\\"\\n        }\\n      }\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"items\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON associa a assinatura intitulada \"Internet - Mensalidade\" ao plano de plano de assinatura (<code>plan_id</code>) informado no parâmetro de entrada, valor de R$ 69,90 e quantidade 1.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"subscription_id\"><span class=\"get\">GET</span></a><strong class=\"text-endpoint\">/subscription/:id</strong></div>\n\nPossibilita buscar informações de uma assinatura que está vinculada a um plano.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>GET /subscription/:id</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/i9dGJZ4sTq3PrEs2jh3S_5dfc062c2e594696be315c5c6f85c1f1.png\",\n        \"5dfc062c2e594696be315c5c6f85c1f1.png\",\n        \"1433\",\n        \"120\",\n        \"#16a6b9\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para buscar informações relacionadas à inscrição de uma assinatura vinculada a um plano criado no Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Parâmetro de entrada: informe a \\\"subscription_id\\\" da transação desejada\",\n      \"language\": \"text\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200, // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n  \\\"data\\\": {\\n    \\\"subscription_id\\\": numero_subscription_id, // número ID referente à inscrição gerada\\n    \\\"value\\\": 6990, // valor da inscrição (6990 equivale a R$69,90)\\n    \\\"status\\\": \\\"new\\\", // cobrança gerada, aguardando definição da forma de pagamento\\n    \\\"custom_id\\\": null, // identificador próprio opcional\\n    \\\"notification_url\\\": null, // endereço da sua URL que receberá as notificações de mudanças de status das transações\\n    \\\"payment_method\\\": null, // método de pagamento (null = ainda não foi definido), (banking_billet = boleto bancário) ou (credit_card = cartão de crédito)\\n    \\\"next_execution\\\": null, // data da próxima execução\\n    \\\"next_expire_at\\\": null, // data do próximo vencimento no formato 2016-12-30\\n    \\\"plan\\\": {\\n      \\\"plan_id\\\": numero_plan_id, // número ID referente ao plano de assinatura criado\\n      \\\"name\\\": \\\"Plano de Internet - Velocidade 10 Mb\\\", // nome do plano de assinatura\\n      \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n    },\\n    \\\"occurrences\\\": 0,\\n    \\\"created_at\\\": \\\"2016-06-29 10:42:59\\\", // data e hora da criação da transação\\n    \\\"history\\\": [\\n      {\\n        \\\"charge_id\\\": numero_charge_id, // número da ID referente à transação gerada\\n        \\\"status\\\": \\\"new\\\", // cobrança gerada, aguardando definição da forma de pagamento\\n        \\\"created_at\\\": \\\"2016-06-29 10:42:59\\\" // data e hora da criação da transação\\n      }\\n    ]\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    }\n  ]\n}\n[/block]\nEsse JSON retorna informações de uma assinatura que está vinculada a um plano, de acordo com o <code>subscription_id</code> informado no parâmetro de entrada.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"subscription_id_cancel\"><span class=\"put\">PUT</span></a><strong class=\"text-endpoint\">/subscription/:id/cancel</strong></div>\n\nPermite cancelar assinaturas ativas em um plano de assinaturas. Para tal, deve-se informar o <code>subscription_id</code> da assinatura que deseja cancelar.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>PUT /subscription/:id/cancel</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/jQrLFa7NTDaWczawU9CN_4beae89958e14d8ea1ed9f941d6b1027.png\",\n        \"4beae89958e14d8ea1ed9f941d6b1027.png\",\n        \"1432\",\n        \"119\",\n        \"#ed8525\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que permite cancelar inscrições ativas em um plano de assinaturas criado em Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Parâmetro de entrada: informe a \\\"subscription_id\\\" da transação desejada\",\n      \"language\": \"text\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200 // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    }\n  ]\n}\n[/block]\nEsse JSON permite cancelar assinaturas ativas em um plano de assinaturas criado em Playground, de acordo com o <code>subscription_id</code> informado no parâmetro de entrada.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"subscription_id_metadata\"><span class=\"put\">PUT</span></a><strong class=\"text-endpoint\">/subscription/:id/metadata</strong></div>\n\nAtualiza o status de uma determinada assinatura e envia uma notificação para a URL cadastrada no sistema.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>PUT /subscription/:id/metadata</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/c8lotkhRueQt6RT5fe49_13773fa70d6549a98b5613328c1fc94d.png\",\n        \"13773fa70d6549a98b5613328c1fc94d.png\",\n        \"1436\",\n        \"397\",\n        \"#d69131\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para alterar a URL de notificação e o custom_id de uma transação já existente no Playground. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"notification_url\\\": null,\\n  \\\"custom_id\\\": null\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200 // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    },\n    {\n      \"code\": \"{\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"minProperties\\\": 1,\\n  \\\"id\\\": \\\"/SubscriptionMetadataUpdate\\\",\\n  \\\"properties\\\": {\\n    \\\"notification_url\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"format\\\": \\\"uri\\\",\\n      \\\"minLength\\\": \\\"1\\\",\\n      \\\"maxLength\\\": \\\"255\\\"\\n    },\\n    \\\"custom_id\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"minLength\\\": \\\"1\\\",\\n      \\\"maxLength\\\": \\\"255\\\",\\n      \\\"pattern\\\": \\\"^[a-zA-Z0-9\\\\\\\\_\\\\\\\\-\\\\\\\\s]+$\\\"\\n    }\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON permite alterar a URL de notificação e o custom_id de uma determinada transação. A tag <code>notification_url</code> é um endereço de sua URL válida que receberá as notificações de mudanças de status das transações, e a tag <code>custom_id</code> permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"subscription_id_pay\"><span class=\"post\">POST</span></a><strong class=\"text-endpoint\">/subscription/:id/pay</strong></div>\n\nDefine uma forma recorrente de pagamento à uma determinada assinatura. Ela poderá ser por cartão de crédito ou boleto bancário:\n\n- *Cartão:* fará débitos em seu cartão mensalmente de acordo conforme o número de repetições definido pelo plano;\n\n- *Boleto:* será gerado conforme o número de repetições definido pelo plano, podendo ser enviado por e-mail. O assinante ou o vendedor podem cancelar a assinatura a qualquer momento. Quando isso ocorre, os dois são avisados via e-mail, com todos os detalhes do cancelamento.\n\nNa imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /subscription/:id/pay</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/Y99cyUCmSuiVhCCIecF9_4db100cda0194de9b9e810624c6e170c.png\",\n        \"4db100cda0194de9b9e810624c6e170c.png\",\n        \"1431\",\n        \"432\",\n        \"#379cb1\",\n        \"\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para associar um método de pagamento à uma assinatura já criada em Playground - o integrador pode escolher entre <code>banking_billet</code> ou <code>credit_card</code> (boleto bancário e cartão de crédito, respectivamente). Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura associar à forma de pagamento:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"payment\\\": {\\n    \\\"credit_card\\\": {\\n      \\\"customer\\\": {\\n        \\\"name\\\": \\\"Gorbadoc Oldbuck\\\",\\n        \\\"cpf\\\": \\\"94271564656\\\",\\n        \\\"email\\\": \\\"email_do_cliente:::at:::servidor.com.br\\\",\\n        \\\"birth\\\": \\\"1990-08-29\\\",\\n        \\\"phone_number\\\": \\\"5144916523\\\"\\n      },\\n      \\\"payment_token\\\": \\\"\\\",\\n      \\\"billing_address\\\": {\\n        \\\"street\\\": \\\"Avenida Juscelino Kubitschek\\\",\\n        \\\"number\\\": \\\"909\\\",\\n        \\\"neighborhood\\\": \\\"Bauxita\\\",\\n        \\\"zipcode\\\": \\\"35400000\\\",\\n        \\\"city\\\": \\\"Ouro Preto\\\",\\n        \\\"complement\\\": \\\"\\\",\\n        \\\"state\\\": \\\"MG\\\"\\n      }\\n    }\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada (cartão)\"\n    },\n    {\n      \"code\": \"{\\n  \\\"payment\\\": {\\n    \\\"banking_billet\\\": {\\n      \\\"customer\\\": {\\n        \\\"name\\\": \\\"Gorbadoc Oldbuck\\\",\\n        \\\"cpf\\\": \\\"94271564656\\\",\\n        \\\"email\\\": \\\"email_do_cliente@servidor.com.br\\\",\\n        \\\"phone_number\\\": \\\"5144916523\\\",\\n        \\\"address\\\": {\\n          \\\"street\\\": \\\"Avenida Juscelino Kubitschek\\\",\\n          \\\"number\\\": \\\"909\\\",\\n          \\\"neighborhood\\\": \\\"Bauxita\\\",\\n          \\\"zipcode\\\": \\\"35400000\\\",\\n          \\\"city\\\": \\\"Ouro Preto\\\",\\n          \\\"complement\\\": \\\"\\\",\\n          \\\"state\\\": \\\"MG\\\"\\n        }\\n      },\\n      \\\"expire_at\\\": \\\"2016-12-30\\\",\\n      \\\"instructions\\\": [\\n        \\\"Linha de instrução 1 (tag instructions é opcional)\\\",\\n        \\\"Linha de instrução 2 (tag instructions é opcional)\\\",\\n        \\\"Linha de instrução 3 (tag instructions é opcional)\\\",\\n        \\\"Linha de instrução 4 (tag instructions é opcional)\\\"\\n      ]\\n    }\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada (boleto)\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200, // retorno HTTP \\\"200\\\" informando que o pedido foi bem sucedido\\n  \\\"data\\\": {\\n    \\\"subscription_id\\\": numero_subscription_id, // número ID referente à inscrição gerada\\n    \\\"status\\\": \\\"active\\\", // assinatura ativa - todas as cobranças estão sendo geradas\\n    \\\"plan\\\": {\\n      \\\"id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\\n    },\\n    \\\"charge\\\": {\\n      \\\"id\\\": numero_charge_id, // número da ID referente à transação gerada\\n      \\\"status\\\": \\\"waiting\\\" // forma de pagamento selecionada, aguardando a confirmação do pagamento\\n    },\\n    \\\"total\\\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\\n    \\\"payment\\\": \\\"credit_card\\\" // forma de pagamento (credit_card equivale a cartão de crédito)\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída (cartão)\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200,\\n  \\\"data\\\": {\\n    \\\"subscription_id\\\": 2206,\\n    \\\"status\\\": \\\"active\\\", // assinatura ativa - todas as cobranças estão sendo geradas\\n    \\\"barcode\\\": \\\"linha_digitavel\\\", // linha digitável do boleto\\n    \\\"link\\\": \\\"endereco_http_link_boleto\\\", // link do boleto gerado\\n    \\\"expire_at\\\": \\\"2016-12-30\\\", // data de vencimento do boleto no seguinte formato: 2016-12-30 (ou seja, equivale a 30/12/2016)\\n    \\\"plan\\\": {\\n      \\\"id\\\": numero_plan_id, // número da ID referente ao plano de assinatura criado\\n      \\\"interval\\\": 12, // intervalo que as cobranças devem ser geradas, em meses\\n      \\\"repeats\\\": null\\n    },\\n    \\\"charge\\\": {\\n      \\\"id\\\": numero_charge_id,\\n      \\\"status\\\": \\\"waiting\\\"\\n    },\\n    \\\"total\\\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\\n    \\\"payment\\\": \\\"banking_billet\\\" // forma de pagamento (banking_billet equivale a boleto)\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída (boleto)\"\n    },\n    {\n      \"code\": \"{\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"id\\\": \\\"/SubscriptionPay\\\",\\n  \\\"properties\\\": {\\n    \\\"payment\\\": {\\n      \\\"type\\\": \\\"object\\\",\\n      \\\"maxProperties\\\": 1,\\n      \\\"minProperties\\\": 1,\\n      \\\"properties\\\": {\\n        \\\"banking_billet\\\": {\\n          \\\"type\\\": \\\"object\\\",\\n          \\\"id\\\": \\\"/Billet\\\",\\n          \\\"properties\\\": {\\n            \\\"customer\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/BasicCustomer\\\",\\n              \\\"properties\\\": {\\n                \\\"name\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 255,\\n                  \\\"pattern\\\": \\\"^[ ]*(.+[ ]+)+.+[ ]*$\\\"\\n                },\\n                \\\"cpf\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 11,\\n                  \\\"maxLength\\\": 11\\n                },\\n                \\\"email\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"maxLength\\\": 255,\\n                  \\\"pattern\\\": \\\"^[A-Za-z0-9_\\\\\\\\-]+(?:[.][A-Za-z0-9_\\\\\\\\-]+)*@[A-Za-z0-9_]+(?:[-.][A-Za-z0-9_]+)*\\\\\\\\.[A-Za-z0-9_]+$\\\"\\n                },\\n                \\\"phone_number\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^[1-9]{2}9?[0-9]{8}$\\\"\\n                },\\n                \\\"birth\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\\\"\\n                },\\n                \\\"address\\\": {\\n                  \\\"type\\\": \\\"object\\\",\\n                  \\\"id\\\": \\\"/Address\\\",\\n                  \\\"properties\\\": {\\n                    \\\"street\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 200\\n                    },\\n                    \\\"number\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"integer\\\"\\n                      ],\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 55\\n                    },\\n                    \\\"neighborhood\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"zipcode\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^[0-9]{8}$\\\"\\n                    },\\n                    \\\"city\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"complement\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 45\\n                    },\\n                    \\\"state\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\\\"\\n                    }\\n                  },\\n                  \\\"required\\\": [\\n                    \\\"street\\\",\\n                    \\\"number\\\",\\n                    \\\"neighborhood\\\",\\n                    \\\"zipcode\\\",\\n                    \\\"city\\\",\\n                    \\\"state\\\"\\n                  ]\\n                },\\n                \\\"post_office_address\\\": {\\n                  \\\"type\\\": \\\"object\\\",\\n                  \\\"id\\\": \\\"/Address\\\",\\n                  \\\"properties\\\": {\\n                    \\\"street\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 200\\n                    },\\n                    \\\"number\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"integer\\\"\\n                      ],\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 55\\n                    },\\n                    \\\"neighborhood\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"zipcode\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^[0-9]{8}$\\\"\\n                    },\\n                    \\\"city\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"complement\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 45\\n                    },\\n                    \\\"state\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\\\"\\n                    }\\n                  },\\n                  \\\"required\\\": [\\n                    \\\"street\\\",\\n                    \\\"number\\\",\\n                    \\\"neighborhood\\\",\\n                    \\\"zipcode\\\",\\n                    \\\"city\\\",\\n                    \\\"state\\\"\\n                  ]\\n                },\\n                \\\"juridical_person\\\": {\\n                  \\\"type\\\": \\\"object\\\",\\n                  \\\"id\\\": \\\"/JuridicalPerson\\\",\\n                  \\\"properties\\\": {\\n                    \\\"corporate_name\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255,\\n                      \\\"pattern\\\": \\\"^[ ]*(.+[ ]+)+.+[ ]*$\\\"\\n                    },\\n                    \\\"cnpj\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 14,\\n                      \\\"maxLength\\\": 14\\n                    }\\n                  },\\n                  \\\"required\\\": [\\n                    \\\"corporate_name\\\",\\n                    \\\"cnpj\\\"\\n                  ]\\n                }\\n              },\\n              \\\"required\\\": [\\n                \\\"phone_number\\\"\\n              ]\\n            },\\n            \\\"expire_at\\\": {\\n              \\\"type\\\": \\\"string\\\",\\n              \\\"pattern\\\": \\\"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\\\"\\n            },\\n            \\\"instructions\\\": {\\n              \\\"type\\\": \\\"array\\\",\\n              \\\"minItems\\\": 1,\\n              \\\"maxItems\\\": 4,\\n              \\\"items\\\": {\\n                \\\"type\\\": \\\"string\\\",\\n                \\\"minLength\\\": 1,\\n                \\\"maxLength\\\": 90\\n              }\\n            },\\n            \\\"discount\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/Discount\\\",\\n              \\\"properties\\\": {\\n                \\\"type\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"enum\\\": [\\n                    \\\"percentage\\\",\\n                    \\\"currency\\\"\\n                  ]\\n                },\\n                \\\"value\\\": {\\n                  \\\"type\\\": \\\"integer\\\",\\n                  \\\"minimum\\\": 1\\n                }\\n              },\\n              \\\"required\\\": [\\n                \\\"type\\\",\\n                \\\"value\\\"\\n              ]\\n            }\\n          },\\n          \\\"required\\\": [\\n            \\\"customer\\\",\\n            \\\"expire_at\\\"\\n          ]\\n        },\\n        \\\"credit_card\\\": {\\n          \\\"type\\\": \\\"object\\\",\\n          \\\"id\\\": \\\"/CreditCard\\\",\\n          \\\"properties\\\": {\\n            \\\"customer\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/FullCustomer\\\",\\n              \\\"properties\\\": {\\n                \\\"name\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 255,\\n                  \\\"pattern\\\": \\\"^[ ]*(.+[ ]+)+.+[ ]*$\\\"\\n                },\\n                \\\"cpf\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 11,\\n                  \\\"maxLength\\\": 11\\n                },\\n                \\\"email\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"maxLength\\\": 255,\\n                  \\\"pattern\\\": \\\"^[A-Za-z0-9_\\\\\\\\-]+(?:[.][A-Za-z0-9_\\\\\\\\-]+)*@[A-Za-z0-9_]+(?:[-.][A-Za-z0-9_]+)*\\\\\\\\.[A-Za-z0-9_]+$\\\"\\n                },\\n                \\\"phone_number\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^[1-9]{2}9?[0-9]{8}$\\\"\\n                },\\n                \\\"birth\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\\\"\\n                },\\n                \\\"address\\\": {\\n                  \\\"type\\\": \\\"object\\\",\\n                  \\\"id\\\": \\\"/Address\\\",\\n                  \\\"properties\\\": {\\n                    \\\"street\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 200\\n                    },\\n                    \\\"number\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"integer\\\"\\n                      ],\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 55\\n                    },\\n                    \\\"neighborhood\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"zipcode\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^[0-9]{8}$\\\"\\n                    },\\n                    \\\"city\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"complement\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 45\\n                    },\\n                    \\\"state\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"pattern\\\": \\\"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\\\"\\n                    }\\n                  },\\n                  \\\"required\\\": [\\n                    \\\"street\\\",\\n                    \\\"number\\\",\\n                    \\\"neighborhood\\\",\\n                    \\\"zipcode\\\",\\n                    \\\"city\\\",\\n                    \\\"state\\\"\\n                  ]\\n                },\\n                \\\"juridical_person\\\": {\\n                  \\\"type\\\": \\\"object\\\",\\n                  \\\"id\\\": \\\"/JuridicalPerson\\\",\\n                  \\\"properties\\\": {\\n                    \\\"corporate_name\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 1,\\n                      \\\"maxLength\\\": 255,\\n                      \\\"pattern\\\": \\\"^[ ]*(.+[ ]+)+.+[ ]*$\\\"\\n                    },\\n                    \\\"cnpj\\\": {\\n                      \\\"type\\\": \\\"string\\\",\\n                      \\\"minLength\\\": 14,\\n                      \\\"maxLength\\\": 14\\n                    }\\n                  },\\n                  \\\"required\\\": [\\n                    \\\"corporate_name\\\",\\n                    \\\"cnpj\\\"\\n                  ]\\n                }\\n              },\\n              \\\"required\\\": [\\n                \\\"email\\\",\\n                \\\"phone_number\\\",\\n                \\\"birth\\\"\\n              ]\\n            },\\n            \\\"billing_address\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/Address\\\",\\n              \\\"properties\\\": {\\n                \\\"street\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 200\\n                },\\n                \\\"number\\\": {\\n                  \\\"type\\\": [\\n                    \\\"string\\\",\\n                    \\\"integer\\\"\\n                  ],\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 55\\n                },\\n                \\\"neighborhood\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 255\\n                },\\n                \\\"zipcode\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^[0-9]{8}$\\\"\\n                },\\n                \\\"city\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"minLength\\\": 1,\\n                  \\\"maxLength\\\": 255\\n                },\\n                \\\"complement\\\": {\\n                  \\\"type\\\": [\\n                    \\\"string\\\",\\n                    \\\"null\\\"\\n                  ],\\n                  \\\"minLength\\\": 0,\\n                  \\\"maxLength\\\": 45\\n                },\\n                \\\"state\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"pattern\\\": \\\"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\\\"\\n                }\\n              },\\n              \\\"required\\\": [\\n                \\\"street\\\",\\n                \\\"number\\\",\\n                \\\"neighborhood\\\",\\n                \\\"zipcode\\\",\\n                \\\"city\\\",\\n                \\\"state\\\"\\n              ]\\n            },\\n            \\\"payment_token\\\": {\\n              \\\"type\\\": \\\"string\\\",\\n              \\\"pattern\\\": \\\"^[a-fA-F0-9]{40}$\\\"\\n            },\\n            \\\"discount\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/Discount\\\",\\n              \\\"properties\\\": {\\n                \\\"type\\\": {\\n                  \\\"type\\\": \\\"string\\\",\\n                  \\\"enum\\\": [\\n                    \\\"percentage\\\",\\n                    \\\"currency\\\"\\n                  ]\\n                },\\n                \\\"value\\\": {\\n                  \\\"type\\\": \\\"integer\\\",\\n                  \\\"minimum\\\": 1\\n                }\\n              },\\n              \\\"required\\\": [\\n                \\\"type\\\",\\n                \\\"value\\\"\\n              ]\\n            }\\n          },\\n          \\\"required\\\": [\\n            \\\"customer\\\",\\n            \\\"billing_address\\\",\\n            \\\"payment_token\\\"\\n          ]\\n        }\\n      }\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"payment\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON associa uma determinada assinatura a uma forma de pagamento, podendo ser boleto bancário ou cartão de crédito. No caso de pagamento por cartão, o \"payment_token\" é o token de pagamento, que é obtido através de código Javascript disponível para cada conta Gerencianet - para boleto o \"payment_token\" não é necessário.","excerpt":"Você está em: *\"Ambiente de Testes > Playground: Assinaturas\"*","slug":"playground-assinaturas","type":"basic","title":"Playground: Assinaturas"}

Playground: Assinaturas

Você está em: *"Ambiente de Testes > Playground: Assinaturas"*

Para acessar o ambiente de testes você precisa de uma conta Gerencianet. <a href="https://gerencianet.com.br/#abrirconta" title="Cadastro ao nosso sistema, seja nosso cliente" target="_blank">Crie sua conta</a>. O Playground (também chamado de "sandbox") é um ambiente de desenvolvimento/testes no qual o integrador, independente da operação a ser realizada, pode utilizar para conhecer o mecanismo e o fluxo de pagamento em um ambiente 100% de teste e descomplicado. [Conheça mais](https://dev.gerencianet.com.br/docs/playground) sobre o Playground oferecido pela Gerencianet. Uma assinatura é um conjunto de transações geradas de forma recorrente, podendo ser cobrada por boleto bancário ou cartão de crédito. Para mais detalhes sobre assinaturas, <a href="https://dev.gerencianet.com.br/docs/assinaturas-introducao" target="_blank">confira a seção específica</a>. Para criar uma assinatura, é bem simples e requer apenas três passos: 1. Primeiro, [crie o plano de assinatura](https://dev.gerencianet.com.br/docs/playground-assinaturas#plan) através do endpoint <code>POST /plan</code>; 2. Agora, [crie assinaturas](https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription) para vincular ao plano através do endpoint <code>POST /plan/:id/subscription</code>; 3. Por fim, defina a [forma de pagamento da assinatura](https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay) através do endpoint <code>POST /subscription/:id/pay</code>. A seguir, confira todos os endpoints presentes em nosso Playground, dentro da modalidade de "Assinaturas": <ul><li><div class=""><span class="post">POST</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan">/plan</a> <em>(cria o plano de assinatura)</em></div></li><li><div class=""><span class="get">GET</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plans">/plans</a> <em>(retorna informações de um plano)</em></div></li><li><div class=""><span class="delete">DELETE</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id">/plan/:id</a> <em>(cancela um plano de assinatura)</em></div></li><li><div class=""><span class="post">POST</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id_subscription">/plan/:id/subscription</a> <em>(cria assinaturas para vincular a planos)</em></div></li><li><div class=""><span class="get">GET</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id">/subscription/:id</a> <em>(retorna informações de uma assinatura vinculada a um plano)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_cancel">/subscription/:id/cancel</a> <em>(cancelar inscrições ativas em um plano de assinaturas)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_metadata">/subscription/:id/metadata</a> <em>(incluir "notification_url" e "custom_id" em uma assinatura existente)</em></div></li><li><div class=""><span class="post">POST</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_id_pay">/subscription/:id/pay</a> <em>(associa método de pagamento à uma assinatura já criada)</em></div></li></ul> <br> <hr> <div class="distancia_top"><a name="plan"><span class="post">POST</span></a><strong class="text-endpoint">/plan</strong></div> Cria o plano de assinatura, sendo definido pelo integrador o nome do plano, intervalo (em meses) em que a assinatura será gerada e a quantidade de repetições que a cobrança será gerada. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /plan</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/clhGYT9QFCR5nOP84DHq_b2c4e65e98654643ab98cca2478797df.png", "b2c4e65e98654643ab98cca2478797df.png", "1432", "369", "#518865", "" ] } ] } [/block] A seguir, um JSON simples que cria plano de assinatura no Playground. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método: [block:code] { "codes": [ { "code": "{\n \"name\": \"Plano de Internet - Velocidade 10 Mb\",\n \"interval\": 1,\n \"repeats\": 12\n}", "language": "json", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200, // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n \"data\": {\n \"plan_id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 10 Mb\", // nome do plano de assinatura\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n \"created_at\": \"2016-06-28 15:48:32\" // data e hora da criação da transação\n }\n}", "language": "json", "name": "Dados de Saída" }, { "code": "{\n \"id\": \"/Plan\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"interval\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"exclusiveMinimum\": false,\n \"maximum\": 24,\n \"exclusiveMaximum\": false\n },\n \"repeats\": {\n \"type\": [\n \"integer\",\n \"null\"\n ],\n \"minimum\": 2,\n \"maximum\": 120,\n \"exclusiveMinimum\": false,\n \"exclusiveMaximum\": false\n }\n },\n \"required\": [\n \"name\",\n \"interval\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON define que a assinatura é chamada "Plano de Internet - Velocidade 10 Mb", a cobrança é mensal (todo mês) e será gerada 12 cobranças (ou até que o plano seja cancelado). <br> <hr> <div class="distancia_top"><a name="plans"><span class="get">GET</span></a><strong class="text-endpoint">/plans</strong></div> Busca informações relacionadas à uma assinatura. Existem filtros avançados que podem ser utilizados para localizar, tais como: - <code>Name</code>: retorna resultados a partir da procura pelo nome do plano cadastrado previamente; - <code>Limit</code>: limite máximo de registros de resposta; - <code>Offset</code>: determina a partir de qual registro a busca será realizada. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>GET /plans</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/vazABL6QAamjzLh86QdC_2a92fe6ff7af4d28a1941d6212b4318a.png", "2a92fe6ff7af4d28a1941d6212b4318a.png", "1431", "218", "#19aabf", "" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para buscar informações relacionadas à uma assinatura criada previamente em Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar os parâmetros de entrada <code>name</code>, <code>limit</code> e <code>offset</code> da assinatura desejada. [block:code] { "codes": [ { "code": "Parâmetro de entrada: informe a \"name\", \"limit\" e \"offset\" da assinatura desejada", "language": "text", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200, // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n \"data\": [\n {\n \"plan_id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 1 Mb\", // nome do plano de assinatura\n \"interval\": 1, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n \"created_at\": \"2016-05-02\" // data e hora da criação da transação\n },\n {\n \"plan_id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 10 Mb\", // nome do plano de assinatura\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n \"created_at\": \"2016-06-28\" // data e hora da criação da transação\n },\n {\n \"plan_id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 20 Mb\", // nome do plano de assinatura\n \"interval\": 10, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n \"created_at\": \"2016-06-29\" // data e hora da criação da transação\n },\n {\n \"plan_id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 30 Mb\", // nome do plano de assinatura\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null, // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n \"created_at\": \"2016-06-29\" // data e hora da criação da transação\n }\n ]\n}", "language": "json", "name": "Dados de Saída" } ] } [/block] Esse JSON retorna informações relacionadas à uma assinatura, podendo utilizar algum dos três parâmetros de entrada <code>name</code>, <code>limit</code> e <code>offset</code> para buscar - se nada for informado, retorna todas as assinaturas criadas em Playground. <br> <hr> <div class="distancia_top"><a name="plan_id"><span class="delete">DELETE</span></a><strong class="text-endpoint">/plan/:id</strong></div> Permite cancelar um plano de assinatura. Para tal, você deve informar o <code>plan_id</code>. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>DELETE /plan/:id</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/2ST1rndQN2jiuMdatW2v_9d4fd04fbb6b426e83379297c6fe2610.png", "9d4fd04fbb6b426e83379297c6fe2610.png", "1431", "126", "#d33e1e", "" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para cancelar um plano de assinatura. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>plan_id</code> do plano de assinatura desejada: [block:code] { "codes": [ { "code": "Parâmetro de entrada: informe o \"plan_id\" do plano de assinatura desejado", "language": "text", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200 // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n}", "language": "json", "name": "Dados de Saída" } ] } [/block] Esse JSON permite cancelar um plano de assinatura criado em Playground através de seu <code>plan_id</code>. <br> <hr> <div class="distancia_top"><a name="plan_id_subscription"><span class="post">POST</span></a><strong class="text-endpoint">/plan/:id/subscription</strong></div> Cria uma assinatura quando você precisa cobrar de forma recorrente seus clientes. Desta forma, os custos subsequentes serão criados automaticamente com base na configuração do plano. Para tal, você deve informar o <code>plan_id</code> do plano criado previamente no qual deseja associar a uma assinatura. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /plan/:id/subscription</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/OUOm10oXQgrnFiVHE7r5_c846266cb2a243388fdb5513720e1576.png", "c846266cb2a243388fdb5513720e1576.png", "1433", "395", "#538566", "" ] } ] } [/block] A seguir, um JSON simples que permite criar assinaturas e associá-las a planos para efetuar cobranças de forma recorrente, bem como a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que você deve informar o <code>plan_id</code> do plano que deseja associar à uma assinatura: [block:code] { "codes": [ { "code": "{\n \"items\": [\n {\n \"name\": \"Internet - Mensalidade\",\n \"value\": 6990,\n \"amount\": 1\n }\n ]\n}", "language": "json", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200, // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n \"data\": {\n \"subscription_id\": numero_subscription_id, // número ID referente à inscrição gerada\n \"status\": \"new\", // cobrança gerada, aguardando definição da forma de pagamento\n \"custom_id\": null, // identificador próprio opcional\n \"charges\": [\n {\n \"charge_id\": numero_charge_id, // número da ID referente à transação gerada\n \"status\": \"new\", // cobrança gerada, aguardando definição da forma de pagamento\n \"total\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\n \"parcel\": 1 // número de parcelas\n }\n ],\n \"created_at\": \"2016-06-29 10:42:59\" // data e hora da criação da transação\n }\n}", "language": "json", "name": "Dados de Saída" }, { "code": "{\n \"id\": \"/Subscription\",\n \"type\": \"object\",\n \"properties\": {\n \"items\": {\n \"id\": \"/Item\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255,\n \"pattern\": \"^[^<>]+$\"\n },\n \"value\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"amount\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"exclusiveMinimum\": false\n }\n },\n \"required\": [\n \"name\",\n \"value\"\n ]\n }\n },\n \"shippings\": {\n \"id\": \"/Shipping\",\n \"type\": \"array\",\n \"minItems\": 1,\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"maxLength\": 255\n },\n \"value\": {\n \"type\": \"integer\",\n \"minimum\": 0\n },\n \"payee_code\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{32}$\"\n }\n },\n \"required\": [\n \"name\",\n \"value\"\n ]\n }\n },\n \"metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"custom_id\": {\n \"type\": [\n \"string\",\n \"null\"\n ]\n },\n \"notification_url\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"format\": \"uri\"\n }\n }\n }\n },\n \"required\": [\n \"items\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON associa a assinatura intitulada "Internet - Mensalidade" ao plano de plano de assinatura (<code>plan_id</code>) informado no parâmetro de entrada, valor de R$ 69,90 e quantidade 1. <br> <hr> <div class="distancia_top"><a name="subscription_id"><span class="get">GET</span></a><strong class="text-endpoint">/subscription/:id</strong></div> Possibilita buscar informações de uma assinatura que está vinculada a um plano. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>GET /subscription/:id</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/i9dGJZ4sTq3PrEs2jh3S_5dfc062c2e594696be315c5c6f85c1f1.png", "5dfc062c2e594696be315c5c6f85c1f1.png", "1433", "120", "#16a6b9", "" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para buscar informações relacionadas à inscrição de uma assinatura vinculada a um plano criado no Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada: [block:code] { "codes": [ { "code": "Parâmetro de entrada: informe a \"subscription_id\" da transação desejada", "language": "text", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200, // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n \"data\": {\n \"subscription_id\": numero_subscription_id, // número ID referente à inscrição gerada\n \"value\": 6990, // valor da inscrição (6990 equivale a R$69,90)\n \"status\": \"new\", // cobrança gerada, aguardando definição da forma de pagamento\n \"custom_id\": null, // identificador próprio opcional\n \"notification_url\": null, // endereço da sua URL que receberá as notificações de mudanças de status das transações\n \"payment_method\": null, // método de pagamento (null = ainda não foi definido), (banking_billet = boleto bancário) ou (credit_card = cartão de crédito)\n \"next_execution\": null, // data da próxima execução\n \"next_expire_at\": null, // data do próximo vencimento no formato 2016-12-30\n \"plan\": {\n \"plan_id\": numero_plan_id, // número ID referente ao plano de assinatura criado\n \"name\": \"Plano de Internet - Velocidade 10 Mb\", // nome do plano de assinatura\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n },\n \"occurrences\": 0,\n \"created_at\": \"2016-06-29 10:42:59\", // data e hora da criação da transação\n \"history\": [\n {\n \"charge_id\": numero_charge_id, // número da ID referente à transação gerada\n \"status\": \"new\", // cobrança gerada, aguardando definição da forma de pagamento\n \"created_at\": \"2016-06-29 10:42:59\" // data e hora da criação da transação\n }\n ]\n }\n}", "language": "json", "name": "Dados de Saída" } ] } [/block] Esse JSON retorna informações de uma assinatura que está vinculada a um plano, de acordo com o <code>subscription_id</code> informado no parâmetro de entrada. <br> <hr> <div class="distancia_top"><a name="subscription_id_cancel"><span class="put">PUT</span></a><strong class="text-endpoint">/subscription/:id/cancel</strong></div> Permite cancelar assinaturas ativas em um plano de assinaturas. Para tal, deve-se informar o <code>subscription_id</code> da assinatura que deseja cancelar. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>PUT /subscription/:id/cancel</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/jQrLFa7NTDaWczawU9CN_4beae89958e14d8ea1ed9f941d6b1027.png", "4beae89958e14d8ea1ed9f941d6b1027.png", "1432", "119", "#ed8525", "" ] } ] } [/block] A seguir, um JSON simples que permite cancelar inscrições ativas em um plano de assinaturas criado em Playground. Além disso, é possível observar a saída prevista disponível para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada: [block:code] { "codes": [ { "code": "Parâmetro de entrada: informe a \"subscription_id\" da transação desejada", "language": "text", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200 // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n}", "language": "json", "name": "Dados de Saída" } ] } [/block] Esse JSON permite cancelar assinaturas ativas em um plano de assinaturas criado em Playground, de acordo com o <code>subscription_id</code> informado no parâmetro de entrada. <br> <hr> <div class="distancia_top"><a name="subscription_id_metadata"><span class="put">PUT</span></a><strong class="text-endpoint">/subscription/:id/metadata</strong></div> Atualiza o status de uma determinada assinatura e envia uma notificação para a URL cadastrada no sistema. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>PUT /subscription/:id/metadata</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/c8lotkhRueQt6RT5fe49_13773fa70d6549a98b5613328c1fc94d.png", "13773fa70d6549a98b5613328c1fc94d.png", "1436", "397", "#d69131", "" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para alterar a URL de notificação e o custom_id de uma transação já existente no Playground. Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura desejada: [block:code] { "codes": [ { "code": "{\n \"notification_url\": null,\n \"custom_id\": null\n}", "language": "json", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200 // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n}", "language": "json", "name": "Dados de Saída" }, { "code": "{\n \"type\": \"object\",\n \"minProperties\": 1,\n \"id\": \"/SubscriptionMetadataUpdate\",\n \"properties\": {\n \"notification_url\": {\n \"type\": \"string\",\n \"format\": \"uri\",\n \"minLength\": \"1\",\n \"maxLength\": \"255\"\n },\n \"custom_id\": {\n \"type\": \"string\",\n \"minLength\": \"1\",\n \"maxLength\": \"255\",\n \"pattern\": \"^[a-zA-Z0-9\\\\_\\\\-\\\\s]+$\"\n }\n }\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON permite alterar a URL de notificação e o custom_id de uma determinada transação. A tag <code>notification_url</code> é um endereço de sua URL válida que receberá as notificações de mudanças de status das transações, e a tag <code>custom_id</code> permite associar uma transação Gerencianet a uma ID específica de seu sistema ou aplicação, permitindo identificá-la caso você possua uma identificação específica e queira mantê-la. <br> <hr> <div class="distancia_top"><a name="subscription_id_pay"><span class="post">POST</span></a><strong class="text-endpoint">/subscription/:id/pay</strong></div> Define uma forma recorrente de pagamento à uma determinada assinatura. Ela poderá ser por cartão de crédito ou boleto bancário: - *Cartão:* fará débitos em seu cartão mensalmente de acordo conforme o número de repetições definido pelo plano; - *Boleto:* será gerado conforme o número de repetições definido pelo plano, podendo ser enviado por e-mail. O assinante ou o vendedor podem cancelar a assinatura a qualquer momento. Quando isso ocorre, os dois são avisados via e-mail, com todos os detalhes do cancelamento. Na imagem a seguir, é possível observar a tela de nosso ambiente de testes no qual constam os recursos atrelados ao método <code>POST /subscription/:id/pay</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/Y99cyUCmSuiVhCCIecF9_4db100cda0194de9b9e810624c6e170c.png", "4db100cda0194de9b9e810624c6e170c.png", "1431", "432", "#379cb1", "" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para associar um método de pagamento à uma assinatura já criada em Playground - o integrador pode escolher entre <code>banking_billet</code> ou <code>credit_card</code> (boleto bancário e cartão de crédito, respectivamente). Além disso, é possível observar a saída prevista e o schema de validação com todas as tags (obrigatórias e opcionais) disponíveis para este método. Lembrando que também é preciso informar o parâmetro de entrada <code>subscription_id</code> da assinatura associar à forma de pagamento: [block:code] { "codes": [ { "code": "{\n \"payment\": {\n \"credit_card\": {\n \"customer\": {\n \"name\": \"Gorbadoc Oldbuck\",\n \"cpf\": \"94271564656\",\n \"email\": \"email_do_cliente@servidor.com.br\",\n \"birth\": \"1990-08-29\",\n \"phone_number\": \"5144916523\"\n },\n \"payment_token\": \"\",\n \"billing_address\": {\n \"street\": \"Avenida Juscelino Kubitschek\",\n \"number\": \"909\",\n \"neighborhood\": \"Bauxita\",\n \"zipcode\": \"35400000\",\n \"city\": \"Ouro Preto\",\n \"complement\": \"\",\n \"state\": \"MG\"\n }\n }\n }\n}", "language": "json", "name": "Dados de Entrada (cartão)" }, { "code": "{\n \"payment\": {\n \"banking_billet\": {\n \"customer\": {\n \"name\": \"Gorbadoc Oldbuck\",\n \"cpf\": \"94271564656\",\n \"email\": \"email_do_cliente@servidor.com.br\",\n \"phone_number\": \"5144916523\",\n \"address\": {\n \"street\": \"Avenida Juscelino Kubitschek\",\n \"number\": \"909\",\n \"neighborhood\": \"Bauxita\",\n \"zipcode\": \"35400000\",\n \"city\": \"Ouro Preto\",\n \"complement\": \"\",\n \"state\": \"MG\"\n }\n },\n \"expire_at\": \"2016-12-30\",\n \"instructions\": [\n \"Linha de instrução 1 (tag instructions é opcional)\",\n \"Linha de instrução 2 (tag instructions é opcional)\",\n \"Linha de instrução 3 (tag instructions é opcional)\",\n \"Linha de instrução 4 (tag instructions é opcional)\"\n ]\n }\n }\n}", "language": "json", "name": "Dados de Entrada (boleto)" }, { "code": "{\n \"code\": 200, // retorno HTTP \"200\" informando que o pedido foi bem sucedido\n \"data\": {\n \"subscription_id\": numero_subscription_id, // número ID referente à inscrição gerada\n \"status\": \"active\", // assinatura ativa - todas as cobranças estão sendo geradas\n \"plan\": {\n \"id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null // número de vezes que a cobrança deve ser gerada - neste caso, indefinidamente\n },\n \"charge\": {\n \"id\": numero_charge_id, // número da ID referente à transação gerada\n \"status\": \"waiting\" // forma de pagamento selecionada, aguardando a confirmação do pagamento\n },\n \"total\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\n \"payment\": \"credit_card\" // forma de pagamento (credit_card equivale a cartão de crédito)\n }\n}", "language": "json", "name": "Dados de Saída (cartão)" }, { "code": "{\n \"code\": 200,\n \"data\": {\n \"subscription_id\": 2206,\n \"status\": \"active\", // assinatura ativa - todas as cobranças estão sendo geradas\n \"barcode\": \"linha_digitavel\", // linha digitável do boleto\n \"link\": \"endereco_http_link_boleto\", // link do boleto gerado\n \"expire_at\": \"2016-12-30\", // data de vencimento do boleto no seguinte formato: 2016-12-30 (ou seja, equivale a 30/12/2016)\n \"plan\": {\n \"id\": numero_plan_id, // número da ID referente ao plano de assinatura criado\n \"interval\": 12, // intervalo que as cobranças devem ser geradas, em meses\n \"repeats\": null\n },\n \"charge\": {\n \"id\": numero_charge_id,\n \"status\": \"waiting\"\n },\n \"total\": 6990, // valor total da transação (em centavos, sendo 6990 = R$69,90)\n \"payment\": \"banking_billet\" // forma de pagamento (banking_billet equivale a boleto)\n }\n}", "language": "json", "name": "Dados de Saída (boleto)" }, { "code": "{\n \"type\": \"object\",\n \"id\": \"/SubscriptionPay\",\n \"properties\": {\n \"payment\": {\n \"type\": \"object\",\n \"maxProperties\": 1,\n \"minProperties\": 1,\n \"properties\": {\n \"banking_billet\": {\n \"type\": \"object\",\n \"id\": \"/Billet\",\n \"properties\": {\n \"customer\": {\n \"type\": \"object\",\n \"id\": \"/BasicCustomer\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255,\n \"pattern\": \"^[ ]*(.+[ ]+)+.+[ ]*$\"\n },\n \"cpf\": {\n \"type\": \"string\",\n \"minLength\": 11,\n \"maxLength\": 11\n },\n \"email\": {\n \"type\": \"string\",\n \"maxLength\": 255,\n \"pattern\": \"^[A-Za-z0-9_\\\\-]+(?:[.][A-Za-z0-9_\\\\-]+)*@[A-Za-z0-9_]+(?:[-.][A-Za-z0-9_]+)*\\\\.[A-Za-z0-9_]+$\"\n },\n \"phone_number\": {\n \"type\": \"string\",\n \"pattern\": \"^[1-9]{2}9?[0-9]{8}$\"\n },\n \"birth\": {\n \"type\": \"string\",\n \"pattern\": \"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\"\n },\n \"address\": {\n \"type\": \"object\",\n \"id\": \"/Address\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 200\n },\n \"number\": {\n \"type\": [\n \"string\",\n \"integer\"\n ],\n \"minLength\": 1,\n \"maxLength\": 55\n },\n \"neighborhood\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"zipcode\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]{8}$\"\n },\n \"city\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"complement\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 45\n },\n \"state\": {\n \"type\": \"string\",\n \"pattern\": \"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\"\n }\n },\n \"required\": [\n \"street\",\n \"number\",\n \"neighborhood\",\n \"zipcode\",\n \"city\",\n \"state\"\n ]\n },\n \"post_office_address\": {\n \"type\": \"object\",\n \"id\": \"/Address\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 200\n },\n \"number\": {\n \"type\": [\n \"string\",\n \"integer\"\n ],\n \"minLength\": 1,\n \"maxLength\": 55\n },\n \"neighborhood\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"zipcode\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]{8}$\"\n },\n \"city\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"complement\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 45\n },\n \"state\": {\n \"type\": \"string\",\n \"pattern\": \"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\"\n }\n },\n \"required\": [\n \"street\",\n \"number\",\n \"neighborhood\",\n \"zipcode\",\n \"city\",\n \"state\"\n ]\n },\n \"juridical_person\": {\n \"type\": \"object\",\n \"id\": \"/JuridicalPerson\",\n \"properties\": {\n \"corporate_name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255,\n \"pattern\": \"^[ ]*(.+[ ]+)+.+[ ]*$\"\n },\n \"cnpj\": {\n \"type\": \"string\",\n \"minLength\": 14,\n \"maxLength\": 14\n }\n },\n \"required\": [\n \"corporate_name\",\n \"cnpj\"\n ]\n }\n },\n \"required\": [\n \"phone_number\"\n ]\n },\n \"expire_at\": {\n \"type\": \"string\",\n \"pattern\": \"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\"\n },\n \"instructions\": {\n \"type\": \"array\",\n \"minItems\": 1,\n \"maxItems\": 4,\n \"items\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 90\n }\n },\n \"discount\": {\n \"type\": \"object\",\n \"id\": \"/Discount\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"percentage\",\n \"currency\"\n ]\n },\n \"value\": {\n \"type\": \"integer\",\n \"minimum\": 1\n }\n },\n \"required\": [\n \"type\",\n \"value\"\n ]\n }\n },\n \"required\": [\n \"customer\",\n \"expire_at\"\n ]\n },\n \"credit_card\": {\n \"type\": \"object\",\n \"id\": \"/CreditCard\",\n \"properties\": {\n \"customer\": {\n \"type\": \"object\",\n \"id\": \"/FullCustomer\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255,\n \"pattern\": \"^[ ]*(.+[ ]+)+.+[ ]*$\"\n },\n \"cpf\": {\n \"type\": \"string\",\n \"minLength\": 11,\n \"maxLength\": 11\n },\n \"email\": {\n \"type\": \"string\",\n \"maxLength\": 255,\n \"pattern\": \"^[A-Za-z0-9_\\\\-]+(?:[.][A-Za-z0-9_\\\\-]+)*@[A-Za-z0-9_]+(?:[-.][A-Za-z0-9_]+)*\\\\.[A-Za-z0-9_]+$\"\n },\n \"phone_number\": {\n \"type\": \"string\",\n \"pattern\": \"^[1-9]{2}9?[0-9]{8}$\"\n },\n \"birth\": {\n \"type\": \"string\",\n \"pattern\": \"^[12][0-9]{3}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12][0-9]|3[01])$\"\n },\n \"address\": {\n \"type\": \"object\",\n \"id\": \"/Address\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 200\n },\n \"number\": {\n \"type\": [\n \"string\",\n \"integer\"\n ],\n \"minLength\": 1,\n \"maxLength\": 55\n },\n \"neighborhood\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"zipcode\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]{8}$\"\n },\n \"city\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"complement\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 45\n },\n \"state\": {\n \"type\": \"string\",\n \"pattern\": \"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\"\n }\n },\n \"required\": [\n \"street\",\n \"number\",\n \"neighborhood\",\n \"zipcode\",\n \"city\",\n \"state\"\n ]\n },\n \"juridical_person\": {\n \"type\": \"object\",\n \"id\": \"/JuridicalPerson\",\n \"properties\": {\n \"corporate_name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255,\n \"pattern\": \"^[ ]*(.+[ ]+)+.+[ ]*$\"\n },\n \"cnpj\": {\n \"type\": \"string\",\n \"minLength\": 14,\n \"maxLength\": 14\n }\n },\n \"required\": [\n \"corporate_name\",\n \"cnpj\"\n ]\n }\n },\n \"required\": [\n \"email\",\n \"phone_number\",\n \"birth\"\n ]\n },\n \"billing_address\": {\n \"type\": \"object\",\n \"id\": \"/Address\",\n \"properties\": {\n \"street\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 200\n },\n \"number\": {\n \"type\": [\n \"string\",\n \"integer\"\n ],\n \"minLength\": 1,\n \"maxLength\": 55\n },\n \"neighborhood\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"zipcode\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]{8}$\"\n },\n \"city\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n },\n \"complement\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 45\n },\n \"state\": {\n \"type\": \"string\",\n \"pattern\": \"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\"\n }\n },\n \"required\": [\n \"street\",\n \"number\",\n \"neighborhood\",\n \"zipcode\",\n \"city\",\n \"state\"\n ]\n },\n \"payment_token\": {\n \"type\": \"string\",\n \"pattern\": \"^[a-fA-F0-9]{40}$\"\n },\n \"discount\": {\n \"type\": \"object\",\n \"id\": \"/Discount\",\n \"properties\": {\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\n \"percentage\",\n \"currency\"\n ]\n },\n \"value\": {\n \"type\": \"integer\",\n \"minimum\": 1\n }\n },\n \"required\": [\n \"type\",\n \"value\"\n ]\n }\n },\n \"required\": [\n \"customer\",\n \"billing_address\",\n \"payment_token\"\n ]\n }\n }\n }\n },\n \"required\": [\n \"payment\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON associa uma determinada assinatura a uma forma de pagamento, podendo ser boleto bancário ou cartão de crédito. No caso de pagamento por cartão, o "payment_token" é o token de pagamento, que é obtido através de código Javascript disponível para cada conta Gerencianet - para boleto o "payment_token" não é necessário.