CV-Transformer
LayoutbibliotheekPrijzen
Inloggen
Introduction
Authentication
Selecting data
Filtering
Sorting & pagination

Core resources

Candidate views
Candidates
Credit mutations
Layouts
Members
Organizations
Webhook notifications
Webhooks

CV-Transformer API reference

With the CV-Transformer API you can access and manage your data in a programmatic way, using HTTP requests. The structure of the CV Transformer API is based on PostgREST v11.1 .

Authentication

The CV-Transformer API uses api keys for authentication. You can create and manage API keys from the bottom of settings page of your organization in the admin dashboard .
Once you have an API key simply provide it in the HTTP Authorization header as bearer token.

Example
curl -X GET "https://api.cv-transformer.com/v1/layouts" \
  -H "Authorization: Bearer YOUR_API_KEY"

Selecting data

For each endpoint, you can select which columns you want to retrieve by using the select query parameter. Besides the columns of the resource itself, you can also select columns from related resources. For more advanced selection options refer to the PostgREST documentation .

Selecting all columns
curl -X GET "https://api.cv-transformer.com/v1/layouts?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"
Selecting specific columns
curl -X GET "https://api.cv-transformer.com/v1/layouts?select=id,name" \
  -H "Authorization: Bearer YOUR_API_KEY"
Including data from related tables
curl -X GET "https://api.cv-transformer.com/v1/layouts?select=name,candidates(*)" \
  -H "Authorization: Bearer YOUR_API_KEY"

Filtering

Filters can be applied on each list, update and delete request, to restrict the rows affected by the request. For a complete list of filters refer to the PostgREST documentation .

Listing active candidates
curl -X GET "https://api.cv-transformer.com/v1/candidates?status=eq.active" \
  -H "Authorization: Bearer YOUR_API_KEY"
Filtering by multiple columns
curl -X GET "https://api.cv-transformer.com/v1/candidates?data->>email=eq.some@example.com&status=eq.active" \
  -H "Authorization: Bearer YOUR_API_KEY"
Deleting test candidates
curl -X DELETE "https://api.cv-transformer.com/v1/candidates?data->>email=like.%test.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Sorting & pagination

By default, results are sorted by the primary key of the underlying table. You can change the sorting by using the order query parameter. To limit the number of results, use the limit and offset query parameters. The API will return at most 1000 results per request. For more advanced sorting and pagination options refer to the PostgREST documentation .

Sorting by creation date
curl -X GET "https://api.cv-transformer.com/v1/layouts?order=created_at.desc" \
  -H "Authorization: Bearer YOUR_API_KEY"
Limiting the number of results
curl -X GET "https://api.cv-transformer.com/v1/layouts?limit=10&offset=10" \
  -H "Authorization: Bearer YOUR_API_KEY"

Candidate views

Logs for each time a candidate is viewed

The candidate view object

Attributes

idbigint

Unique identifier

candidate_iduuid
candidates.id

Identifier of the related candidate

created_attimestamp with time zone

Creation timestamp

anonymousboolean

Whether the candidate was viewed with personal information redacted or not

The candidate view object

JSON

{
  "id": 0,
  "candidate_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.557Z",
  "anonymous": false
}

List candidate views

Filters

idFilter<bigint>

Unique identifier

candidate_idFilter<uuid>
candidates.id

Identifier of the related candidate

created_atFilter<timestamp with time zone>

Creation timestamp

anonymousFilter<boolean>

Whether the candidate was viewed with personal information redacted or not

Responses

200

A list of candidate views with the selected columns

206

Partial Content

GET /candidate_views
curl -X GET "https://api.cv-transformer.com/v1/candidate_views?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

The candidate object

Attributes

iduuid

Unique identifier

layout_iduuid | null
layouts.id

Identifier of the related layout

member_iduuid | null
members.id

Identifier of the member associated with this candidate (initially the creator)

organization_iduuid
organizations.id

Identifier of the related organization

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

deleted_attimestamp with time zone | null

Deletion timestamp

attachmentsRecord<string, CandidateAttachment>

Files attached to this candidate (CV, Vacancy, other)

avatartext | null

The candidate's avatar image. Used for efficient display. Automatically filled when editing candidate from UI

export_filenametext

Filename for exported PDF file (without .pdf). If left empty, layout.export_filename applies.

ftstsvector
languageLanguage

Language this candidate should be displayed in

nametext

The candidate's name. Used for searching. Automatically filled when editing candidate from UI

secrettext

Secret string. Used to privately share a proposal for this candidate with personal information non-redacted

secret_anonymoustext

Secret string. Used to privately share a proposal for this candidate with personal information redacted

secret_editabletext

Secret string. Used to share the candidate for editing.

status"pending" | "active"

Status of the candidate. Only active candidates can be shared

valuesCandidateValues

Values for the each of the variables defined in the layout the candidate uses

The candidate object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "layout_id": "00000000-0000-0000-0000-000000000000",
  "member_id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.569Z",
  "updated_at": "2025-04-19T14:31:31.569Z",
  "deleted_at": "2025-04-19T14:31:31.569Z",
  "attachments": {
    "cv": {
      "section_id": null,
      "text": "Text from the attachment",
      "type": "pdf",
      "url": "https://example.com/document.pdf"
    }
  },
  "avatar": "",
  "export_filename": "",
  "language": "en",
  "name": "",
  "secret": "gen_random_uuid()",
  "secret_anonymous": "gen_random_uuid()",
  "secret_editable": "gen_random_uuid()",
  "status": "pending",
  "values": {
    "name": "John Doe",
    "date_of_birth": "1995-01-01",
    "experiences": [
      {
        "interval": {
          "start": "2015-01-01",
          "end": "2018-01-01"
        },
        "company": "Example Inc.",
        "position": "Developer"
      }
    ]
  }
}

List candidates

Filters

idFilter<uuid>

Unique identifier

layout_idFilter<uuid | null>
layouts.id

Identifier of the related layout

member_idFilter<uuid | null>
members.id

Identifier of the member associated with this candidate (initially the creator)

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

deleted_atFilter<timestamp with time zone | null>

Deletion timestamp

attachmentsFilter<Record<string, CandidateAttachment>>

Files attached to this candidate (CV, Vacancy, other)

avatarFilter<text | null>

The candidate's avatar image. Used for efficient display. Automatically filled when editing candidate from UI

export_filenameFilter<text>

Filename for exported PDF file (without .pdf). If left empty, layout.export_filename applies.

ftsFilter<tsvector>
languageFilter<Language>

Language this candidate should be displayed in

nameFilter<text>

The candidate's name. Used for searching. Automatically filled when editing candidate from UI

secretFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information non-redacted

secret_anonymousFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information redacted

secret_editableFilter<text>

Secret string. Used to share the candidate for editing.

statusFilter<"pending" | "active">

Status of the candidate. Only active candidates can be shared

valuesFilter<CandidateValues>

Values for the each of the variables defined in the layout the candidate uses

Responses

200

A list of candidates with the selected columns

206

Partial Content

GET /candidates
curl -X GET "https://api.cv-transformer.com/v1/candidates?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Delete candidates

Filters

idFilter<uuid>

Unique identifier

layout_idFilter<uuid | null>
layouts.id

Identifier of the related layout

member_idFilter<uuid | null>
members.id

Identifier of the member associated with this candidate (initially the creator)

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

deleted_atFilter<timestamp with time zone | null>

Deletion timestamp

attachmentsFilter<Record<string, CandidateAttachment>>

Files attached to this candidate (CV, Vacancy, other)

avatarFilter<text | null>

The candidate's avatar image. Used for efficient display. Automatically filled when editing candidate from UI

export_filenameFilter<text>

Filename for exported PDF file (without .pdf). If left empty, layout.export_filename applies.

ftsFilter<tsvector>
languageFilter<Language>

Language this candidate should be displayed in

nameFilter<text>

The candidate's name. Used for searching. Automatically filled when editing candidate from UI

secretFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information non-redacted

secret_anonymousFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information redacted

secret_editableFilter<text>

Secret string. Used to share the candidate for editing.

statusFilter<"pending" | "active">

Status of the candidate. Only active candidates can be shared

valuesFilter<CandidateValues>

Values for the each of the variables defined in the layout the candidate uses

Responses

204

The deleted candidates with the selected columns

DELETE /candidates
curl -X DELETE "https://api.cv-transformer.com/v1/candidates" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update candidates

Filters

idFilter<uuid>

Unique identifier

layout_idFilter<uuid | null>
layouts.id

Identifier of the related layout

member_idFilter<uuid | null>
members.id

Identifier of the member associated with this candidate (initially the creator)

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

deleted_atFilter<timestamp with time zone | null>

Deletion timestamp

attachmentsFilter<Record<string, CandidateAttachment>>

Files attached to this candidate (CV, Vacancy, other)

avatarFilter<text | null>

The candidate's avatar image. Used for efficient display. Automatically filled when editing candidate from UI

export_filenameFilter<text>

Filename for exported PDF file (without .pdf). If left empty, layout.export_filename applies.

ftsFilter<tsvector>
languageFilter<Language>

Language this candidate should be displayed in

nameFilter<text>

The candidate's name. Used for searching. Automatically filled when editing candidate from UI

secretFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information non-redacted

secret_anonymousFilter<text>

Secret string. Used to privately share a proposal for this candidate with personal information redacted

secret_editableFilter<text>

Secret string. Used to share the candidate for editing.

statusFilter<"pending" | "active">

Status of the candidate. Only active candidates can be shared

valuesFilter<CandidateValues>

Values for the each of the variables defined in the layout the candidate uses

Body

Partial<Candidate>

Responses

204

The updated candidates with the selected columns

PATCH /candidates
curl -X PATCH "https://api.cv-transformer.com/v1/candidates" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{}'

Create candidate

Create a new candidate. Uses one credit. When no credits are available in the organization, the candidate is created with status="pending" instead.

Body

Partial<Candidate>

Responses

200

The created candidate

POST /candidates
curl -X POST "https://api.cv-transformer.com/v1/candidates" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "attachments": {
      "cv": {
        "section_id": null,
        "text": "",
        "type": "link",
        "url": "https://example.com/cv"
      }
    },
    "language": "nl",
    "layout_id": "00000000-0000-0000-0000-000000000000",
    "member_id": "00000000-0000-0000-0000-000000000000",
    "values": {
      "key": "value"
    }
  }'

Upload candidate attachment

Upload an attachment for a candidate.

Query parameters

locationstring

The type of attachment to upload. Defaults to cv.

Body

The file to attach. Supported file-types: .pdf, .doc, .docx, .jpeg, .png, .txt, .webp

Responses

200

The updated candidate

POST /candidates/[candidate_id]/attach
curl -X POST "https://api.cv-transformer.com/v1/candidates/[candidate_id]/attach?location=cv" \
  -H "Authorization: Bearer YOUR_API_KEY"

Fill / adjust candidate data

Fill or adjust a candidate's values.

Route parameters

candidate_idrequireduuid

The identifier of the candidate to fill.

Query parameters

promptstring

Custom prompt, e.g. "Expand introduction", "Sort skills by level". Organization's default prompt is used when left empty.

Responses

200

The updated candidate

POST /candidates/[candidate_id]/fill
curl -X POST "https://api.cv-transformer.com/v1/candidates/[candidate_id]/fill?style=" \
  -H "Authorization: Bearer YOUR_API_KEY"

Extract candidate data

Extract custom data from a candidate

Route parameters

candidate_idrequireduuid

The identifier of the candidate to extract data from.

Body

The JSONSchema of the data to extract.

Responses

200

The extracted data

POST /candidates/[candidate_id]/extract
curl -X POST "https://api.cv-transformer.com/v1/candidates/[candidate_id]/extract" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "type": "object",
    "properties": {
      "email": {
        "type": "string"
      },
      "first_name": {
        "type": "string"
      },
      "last_name": {
        "type": "string"
      }
    },
    "additionalProperties": false,
    "$schema": "http://json-schema.org/draft-07/schema#"
  }'

Credit mutations

Changes in credit per organization

The credit mutation object

Attributes

iduuid

Unique identifier

organization_iduuid
organizations.id

Identifier of the organization related to this mutation

created_attimestamp with time zone

Creation timestamp

deltainteger

Difference between next and previous credit

The credit mutation object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.596Z",
  "delta": 0
}

List credit mutations

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization related to this mutation

created_atFilter<timestamp with time zone>

Creation timestamp

deltaFilter<integer>

Difference between next and previous credit

Responses

200

A list of credit mutations with the selected columns

206

Partial Content

GET /credit_mutations
curl -X GET "https://api.cv-transformer.com/v1/credit_mutations?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Layouts

Layout definitions that can be filled in per candidate

The layout object

Attributes

iduuid

Unique identifier

creator_iduuid | null
user_profiles.user_id

Identifier of the user that created this layout

organization_iduuid
organizations.id

Identifier of the related organization

parent_iduuid | null
layouts.id

Identifier of the layout this layout originates from

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

assetsArray<LayoutAsset>

Reusable assets used in the layout

default_valuesCandidateValues | null

Default values for each of the variables in the layout. When left empty, these values are auto-generated

export_filenametext

Filename for exported PDF files (without .pdf). Can contain {{variables}}

featuredboolean

Whether the layout is featured in the layout library

ftstsvector
languagesArray<Language>

Languages the layout is translated in. First entry indicates the default language

nametext

Title of this layout

secretuuid

Secret string. Required to view the layout when its visibility is "private"

sectionsArray<LayoutSection>

List of sections the layout consists of

slugtext

Unique identifier that allows easy lookup in the layout library

thumbnailtext | null

Thumbnail image for this layout. Automatically generated

tokensArray<LayoutDesignToken>

List of design tokens used in the layout

variablesArray<LayoutVariable>

List of variables used in the layout. Each candidate using this layout populates these variables

visibility"public" | "private"

Visibility of this layout. "public" means the layout is published to the layout library.

The layout object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "creator_id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "parent_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.606Z",
  "updated_at": "2025-04-19T14:31:31.606Z",
  "assets": [
    {
      "type": "font",
      "family": "Roboto",
      "url": "https://example.com/roboto.ttf"
    },
    {
      "type": "image",
      "label": "Example",
      "url": "https://example.com/example.png"
    }
  ],
  "default_values": {
    "name": "John Doe",
    "date_of_birth": "1995-01-01",
    "experiences": [
      {
        "interval": {
          "start": "2015-01-01",
          "end": "2018-01-01"
        },
        "company": "Example Inc.",
        "position": "Developer"
      }
    ]
  },
  "export_filename": "",
  "featured": false,
  "languages": [
    "en",
    "de",
    "fr",
    "nl"
  ],
  "name": "",
  "secret": "00000000-0000-0000-0000-000000000000",
  "sections": [
    {
      "body": {
        "align": "left",
        "background": "#FFFFFF",
        "bold": false,
        "border": null,
        "borderRadius": "0",
        "color": "#000000",
        "font": {
          "family": "Roboto",
          "letter_spacing": null,
          "line_height": null,
          "size": 16
        },
        "grow": true,
        "id": "text",
        "italic": false,
        "padding": 16,
        "split": false,
        "strikethrough": false,
        "transform": "none",
        "underline": false,
        "value": {
          "default": "Hello",
          "nl": "Hallo"
        },
        "visibility": true,
        "type": "text"
      },
      "footer": null,
      "header": null,
      "id": "section",
      "label": "Section",
      "type": "multi-page"
    }
  ],
  "slug": "",
  "thumbnail": "",
  "tokens": [
    {
      "id": "primary-color",
      "name": "Primary color",
      "type": "color",
      "value": "#000000"
    },
    {
      "id": "font-size",
      "name": "Font size",
      "type": "length",
      "value": 16
    }
  ],
  "variables": [
    {
      "ai_instructions": "",
      "default": "",
      "key": "name",
      "max_length": null,
      "min_length": 0,
      "sensitive": false,
      "type": "inline-text"
    },
    {
      "ai_instructions": "",
      "default": "",
      "key": "description",
      "max_length": null,
      "min_length": 0,
      "sensitive": false,
      "type": "text-block"
    }
  ],
  "visibility": "private"
}

List layouts

Filters

idFilter<uuid>

Unique identifier

creator_idFilter<uuid | null>
user_profiles.user_id

Identifier of the user that created this layout

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

parent_idFilter<uuid | null>
layouts.id

Identifier of the layout this layout originates from

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

assetsFilter<Array<LayoutAsset>>

Reusable assets used in the layout

default_valuesFilter<CandidateValues | null>

Default values for each of the variables in the layout. When left empty, these values are auto-generated

export_filenameFilter<text>

Filename for exported PDF files (without .pdf). Can contain {{variables}}

featuredFilter<boolean>

Whether the layout is featured in the layout library

ftsFilter<tsvector>
languagesFilter<Array<Language>>

Languages the layout is translated in. First entry indicates the default language

nameFilter<text>

Title of this layout

secretFilter<uuid>

Secret string. Required to view the layout when its visibility is "private"

sectionsFilter<Array<LayoutSection>>

List of sections the layout consists of

slugFilter<text>

Unique identifier that allows easy lookup in the layout library

thumbnailFilter<text | null>

Thumbnail image for this layout. Automatically generated

tokensFilter<Array<LayoutDesignToken>>

List of design tokens used in the layout

variablesFilter<Array<LayoutVariable>>

List of variables used in the layout. Each candidate using this layout populates these variables

visibilityFilter<"public" | "private">

Visibility of this layout. "public" means the layout is published to the layout library.

Responses

200

A list of layouts with the selected columns

206

Partial Content

GET /layouts
curl -X GET "https://api.cv-transformer.com/v1/layouts?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create layouts

Body

Partial<Layout> | Array<Partial<Layout>>

Responses

201

The newly created layouts with the selected columns

POST /layouts
curl -X POST "https://api.cv-transformer.com/v1/layouts" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '[]'

Delete layouts

Filters

idFilter<uuid>

Unique identifier

creator_idFilter<uuid | null>
user_profiles.user_id

Identifier of the user that created this layout

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

parent_idFilter<uuid | null>
layouts.id

Identifier of the layout this layout originates from

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

assetsFilter<Array<LayoutAsset>>

Reusable assets used in the layout

default_valuesFilter<CandidateValues | null>

Default values for each of the variables in the layout. When left empty, these values are auto-generated

export_filenameFilter<text>

Filename for exported PDF files (without .pdf). Can contain {{variables}}

featuredFilter<boolean>

Whether the layout is featured in the layout library

ftsFilter<tsvector>
languagesFilter<Array<Language>>

Languages the layout is translated in. First entry indicates the default language

nameFilter<text>

Title of this layout

secretFilter<uuid>

Secret string. Required to view the layout when its visibility is "private"

sectionsFilter<Array<LayoutSection>>

List of sections the layout consists of

slugFilter<text>

Unique identifier that allows easy lookup in the layout library

thumbnailFilter<text | null>

Thumbnail image for this layout. Automatically generated

tokensFilter<Array<LayoutDesignToken>>

List of design tokens used in the layout

variablesFilter<Array<LayoutVariable>>

List of variables used in the layout. Each candidate using this layout populates these variables

visibilityFilter<"public" | "private">

Visibility of this layout. "public" means the layout is published to the layout library.

Responses

204

The deleted layouts with the selected columns

DELETE /layouts
curl -X DELETE "https://api.cv-transformer.com/v1/layouts" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update layouts

Filters

idFilter<uuid>

Unique identifier

creator_idFilter<uuid | null>
user_profiles.user_id

Identifier of the user that created this layout

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

parent_idFilter<uuid | null>
layouts.id

Identifier of the layout this layout originates from

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

assetsFilter<Array<LayoutAsset>>

Reusable assets used in the layout

default_valuesFilter<CandidateValues | null>

Default values for each of the variables in the layout. When left empty, these values are auto-generated

export_filenameFilter<text>

Filename for exported PDF files (without .pdf). Can contain {{variables}}

featuredFilter<boolean>

Whether the layout is featured in the layout library

ftsFilter<tsvector>
languagesFilter<Array<Language>>

Languages the layout is translated in. First entry indicates the default language

nameFilter<text>

Title of this layout

secretFilter<uuid>

Secret string. Required to view the layout when its visibility is "private"

sectionsFilter<Array<LayoutSection>>

List of sections the layout consists of

slugFilter<text>

Unique identifier that allows easy lookup in the layout library

thumbnailFilter<text | null>

Thumbnail image for this layout. Automatically generated

tokensFilter<Array<LayoutDesignToken>>

List of design tokens used in the layout

variablesFilter<Array<LayoutVariable>>

List of variables used in the layout. Each candidate using this layout populates these variables

visibilityFilter<"public" | "private">

Visibility of this layout. "public" means the layout is published to the layout library.

Body

Partial<Layout>

Responses

204

The updated layouts with the selected columns

PATCH /layouts
curl -X PATCH "https://api.cv-transformer.com/v1/layouts" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{}'

Members

Links users to organizations via roles

The member object

Attributes

iduuid

Unique identifier

organization_iduuid
organizations.id

Identifier of the related organization

user_iduuid
user_profiles.user_id

Identifier of the related user

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

role"user" | "admin" | "superuser"

Role of the member

valuesRecord<string, string>

Values for each of the organization's member_variables, usable in layouts

The member object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "user_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.666Z",
  "updated_at": "2025-04-19T14:31:31.666Z",
  "role": "superuser",
  "values": {}
}

List members

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the related organization

user_idFilter<uuid>
user_profiles.user_id

Identifier of the related user

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

roleFilter<"user" | "admin" | "superuser">

Role of the member

valuesFilter<Record<string, string>>

Values for each of the organization's member_variables, usable in layouts

Responses

200

A list of members with the selected columns

206

Partial Content

GET /members
curl -X GET "https://api.cv-transformer.com/v1/members?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Invite member

Invite a member to your organization. The member will receive an email with a link to accept the invitation. The member will have the user role. To make a member admin or superuser use the dashboard.

Body

emailrequiredstring

The email address of the member to invite.

namestring

The name of the member to invite.

languageLanguage

The language of the member to invite.

Responses

201

The invited member with it's user profile

POST /members
curl -X POST "https://api.cv-transformer.com/v1/members" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "email": "johndoe@example.com",
    "name": "John Doe"
  }'
Example response

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "user_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.669Z",
  "updated_at": "2025-04-19T14:31:31.669Z",
  "role": "superuser",
  "values": {},
  "user_profile": {
    "user_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2025-04-19T14:31:31.669Z",
    "updated_at": "2025-04-19T14:31:31.669Z",
    "avatar": "",
    "email": "",
    "language": "nl",
    "last_login_at": "2025-04-19T14:31:31.669Z",
    "name": "",
    "phone": "",
    "source": ""
  }
}

Revoke member

Revoke a member from your organization. The member will no longer have access to your organization. Only works for members with the user role. To revoke an admin or superuser members use the dashboard.

Parameters

idrequireduuid

The identifier of the member to revoke.

Responses

200

The deleted member

DELETE /members
curl -X DELETE "https://api.cv-transformer.com/v1/members?id=00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer YOUR_API_KEY"

Organizations

All base information per organizations

The organization object

Attributes

iduuid

Unique identifier

default_layout_iduuid | null
layouts.id

Identifier of the layout that is used for new candidates by default

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

deleted_attimestamp with time zone | null

Deletion timestamp

allow_inspectionboolean

Whether the CV-Transformer team is allowed to inspect the organization to debug errors

allowed_senderstext[]

List of email addresses that are allowed to send CV's to the organizations inbox. Email addresses can be partial (e.g., @example.com)

atstext

The ATS this organization uses

avatartext | null

Avatar image representing the organization

creditinteger

Amount of credit currently available

default_prompttext

Default prompt used when filling in candidate data

delete_candidates_afterinteger | null

Time in days after which candidates are automatically deleted

detect_candidate_language_from_attachmentboolean

Automatically detect candidate language when first attachment is uploaded.

ftstsvector
member_variablesArray<MemberVariable>

Metafields defined on each member. Usable in layouts

nametext

Name of the organization

pricing_versiontext

The organization's pricing version

slugtext

Unique string. Used to determine the organization's email inbox address

statustext

Internal status for the organization

type"test" | "regular" | null

Type of the organization

The organization object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "default_layout_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.686Z",
  "updated_at": "2025-04-19T14:31:31.686Z",
  "deleted_at": "2025-04-19T14:31:31.686Z",
  "allow_inspection": true,
  "allowed_senders": [
    ""
  ],
  "ats": "",
  "avatar": "",
  "credit": 10,
  "default_prompt": "",
  "delete_candidates_after": 0,
  "detect_candidate_language_from_attachment": false,
  "member_variables": {},
  "name": "",
  "pricing_version": "v1",
  "slug": "",
  "status": "active",
  "type": "regular"
}

List organizations

Filters

idFilter<uuid>

Unique identifier

default_layout_idFilter<uuid | null>
layouts.id

Identifier of the layout that is used for new candidates by default

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

deleted_atFilter<timestamp with time zone | null>

Deletion timestamp

allow_inspectionFilter<boolean>

Whether the CV-Transformer team is allowed to inspect the organization to debug errors

allowed_sendersFilter<text[]>

List of email addresses that are allowed to send CV's to the organizations inbox. Email addresses can be partial (e.g., @example.com)

atsFilter<text>

The ATS this organization uses

avatarFilter<text | null>

Avatar image representing the organization

creditFilter<integer>

Amount of credit currently available

default_promptFilter<text>

Default prompt used when filling in candidate data

delete_candidates_afterFilter<integer | null>

Time in days after which candidates are automatically deleted

detect_candidate_language_from_attachmentFilter<boolean>

Automatically detect candidate language when first attachment is uploaded.

ftsFilter<tsvector>
member_variablesFilter<Array<MemberVariable>>

Metafields defined on each member. Usable in layouts

nameFilter<text>

Name of the organization

pricing_versionFilter<text>

The organization's pricing version

slugFilter<text>

Unique string. Used to determine the organization's email inbox address

statusFilter<text>

Internal status for the organization

typeFilter<"test" | "regular" | null>

Type of the organization

Responses

200

A list of organizations with the selected columns

206

Partial Content

GET /organizations
curl -X GET "https://api.cv-transformer.com/v1/organizations?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update organizations

Filters

idFilter<uuid>

Unique identifier

default_layout_idFilter<uuid | null>
layouts.id

Identifier of the layout that is used for new candidates by default

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

deleted_atFilter<timestamp with time zone | null>

Deletion timestamp

allow_inspectionFilter<boolean>

Whether the CV-Transformer team is allowed to inspect the organization to debug errors

allowed_sendersFilter<text[]>

List of email addresses that are allowed to send CV's to the organizations inbox. Email addresses can be partial (e.g., @example.com)

atsFilter<text>

The ATS this organization uses

avatarFilter<text | null>

Avatar image representing the organization

creditFilter<integer>

Amount of credit currently available

default_promptFilter<text>

Default prompt used when filling in candidate data

delete_candidates_afterFilter<integer | null>

Time in days after which candidates are automatically deleted

detect_candidate_language_from_attachmentFilter<boolean>

Automatically detect candidate language when first attachment is uploaded.

ftsFilter<tsvector>
member_variablesFilter<Array<MemberVariable>>

Metafields defined on each member. Usable in layouts

nameFilter<text>

Name of the organization

pricing_versionFilter<text>

The organization's pricing version

slugFilter<text>

Unique string. Used to determine the organization's email inbox address

statusFilter<text>

Internal status for the organization

typeFilter<"test" | "regular" | null>

Type of the organization

Body

Partial<Organization>

Responses

204

The updated organizations with the selected columns

PATCH /organizations
curl -X PATCH "https://api.cv-transformer.com/v1/organizations" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{}'

Webhook notifications

Tracks notifications sent via webhooks for various events

The webhook notification object

Attributes

iduuid

Unique identifier

webhook_iduuid
webhooks.id

Identifier of the webhook this notification is related to

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

event_typeWebhookEvent

Event this notification is for

payloadjsonb

JSON payload that is sent along with this notification

responsetext | null

Stored response

status"pending" | "sent" | "error"

Notification status

triesinteger

Amount of times this webhook notification has been tried to be delivered

The webhook notification object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "webhook_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.710Z",
  "updated_at": "2025-04-19T14:31:31.710Z",
  "event_type": "candidates.created",
  "payload": {},
  "response": "",
  "status": "pending",
  "tries": 0
}

List webhook notifications

Filters

idFilter<uuid>

Unique identifier

webhook_idFilter<uuid>
webhooks.id

Identifier of the webhook this notification is related to

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

event_typeFilter<WebhookEvent>

Event this notification is for

payloadFilter<jsonb>

JSON payload that is sent along with this notification

responseFilter<text | null>

Stored response

statusFilter<"pending" | "sent" | "error">

Notification status

triesFilter<integer>

Amount of times this webhook notification has been tried to be delivered

Responses

200

A list of webhook notifications with the selected columns

206

Partial Content

GET /webhook_notifications
curl -X GET "https://api.cv-transformer.com/v1/webhook_notifications?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhooks

Webhook event destinations

The webhook object

Attributes

iduuid

Unique identifier

organization_iduuid
organizations.id

Identifier of the organization this webhook is defined in

created_attimestamp with time zone

Creation timestamp

updated_attimestamp with time zone

Last modification timestamp

descriptiontext

An optional description of the webhook

endpointtext

URL to which notifications should be sent

eventsArray<WebhookEvent>

Events to which the webhook is subscribed

signing_secrettext

String used to sign each notification send to the webhook. Used to verify the validity of the webhook notifications

sourcetext

From where the webhook is registered. Can be from the admin, via the API, or via an external tool such as Zapier

The webhook object

JSON

{
  "id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2025-04-19T14:31:31.725Z",
  "updated_at": "2025-04-19T14:31:31.725Z",
  "description": "",
  "endpoint": "",
  "events": [
    "candidates.created",
    "members.updated"
  ],
  "signing_secret": "md5((random())::text)",
  "source": ""
}

List webhooks

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this webhook is defined in

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

descriptionFilter<text>

An optional description of the webhook

endpointFilter<text>

URL to which notifications should be sent

eventsFilter<Array<WebhookEvent>>

Events to which the webhook is subscribed

signing_secretFilter<text>

String used to sign each notification send to the webhook. Used to verify the validity of the webhook notifications

sourceFilter<text>

From where the webhook is registered. Can be from the admin, via the API, or via an external tool such as Zapier

Responses

200

A list of webhooks with the selected columns

206

Partial Content

GET /webhooks
curl -X GET "https://api.cv-transformer.com/v1/webhooks?select=*" \
  -H "Authorization: Bearer YOUR_API_KEY"

Create webhooks

Body

Partial<Webhook> | Array<Partial<Webhook>>

Responses

201

The newly created webhooks with the selected columns

POST /webhooks
curl -X POST "https://api.cv-transformer.com/v1/webhooks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '[]'

Delete webhooks

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this webhook is defined in

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

descriptionFilter<text>

An optional description of the webhook

endpointFilter<text>

URL to which notifications should be sent

eventsFilter<Array<WebhookEvent>>

Events to which the webhook is subscribed

signing_secretFilter<text>

String used to sign each notification send to the webhook. Used to verify the validity of the webhook notifications

sourceFilter<text>

From where the webhook is registered. Can be from the admin, via the API, or via an external tool such as Zapier

Responses

204

The deleted webhooks with the selected columns

DELETE /webhooks
curl -X DELETE "https://api.cv-transformer.com/v1/webhooks" \
  -H "Authorization: Bearer YOUR_API_KEY"

Update webhooks

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this webhook is defined in

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

descriptionFilter<text>

An optional description of the webhook

endpointFilter<text>

URL to which notifications should be sent

eventsFilter<Array<WebhookEvent>>

Events to which the webhook is subscribed

signing_secretFilter<text>

String used to sign each notification send to the webhook. Used to verify the validity of the webhook notifications

sourceFilter<text>

From where the webhook is registered. Can be from the admin, via the API, or via an external tool such as Zapier

Body

Partial<Webhook>

Responses

204

The updated webhooks with the selected columns

PATCH /webhooks
curl -X PATCH "https://api.cv-transformer.com/v1/webhooks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{}'