백그라운드 처리 및 콜백
CV의 백록을 분석하거나 1시간짜리 면접을 분석하는 것은 연결이 열려있지 않아야합니다. 아싱크 엔드포인트는 링크나 업로드를 받아 task_id로 즉시 응답하고 우리의 편에서 작업을 실행합니다. 설문조사를 통해 결과를 수집하거나 서버에 전달하십시오.
아싱크 엔드포인트
| 최종점 | 입력 | 결과 |
|---|---|---|
POST /parse/async | 최대 25개의 CV 링크 (file_urls), 또는 업로드 files | CV당 1개의 분석 결과, 순서대로, 같은 모양으로 POST /parse/ |
POST /evaluate/async | 최대 25개의 CV 링크 (resume_urls), 또는 업로드된 resume_pdfs+ job_details 또는 job_id | 각 CV에 대한 한 번의 평가, 순서대로, 같은 모양으로 POST /evaluate/ |
POST /summary/async | 녹음 링크 (media_url), 또는 한 개의 업로드 된 media 파일; 선택적으로 interview_id 및 language | transcript_text, transcript_entries 그리고 summary |
POST /transcribe/async | 녹음 링크 (media_url), 또는 업로드된 media 파일 | transcript_text 그리고 transcript_entries |
POST /translate/async | text, texts 또는 문서 링크 (file_urls), 또는 업로드 된 files;source_language 및 target_language | 같은 모양 POST /translate/ |
모든 비시크 요청은 또한 callback_url.
| 투표 최종점 | 환불 |
|---|---|
GET /{op}/tasks/{task_id} | 작업의 상태와 완료되면 그 결과는 {op} 는 parse,evaluate,summary,transcribe 또는 translate. |
과제를 보내는 것
링크 목록을 가진 application/json 또는 업로드를 가진 multipart/form-data 를 보내십시오. 멀티부에서 링크 필드는 반복되거나 라인에 한 링크를 보낼 수 있습니다.
curl -X POST https://api.curriculo.me/public/parse/async \
-H 'Authorization: Bearer key_abc123_yoursecret' \
-H 'Content-Type: application/json' \
-d '{"file_urls": ["https://example.com/cvs/candidate_a.pdf", "https://example.com/cvs/candidate_b.pdf"], "callback_url": "https://example.com/curriculo/callback"}'curl -X POST https://api.curriculo.me/public/summary/async \
-H 'Authorization: Bearer key_abc123_yoursecret' \
-H 'Content-Type: application/json' \
-d '{"media_url": "https://example.com/interviews/interview.mp4", "interview_id": "int_0042", "language": "ko"}'curl -X POST https://api.curriculo.me/public/translate/async \
-H 'Authorization: Bearer key_abc123_yoursecret' \
-H 'Content-Type: application/json' \
-d '{"texts": ["Senior backend engineer", "Remote within Europe"], "source_language": "en", "target_language": "fr"}'
/translate/async에 JSON 요청을 하는 경우source_language가 필요합니다./evaluate/async에 대해서는job_details또는job_id.
API는 즉시 202:
{ "task_id": "…", "status": "queued", "callback_secret": "whsec_…" }callback_secret callback_url를 보내면 반환됩니다 API 키와 같이 정확히 한 번 표시됩니다. 그래서 저장하세요.
결과 를 얻으려면
투표
curl https://api.curriculo.me/public/parse/tasks/<task_id> \
-H 'Authorization: Bearer key_abc123_yoursecret'작업은 복귀 호출이 제공되었는지 여부에 관계없이 생성된 키와 동일한 키로 읽을 수 있습니다. 응답에는 URL 또는 비밀 전화가 없습니다.
| 필드 | 의미 |
|---|---|
task_id | 임무의 신분증 |
op | 어떤 작업이 실행되는지 |
status | queued, processing, succeeded 또는 failed. |
status_code | HTTP 상태는 작업 자체가 완료되면 생성되었습니다. |
result | 한 번은 status 이 succeeded; null 그 전에 |
error | 작업이 실패했을 때 오류 메시지는 |
delivery | 복귀 통보 상태: not_requested,pending,delivered 또는 dead, 시도 수와 함께. |
created_at, completed_at | 시간표 |
다시 전화
callback_url를 보내면 완료된 작업이 application/json 로 열립니다
| 헤더 | 가치 |
|---|---|
X-Curriculo-Signature | sha256=<hex>: 정확한 원소 요청 몸의 작은 글자 (HMAC-SHA256) callback_secret |
X-Curriculo-Task-Id | 임무의 아이디 |
Content-Type | application/json |
시체는 {task_id, op, status, status_code, result, error, completed_at}.
시간표 헤더가 없기 때문에 task_id에서 배제 배달을 해제합니다. 서버가 느리거나 오류로 응답하면 동일한 작업이 한 번 이상 발생할 수 있습니다.
서명 확인
원소 요청 몸의 HMAC-SHA256를 계산하여, 귀환된 callback_secret ( whsec_ 사전을 포함하여) 를 열쇠로 사용하십시오. sha256= + 작은 글꼴의 여섯 글자를 X-Curriculo-Signature 와 비교해 보세요. JSON 파싱 전에 수신된 원본 바이트를 사용하고 일치하지 않는 모든 것을 거부하십시오.
Python:
import hashlib
import hmac
def is_valid(raw_body: bytes, signature_header: str, callback_secret: str) -> bool:
# callback_secret is used as-is, including the "whsec_" prefix
expected = "sha256=" + hmac.new(
callback_secret.encode(), raw_body, hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature_header or "")JavaScript (Node.js):
import crypto from "node:crypto";
// rawBody must be the unparsed request body (a Buffer)
export function isValid(rawBody, signatureHeader, callbackSecret) {
const expected =
"sha256=" +
crypto.createHmac("sha256", callbackSecret).update(rawBody).digest("hex");
const a = Buffer.from(expected);
const b = Buffer.from(signatureHeader || "");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}다음 X-Curriculo-Task-Id 헤더 (또는 체내 task_id ) 에 복제하여 2xx.
배달 및 재실험
2xx에 해당하지 않은 모든 답은 실패한 배달으로 간주되며, 리디렉션은 따르지 않습니다.- 배달이 표시되기 전까지 약 5시간 21분 동안 계속되는 배달의 재 시도가 증가하고 (1, 5, 15분, 60분, 4시간)
dead. - 결과는
GET /{op}/tasks/{task_id}에서 읽을 수 있도록 유지됩니다. 따라서 생기는 실패로 인해 아무것도 잃지 않습니다.
URL에 대한 요구 사항
호출 URL는
https이며, 공개적으로 액세스 할 수 있으며 자격증도 포함되지 않습니다. 개인 네트워크의 주소는 거부됩니다.
- 전송하는 링크 (
file_urls,resume_urls,media_url) 는 공개https링크가어야 합니다. 공개 링크 또는 사전 서명된 저장 장치 URL (예를 들어, S3) 는 모두 작동합니다. - 리디렉션 링크는 거부됩니다.
- 링크를 통해 녹음하는 시간은 1 GB과 2시간이 될 수 있습니다. 업로드된 파일은 각각 12개의 MB로 제한됩니다.
청구서
- 작업은 최종 결과로 한 번, 그 동작의 한 요청으로 청구됩니다. 25개의 링크의 아싱크 분석은 $0.01를 지불합니다.
- 실패한 작업 (죽은 링크, 읽을 수 없는 파일) 은 결코 충전되지 않습니다.
- 기록 작업 (
/summary/async,/transcribe/async) 는 작업이 받아들여지면 최대 2시간 동안 비용을 유지하도록 합니다. 그 예약에 대한 충분한 신용이 없으면, 요청은400를 반환합니다. 임무가 실패하면 예약이 풀립니다.
작업에 의해 보관된 데이터
동기화 작업과 달리, 배경 작업은 결과를 저장하여 설문조사를 할 수 있으며 업로드 된 파일은 계정 아래에 저장됩니다. 데이터 처리 참조.
Updated