Parser APIKI+
Lebenslauf parsen
Name, Kontakt, Ausbildung und Stationen kommen immer in denselben Feldern zurück. Schickt jemand versehentlich eine Rechnung, sagen wir dir das, statt daraus einen Lebenslauf zu raten.
- KI in der EU
- Server in Deutschland
- Kein Abo
- Datei wird gelöscht
So funktioniert der Aufruf
Für Lebenslauf gibt es einen eigenen Aufruf mit festem Antwortformat. Du bekommst also immer dieselben Felder zurück und musst nicht raten, was gerade ankommt. Wie du dich anmeldest, was einzelne Fehlermeldungen bedeuten und wie du vorab den Preis erfährst, steht in der API-Dokumentation.
lebenslauf-alex-fixture.pdf · PDF-OCR: 2 Credit je Seite.
- Person
- Alex Fixture · alex.fixture@example.com
- Berufserfahrung
- Seit 01/2020 · Test bei Fixture GmbH (Berlin)
- Ausbildung
- 10/2016–03/2020 · B.Sc. an der Test-Hochschule
- Kenntnisse
- PHP · Deutsch (C2)
Ausgewertet über Mistral in der EU und sofort nach dem Aufruf gelöscht – ohne US-Drittlandtransfer.
cv.v1
HTTP 200 · warnings: []
POST /api/v1/cv · source: "mistral"
{
"schema": "cv.v1",
"source": "mistral",
"billed": 2,
"person": {
"given_name": "Alex",
"family_name": "Fixture",
"email": "alex.fixture@example.com"
},
"experience": [
{
"employer": "Fixture GmbH",
"title": "Test",
"location": "Berlin",
"start": "2020-01",
"current": true
}
],
"education": [
{
"institution": "Test-Hochschule",
"degree": "B.Sc.",
"start": "2016-10",
"end": "2020-03"
}
],
"skills": [
{
"name": "PHP",
"level": null
}
],
"languages": [
{
"name": "Deutsch",
"level": "C2"
}
],
"confidence": {
"overall": 1,
"person": 1,
"experience": 1
},
"warnings": []
}
Sofort kostenlos testen (0 Credits mit öffentlichem Test-Key):
curl -sS -X POST https://parser-api.micro-ki.de/api/v1/cv -H "Authorization: Bearer pak_test_X0001" -F "file=@lebenslauf-alex-fixture.pdf"
Welche Dateien du schicken kannst
Du schickst einfach die Datei. Welches Format sie hat, erkennen wir selbst, du musst nichts dazu angeben.
| Was du schickst | Was das ist |
|---|---|
| PDF / JPG / PNG / WEBP / TIFF / HEIC | Lebenslauf als PDF oder Bild |
| DOCX / ODT / TXT | Word, LibreOffice, reiner Text |
Lebenslauf cv.v1
So rufst du es auf
# curl 7 curl -sS -X POST \ -H "Authorization: Bearer pak_test_X0001" \ -H "Idempotency-Key: lauf-1-0" \ -F "file=@dokument.pdf" \ https://parser-api.micro-ki.de/api/v1/cv
# Python 3
import requests
with open("dokument.pdf", "rb") as f:
r = requests.post(
"https://parser-api.micro-ki.de/api/v1/cv",
headers={
"Authorization": "Bearer pak_test_X0001",
"Idempotency-Key": "lauf-1-0",
},
files={"file": ("dokument.pdf", f)},
timeout=280,
)
print(r.status_code, r.json())
<?php // PHP 8
$ch = curl_init('https://parser-api.micro-ki.de/api/v1/cv');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer pak_test_X0001',
'Idempotency-Key: lauf-1-0',
],
CURLOPT_POSTFIELDS => ['file' => new CURLFile('dokument.pdf')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 280,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $status, ' ', $body, PHP_EOL;
// Node.js 20
import { openAsBlob } from 'node:fs';
const form = new FormData();
form.append('file', await openAsBlob('dokument.pdf'), 'dokument.pdf');
const res = await fetch('https://parser-api.micro-ki.de/api/v1/cv', {
method: 'POST',
headers: {
Authorization: 'Bearer pak_test_X0001',
'Idempotency-Key': 'lauf-1-0',
},
body: form,
});
console.log(res.status, await res.json());
// C# 9, .NET 8
using System.Net.Http.Headers;
using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(280) };
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "pak_test_X0001");
http.DefaultRequestHeaders.Add("Idempotency-Key", "lauf-1-0");
await using var file = File.OpenRead("dokument.pdf");
using var form = new MultipartFormDataContent();
form.Add(new StreamContent(file), "file", "dokument.pdf");
using var res = await http.PostAsync("https://parser-api.micro-ki.de/api/v1/cv", form);
Console.WriteLine($"{(int)res.StatusCode} {await res.Content.ReadAsStringAsync()}");
// Java 11
import java.io.ByteArrayOutputStream;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
public class ParserApi {
public static void main(String[] args) throws Exception {
var boundary = "----ParserApi";
var file = Path.of("dokument.pdf");
var body = new ByteArrayOutputStream();
var utf8 = StandardCharsets.UTF_8;
body.write(("--" + boundary + "\r\nContent-Disposition: form-data; name=\"file\"; filename=\"dokument.pdf\"\r\nContent-Type: application/octet-stream\r\n\r\n").getBytes(utf8));
body.write(Files.readAllBytes(file));
body.write(("\r\n--" + boundary + "--\r\n").getBytes(utf8));
var client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(30)).build();
var request = HttpRequest.newBuilder()
.uri(URI.create("https://parser-api.micro-ki.de/api/v1/cv"))
.timeout(Duration.ofSeconds(280))
.header("Authorization", "Bearer pak_test_X0001")
.header("Idempotency-Key", "lauf-1-0")
.header("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(HttpRequest.BodyPublishers.ofByteArray(body.toByteArray()))
.build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode() + " " + response.body());
}
}
Beispiel-Antwort
{
"schema": "cv.v1",
"source": "mistral",
"person": {
"given_name": "Alex",
"family_name": "Fixture",
"email": "alex.fixture@example.com",
"phone": null,
"address": null,
"date_of_birth": null,
"nationality": null,
"links": []
},
"summary": "Testdaten, kein echter Lebenslauf.",
"experience": [
{
"employer": "Fixture GmbH",
"title": "Test",
"location": "Berlin",
"start": "2020-01",
"end": null,
"current": true,
"highlights": []
}
],
"education": [
{
"institution": "Test-Hochschule",
"degree": "B.Sc.",
"grade": null,
"start": "2016-10",
"end": "2020-03"
}
],
"certifications": [],
"skills": [
{
"name": "PHP",
"level": null
}
],
"languages": [
{
"name": "Deutsch",
"level": "C2"
}
],
"confidence": {
"overall": 1,
"person": 1,
"experience": 1,
"education": 1
},
"warnings": [],
"request_id": "req_beispiel",
"billed": 0,
"available": 18,
"pricing": {
"rule": "pdf_ocr",
"label": "PDF-OCR: 2 Credit je Seite."
}
}
Felder
| Feld | Typ | Bedeutung |
|---|---|---|
| schema | const cv.v1 | Unser Name für dieses JSON, zum Beispiel „cv.v1“. Das ist kein amtlicher Formatname. |
| source | string | Wie wir die Datei gelesen haben. Beim Lebenslauf immer „mistral“: Jeden Lebenslauf liest die KI. |
| request_id | string | Diese eine Anfrage, für Logs und Support. |
| billed | integer | Credits für diese Anfrage. 0 beim Test-Key und wenn wir in 15 Minuten dieselbe Datei wiedererkennen. |
| available | integer | Guthaben nach dieser Anfrage. |
| pricing | object | „rule“ und „label“: genau einer der drei Sätze, was ein Credit kostet. |
| person | object | Person. |
| person.given_name | string|null | Vorname. |
| person.family_name | string|null | Nachname. |
| person.email | string|null | E-Mail. |
| person.phone | string|null | Telefon. |
| person.address | string|null | Adresse. |
| person.date_of_birth | string|null | Geburtsdatum. |
| person.nationality | string|null | Staatsangehörigkeit. |
| person.links[] | array | Profil- und Portfolio-Links (z. B. LinkedIn, GitHub, Website), wie gedruckt. |
| summary | string|null | Kurzprofil. |
| experience[] | array | Berufliche Stationen. |
| experience[].employer | string|null | Arbeitgeber. |
| experience[].title | string|null | Position. |
| experience[].location | string|null | Arbeitsort der Station wie gedruckt, Land nur, wenn es dort steht. |
| experience[].start | string|null | Beginn. |
| experience[].end | string|null | Ende. |
| experience[].current | boolean|null | true, wenn die Stelle noch läuft. |
| experience[].highlights[] | array | Stichpunkte. |
| education[] | array | Ausbildung. |
| education[].institution | string|null | Schule oder Hochschule. |
| education[].degree | string|null | Abschluss. |
| education[].grade | string|null | Abschlussnote, wenn gedruckt (z. B. 1,7, sehr gut). |
| education[].start | string|null | Beginn. |
| education[].end | string|null | Ende. |
| certifications[] | array | Zertifikate, Weiterbildungen und Lizenzen. |
| certifications[].name | string|null | Name des Zertifikats. |
| certifications[].issuer | string|null | Ausstellende Stelle, wenn gedruckt. |
| certifications[].date | string|null | Datum oder Jahr des Zertifikats (YYYY, YYYY-MM oder YYYY-MM-DD). |
| skills[] | array | Fähigkeiten. |
| skills[].name | string|null | Fähigkeit. |
| skills[].level | string|null | Niveau. |
| languages[] | array | Sprachen. |
| languages[].name | string|null | Sprache. |
| languages[].level | string|null | Niveau. |
| confidence | object | 0 bis 1 je Feldgruppe. Jeden Lebenslauf liest die KI, es ist also ihre eigene Einschätzung. |
| confidence.overall | number|null | 0–1 für den ganzen Lebenslauf. |
| confidence.person | number|null | 0–1 für die Person. |
| confidence.experience | number|null | 0–1 für die Stationen. |
| confidence.education | number|null | 0–1 für die Ausbildung. |
| warnings[] | array | Kurze Codes, keine Fließtexte. Welche es bei diesem Endpunkt gibt und was zu tun ist: Abschnitt „Hinweise (warnings)“. |
Was du bekommst
- Geeignet sind PDF, JPG, PNG, WEBP, TIFF, HEIC, DOCX, ODT und TXT. Den Text einer E-Mail oder einen Link zur Datei nehmen wir nicht an, nur die Datei selbst.
- Für Technik-Interessierte: Der Aufruf ist POST /api/v1/cv, das Antwortformat heißt cv.v1.
- Die Antwort hat immer denselben Aufbau. Du ordnest die Felder einmal zu und musst nichts nachbessern.
- Passt die Datei nicht zu diesem Dokumenttyp, bekommst du eine klare Fehlermeldung, und es werden keine Credits abgebucht.
- Wir speichern deine Datei nicht. Nur 15 Minuten lang merken wir uns einen Fingerabdruck, damit eine Wiederholung nicht doppelt kostet.
- Fertige Vorlagen für n8n und Make findest du nach dem Kauf in deinem Konto.
Was kostet das
Zum Einstieg kaufst du nur Start für 4,90 € (80 Credits, API-Key inklusive) . Größere Pakete kaufst du später in deinem Konto nach, sie sind pro Credit günstiger. Kein Abo: Deine Credits gelten mindestens drei Jahre, bis zum Ende des dritten Jahres nach dem Kauf.
-
Zum Start
Start
4,90 €
80 Credits
6,1 Cent pro Credit
Start holen -
Nachkauf im Konto
Workflow
14,90 €
500 Credits
3,0 Cent pro Credit
-
Nachkauf im Konto
Agentur
49,90 €
2400 Credits
2,1 Cent pro Credit
-
Nachkauf im Konto
Scale
179,00 €
9500 Credits
1,9 Cent pro Credit
Endpreise. Gemäß § 19 UStG wird keine Umsatzsteuer berechnet. Angebot nur für Unternehmer (§ 14 BGB), nicht für Verbraucher.
Was du für ein Credit bekommst
E-Rechnung & Co.
SERVER DE
- XML
- EDI
- SWIFT
- ZUGFeRD
1 Dokument
für 1 Credit
Strukturierte Belege: 1 Credit je Datei.
Word & Text
EU-KI
- DOCX
- ODT
- TXT
1 Dokument
für 2 Credit
Office und Klartext: 2 Credit je Datei.
PDF & Scan
EU-KI
- JPG
- PNG
- WEBP
- TIFF
- HEIC
1 Seite
für 2 Credit
PDF-OCR: 2 Credit je Seite.
Die fertigen Vorlagen für n8n und Make bekommst du nach dem Kauf in deinem Konto. Öffentlich zum Download liegen sie nicht.
Weitere Dokumenttypen
So läuft es in n8n So läuft es in Make API-Dokumentation So funktioniert's Hilfe / FAQ