> ## Documentation Index
> Fetch the complete documentation index at: https://commet.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Integrar con Flask

> Agrega cobros y pagos a tu aplicación de Flask.

Instala la Commet Skill para que tu agente integre el SDK actual y valide su trabajo contra el contrato vivo de la API.

```bash theme={null}
npx skills add commet-labs/skills --skill commet
```

<Steps>
  <Step title="Instalar">
    <Tabs>
      <Tab title="pip">
        ```bash theme={null}
        pip install commet-sdk flask
        ```
      </Tab>

      <Tab title="uv">
        ```bash theme={null}
        uv add commet-sdk flask
        ```
      </Tab>

      <Tab title="poetry">
        ```bash theme={null}
        poetry add commet-sdk flask
        ```
      </Tab>
    </Tabs>
  </Step>

  <Step title="Configurar">
    ```bash title=".env" theme={null}
    COMMET_API_KEY=ck_sandbox_xxx
    ```

    ```python title="commet_client.py" theme={null}
    import os
    from commet import Commet

    commet = Commet(
        api_key=os.environ["COMMET_API_KEY"],
    )
    ```
  </Step>

  <Step title="Suscribir">
    ```python title="routes/billing.py" theme={null}
    from flask import Blueprint, request, jsonify, redirect
    from commet_client import commet

    billing = Blueprint("billing", __name__)


    @billing.route("/subscribe", methods=["POST"])
    def subscribe():
        data = request.get_json()

        commet.customers.create(
            email=data["email"],
            id=data["customer_id"],
        )

        subscription = commet.subscriptions.create(
            customer_id=data["customer_id"],
            plan_code="pro",
        )

        return jsonify({"checkout_url": subscription.checkout_url})
    ```
  </Step>

  <Step title="Verificar acceso">
    ```python title="routes/billing.py" theme={null}
    @billing.route("/subscription/<customer_id>")
    def get_subscription(customer_id):
        sub = commet.subscriptions.get_active(customer_id=customer_id)
        if sub is None:
            return jsonify({"error": "no_active_subscription"}), 404
        return jsonify({"status": sub.status})


    @billing.route("/features/<feature>/<customer_id>")
    def check_feature(feature, customer_id):
        result = commet.feature_access.get(code=feature, customer_id=customer_id)
        return jsonify({"allowed": result.allowed})
    ```
  </Step>

  <Step title="Trackear uso">
    ```python title="routes/billing.py" theme={null}
    @billing.route("/usage", methods=["POST"])
    def track_usage():
        data = request.get_json()

        commet.usage.track(
            customer_id=data["customer_id"],
            feature_code="api_calls",
            value=1,
        )

        return jsonify({"tracked": True})
    ```

    El uso se agrega y se cobra al final del período.
  </Step>

  <Step title="Portal del Cliente">
    ```python title="routes/billing.py" theme={null}
    @billing.route("/portal")
    def portal():
        result = commet.portal.get_url(customer_id="user_123")
        return redirect(result.portal_url)
    ```
  </Step>

  <Step title="Webhooks">
    ```python title="routes/webhooks.py" theme={null}
    import os

    from flask import Blueprint, request
    from commet import Webhooks

    webhooks_bp = Blueprint("webhooks", __name__)
    webhooks = Webhooks()


    @webhooks_bp.route("/webhooks/commet", methods=["POST"])
    def handle_webhook():
        payload = webhooks.verify_and_parse(
            raw_body=request.get_data(as_text=True),
            signature=request.headers.get("x-commet-signature"),
            secret=os.environ["COMMET_WEBHOOK_SECRET"],
        )

        if payload is None:
            return "Invalid signature", 401

        if payload["event"] == "subscription.activated":
            # manejar activación
            pass

        return "", 200
    ```
  </Step>

  <Step title="Iniciar el servidor">
    ```python title="app.py" theme={null}
    from flask import Flask
    from routes.billing import billing
    from routes.webhooks import webhooks_bp

    app = Flask(__name__)
    app.register_blueprint(billing, url_prefix="/billing")
    app.register_blueprint(webhooks_bp)

    if __name__ == "__main__":
        app.run(port=3000)
    ```
  </Step>
</Steps>

## Relacionado

* [Suscripciones](/docs/es/manage-subscriptions)
* [Trackear Uso](/docs/es/track-usage)
* [Portal del Cliente](/docs/es/customer-portal)
* [Referencia del SDK](/docs/es/sdk-reference)


## Related topics

- [Integrar con Python](/docs/es/integrate-with-python.md)
- [Integrar con Java](/docs/es/integrate-with-java.md)
- [Integrar con Django](/docs/es/integrate-with-django.md)
- [Integrar con Encore](/docs/es/integrate-with-encore.md)
- [Integrar con Laravel](/docs/es/integrate-with-laravel.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.