Docs
API reference

Create a file upload

POST
/api/v1/files

Stages a resume (PDF or DOCX, up to 10 MB). The response carries a signed upload URL, only once: send the file to it with a PUT request and the returned headers, then pass the file's id as resume.fileId when creating a candidate or replacing a resume. The file is checked when it is attached. A file nobody attaches expires after 24 hours, and an organization can have 100 waiting at a time.

Required scope: candidates:write.

Errors

  • 400: invalid_content_type, invalid_idempotency_key, invalid_json, request_body_too_large, unknown_field
  • 401: authentication_required, invalid_api_key
  • 403: api_access_disabled, insufficient_scope
  • 409: idempotency_key_reused, idempotency_request_in_progress, too_many_pending_files
  • 422: invalid_parameter
  • 429: rate_limit_exceeded
  • 500: api_error
  • 503: maintenance_mode, service_unavailable

Authorization

ApiKey
headerAuthorizationBearer <probb_live_<id>_<secret>>

Header Parameters

Idempotency-Key?string

Makes retries safe. Repeating a request with the same key and body within 24 hours returns the original response with Idempotent-Replayed: true. The same key with a different body, or from a different API key, returns idempotency_key_reused.

Length1 <= length <= 255

Request Body

application/json
  1. body
fileName*string

The file name, ending in .pdf or .docx.

Length1 <= length <= 255
mimeType*string

The file's media type.

Value in"application/pdf""application/vnd.openxmlformats-officedocument.wordprocessingml.document"
sizeBytes*integer

The exact size of the file you will upload, up to 10 MB.

Range1 <= value <= 10485760

Response Body

Success.

application/json
  1. response
object*string
id*string

The file's ID. Pass it as resume.fileId.

fileName*string

The file name you gave.

mimeType*string

The file's media type.

sizeBytes*integer

The size you declared, in bytes.

Range-9007199254740991 <= value <= 9007199254740991
status*string

awaiting_upload until the file is PUT, uploaded after, attached once a candidate uses it, rejected if it is not a valid resume, expired after 24 hours unattached.

Value in"awaiting_upload""uploaded""attached""rejected""expired"
expiresAt*string

After this the file can no longer be attached.

Formatdate-time
createdAt*string

When the file was created.

Formatdate-time
upload*

Returned only when the file is created.

Example Request
# Set PROBB_URL and PROBB_API_KEY. Replace any *_VALUE placeholder and any example ID (such as job_example) with a real one.# Idempotency-Key is optional. Reuse the same key and body when retrying one logical write.curl --fail-with-body -X POST "$PROBB_URL/api/v1/files" \  -H "Authorization: Bearer $PROBB_API_KEY" \  -H "Idempotency-Key: $REQUEST_KEY" \  -H 'Content-Type: application/json' \  --data-binary '{  "fileName": "ada-lovelace.pdf",  "mimeType": "application/pdf",  "sizeBytes": 184320}'
Example Response
{  "object": "file",  "id": "string",  "fileName": "string",  "mimeType": "string",  "sizeBytes": -9007199254740991,  "status": "awaiting_upload",  "expiresAt": "2019-08-24T14:15:22Z",  "createdAt": "2019-08-24T14:15:22Z",  "upload": {    "url": "string",    "method": "PUT",    "headers": {      "property1": "string",      "property2": "string"    },    "expiresAt": "2019-08-24T14:15:22Z"  }}