Wren Tree Orders API

Create and list tree-planting orders

OpenAPI Specification

wren-tree-orders-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Wren Credits Tree Orders API
  description: The Wren API is a JSON REST API that lets you offset carbon dioxide through Wren's portfolio of verified carbon sequestration projects. Create offset orders by tonnage, fund specific projects by dollar amount, plant trees, manage a prepaid credit balance, and list portfolios, purchases, and donations. Most endpoints require an API token (team live token, wren_test_ sandbox token, or legacy personal token) via HTTP Basic or Bearer auth.
  version: '2026-07-21'
  contact:
    name: Wren Support
    email: support@wren.co
    url: https://www.wren.co/faq
  termsOfService: https://www.wren.co/terms-of-use
servers:
- url: https://www.wren.co
  description: Production
security:
- basicAuth: []
- bearerAuth: []
tags:
- name: Tree Orders
  description: Create and list tree-planting orders
paths:
  /api/tree-orders:
    post:
      operationId: createTreeOrder
      tags:
      - Tree Orders
      summary: Create a tree order
      description: Creates a tree order by number of trees, charging via Stripe or credits. Tree orders are currently fulfilled through the WeForest provider.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TreeOrderRequest'
            examples:
              basic:
                value:
                  amountOfTrees: 10
                  note: Tree planting order
              credits:
                value:
                  amountOfTrees: 10
                  paymentMethod: credits
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/TreeOrderRequest'
      responses:
        '200':
          description: Tree order created (or previewed when dryRun is true)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TreeOrderResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
    get:
      operationId: listTreeOrders
      tags:
      - Tree Orders
      summary: List your tree orders
      responses:
        '200':
          description: The user's tree orders
          content:
            application/json:
              schema:
                type: object
                properties:
                  treeOrders:
                    type: array
                    items:
                      $ref: '#/components/schemas/TreeOrder'
        '403':
          $ref: '#/components/responses/Forbidden'
  /api/tree-orders/preview:
    post:
      operationId: previewTreeOrder
      tags:
      - Tree Orders
      summary: Preview tree order pricing
      description: Returns pricing information for a tree order without placing it.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - amountOfTrees
              properties:
                amountOfTrees:
                  type: integer
                  minimum: 1
                  description: Number of trees to price.
            examples:
              basic:
                value:
                  amountOfTrees: 10
      responses:
        '200':
          description: Tree order pricing preview
          content:
            application/json:
              schema:
                type: object
                properties:
                  amountOfTrees:
                    type: integer
                  priceInUSD:
                    type: number
                  priceInUserCurrency:
                    type: number
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  schemas:
    TreeOrderResponse:
      type: object
      properties:
        id:
          type:
          - string
          - 'null'
          description: Order group ID (Stripe charge ID for Stripe payments, UUID for credits, null for dry runs).
        amountCharged:
          type: number
        currency:
          type: string
          description: The user's currency code. For credits, always USD.
        impact:
          type: object
          properties:
            trees:
              type: integer
        paymentMethod:
          type: string
        creditsRemaining:
          type: integer
        test:
          type: boolean
    TreeOrderRequest:
      type: object
      required:
      - amountOfTrees
      properties:
        amountOfTrees:
          type: integer
          minimum: 1
          description: Number of trees to plant.
        paymentMethod:
          type: string
          enum:
          - stripe
          - credits
          default: stripe
        note:
          type: string
        dryRun:
          type: boolean
        onBehalfOfName:
          type: string
          maxLength: 200
        onBehalfOfEmail:
          type: string
          maxLength: 320
    TreeOrder:
      type: object
      properties:
        id:
          type: string
        amountOfTrees:
          type: integer
        createdAt:
          type: string
          format: date-time
    Error:
      type: object
      properties:
        message:
          type: string
          description: Human-readable description of the validation or auth failure.
  responses:
    Forbidden:
      description: Missing or invalid authentication, or account not eligible for the operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Invalid payload, missing required fields, or validation failure.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'Recommended for curl: pass the API token as the username with an empty password (-u [api_token]:). Token types: team live token (UUID), team test token (wren_test_ prefix, sandbox), legacy personal token (UUID).'
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer [api_token] with the same token types as Basic auth.'
externalDocs:
  description: Wren API Documentation
  url: https://www.wren.co/docs/api
x-provenance:
  generated: '2026-07-21'
  method: derived
  source:
  - https://www.wren.co/docs/api
  - https://www.wren.co/docs/api/wren-api.postman_collection.json
  - https://www.wren.co/docs/api/offset-orders
  - https://www.wren.co/docs/api/project-orders
  - https://www.wren.co/docs/api/tree-orders
  - https://www.wren.co/docs/api/portfolios
  - https://www.wren.co/docs/api/purchases
  - https://www.wren.co/docs/api/project-donations
  - https://www.wren.co/docs/api/credits
  note: Wren publishes complete REST reference documentation and a Postman collection but no OpenAPI document. This spec was derived faithfully from the published docs and collection by the API Evangelist enrichment pipeline; it is not an official Wren artifact.