> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://plant0.usefern.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://plant0.usefern.com/_mcp/server.

# Welcome to our developer documentation

> Here you'll find information to get started, as well as a sample API Reference generated by Fern from an OpenAPI specification file.

HELO WORLD
Welcome to the Plant Store API docs! This site demonstrates how to use Fern to generate API documentation from an OpenAPI file. You can [use this site template](https://github.com/fern-api/docs-starter-openapi) as a starting point for your own API documentation.

Learn about [key concepts](/platform/concepts) or jump straight to our [SDK installation guide](/platform/sdks).

## Getting Started

Here you'll find information about managing your plants, customers, and orders for your plant shop.

## Get support

Want to get in touch with the Fern team? Open an issue on [GitHub](https://github.com/fern-api/docs-starter-openapi/issues/new) or reach out to us via [email](mailto:support+plantstore@buildwithfern.com). We're here to help!

Hover over this text

The Quick brown fox jumps over the lazy fox.

JWT authentication

## Advanced Tooltip Options

Hover me

Custom positioned tooltip

API Key

API Key

&#x20;Hello!&#x20;

## Configuration

Your API key for authentication

```javascript
// Use your <Tooltip tip="Found in your account settings">API key</Tooltip> here
const client = new APIClient('your-api-key');
```

### Markdown Snippet

For example, suppose a restaurant offers hamburgers.  Hover me pliz  When a customer orders a hamburger, the restaurant records the order by creating an Order object with a line item (Hamburger). If the buyer wants a cheeseburger instead (a hamburger with cheese), the line item includes a modifier (cheese) with a quantity of 1. If the customer wants extra cheese, the modifier quantity can be 2 or more. Conversely, if the customer doesn’t want any cheese, you don’t need to add the modifiers list at all.

### Testing a list here

1. Oone
   1. Im a sublist
      1. Im a subsublist
         1. Im a subsubsublist

2. Two

### code blocks

```typescript
import { PlantClient } from "@plantstore/sdk";

const client = new PlantClient({ apiKey: "YOUR_API_KEY" });
const plant = await client.createPlant({
  name: "Monstera",
  species: "Monstera deliciosa"
});
```

Your API key for authentication

```Python
import requests
response = requests.get("https://api.plantstore.dev/v3/plants", headers={"Authorization": "Bearer YOUR_API_KEY"})
```

<details>
  <summary>this is a summary</summary>
  this is a details content
</details>

<details>
  <summary>this is a summary</summary>
  this is a details content
</details>

```python
import requests

# Replace api_key with your Merge production API Key
def create_link_token(user, api_key):
    body = {
        "end_user_origin_id": user.organization.id, # unique entity ID
        "end_user_organization_name": user.organization.name,  # your user's organization name
        "end_user_email_address": user.email_address, # your user's email address
        "categories": ["hris", "ats", "accounting", "ticketing", "crm"], # choose your category
    }

    headers = {"Authorization": f"Bearer {api_key}"}

    link_token_url = "https://api.merge.dev/api/integrations/create-link-token"
    link_token_result = requests.post(link_token_url, data=body, headers=headers)
    link_token = link_token_result.json().get("link_token")

    return link_token
```

```ruby Ruby
require 'httparty'

# Replace api_key with your organization's production API Key
def create_link_token(user, api_key)
  uri = URI('https://api.merge.dev/api/integrations/create-link-token')
  body = {
    'end_user_origin_id' => user.organization.id, # unique entity ID
    'end_user_organization_name' => user.organization.name, # your user's organization name
    'end_user_email_address' => user.email_address, # your user's email address
    'categories' => ["hris", "ats", "accounting", "ticketing", "crm"], # choose your category
  }
  headers = { 'Authorization' => "Bearer #{api_key}", 'Content-Type' => 'application/json' }

  link_token_response = HTTParty.post(uri, body: body.to_json, headers: headers)

  link_token_response['link_token']
end
```

```javascript Node
import { MergeClient, Merge } from '@mergeapi/merge-node-client';

// Swap YOUR_API_KEY below with your production key from:
// https://app.merge.dev/keys
const merge = new MergeClient({apiKey: 'YOUR_API_KEY'});

const linkTokenResponse = await merge.ats.linkToken.create({
  endUserEmailAddress: user.email_address,
  endUserOrganizationName: user.organization.name,
  endUserOriginId: user.id,
  categories: [Merge.hris.CategoriesEnum.Hris, Merge.ats.CategoriesEnum.Ats, Merge.filestorage.CategoriesEnum.Filestorage],
  linkExpiryMins: 30});

console.log("Created link token", linkTokenResponse.linkToken);
```

```java Java
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.HashMap;
import java.util.Map;

public class MergeLink {

    public static String createLinkToken(User user, String apiKey) throws IOException, InterruptedException {

        Map<Object, Object> data = new HashMap();
        data.put("end_user_origin_id", user.organization.id); // unique entity ID
        data.put("end_user_organization_name", user.organization.name); // your user's organization name
        data.put("end_user_email_address", user.email_address); // your user's email address
        String[] categories = { "hris", "ats", "accounting", "ticketing" };
        data.put("categories", categories);
        ObjectMapper mapper = new ObjectMapper();
        String requestBody = mapper.writeValueAsString(data);

        HttpClient client = HttpClient.newHttpClient();
        URI uri = URI.create("https://api.merge.dev/api/integrations/create-link-token");
        HttpRequest request = HttpRequest.newBuilder(uri).header("Content-Type", "application/json")
                .header("Authorization", String.format("Bearer %s", apiKey))
                .POST(HttpRequest.BodyPublishers.ofString(requestBody)).build();

        HttpResponse<String> linkTokenResult = client.send(request, HttpResponse.BodyHandlers.ofString());
        String linkToken = new ObjectMapper().readValue(linkTokenResult.body(), ObjectNode.class).get("link_token")
                .textValue();
        return linkToken;
    }
}

```

```elixir Elixir
# Replace api_key with your organization's production API Key
def create_link_token(user, api_key) do
  uri = "https://api.merge.dev/api/integrations/create-link-token"

  body =
    %{
      # unique entity ID
      "end_user_origin_id" => user.organization.id,
      # your user's organization name
      "end_user_organization_name" => user.organization.name,
      # your user's email address
      "end_user_email_address" => user.email,
      # choose your category
      "categories" => ["hris", "ats", "accounting", "ticketing", "crm"],
    }
    |> Jason.encode!()

  {:ok, response} =
    Tesla.post(uri, body,
      headers: [{"content-type", "application/json"}, {"Authorization", "Bearer #{api_key}"}]
    )

  link_token_response = Jason.decode!(response.body)
  link_token_response["link_token"]
end
```