Get hosted version
A starter template to write Fastify APIs for OpenAI GPTs with auth, billing and OpenAPI spec generation.
- OAuth authentication with Clerk
- Stripe billing
- Prisma/SQLite for persistence
- 100% TypeScript
- Deploy wherever you like (we use Render)
npm i
npm run dev- Make a Clerk application
- Get your publishable key and expose it as
CLERK_PUBLISHABLE_KEY - Get your secret key and expose it as
CLERK_SECRET_KEY - Make a Clerk webhook
- Point it to the route
/webhooks/clerkin this API wherever you've deployed it - Subscribe to the
user.createdevent
- Point it to the route
- Expose the webhook signing secret as
CLERK_WEBHOOK_SECRET - Add a custom domain to your Clerk application that matches the
SERVER_URLin your environment variables, which is where you have deployed this API
The app uses Clerk to provide oauth for you GPT.
Run the following to create a Clerk oauth server on your production account:
npm run clerk-oauth-createThis will write the file ./clerk_oauth.json. Use these parameters in the GPT UI to create your oauth login for your GPT.
OpenAI will then generate a callback URL for your GPT, copy this from the UI and run the following script to update your Clerk oauth to use it:
npm run clerk-oauth-update https://chat.openai.com/aip/g-123/oauth/callbackNote you must use a production Clerk account with a custom domain, as the domain of your oauth must match that in your actions openapi spec.
- Get an API key from Stripe: https://dashboard.stripe.com/apikeys
- Expose it as the env variable
STRIPE_SECRET_KEY - Make a subscription product in the Stripe UI: https://dashboard.stripe.com/products/create
- Get the resulting price ID and expose it as
STRIPE_PRICE_ID - Make a webhook: https://dashboard.stripe.com/webhooks/create
- Point it to the route
/webhooks/stripein this API wherever you've deployed it - Make it handle the following events:
checkout.session.completedcustomer.subscription.updatedcustomer.subscription.deleted
- Point it to the route
- Obtain the signing secret for your webhook and expose it as
STRIPE_WEBHOOK_SECRET
By default, protected API routes will require a subscription after 7 days.
Change this by editing TRIAL_DAYS in src/constants.ts or by setting the TRIAL DAYS
environment variable.
SERVER_URL should point to wherever you've deployed this API,
e.g. https://example.com/api.
DATABASE_URL should point to wherever your database is.
You will also need to update the prisma.schema file to use whatever database
you have chosen, if it is not SQLite.
GPT_URL should point to your GPT. It is used for redirection from billing pages.
Point your GPT actions at the route /docs/json wherever you have deployed this API.
If you want to set x-openai-isConsequential for any routes, you will instead need
to copy the JSON at /docs/json, manually alter it, and put the resulting spec
into your GPT actions.
Tell your GPT about the billing in your instructions (aka prompt), for example:
After a user signs in via OAuth, check their billing subscription status and inform them about the 7-day free trial for this service and display any generated links from actions.
Built using this backend template.
- Create and Execute Database Migrations: I can help you create and execute database migrations to update the structure of your PostgreSQL database. This includes adding tables, modifying columns, creating indexes, and more.
- Rollback Migrations: If a recent migration didn't go as planned, I can help you roll it back to the previous state.
- Retrieve Current Database Schema: I can fetch and display the current schema of your database, allowing you to see the structure of your tables, columns, and relationships.
- Execute SQL Statements: You can ask me to execute specific SQL statements on your database. This is useful for querying data, updating records, deleting entries, and other database operations.
- Provide Database URL: If you need to connect to the database using external tools or applications, I can provide you with the database URL.
- Check Billing Subscription Status: After you sign in via OAuth, I will check your billing subscription status. I'll inform you about the 7-day free trial for this service and provide any necessary links for subscription management or purchase.