# 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"]}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.themembers.dev.br/api-reference/reference/products.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
