{"_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":1,"slug":"ambiente-de-testes","title":"Ambiente de Testes"},"githubsync":"","user":"57601a13af3e090e00108059","parentDoc":null,"version":{"_id":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":31,"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","5a7c4127490e52002a7f643c"],"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":"","sync_unique":"","hidden":false,"api":{"results":{"codes":[]},"settings":"","auth":"required","params":[],"url":""},"isReference":true,"order":4,"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 /v1/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 /v1/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 /v1/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\">/v1/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\">/v1/plans</a> <em>(retorna informações de um plano)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#put_plan_id\">/v1/plan/:id</a> <em>(permitir a edição do nome do plano de assinatura)</em></div></li><li><div class=\"\"><span class=\"delete\">DELETE</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id\">/v1/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\">/v1/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\">/v1/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\">/v1/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\">/v1/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\">/v1/subscription/:id/pay</a> <em>(associa método de pagamento à uma assinatura já criada)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_history\">/v1/subscription/:id/history</a> <em>(acrescentar descrição ao histórico de uma assinatura)</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\">/v1/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 /v1/plan</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/8ddad1f-post_plan.png\",\n        \"post_plan.png\",\n        1389,\n        366,\n        \"#eff0f0\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que cria plano de assinatura no Playground. Nele, está sendo definido que a assinatura é chamada *\"Plano de Internet - Velocidade 10 Mb\"*, a cobrança é *\"mensal\"* e serão geradas *\"12 cobranças\"* (ou até que o plano seja cancelado).\n\nAlé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]\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plans\"><span class=\"get\">GET</span></a><strong class=\"text-endpoint\">/v1/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 /v1/plans</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/2af97cc-get-plans.png\",\n        \"get-plans.png\",\n        1386,\n        222,\n        \"#f0f0f0\"\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. 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.\n\nAlé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]\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"put_plan_id\"><span class=\"put\">PUT</span></a><strong class=\"text-endpoint\">/v1/plan/:id</strong></div>\n\nPermite alterar (editar) o nome de um plano de assinatura pré existente. Para tal, deve ser fornecido o identificador do <code>plan_id</code> desejado.\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 /v1/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/d3907b1-put-plan-id.png\",\n        \"put-plan-id.png\",\n        1388,\n        395,\n        \"#f0f0f0\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para editar o nome de um plano de assinatura já existente. Neste caso, este JSON irá atualizar o nome do plano de assinatura existente para *\"Meu novo nome do plano\"*.\n\nAlé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 é necessário informar o identificador do plano de assinatura, que no caso é o <code>plan_id</code>:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"name\\\": \\\"Meu novo nome do plano\\\"\\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  \\\"id\\\": \\\"/UpdatePlan\\\",\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"properties\\\": {\\n    \\\"name\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"minLength\\\": 1,\\n      \\\"maxLength\\\": 255\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"name\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"plan_id\"><span class=\"delete\">DELETE</span></a><strong class=\"text-endpoint\">/v1/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 /v1/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/6ddf87a-delete-plan-id.png\",\n        \"delete-plan-id.png\",\n        1385,\n        125,\n        \"#f2f2f2\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que pode ser utilizado para cancelar um plano de assinatura.\n\nAlém disso, é possível observar a saída prevista disponível para este método. Cabe frisar que é necessário que seja informado o parâmetro de entrada <code>plan_id</code> do plano de assinatura desejado:\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]\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\">/v1/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 /v1/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/c886ba8-post-plan-id-subscription.png\",\n        \"post-plan-id-subscription.png\",\n        1387,\n        395,\n        \"#eff0f0\"\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. 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 igual a *1*.\n\nAlé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 você deve informar o <code>plan_id</code> do plano que deseja associar a 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]\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\">/v1/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 /v1/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/a10dd32-get-subscription-id.png\",\n        \"get-subscription-id.png\",\n        1385,\n        119,\n        \"#f1f1f1\"\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. Neste caso, serão retornadas 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\nAlé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]\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\">/v1/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 /v1/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/f1cb73c-put-subscription-id-cancel.png\",\n        \"put-subscription-id-cancel.png\",\n        1387,\n        121,\n        \"#f1f1f1\"\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.\n\nAlé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]\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\">/v1/subscription/:id/metadata</strong></div>\n\nAltera as informações enviadas na propriedade <code>metadata</code> de uma assinatura a qualquer momento. Este endpoint é de **extrema importância** para atualizar sua URL de notificação atrelada às assinaturas ou modificar o custom_id previamente associado a assinatura.\n\nNesse caso, todas as transações pertencentes à assinatura serão atualizadas.\n\n**Casos de uso deste endpoint:**\n\n- Integrador alterou o IP do servidor que estava associado na URL de notificação das assinaturas/transações;\n\n- Integrador atualizou a URL de notificação para as novas assinaturas/transações que forem criadas, mas precisa atualizar também nas assinaturas/transações anteriores que foram geradas e que estão associadas com a URL incorreta/desatualizada;\n\n- Foi instalado SSL (https) no servidor do cliente e mesmo que o cliente defina uma regra de redirecionamento 301 ou 302, será preciso definir a nova URL nas assinaturas/transações que estão com a URL \"antiga\";\n\n- Integrador gerou cobranças e não havia informado a URL de notificação ao enviar a requisição de criação da assinatura/transação;\n\n- Modificar ou acrescentar uma informação junto ao atributo custom_id associado às assinaturas/transações geradas previamente;\n\n- Dentre outros possíveis cenários.\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 /v1/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/679f904-put-subscription-metadata.png\",\n        \"put-subscription-metadata.png\",\n        1387,\n        396,\n        \"#efefef\"\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.\n\nAlé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\\\": [\\n        \\\"string\\\",\\n        \\\"null\\\"\\n      ],\\n      \\\"pattern\\\": \\\"^https?://.+\\\",\\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\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\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\">/v1/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 /v1/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/37fc813-post_subscription_pay.png\",\n        \"post_subscription_pay.png\",\n        1386,\n        430,\n        \"#edeeef\"\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).\n\nAlé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\\\": \\\"/AddressOptional\\\",\\n                  \\\"properties\\\": {\\n                    \\\"street\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 200\\n                    },\\n                    \\\"number\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\",\\n                        \\\"integer\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 55\\n                    },\\n                    \\\"neighborhood\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 255\\n                    },\\n                    \\\"zipcode\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"pattern\\\": \\\"^[0-9]{8}$\\\"\\n                    },\\n                    \\\"city\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 50\\n                    },\\n                    \\\"complement\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"minLength\\\": 0,\\n                      \\\"maxLength\\\": 45\\n                    },\\n                    \\\"state\\\": {\\n                      \\\"type\\\": [\\n                        \\\"string\\\",\\n                        \\\"null\\\"\\n                      ],\\n                      \\\"pattern\\\": \\\"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\\\"\\n                    }\\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            \\\"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            \\\"conditional_discount\\\": {\\n              \\\"id\\\": \\\"/ConditionalDiscount\\\",\\n              \\\"type\\\": \\\"object\\\",\\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                \\\"until_date\\\": {\\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              },\\n              \\\"required\\\": [\\n                \\\"type\\\",\\n                \\\"value\\\",\\n                \\\"until_date\\\"\\n              ]\\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            \\\"configurations\\\": {\\n              \\\"type\\\": \\\"object\\\",\\n              \\\"id\\\": \\\"/Configurations\\\",\\n              \\\"minProperties\\\": 1,\\n              \\\"properties\\\": {\\n                \\\"fine\\\": {\\n                  \\\"type\\\": \\\"integer\\\",\\n                  \\\"minimum\\\": 0,\\n                  \\\"maximum\\\": 1000\\n                },\\n                \\\"interest\\\": {\\n                  \\\"type\\\": \\\"integer\\\",\\n                  \\\"minimum\\\": 0,\\n                  \\\"maximum\\\": 330\\n                }\\n              }\\n            },\\n            \\\"message\\\": {\\n              \\\"type\\\": \\\"string\\\",\\n              \\\"pattern\\\": \\\"^[^\\\\n]{1,100}(\\\\n[^\\\\n]{0,100}){0,3}$\\\"\\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\\\": 50\\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\\\": 50\\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            \\\"message\\\": {\\n              \\\"type\\\": \\\"string\\\",\\n              \\\"pattern\\\": \\\"^[^\\\\n]{1,100}(\\\\n[^\\\\n]{0,100}){0,3}$\\\"\\n            },\\n            \\\"trial_days\\\": {\\n              \\\"type\\\": \\\"integer\\\",\\n              \\\"minimum\\\": 1,\\n              \\\"maximum\\\": 365\\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.\n\n<br>\n<hr>\n\n<div class=\"distancia_top\"><a name=\"subscription_history\"><span class=\"post\">POST</span></a><strong class=\"text-endpoint\">/v1/subscription/:id/history</strong></div>\n\nO histórico de uma assinatura representa todas as ações que ocorreram com esta assinatura até o presente momento. É possível adicionar mensagens personalizadas a este histórico utilizando o endpoint <code>/v1/subscription/:id/history</code>.\n\nAs mensagens personalizadas não influenciam na assinatura em si, apenas em seu histórico. Para tal, você deve informar o <code>subscription_id</code> da transação desejada. Essa descrição deve possuir no mínimo um caractere e no máximo 255 caracteres.\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 /v1/subscription/:id/history</code> que estão disponíveis para utilização:\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/b9fc41b-post-subscription-history.png\",\n        \"post-subscription-history.png\",\n        1386,\n        396,\n        \"#eff0f0\"\n      ]\n    }\n  ]\n}\n[/block]\nA seguir, um JSON simples que permite adicionar mensagens personalizadas ao histórico de uma assinatura, 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 parâmetro de entrada <code>subscription_id</code> da assinatura:\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"description\\\": \\\"Minha mensagem do histórico aqui\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Entrada\"\n    },\n    {\n      \"code\": \"{\\n  \\\"code\\\": 200\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Dados de Saída\"\n    },\n    {\n      \"code\": \"{\\n  \\\"type\\\": \\\"object\\\",\\n  \\\"id\\\": \\\"/SubscriptionHistory\\\",\\n  \\\"properties\\\": {\\n    \\\"description\\\": {\\n      \\\"type\\\": \\\"string\\\",\\n      \\\"maxLength\\\": \\\"255\\\",\\n      \\\"minLength\\\": \\\"1\\\"\\n    }\\n  },\\n  \\\"required\\\": [\\n    \\\"description\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Schema\"\n    }\n  ]\n}\n[/block]\nEsse JSON irá acrescentar a descrição <code>Minha mensagem do histórico aqui</code> em uma determinada assinatura.","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 /v1/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 /v1/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 /v1/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">/v1/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">/v1/plans</a> <em>(retorna informações de um plano)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#put_plan_id">/v1/plan/:id</a> <em>(permitir a edição do nome do plano de assinatura)</em></div></li><li><div class=""><span class="delete">DELETE</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#plan_id">/v1/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">/v1/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">/v1/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">/v1/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">/v1/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">/v1/subscription/:id/pay</a> <em>(associa método de pagamento à uma assinatura já criada)</em></div></li><li><div class=""><span class="post">POST</span> <a href="https://dev.gerencianet.com.br/docs/playground-assinaturas#subscription_history">/v1/subscription/:id/history</a> <em>(acrescentar descrição ao histórico de uma assinatura)</em></div></li></ul> <br> <hr> <div class="distancia_top"><a name="plan"><span class="post">POST</span></a><strong class="text-endpoint">/v1/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 /v1/plan</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/8ddad1f-post_plan.png", "post_plan.png", 1389, 366, "#eff0f0" ] } ] } [/block] A seguir, um JSON simples que cria plano de assinatura no Playground. Nele, está sendo definido que a assinatura é chamada *"Plano de Internet - Velocidade 10 Mb"*, a cobrança é *"mensal"* e serão geradas *"12 cobranças"* (ou até que o plano seja cancelado). 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] <br> <hr> <div class="distancia_top"><a name="plans"><span class="get">GET</span></a><strong class="text-endpoint">/v1/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 /v1/plans</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/2af97cc-get-plans.png", "get-plans.png", 1386, 222, "#f0f0f0" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para buscar informações relacionadas à uma assinatura criada previamente em Playground. 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. 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] <br> <hr> <div class="distancia_top"><a name="put_plan_id"><span class="put">PUT</span></a><strong class="text-endpoint">/v1/plan/:id</strong></div> Permite alterar (editar) o nome de um plano de assinatura pré existente. Para tal, deve ser fornecido o identificador do <code>plan_id</code> desejado. 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 /v1/plan/:id</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/d3907b1-put-plan-id.png", "put-plan-id.png", 1388, 395, "#f0f0f0" ] } ] } [/block] A seguir, um JSON simples que pode ser utilizado para editar o nome de um plano de assinatura já existente. Neste caso, este JSON irá atualizar o nome do plano de assinatura existente para *"Meu novo nome do plano"*. 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 é necessário informar o identificador do plano de assinatura, que no caso é o <code>plan_id</code>: [block:code] { "codes": [ { "code": "{\n \"name\": \"Meu novo nome do plano\"\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 \"id\": \"/UpdatePlan\",\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"maxLength\": 255\n }\n },\n \"required\": [\n \"name\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] <br> <hr> <div class="distancia_top"><a name="plan_id"><span class="delete">DELETE</span></a><strong class="text-endpoint">/v1/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 /v1/plan/:id</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/6ddf87a-delete-plan-id.png", "delete-plan-id.png", 1385, 125, "#f2f2f2" ] } ] } [/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. Cabe frisar que é necessário que seja informado o parâmetro de entrada <code>plan_id</code> do plano de assinatura desejado: [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] <br> <hr> <div class="distancia_top"><a name="plan_id_subscription"><span class="post">POST</span></a><strong class="text-endpoint">/v1/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 /v1/plan/:id/subscription</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/c886ba8-post-plan-id-subscription.png", "post-plan-id-subscription.png", 1387, 395, "#eff0f0" ] } ] } [/block] A seguir, um JSON simples que permite criar assinaturas e associá-las a planos para efetuar cobranças de forma recorrente. 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 igual a *1*. 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 você deve informar o <code>plan_id</code> do plano que deseja associar a 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] <br> <hr> <div class="distancia_top"><a name="subscription_id"><span class="get">GET</span></a><strong class="text-endpoint">/v1/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 /v1/subscription/:id</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/a10dd32-get-subscription-id.png", "get-subscription-id.png", 1385, 119, "#f1f1f1" ] } ] } [/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. Neste caso, serão retornadas 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. 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] <br> <hr> <div class="distancia_top"><a name="subscription_id_cancel"><span class="put">PUT</span></a><strong class="text-endpoint">/v1/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 /v1/subscription/:id/cancel</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/f1cb73c-put-subscription-id-cancel.png", "put-subscription-id-cancel.png", 1387, 121, "#f1f1f1" ] } ] } [/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] <br> <hr> <div class="distancia_top"><a name="subscription_id_metadata"><span class="put">PUT</span></a><strong class="text-endpoint">/v1/subscription/:id/metadata</strong></div> Altera as informações enviadas na propriedade <code>metadata</code> de uma assinatura a qualquer momento. Este endpoint é de **extrema importância** para atualizar sua URL de notificação atrelada às assinaturas ou modificar o custom_id previamente associado a assinatura. Nesse caso, todas as transações pertencentes à assinatura serão atualizadas. **Casos de uso deste endpoint:** - Integrador alterou o IP do servidor que estava associado na URL de notificação das assinaturas/transações; - Integrador atualizou a URL de notificação para as novas assinaturas/transações que forem criadas, mas precisa atualizar também nas assinaturas/transações anteriores que foram geradas e que estão associadas com a URL incorreta/desatualizada; - Foi instalado SSL (https) no servidor do cliente e mesmo que o cliente defina uma regra de redirecionamento 301 ou 302, será preciso definir a nova URL nas assinaturas/transações que estão com a URL "antiga"; - Integrador gerou cobranças e não havia informado a URL de notificação ao enviar a requisição de criação da assinatura/transação; - Modificar ou acrescentar uma informação junto ao atributo custom_id associado às assinaturas/transações geradas previamente; - Dentre outros possíveis cenários. 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 /v1/subscription/:id/metadata</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/679f904-put-subscription-metadata.png", "put-subscription-metadata.png", 1387, 396, "#efefef" ] } ] } [/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\": [\n \"string\",\n \"null\"\n ],\n \"pattern\": \"^https?://.+\",\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", "name": "Schema" } ] } [/block] <br> <hr> <div class="distancia_top"><a name="subscription_id_pay"><span class="post">POST</span></a><strong class="text-endpoint">/v1/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 /v1/subscription/:id/pay</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/37fc813-post_subscription_pay.png", "post_subscription_pay.png", 1386, 430, "#edeeef" ] } ] } [/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\": \"/AddressOptional\",\n \"properties\": {\n \"street\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 200\n },\n \"number\": {\n \"type\": [\n \"string\",\n \"null\",\n \"integer\"\n ],\n \"minLength\": 0,\n \"maxLength\": 55\n },\n \"neighborhood\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 255\n },\n \"zipcode\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"pattern\": \"^[0-9]{8}$\"\n },\n \"city\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 50\n },\n \"complement\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"minLength\": 0,\n \"maxLength\": 45\n },\n \"state\": {\n \"type\": [\n \"string\",\n \"null\"\n ],\n \"pattern\": \"^(?:A[CLPM]|BA|CE|DF|ES|GO|M[ATSG]|P[RBAEI]|R[JNSOR]|S[CEP]|TO)$\"\n }\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 \"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 \"conditional_discount\": {\n \"id\": \"/ConditionalDiscount\",\n \"type\": \"object\",\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 \"until_date\": {\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 },\n \"required\": [\n \"type\",\n \"value\",\n \"until_date\"\n ]\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 \"configurations\": {\n \"type\": \"object\",\n \"id\": \"/Configurations\",\n \"minProperties\": 1,\n \"properties\": {\n \"fine\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 1000\n },\n \"interest\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"maximum\": 330\n }\n }\n },\n \"message\": {\n \"type\": \"string\",\n \"pattern\": \"^[^\\n]{1,100}(\\n[^\\n]{0,100}){0,3}$\"\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\": 50\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\": 50\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 \"message\": {\n \"type\": \"string\",\n \"pattern\": \"^[^\\n]{1,100}(\\n[^\\n]{0,100}){0,3}$\"\n },\n \"trial_days\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 365\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. <br> <hr> <div class="distancia_top"><a name="subscription_history"><span class="post">POST</span></a><strong class="text-endpoint">/v1/subscription/:id/history</strong></div> O histórico de uma assinatura representa todas as ações que ocorreram com esta assinatura até o presente momento. É possível adicionar mensagens personalizadas a este histórico utilizando o endpoint <code>/v1/subscription/:id/history</code>. As mensagens personalizadas não influenciam na assinatura em si, apenas em seu histórico. Para tal, você deve informar o <code>subscription_id</code> da transação desejada. Essa descrição deve possuir no mínimo um caractere e no máximo 255 caracteres. 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 /v1/subscription/:id/history</code> que estão disponíveis para utilização: [block:image] { "images": [ { "image": [ "https://files.readme.io/b9fc41b-post-subscription-history.png", "post-subscription-history.png", 1386, 396, "#eff0f0" ] } ] } [/block] A seguir, um JSON simples que permite adicionar mensagens personalizadas ao histórico de uma assinatura, 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 parâmetro de entrada <code>subscription_id</code> da assinatura: [block:code] { "codes": [ { "code": "{\n \"description\": \"Minha mensagem do histórico aqui\"\n}", "language": "json", "name": "Dados de Entrada" }, { "code": "{\n \"code\": 200\n}", "language": "json", "name": "Dados de Saída" }, { "code": "{\n \"type\": \"object\",\n \"id\": \"/SubscriptionHistory\",\n \"properties\": {\n \"description\": {\n \"type\": \"string\",\n \"maxLength\": \"255\",\n \"minLength\": \"1\"\n }\n },\n \"required\": [\n \"description\"\n ]\n}", "language": "json", "name": "Schema" } ] } [/block] Esse JSON irá acrescentar a descrição <code>Minha mensagem do histórico aqui</code> em uma determinada assinatura.