> For the complete documentation index, see [llms.txt](https://documentation.themembers.dev.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://documentation.themembers.dev.br/api-reference/reference/products.md).

# Products

## Obtém todos os produtos

> Este endpoint retorna todos os produtos cadastrados na plataforma, incluindo a quantidade de assinaturas com acesso liberado.\
> \
> \### Observação importante:\
> \
> Uma assinatura possui dois tipos de status:\
> \
> \*\*Status de acesso:\*\* indica se o aluno está com acesso ativo ou inativo na plataforma. É esse status que efetivamente controla o bloqueio ou liberação de acesso ao conteúdo.\
> \
> \*\*Status da assinatura:\*\* pode assumir valores como active, inactive, refunded, chargeback ou canceled.\
> \
> É importante destacar que um aluno pode estar com o acesso liberado, mesmo que o status da assinatura esteja como canceled ou refunded.\
> \
> Portanto, o campo de quantidade retornado por este endpoint considera apenas os alunos com acesso liberado, independentemente do status da assinatura.

```json
{"openapi":"3.1.0","info":{"title":"TheMembers (Beta).","version":"1.0"},"tags":[{"name":"Products"}],"servers":[{"url":"https://api.themembers.com.br/api/v1","description":"Production","variables":{}}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"Bearer"}},"schemas":{"Public.Product":{"type":"object","required":["id","title","description","period","external_checkout_product","lifetime","status","type","sales_page_url","support_email","trial","upsell","upsell_url","created_at","updated_at","subscribers"],"properties":{"id":{"type":"string","readOnly":true},"title":{"type":"string","description":"Título"},"description":{"type":"string","description":"Descrição"},"period":{"type":"integer","description":"Período"},"external_checkout_product":{"type":"string","description":"ID externo"},"lifetime":{"type":"boolean","description":"Indica se o curso é vitalício ou não"},"status":{"allOf":[{"$ref":"#/components/schemas/Public.ProductStatus"}],"description":"Status"},"type":{"allOf":[{"$ref":"#/components/schemas/Public.ProductType"}],"description":"Tipo do curso (Recorrente, Venda única)"},"sales_page_url":{"type":"string","description":"URL da página de vendas"},"support_email":{"type":"string","description":"E-mail de suporte"},"trial":{"type":"string","description":"Trial"},"upsell":{"type":"string","description":"Texto de upsell"},"upsell_url":{"type":"string","description":"URL de upsell"},"created_at":{"type":"string","description":"Data de criação","readOnly":true},"updated_at":{"type":"string","description":"Data da última atualização","readOnly":true},"subscribers":{"allOf":[{"$ref":"#/components/schemas/Public.Subscribers"}],"description":"Quantidade de assinaturas com acesso liberado","readOnly":true}}},"Public.ProductStatus":{"type":"string","enum":["active","canceled"]},"Public.ProductType":{"type":"string","enum":["recurring","one_time"]},"Public.Subscribers":{"type":"object","required":["active","inactive"],"properties":{"active":{"type":"integer","description":"Quantidade de assinaturas com acesso ativo"},"inactive":{"type":"integer","description":"Quantidade de assinaturas com acesso inativo"}}},"Public.Link":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":"string"},"next":{"type":"string"}}},"Public.Meta":{"type":"object","properties":{"first":{"type":"string"},"last":{"type":"string"},"prev":{"type":"string"},"next":{"type":"string"}}},"Exceptions.Unauthorized":{"type":"object","required":["message","type"],"properties":{"message":{"type":"string","default":"Personal access token not found."},"type":{"type":"string","default":"PersonalAccessTokenException"}},"description":""},"Exceptions.Metadata":{"type":"object"},"Exceptions.RateLimitException":{"type":"object","required":["message","type","retry_after"],"properties":{"message":{"type":"string","default":"Rate limit exceeded for API key [%]"},"type":{"type":"string","default":"RateLimitException"},"retry_after":{"type":"integer"}},"description":""},"Exceptions.InternalServerError":{"type":"object","required":["message","type"],"properties":{"message":{"type":"string","default":"An unexpected error occurred. Please try again later."},"type":{"type":"string","default":"InternalServerErrorException"}},"description":""}}},"paths":{"/products":{"get":{"operationId":"Products_getProduct","summary":"Obtém todos os produtos","description":"Este endpoint retorna todos os produtos cadastrados na plataforma, incluindo a quantidade de assinaturas com acesso liberado.\n\n### Observação importante:\n\nUma assinatura possui dois tipos de status:\n\n**Status de acesso:** indica se o aluno está com acesso ativo ou inativo na plataforma. É esse status que efetivamente controla o bloqueio ou liberação de acesso ao conteúdo.\n\n**Status da assinatura:** pode assumir valores como active, inactive, refunded, chargeback ou canceled.\n\nÉ importante destacar que um aluno pode estar com o acesso liberado, mesmo que o status da assinatura esteja como canceled ou refunded.\n\nPortanto, o campo de quantidade retornado por este endpoint considera apenas os alunos com acesso liberado, independentemente do status da assinatura.","parameters":[],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","required":["data","links","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Public.Product"}},"links":{"$ref":"#/components/schemas/Public.Link"},"meta":{"$ref":"#/components/schemas/Public.Meta"}},"description":""}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.Unauthorized"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}},"429":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.RateLimitException"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.InternalServerError"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}}},"tags":["Products"]}}}}
```

## Obtém um produto por ID

> Este endpoint retorna retorna um produto pro ID cadastrado na plataforma, incluindo a quantidade de assinaturas com acesso liberado.\
> \
> \### Observação importante:\
> \
> Uma assinatura possui dois tipos de status:\
> \
> \*\*Status de acesso:\*\* indica se o aluno está com acesso ativo ou inativo na plataforma. É esse status que efetivamente controla o bloqueio ou liberação de acesso ao conteúdo.\
> \
> \*\*Status da assinatura:\*\* pode assumir valores como active, inactive, refunded, chargeback ou canceled.\
> \
> É importante destacar que um aluno pode estar com o acesso liberado, mesmo que o status da assinatura esteja como canceled ou refunded.\
> \
> Portanto, o campo de quantidade retornado por este endpoint considera apenas os alunos com acesso liberado, independentemente do status da assinatura.\
> \
> Caso o produto não seja encontrado, será lançada a exceção \*\*ProductNotFoundException\*\*.

```json
{"openapi":"3.1.0","info":{"title":"TheMembers (Beta).","version":"1.0"},"tags":[{"name":"Products"}],"servers":[{"url":"https://api.themembers.com.br/api/v1","description":"Production","variables":{}}],"security":[{"BearerAuth":[]}],"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"Bearer"}},"schemas":{"Public.Product":{"type":"object","required":["id","title","description","period","external_checkout_product","lifetime","status","type","sales_page_url","support_email","trial","upsell","upsell_url","created_at","updated_at","subscribers"],"properties":{"id":{"type":"string","readOnly":true},"title":{"type":"string","description":"Título"},"description":{"type":"string","description":"Descrição"},"period":{"type":"integer","description":"Período"},"external_checkout_product":{"type":"string","description":"ID externo"},"lifetime":{"type":"boolean","description":"Indica se o curso é vitalício ou não"},"status":{"allOf":[{"$ref":"#/components/schemas/Public.ProductStatus"}],"description":"Status"},"type":{"allOf":[{"$ref":"#/components/schemas/Public.ProductType"}],"description":"Tipo do curso (Recorrente, Venda única)"},"sales_page_url":{"type":"string","description":"URL da página de vendas"},"support_email":{"type":"string","description":"E-mail de suporte"},"trial":{"type":"string","description":"Trial"},"upsell":{"type":"string","description":"Texto de upsell"},"upsell_url":{"type":"string","description":"URL de upsell"},"created_at":{"type":"string","description":"Data de criação","readOnly":true},"updated_at":{"type":"string","description":"Data da última atualização","readOnly":true},"subscribers":{"allOf":[{"$ref":"#/components/schemas/Public.Subscribers"}],"description":"Quantidade de assinaturas com acesso liberado","readOnly":true}}},"Public.ProductStatus":{"type":"string","enum":["active","canceled"]},"Public.ProductType":{"type":"string","enum":["recurring","one_time"]},"Public.Subscribers":{"type":"object","required":["active","inactive"],"properties":{"active":{"type":"integer","description":"Quantidade de assinaturas com acesso ativo"},"inactive":{"type":"integer","description":"Quantidade de assinaturas com acesso inativo"}}},"Exceptions.Unauthorized":{"type":"object","required":["message","type"],"properties":{"message":{"type":"string","default":"Personal access token not found."},"type":{"type":"string","default":"PersonalAccessTokenException"}},"description":""},"Exceptions.Metadata":{"type":"object"},"Exceptions.ProductNotFoundException":{"type":"object","required":["message","type"],"properties":{"message":{"type":"string","default":"Product [%] not found."},"type":{"type":"string","default":"ProductNotFoundException"}},"description":""},"Exceptions.RateLimitException":{"type":"object","required":["message","type","retry_after"],"properties":{"message":{"type":"string","default":"Rate limit exceeded for API key [%]"},"type":{"type":"string","default":"RateLimitException"},"retry_after":{"type":"integer"}},"description":""},"Exceptions.InternalServerError":{"type":"object","required":["message","type"],"properties":{"message":{"type":"string","default":"An unexpected error occurred. Please try again later."},"type":{"type":"string","default":"InternalServerErrorException"}},"description":""}}},"paths":{"/products/{product_id}":{"get":{"operationId":"Products_getProductById","summary":"Obtém um produto por ID","description":"Este endpoint retorna retorna um produto pro ID cadastrado na plataforma, incluindo a quantidade de assinaturas com acesso liberado.\n\n### Observação importante:\n\nUma assinatura possui dois tipos de status:\n\n**Status de acesso:** indica se o aluno está com acesso ativo ou inativo na plataforma. É esse status que efetivamente controla o bloqueio ou liberação de acesso ao conteúdo.\n\n**Status da assinatura:** pode assumir valores como active, inactive, refunded, chargeback ou canceled.\n\nÉ importante destacar que um aluno pode estar com o acesso liberado, mesmo que o status da assinatura esteja como canceled ou refunded.\n\nPortanto, o campo de quantidade retornado por este endpoint considera apenas os alunos com acesso liberado, independentemente do status da assinatura.\n\nCaso o produto não seja encontrado, será lançada a exceção **ProductNotFoundException**.","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The request has succeeded.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Public.Product"}},"description":""}}}},"401":{"description":"Access is unauthorized.","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.Unauthorized"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}},"404":{"description":"The server cannot find the requested resource.","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.ProductNotFoundException"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}},"429":{"description":"Client error","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.RateLimitException"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"type":"object","required":["error","trace_id","metadata"],"properties":{"error":{"$ref":"#/components/schemas/Exceptions.InternalServerError"},"trace_id":{"type":"string"},"metadata":{"$ref":"#/components/schemas/Exceptions.Metadata"}}}}}}},"tags":["Products"]}}}}
```
