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

# Framer Entitlement

> Unlock a Framer template remix link for paying customers.

<Info>
  The Framer entitlement unlocks a Framer template remix link for paying customers. You upload the template to Dodo Payments, attach the entitlement to a product, and customers receive a remix link that lets them clone the template into their own Framer account.
</Info>

## What gets delivered

* A unique remix link to the Framer template you uploaded.
* The customer clicks the link to remix the template into their own Framer workspace.
* On cancellation or refund, the remix link is invalidated.

Common uses include paid Framer landing-page templates, portfolio kits, and component libraries.

## Connect Framer

Framer is connected implicitly the first time you create a template entitlement. There's no separate OAuth step.

<Steps>
  <Step title="Open Entitlements">
    In your Dodo Payments dashboard, go to **Entitlements** and click **+**.
  </Step>

  <Step title="Pick Framer">
    Choose **Framer Template** as the integration.
  </Step>

  <Step title="Grab the remix link from Framer">
    Open your Framer project. From the top-left menu, go to **File → Copy Remix Link**. This produces a public remix URL that lets anyone clone the project into their own Framer account — the link Dodo Payments will share with paying customers.

    <Frame caption="Framer File menu: click Copy Remix Link to copy the template's remix URL.">
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/framer/copy-remix-link.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=a0e1e4d5c9cc0a88ca5dbf059a4d2329" alt="Framer File menu with Copy Remix Link option highlighted" style={{ maxHeight: '500px', width: 'auto' }} width="906" height="1488" data-path="images/entitlements/framer/copy-remix-link.png" />
    </Frame>
  </Step>

  <Step title="Add the template and create the entitlement">
    Back in the Dodo Payments dashboard, pick the template from the **Template** dropdown. The first time you do this for a new template, paste in the remix link you copied to register it. Give the entitlement a **name** and click **Create Entitlement**.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/do-W-dMDGVB_xzr_/images/entitlements/framer/create.png?fit=max&auto=format&n=do-W-dMDGVB_xzr_&q=85&s=f3b5bfdb1092047e06f4eeba03d7bddf" alt="Framer template entitlement form with template picker and name field" style={{ maxHeight: '500px', width: 'auto' }} width="2000" height="1130" data-path="images/entitlements/framer/create.png" />
    </Frame>

    Dodo Payments registers the template and returns a `framer_template_id` you can reference programmatically.
  </Step>
</Steps>

## Customer flow

1. The customer completes checkout.
2. Dodo Payments creates a `pending` grant and issues a unique remix link tied to that customer.
3. The grant transitions to `delivered` once the remix link is provisioned and the link is included in the customer's email and portal.
4. The customer clicks the link, signs in to Framer, and remixes the template.
5. On revocation, the remix link is invalidated. Already-remixed copies in the customer's Framer account remain, since Framer doesn't expose a way to revoke them.

## Required configuration

| Field                | Required | Description                                            |
| -------------------- | -------- | ------------------------------------------------------ |
| `framer_template_id` | Yes      | The template ID returned when you upload the template. |

## Create via API

<CodeGroup>
  ```typescript TypeScript theme={null} theme={null}
  const entitlement = await client.entitlements.create({
    name: 'Portfolio Kit',
    integration_type: 'framer',
    integration_config: {
      framer_template_id: 'tmpl_abc123',
    },
  });
  ```

  ```python Python theme={null} theme={null}
  client.entitlements.create(
      name="Portfolio Kit",
      integration_type="framer",
      integration_config={"framer_template_id": "tmpl_abc123"},
  )
  ```

  ```go Go theme={null} theme={null}
  client.Entitlements.New(ctx, dodopayments.EntitlementNewParams{
    Name:            dodopayments.F("Portfolio Kit"),
    IntegrationType: dodopayments.F(dodopayments.EntitlementIntegrationTypeFramer),
    IntegrationConfig: dodopayments.F[dodopayments.IntegrationConfigUnionParam](
      dodopayments.IntegrationConfigFramerConfigParam{
        FramerTemplateID: dodopayments.F("tmpl_abc123"),
      },
    ),
  })
  ```
</CodeGroup>

## Webhooks

See [`entitlement_grant.*` webhook events](/developer-resources/webhooks/intents/entitlement-grant). Framer grants arrive `pending` and transition to `delivered` once the remix link is provisioned.

## Troubleshooting

<AccordionGroup>
  <Accordion title="Customer's remix link doesn't work">
    The remix link is single-use and tied to the customer. If they cleared the link before remixing, revoke the grant and reissue.
  </Accordion>

  <Accordion title="Refunded customer still has a remixed copy">
    This is expected. Framer treats a remix as the customer's own project once it's cloned; Dodo Payments invalidates the original link but cannot delete copies in the customer's account.
  </Accordion>
</AccordionGroup>
