Directree Listings API

The Listings API from Directree — 4 operation(s) for listings.

Operations 5

GET /api/v1/listings Read the listing accessible to this connection #
GET /api/v1/listings/{id} Read current owner-visible fields and revision #
PATCH /api/v1/listings/{id} Update explicitly supplied fields #
POST /api/v1/listings/{id}/validate Validate and preview without saving #
GET /api/v1/listings/{id}/changes Read the latest 50 non-empty API updates for the current owner #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/directree-io:directree-io-listings-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

directree-io-listings-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Directree Plus Listing Listings API
  version: 1.0.0
  description: 'Beta: one verified listing per key; 60 requests/minute, 1,000 requests/day and 100 changed updates/day per account. Partial updates follow existing review rules.'
servers:
- url: https://www.directree.io
security:
- bearerAuth: []
tags:
- name: Listings
paths:
  /api/v1/listings:
    get:
      operationId: listMyListings
      summary: Read the listing accessible to this connection
      responses:
        '200':
          description: Success. Update returns listing, changes and replayed; validation returns preview, revision, staged and changes.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid JSON or missing Idempotency-Key.
        '401':
          description: Missing, revoked, expired or invalid key.
        '403':
          description: Plus required or connection is read-only.
        '404':
          description: Listing unavailable to this connection.
        '409':
          description: Idempotency-Key reused for a different request, or listing cannot be updated.
        '412':
          description: Revision changed. Re-read and review before retrying.
        '413':
          description: Request exceeds 32 KiB.
        '415':
          description: Content-Type must be application/json.
        '422':
          description: Field validation failed; error.fields contains paths and messages.
        '428':
          description: X-Listing-Revision required.
        '429':
          description: Rate limit reached. Respect Retry-After.
        '503':
          description: Temporarily unavailable. Retry the identical request with the same Idempotency-Key.
      tags:
      - Listings
  /api/v1/listings/{id}:
    get:
      operationId: getMyListing
      summary: Read current owner-visible fields and revision
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Success. Update returns listing, changes and replayed; validation returns preview, revision, staged and changes.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid JSON or missing Idempotency-Key.
        '401':
          description: Missing, revoked, expired or invalid key.
        '403':
          description: Plus required or connection is read-only.
        '404':
          description: Listing unavailable to this connection.
        '409':
          description: Idempotency-Key reused for a different request, or listing cannot be updated.
        '412':
          description: Revision changed. Re-read and review before retrying.
        '413':
          description: Request exceeds 32 KiB.
        '415':
          description: Content-Type must be application/json.
        '422':
          description: Field validation failed; error.fields contains paths and messages.
        '428':
          description: X-Listing-Revision required.
        '429':
          description: Rate limit reached. Respect Retry-After.
        '503':
          description: Temporarily unavailable. Retry the identical request with the same Idempotency-Key.
      tags:
      - Listings
    patch:
      operationId: updateMyListing
      summary: Update explicitly supplied fields
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: X-Listing-Revision
        in: header
        required: true
        description: The 32-character listing.revision value from GET, without quotes. Omit HTTP conditional headers such as If-Match.
        schema:
          type: string
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9_-]{8,128}$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 120
                tagline:
                  type: string
                  maxLength: 200
                description:
                  type: string
                  maxLength: 2000
                pricing_from:
                  anyOf:
                  - type: string
                    maxLength: 60
                  - type: 'null'
                has_free_plan:
                  type: boolean
                has_free_trial:
                  type: boolean
                plan_type:
                  anyOf:
                  - type: string
                    enum:
                    - paid
                    - subscription
                    - free
                    - freemium
                  - type: 'null'
                company_location:
                  anyOf:
                  - type: string
                    maxLength: 120
                  - type: 'null'
                languages:
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 40
                integrations:
                  maxItems: 8
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 100
                socials:
                  type: object
                  propertyNames:
                    type: string
                    enum:
                    - twitter
                    - linkedin
                    - github
                    - discord
                    - youtube
                    - facebook
                    - instagram
                    - tiktok
                  additionalProperties:
                    type: string
                    maxLength: 500
                    format: uri
                youtube_url:
                  anyOf:
                  - type: string
                    maxLength: 500
                    format: uri
                  - type: 'null'
                demo_url:
                  anyOf:
                  - type: string
                    maxLength: 500
                    format: uri
                  - type: 'null'
                founder_key_features:
                  maxItems: 10
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                founder_best_for:
                  anyOf:
                  - type: string
                    maxLength: 160
                  - type: 'null'
                plans:
                  maxItems: 6
                  type: array
                  items:
                    type: object
                    properties:
                      plan_name:
                        type: string
                        minLength: 1
                        maxLength: 60
                      price_monthly_cents:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 100000000
                        - type: 'null'
                      price_annual_per_month_cents:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 100000000
                        - type: 'null'
                      currency:
                        default: USD
                        type: string
                        pattern: ^[A-Z]{3}$
                      is_free:
                        default: false
                        type: boolean
                      is_custom:
                        default: false
                        type: boolean
                      trial_days:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 3650
                        - type: 'null'
                      card_required:
                        anyOf:
                        - type: boolean
                        - type: 'null'
                      highlights:
                        maxItems: 5
                        type: array
                        items:
                          type: string
                          minLength: 1
                          maxLength: 60
                    required:
                    - plan_name
                    additionalProperties: false
              additionalProperties: false
      responses:
        '200':
          description: Success. Update returns listing, changes and replayed; validation returns preview, revision, staged and changes.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid JSON or missing Idempotency-Key.
        '401':
          description: Missing, revoked, expired or invalid key.
        '403':
          description: Plus required or connection is read-only.
        '404':
          description: Listing unavailable to this connection.
        '409':
          description: Idempotency-Key reused for a different request, or listing cannot be updated.
        '412':
          description: Revision changed. Re-read and review before retrying.
        '413':
          description: Request exceeds 32 KiB.
        '415':
          description: Content-Type must be application/json.
        '422':
          description: Field validation failed; error.fields contains paths and messages.
        '428':
          description: X-Listing-Revision required.
        '429':
          description: Rate limit reached. Respect Retry-After.
        '503':
          description: Temporarily unavailable. Retry the identical request with the same Idempotency-Key.
      tags:
      - Listings
  /api/v1/listings/{id}/validate:
    post:
      operationId: previewMyListingUpdate
      summary: Validate and preview without saving
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      - name: X-Listing-Revision
        in: header
        required: true
        description: The 32-character listing.revision value from GET, without quotes. Omit HTTP conditional headers such as If-Match.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $schema: https://json-schema.org/draft/2020-12/schema
              type: object
              properties:
                name:
                  type: string
                  minLength: 1
                  maxLength: 120
                tagline:
                  type: string
                  maxLength: 200
                description:
                  type: string
                  maxLength: 2000
                pricing_from:
                  anyOf:
                  - type: string
                    maxLength: 60
                  - type: 'null'
                has_free_plan:
                  type: boolean
                has_free_trial:
                  type: boolean
                plan_type:
                  anyOf:
                  - type: string
                    enum:
                    - paid
                    - subscription
                    - free
                    - freemium
                  - type: 'null'
                company_location:
                  anyOf:
                  - type: string
                    maxLength: 120
                  - type: 'null'
                languages:
                  maxItems: 20
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 40
                integrations:
                  maxItems: 8
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 100
                socials:
                  type: object
                  propertyNames:
                    type: string
                    enum:
                    - twitter
                    - linkedin
                    - github
                    - discord
                    - youtube
                    - facebook
                    - instagram
                    - tiktok
                  additionalProperties:
                    type: string
                    maxLength: 500
                    format: uri
                youtube_url:
                  anyOf:
                  - type: string
                    maxLength: 500
                    format: uri
                  - type: 'null'
                demo_url:
                  anyOf:
                  - type: string
                    maxLength: 500
                    format: uri
                  - type: 'null'
                founder_key_features:
                  maxItems: 10
                  type: array
                  items:
                    type: string
                    minLength: 1
                    maxLength: 200
                founder_best_for:
                  anyOf:
                  - type: string
                    maxLength: 160
                  - type: 'null'
                plans:
                  maxItems: 6
                  type: array
                  items:
                    type: object
                    properties:
                      plan_name:
                        type: string
                        minLength: 1
                        maxLength: 60
                      price_monthly_cents:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 100000000
                        - type: 'null'
                      price_annual_per_month_cents:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 100000000
                        - type: 'null'
                      currency:
                        default: USD
                        type: string
                        pattern: ^[A-Z]{3}$
                      is_free:
                        default: false
                        type: boolean
                      is_custom:
                        default: false
                        type: boolean
                      trial_days:
                        anyOf:
                        - type: integer
                          minimum: 0
                          maximum: 3650
                        - type: 'null'
                      card_required:
                        anyOf:
                        - type: boolean
                        - type: 'null'
                      highlights:
                        maxItems: 5
                        type: array
                        items:
                          type: string
                          minLength: 1
                          maxLength: 60
                    required:
                    - plan_name
                    additionalProperties: false
              additionalProperties: false
      responses:
        '200':
          description: Success. Update returns listing, changes and replayed; validation returns preview, revision, staged and changes.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid JSON or missing Idempotency-Key.
        '401':
          description: Missing, revoked, expired or invalid key.
        '403':
          description: Plus required or connection is read-only.
        '404':
          description: Listing unavailable to this connection.
        '409':
          description: Idempotency-Key reused for a different request, or listing cannot be updated.
        '412':
          description: Revision changed. Re-read and review before retrying.
        '413':
          description: Request exceeds 32 KiB.
        '415':
          description: Content-Type must be application/json.
        '422':
          description: Field validation failed; error.fields contains paths and messages.
        '428':
          description: X-Listing-Revision required.
        '429':
          description: Rate limit reached. Respect Retry-After.
        '503':
          description: Temporarily unavailable. Retry the identical request with the same Idempotency-Key.
      tags:
      - Listings
  /api/v1/listings/{id}/changes:
    get:
      operationId: getMyListingChanges
      summary: Read the latest 50 non-empty API updates for the current owner
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Success. Update returns listing, changes and replayed; validation returns preview, revision, staged and changes.
          content:
            application/json:
              schema:
                type: object
        '400':
          description: Invalid JSON or missing Idempotency-Key.
        '401':
          description: Missing, revoked, expired or invalid key.
        '403':
          description: Plus required or connection is read-only.
        '404':
          description: Listing unavailable to this connection.
        '409':
          description: Idempotency-Key reused for a different request, or listing cannot be updated.
        '412':
          description: Revision changed. Re-read and review before retrying.
        '413':
          description: Request exceeds 32 KiB.
        '415':
          description: Content-Type must be application/json.
        '422':
          description: Field validation failed; error.fields contains paths and messages.
        '428':
          description: X-Listing-Revision required.
        '429':
          description: Rate limit reached. Respect Retry-After.
        '503':
          description: Temporarily unavailable. Retry the identical request with the same Idempotency-Key.
      tags:
      - Listings
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: A Directree API key created in Account → Agent access.