Files
twenty/packages/twenty-apps/examples/postcard
Charles Bochet c26c0b9d71 Use app's own OAuth credentials for CoreApiClient generation (#19563)
## Summary

- **SDK (`dev` & `dev --once`)**: After app registration, the CLI now
obtains an `APPLICATION_ACCESS` token via `client_credentials` grant
using the app's own `clientId`/`clientSecret`, and uses that token for
CoreApiClient schema introspection — instead of the user's
`config.accessToken` which returns the full unscoped schema.
- **Config**: `oauthClientSecret` is now persisted alongside
`oauthClientId` in `~/.twenty/config.json` when creating a new app
registration, so subsequent `dev`/`dev --once` runs can obtain fresh app
tokens without re-registration.
- **CI action**: `spawn-twenty-app-dev-test` now outputs a proper
`API_KEY` JWT (signed with the seeded dev workspace secret) instead of
the previous hardcoded `ACCESS` token — giving consumers a real API key
rather than a user session token.

## Motivation

When developing Twenty apps, `yarn twenty dev` was using the CLI user's
OAuth token for GraphQL schema introspection during CoreApiClient
generation. This token (type `ACCESS`) has no `applicationId` claim, so
the server returns the **full workspace schema** — including all objects
— rather than the scoped schema the app should see at runtime (filtered
by `applicationId`).

This caused a discrepancy: the generated CoreApiClient contained fields
the app couldn't actually query at runtime with its `APPLICATION_ACCESS`
token.

By switching to `client_credentials` grant, the SDK now introspects with
the same token type the app will use in production, ensuring the
generated client accurately reflects the app's runtime capabilities.
2026-04-11 11:24:28 +02:00
..
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00
2026-04-03 12:44:03 +00:00

Postcard App — Twenty App Example

A rich example app showcasing all Twenty app entity types. Use this as a reference when building your own apps.

What's included

This app demonstrates every entity type available in the Twenty SDK:

Entity Files What it shows
Application src/application.config.ts App metadata, application variables, server variables
Objects src/objects/ Custom objects with inline fields, junction tables
Fields src/fields/ Standalone fields, relations (ONE_TO_MANY, MANY_TO_ONE), extending standard objects
Logic Functions src/logic-functions/ HTTP routes, database event triggers, cron schedules, tool functions, install hooks
Front Components src/components/ React components rendered inside Twenty's UI
Roles src/roles/ Permission roles with object and field-level access control
Views src/views/ Saved table views with column configuration
Navigation src/navigation-menu-items/ Sidebar links targeting views
Skills src/skills/ AI skill providing context to agents
Agents src/agents/ AI agent with a system prompt
Page Layouts src/page-layouts/ Custom record page with a front component widget

Getting started

# From this directory
yarn install
yarn twenty dev

Or use it as a template via create-twenty-app:

npx create-twenty-app@latest my-app --example postcard

Learn more