For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Book a demoLog inStart for free
  • Overview
    • What is an API definition?
    • Project structure
      • Overview
      • Authentication
      • Types
        • Webhooks
        • WebSockets
        • Errors
        • Imports
        • Examples
        • Audiences
        • Availability
Checking status...
SOC2Soc 2 Type II
© 2026 Fern • Birch Solutions, Inc., a Postman company

Documentation

SDKsDocsAsk FernCLI Reference

API Definitions

OpenAPIAsyncAPIOpenRPCgRPC

Resources

BlogSupportPricing

Company

Brand KitPrivacy PolicyTerms of Service
LogoLogo
Book a demoLog inStart for free
On this page
  • Validation
  • Referencing examples
  • Examples for types
  • Objects
  • Lists
  • Unions
  • Discriminated union
  • Undiscriminated union
  • Aliases
  • Examples for endpoints
  • Examples with headers
  • Examples for path parameters
Fern DefinitionAdvanced

Examples in Fern Definition

Use Fern Definition to add API examples that are shown in comments of SDKs, API Reference documentation, and a Postman collection.
||View as Markdown|
Was this page helpful?
Edit this page
Previous

Imports in Fern Definition

Next

Audiences in Fern Definition

Fern Definition isn’t recommended for new customers and Fern isn’t accepting feature requests for this format. It remains supported for existing users.

You can add examples for types and endpoints. Examples are shown as comments in your SDKs, in the request & response of your documentation, and in a Postman Collection.

Validation

The Fern CLI validates that your examples match the expected types. The following won’t compile:

1types:
2 UserId:
3 type: integer
4 examples:
5 - value: hello # not an integer
CLI Error Message
$[api]: example.yml -> types -> UserId -> examples[0]
$ Expected example to be an integer. Example is: "hello"

Referencing examples

You can reference an example from another type, endpoint, or error.

Just like types, you can compose examples. To reference an example from another type, use $.

1types:
2 UserId:
3 type: integer
4 examples:
5 - name: Example1
6 value: user-id-123
7
8 User:
9 properties:
10 id: UserId
11 name: string
12 examples:
13 - value:
14 id: $UserId.Example1
15 name: Jane Smith

Examples for types

Objects

1types:
2 ShipTo:
3 properties:
4 street1: string
5 street2: optional<string>
6 city: string
7 state: string
8 postalCode: string
9 country: Country
10 isResidential: boolean
11 examples:
12 - name: WhiteHouse
13 value:
14 street1: 1600 Pennsylvania Avenue NW
15 city: Washington DC
16 state: Washington DC
17 postalCode: "20500"
18 country: US
19 isResidential: true
20 - name: EmpireStateBuilding
21 value:
22 street1: 350 5th Ave
23 street2: Attn: Maintenance Department
24 city: New York
25 state: NY
26 postalCode: "10118"
27 country: US
28 isResidential: false
Generated TypeScript SDK
1/**
2 * Represents a shipping address.
3 *
4 * The White House address
5 * @example {
6 * street1: "1600 Pennsylvania Avenue NW",
7 * city: "Washington DC",
8 * state: "Washington DC",
9 * postalCode: "20500",
10 * country: "US",
11 * isResidential: true
12 * }
13 *
14 * * The Empire State Building address
15 * @example {
16 * street1: "350 5th Ave",
17 * street2: "Attn: Maintenance Department",
18 * city: "New York",
19 * state: "NY",
20 * postalCode: "10118",
21 * country: "US",
22 * isResidential: false
23 * }
24 */
25type ShipTo = {
26 street1: string;
27 street2?: string;
28 city: string;
29 state: string;
30 postalCode: string;
31 country: Country;
32 isResidential: boolean;
33};

Lists

1 Shipments:
2 type: list<ShipmentStatus>
3 examples:
4 - name: Default
5 value:
6 - status: "InTransit"
7 estimatedDeliveryDate: "2024-01-11"
8 - status: "Delivered"
9 estimatedDeliveryDate: "2024-01-13"

Unions

Discriminated union

1types:
2 Animal:
3 union:
4 dog: Dog
5 cat: Cat
6 examples:
7 - value:
8 type: dog
9 likesToWoof: true
10 Dog:
11 properties:
12 likesToWoof: boolean
13 Cat:
14 properties:
15 likesToMeow: boolean
Generated TypeScript SDK
1/**
2 * Represents an animal, which can be either a Dog or a Cat.
3 *
4 * Example of a Dog:
5 * @example {
6 * type: "dog",
7 * likesToWoof: true
8 * }
9 */
10type Animal = Dog | Cat;

Undiscriminated union

1types:
2 Animal:
3 discriminated: false
4 union:
5 - Dog
6 - Cat
7 examples:
8 - value:
9 likesToMeow: true
10 Dog:
11 properties:
12 likesToWoof: boolean
13 Cat:
14 properties:
15 likesToMeow: boolean
Generated TypeScript SDK
1/**
2 * Represents an Animal, which can be either a Dog or a Cat.
3 *
4 * Example of an Animal as a Cat:
5 * @example {
6 * likesToMeow: true
7 * }
8 */
9type Animal = Dog | Cat;

Aliases

1types:
2 UserId:
3 docs: A unique identifier for a user
4 type: string
5 examples:
6 - value: user-id-123
Generated TypeScript SDK
1/**
2* A unique identifier for a user *
3* @example "user-id-123"
4*/
5type UserId = string;

Examples for endpoints

You can add examples of successful and error responses for your endpoints. Examples can reference the examples of types to avoid duplication.

1service:
2 auth: true
3 base-path: ""
4 endpoints:
5 CreateShippingLabel:
6 docs: Create a new shipping label.
7 method: POST
8 path: /shipping
9 request: CreateShippingLabelRequest
10 response: ShippingLabel
11 errors:
12 - NotAuthorized
13 - InsufficientFunds
14 examples:
15 # A successful response that doesn't reference other examples.
16 - request:
17 orderId: "online_789"
18 weightInOunces: 5
19 response:
20 body:
21 orderId: "online_789"
22 weightInOunces: 5
23 trackingNumber: "1Z26W8370303469306"
24 price: 2.50
25
26 # A successful response that uses references.
27 - request: $CreateShippingLabelRequest.SuccessfulRequest
28 response:
29 body: $ShippingLabel.Default
30
31 # An error response.
32 - request: $CreateShippingLabelRequest.InsufficientFundsRequest
33 response:
34 error: InsufficientFunds
35 body: $InsufficientFundsBody.Default
36
37types:
38 CreateShippingLabelRequest:
39 properties:
40 orderId: string
41 weightInOunces: integer
42 examples:
43 - name: SuccessfulRequest
44 value:
45 orderId: "online_123"
46 weightInOunces: 13
47 - name: InsufficientFundsRequest
48 value:
49 orderId: "online_456"
50 weightInOunces: 2000
51
52 ShippingLabel:
53 properties:
54 orderId: string
55 weightInOunces: integer
56 trackingNumber: string
57 price: double
58 examples:
59 - name: Default
60 value:
61 orderId: "online_123"
62 weightInOunces: 13
63 trackingNumber: "1Z12345E0205271688"
64 price: 12.35
65
66 InsufficientFundsBody:
67 properties:
68 message: string
69 examples:
70 - name: Default
71 value:
72 message: "Insufficient funds to create shipping label."
73
74errors:
75 NotAuthorized:
76 status-code: 401
77 InsufficientFunds:
78 status-code: 422
79 type: InsufficientFundsBody

Examples with headers

When you have global headers defined in your api.yml, you must include them in your examples:

1service:
2 auth: true
3 base-path: ""
4 endpoints:
5 CreateShippingLabel:
6 docs: Create a new shipping label.
7 method: POST
8 path: /shipping
9 request: CreateShippingLabelRequest
10 response: ShippingLabel
11 errors:
12 - NotAuthorized
13 - InsufficientFunds
14 examples:
15 - headers:
16 X-App-Id: "app_12345"
17 request:
18 orderId: "online_789"
19 weightInOunces: 5
20 response:
21 body:
22 orderId: "online_789"
23 weightInOunces: 5
24 trackingNumber: "1Z26W8370303469306"
25 price: 2.50

Examples for path parameters

1service:
2 auth: true
3 base-path: ""
4 endpoints:
5 TrackShipment:
6 docs: Track the status of a shipment.
7 method: GET
8 path: /shipping/{trackingNumber}
9 path-parameters:
10 trackingNumber: string
11 response: ShipmentStatus
12 examples:
13 - path-parameters:
14 trackingNumber: "1Z26W8370303469306"
15 response:
16 body:
17 status: "InTransit"
18 estimatedDeliveryDate: "2024-01-11"