jobs.downloadResume

Download an applicant's résumé.

Prerequisites

  • A Curviate API key, passed as apiKey when you construct the client. Quickstart shows how to create one.
  • A connected LinkedIn account. This resource is account-scoped: the account_id is injected automatically by the account-scoped accessor, so you pass it once to curviate.account(...) and every call below inherits it. Quickstart covers connecting one, and accounts.list returns the account_id of each account already connected.

Signature

downloadResume(jobId: string, applicantId: string): Promise<ArrayBuffer>

Example

import { Curviate } from "@curviate/sdk";
 
const curviate = new Curviate({
  apiKey: "cvt_live_...",
  baseUrl: "https://api.curviate.com",
});
 
const bytes = await curviate.account("acc_YOUR_ACCOUNT_ID").jobs.downloadResume("job_YOUR_JOB_ID", "app_YOUR_APPLICANT_ID");
console.log(`Received ${bytes.byteLength} bytes`);

Parameters

NameTypeRequiredDescription
jobIdstringYesThe job posting's numeric id, e.g. 4100000000 (from the LinkedIn job URL or a search/jobs result). A full URL is not accepted here.
applicantIdstringYesThe numeric id of the job applicant, obtained from the list-applicants endpoint's items[].id.

Returns

Returns the raw binary content as an ArrayBuffer. Stream or pass it directly to a file-writing API; do not store the bytes beyond the current operation.

Error codes

CodeWhat it means, and what to do
UNAUTHORIZEDThe API key is missing, malformed, or revoked. Check the key you passed to the client.
INVALID_REQUESTA parameter failed validation. The message names the offending field; fix the request rather than retrying it.
RATE_LIMIT_ACCOUNTThis account's own quota is exhausted. Wait for the window in the Retry-After header, then retry.
RATE_LIMIT_TENANTThe tenant-wide quota is exhausted across all accounts. Slow the whole workload, not just this call.
PLATFORM_RATE_LIMITLinkedIn is throttling this account. Back off well beyond the hinted delay; sustained pressure risks the account.
PLATFORM_ERRORAn upstream failure, usually transient: retry once with backoff before treating it as a real error. Check the response first, though. When it carries retry_likely_to_succeed: false and retry_hint: {kind: "never"}, retrying cannot help and backing off only delays the real answer.
ACCOUNT_NOT_FOUNDNo connected account with that id belongs to this tenant. List your accounts to get a current id.
INTERNALAn unexpected server error. Retry once; if it persists, it is ours, not yours.
LINKEDIN_SERVICE_UNAVAILABLELinkedIn is unavailable, or the resource is still being prepared upstream. Retry with backoff.
NO_ACTIVE_SEATThe targeted account is not on an active seat. Buy or attach a seat in Billing, then retry.
RESOURCE_NOT_FOUNDThe id in the path does not exist, or is not visible to this account. Re-read it from the list endpoint that produced it.

Every code above is a stable CurviateError.code you can branch on. The full list, the response envelope, and retry semantics are in the Error codes reference.

Notes

Note: Returns raw binary (ArrayBuffer). Do not log or persist the bytes; stream them directly to the consumer (e.g. a download response or a file write).

Next steps

  • jobs.list: List the connected account's own classic job postings.
  • jobs.listApplicants: List applicants to a job posting this account owns, a read; POST carries the filter body, matching the convention.
  • jobs.get: Retrieve one classic LinkedIn job posting's full detail.
  • SDK Quick Start: installation, the client, account scoping, and pagination.