DroneDeploy

DroneDeploy is a drone mapping, reality capture, and aerial analytics platform for construction, energy, agriculture, and inspection. Its developer platform is a GraphQL API (endpoint https://www.dronedeploy.com/graphql) that lets Enterprise and Developer Partner accounts query and mutate DroneDeploy data - organizations, projects, map plans, exports, annotations/issues, images, and webhooks - using a single strongly typed, Relay-style (cursor-paginated) schema rooted at the `viewer` object. A set of legacy REST APIs (Map Processing / Map Engine as a Service, Plan API, Export API) also remains available, but DroneDeploy recommends the GraphQL API for most integrations.

7 APIs 0 Features
Drone MappingReality CaptureAerial AnalyticsGeospatialGraphQLPhotogrammetry

APIs

DroneDeploy Projects and Plans API

Query the projects and plans (MapPlan) in an organization through `viewer.organization.plans`/`projects` and the `node(id)` lookup - reading name, location and geometry (lat/lng...

DroneDeploy Maps and Exports API

Generate and retrieve map exports from a MapPlan. The confirmed `createExport(input CreateExportInput!)` mutation takes a planId plus parameters (layer required; projection, mer...

DroneDeploy Annotations and Issues API

Create, read, and update annotations and Issues (field markups tied to a plan's map - points, lines, polygons, and their notes/attachments) through the schema's Issue type and i...

DroneDeploy Uploads and Images API

Manage the source imagery behind a map. `MapPlan.imageCount` is confirmed; image listing and upload/ingest mutations that add photos to a plan and trigger map processing are mod...

DroneDeploy Users and Organizations API

Resolve the authenticated account and its organization. The confirmed `viewer` root returns the current user (e.g. username) and `viewer.organization` exposes the org and its pl...

DroneDeploy Reports API

Retrieve analytic and reporting artifacts derived from a plan - volume/stockpile measurements, cut/fill, and generated report documents. Reports are surfaced as a specialized ex...

DroneDeploy Webhooks API

Register outbound webhooks so DroneDeploy notifies your endpoint when long-running work finishes. Confirmed on the export flow, where a `webhook.url` set inside CreateExportInpu...

Collections

GraphQL

DroneDeploy GraphQL API

DroneDeploy is a drone mapping, reality capture, and aerial analytics platform. Its

GRAPHQL

Pricing Plans

Rate Limits

Dronedeploy Rate Limits

4 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: DroneDeploy GraphQL API
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{apiKey}}'
items:
- info:
    name: Users & Organizations
    type: folder
  items:
  - info:
      name: Get current viewer.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: query GetViewer { viewer { username } }
    docs: CONFIRMED. Returns the currently authenticated user's username via the viewer root.
  - info:
      name: Get organization.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: query GetOrg { viewer { organization { id name } } }
    docs: viewer.organization is CONFIRMED; the name field is modeled.
- info:
    name: Projects & Plans
    type: folder
  items:
  - info:
      name: List plans for your organization.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'query GetPlans { viewer { organization { plans(first: 50) { pageInfo { hasNextPage endCursor } edges { cursor
          node { name geometry { lat lng } location { lat lng } dateCreation } } } } } }'
    docs: 'CONFIRMED. Cursor-paginated list of plans in the organization. Use after: endCursor for the next page.'
  - info:
      name: Get a single map plan.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'query GetMap { node(id: "MapPlan:5a3d7badf014ce3db3c22391") { ... on MapPlan { name location { lat lng } imageCount
          status } } }'
    docs: CONFIRMED. Fetch a MapPlan by id using node() plus an inline fragment.
  - info:
      name: Create a project (modeled).
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'mutation CreateProject($input: CreateProjectInput!) { createProject(input: $input) { project { id name } }
          }'
        variables: '{ "input": { "name": "North Site" } }'
    docs: MODELED from MutationRoot. Verify exact input shape in the Enterprise GraphiQL console.
- info:
    name: Maps & Exports
    type: folder
  items:
  - info:
      name: Create an export.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'mutation CreateExport($input: CreateExportInput!) { createExport(input: $input) { export { id } } }'
        variables: '{ "input": { "planId": "5a0de0835f1e08eaabc732bd", "parameters": { "layer": "ORTHOMOSAIC" } } }'
    docs: CONFIRMED. createExport takes planId + parameters (only layer required) and returns export.id. Poll until status
      is COMPLETE.
  - info:
      name: Fetch exports for a plan.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'query GetExports { node(id: "MapPlan:5a0de0835f1e08eaabc732bd") { ... on MapPlan { exports(first: 5) { edges
          { node { id user { username } parameters { projection merge contourInterval fileFormat resolution } status dateCreation
          downloadPath } } } } } }'
    docs: CONFIRMED. Lists exports on a MapPlan with status, parameters, and downloadPath.
- info:
    name: Annotations & Issues
    type: folder
  items:
  - info:
      name: Update an issue (modeled).
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'mutation UpdateIssue($input: UpdateIssueInput!) { updateIssue(input: $input) { issue { id title status } }
          }'
        variables: '{ "input": { "id": "Issue:REPLACE_ME", "status": "RESOLVED" } }'
    docs: MODELED. The Issue type and UpdateIssueInput exist in the schema reference; exact fields verified in GraphiQL.
- info:
    name: Uploads & Images
    type: folder
  items:
  - info:
      name: Get image count for a plan.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'query GetImageCount { node(id: "MapPlan:5a3d7badf014ce3db3c22391") { ... on MapPlan { imageCount } } }'
    docs: CONFIRMED. MapPlan.imageCount. Uploading new imagery uses DroneDeploy's presigned upload flow (modeled).
- info:
    name: Webhooks
    type: folder
  items:
  - info:
      name: Create export with completion webhook.
      type: http
    http:
      method: POST
      url: https://www.dronedeploy.com/graphql
      body:
        type: graphql
        query: 'mutation CreateExport($input: CreateExportInput!) { createExport(input: $input) { export { id } } }'
        variables: '{ "input": { "planId": "5a0de0835f1e08eaabc732bd", "parameters": { "layer": "ORTHOMOSAIC", "webhook":
          { "url": "https://example.com/hooks/dronedeploy" } } } }'
    docs: CONFIRMED. A webhook.url in export parameters is called when the export reaches COMPLETE.