Skip to main content
Create a new processing job within an existing project. Once created, the job moves through a lifecycle from provisioning to awaiting uploads — at which point you can upload construction drawings, specifications, and other documents for normalization. Supply a webhookUrl to receive real-time push notifications on every status change, eliminating the need to poll.

Authentication

Include your API key as Authorization: Bearer YOUR_API_KEY in the request headers.

Endpoint

POST https://plangrep.com/api/open/v1/projects/{projectId}/jobs

Path Parameters

projectId
string
required
The unique identifier of the project in which to create the job. The project must have a status of ready.

Header Parameters

Idempotency-Key
string
An optional client-generated key (max 256 characters) used to safely retry the request. If a job was already created with this key, the original job is returned with idempotent: true in the response body rather than creating a duplicate.

Request Body

externalId
string
An optional identifier from your own system (max 180 characters) to correlate with this job. Stored and returned as-is — Plangrep does not validate uniqueness.
webhookUrl
string
An optional publicly reachable HTTPS URL to receive job status push notifications. Must be a valid URI. Plangrep will POST a signed payload to this URL on every job status change.

Example Request

curl --request POST \
  --url https://plangrep.com/api/open/v1/projects/proj_01hx9z4kqr8e7m3p5n6w2v0abc/jobs \
  --header "Authorization: Bearer YOUR_API_KEY" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Idempotency-Key: my-unique-request-id-001" \
  --data '{
    "externalId": "order-7890",
    "webhookUrl": "https://your-app.example.com/webhooks/plangrep"
  }'

Response Fields

The endpoint returns 202 Accepted.
job
Job
required
The newly created job object.
idempotent
boolean
Present and true when the response is a replay of a previously created job matched by Idempotency-Key.
webhookSigningSecret
string | null
A secret string used to verify the authenticity of webhook payloads Plangrep sends to your webhookUrl. Shown only in this response — it cannot be retrieved again. Store it securely immediately.

Job Status Values

StatusTerminalDescription
provisioningNoJob infrastructure is being set up.
awaiting_uploadsNoReady to receive file uploads.
uploadingNoFiles are being uploaded.
preflightingNoFiles are being validated before processing.
blocked_insufficient_creditsNoPaused due to insufficient credits.
processingNoPlangrep is processing the uploaded documents.
completedYesAll pages processed successfully.
completed_with_errorsYesProcessing finished with partial errors.
failedYesProcessing failed.
cancelledYesJob was cancelled before completion.
expiredYesJob expired before reaching a terminal state.

Example Response

{
  "job": {
    "id": "job_01hy3m8qtn2e5r7k9p0w4x1def",
    "externalId": "order-7890",
    "status": "awaiting_uploads",
    "projectId": "proj_01hx9z4kqr8e7m3p5n6w2v0abc",
    "limits": {
      "maxDeclaredBytes": 10000000000,
      "maxFiles": 100
    },
    "pageCount": 0,
    "successfulPageCount": 0,
    "billing": {},
    "files": [],
    "resultUrl": null,
    "error": null,
    "createdAt": "2024-11-02T09:00:00.000Z",
    "updatedAt": "2024-11-02T09:00:01.000Z",
    "completedAt": null,
    "expiresAt": "2024-11-09T09:00:00.000Z"
  },
  "idempotent": false,
  "webhookSigningSecret": "whsec_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"
}
Save webhookSigningSecret immediately — it is returned only in this response and cannot be retrieved later. Use it to verify the X-Plangrep-Signature header on every incoming webhook request to confirm the payload originated from Plangrep.