Your first application typically arrives within 3 hrs.

Solutions

For staffing agencies
Logistics & transport Warehousing & fulfillment Manufacturing Construction Skilled trades

Integrations

API platform
MCP server API reference
Pricing

Resources

Blog
Security & compliance Erika vs job portals Erika vs marketing agencies
Find a job
Book a demo Log in

API platform

Erika API reference

Every REST endpoint of Erika, generated from the public OpenAPI spec. Looking for the AI-client route? See the MCP server.

Base URL https://app.erikawork.com/api OpenAPI 3.0.0 · v1.0.0 openapi.json Markdown Try it in the app

Basics

Authentication

Create an API key in the Erika app under Settings → API Keys and send it in the X-Api-Key header on every request. Authorization: Bearer is not supported. Keys look like ek_live_…, and their permissions are fixed when you create them.

  • Auto Campaign API permission: campaign builds and sourcing reads (Manage to create builds, View to read).
  • Jobs and Candidates permissions (View or Manage): the ATS endpoints.
  • Every request is scoped to the key's organization.

Responses and errors

Successful responses wrap the payload as { "success": true, "data": … }. List endpoints are cursor-paginated: pass nextCursor back as cursor while hasMore is true. Errors return { "success": false, "error": "…", "code": "…", "requestId": "…" }; quote the requestId when you contact support.

curl https://app.erikawork.com/api/jobs?status=open \
  -H "X-Api-Key: ek_live_YOUR_KEY"

Campaign Builds

Start an autonomous campaign build

POST https://app.erikawork.com/api/v1/campaign-builds

Create a Job, generate creatives + videos, and launch a Meta campaign end to end from one call. Requires the MANAGE_CAMPAIGN_API scope. Returns 202 immediately; poll the status URL or receive a signed webhook on completion.

Request body

JSON, schema CreateCampaignBuild.

FieldTypeDescription
jobDescriptionstringDescription Erika builds a NEW job from. Provide exactly one of jobDescription or jobId.50–20000 chars
jobIdstring (uuid)Reuse an EXISTING Erika job (no new job is created); targeting is seeded from its details. Provide exactly one of jobDescription or jobId.
budgetnumberTotal credit envelope. Production (videos + AI) is spent from it; the remainder funds Meta.required · > 0
budgetCurrency"CREDITS" | "USD" | "EUR"default "CREDITS"
durationintegerCampaign run length in daysrequired · > 0
citystringWork-location city. Inferred from the job description when omitted.1–120 chars
countryCodestringISO-3166 alpha-2 (e.g. CZ). Inferred from the job description when omitted.2–2 chars
languagestringAd + screening language (e.g. cs). Inferred from the job description when omitted.2–5 chars
startDatestringScheduled launch day, ISO YYYY-MM-DD. Omitted launches today. A past date is clamped to now.pattern ^\d{4}-\d{2}-\d{2}$
callbackUrlstring (uri)HTTPS endpoint POSTed a signed result on completion/failure
metadatamap of stringCaller-defined tracking, echoed back verbatim on the status endpoint and the completion webhook (your job id, client, brand, campaign ref). Opaque to Erika. Up to 20 keys; key <= 40 chars, value <= 500 chars.
idempotencyKeystringRequired. A retry with the same key returns the same build (no double spend).required · 8–255 chars

Response

202 Build accepted and queued. data: CampaignBuildAccepted

  • 400 Validation error, or INSUFFICIENT_JD_CONTEXT when the job description lacks enough detail to determine a location
  • 401 Missing or invalid API key
  • 402 Insufficient budget or credits (code INSUFFICIENT_BUDGET / INSUFFICIENT_CREDITS)
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 JOB_NOT_FOUND — the jobId does not match a job in this organization
  • 409 Idempotency key reused with a different request body
  • 429 Too many builds in progress for this organization
  • 500 Internal server error
  • 503 Could not analyze the job description right now (transient). Retry shortly.

Get campaign build status

GET https://app.erikawork.com/api/v1/campaign-builds/{id}

Parameters

ParameterTypeDescription
idstringCampaign build IDpath · required

Response

200 Current build status. data: CampaignBuildStatus

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Build not found
  • 500 Internal server error

Sourcing

List sourcing campaigns

GET https://app.erikawork.com/api/sourcing/campaigns

Parameters

ParameterTypeDescription
jobIdstringquery

Response

200 Campaigns. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get sourcing campaign

GET https://app.erikawork.com/api/sourcing/campaigns/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Campaign. data: SourcingCampaign

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

List creatives

GET https://app.erikawork.com/api/sourcing/creatives

Parameters

ParameterTypeDescription
campaignIdstringquery

Response

200 Creatives. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get creative

GET https://app.erikawork.com/api/sourcing/creatives/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Creative. data: SourcingCreative

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

List adverts

GET https://app.erikawork.com/api/sourcing/adverts

Parameters

ParameterTypeDescription
campaignIdstringquery

Response

200 Adverts. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Jobs

List jobs

GET https://app.erikawork.com/api/jobs

Parameters

ParameterTypeDescription
status"draft" | "open" | "paused" | "closed" | "archived"query
limitintegerquery · ≥ 1 · ≤ 100
cursorstringquery

Response

200 Jobs page. data: Job[], plus nextCursor, hasMore

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create job

POST https://app.erikawork.com/api/jobs

Request body

FieldTypeDescription
titlestringrequired · 1–200 chars
externalRefstringYour own reference for this position, typically the job ID from your ATS. Free text, up to 100 characters. Every application on this job returns it as jobExternalRef, so you can match applications without a lookup.max 100 chars
descriptionstringmax 20000 chars
pipelineTemplateIdstringrequired
hiringManagerIdstring
jobDetailsJobDetails
screeningConfigmap of any | null

Response

201 Created. Fetch GET /jobs/{id} for the full job.. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get job by ID

GET https://app.erikawork.com/api/jobs/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Job. data: Job

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Update job

PATCH https://app.erikawork.com/api/jobs/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
titlestring1–200 chars
externalRefstringSend an empty string to clear it.max 100 chars
descriptionstringmax 20000 chars
hiringManagerIdstring | null
jobDetailsJobDetails
screeningConfigmap of any | null

Response

200 Updated. Fetch GET /jobs/{id} for the full job.. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete job (soft delete)

DELETE https://app.erikawork.com/api/jobs/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Change job status

PATCH https://app.erikawork.com/api/jobs/{id}/status

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
status"draft" | "open" | "paused" | "closed" | "archived"required

Response

200 Status changed. data: Job

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Replace job pipeline stages

PUT https://app.erikawork.com/api/jobs/{id}/stages

Replaces all stages on the job. Existing applications are kept (mapped onto stages by ID when possible). Use with care.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
stagesobject[]required · min 1 items

Response

200 Stages replaced. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get kanban board view

GET https://app.erikawork.com/api/jobs/{jobId}/board

Parameters

ParameterTypeDescription
jobIdstringpath · required
includeRejectedstringquery

Response

200 Board (stages + applications). data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Get the unified kanban board across all jobs

GET https://app.erikawork.com/api/board/all

Applications across every in-scope job, grouped into columns keyed by stage category. Defaults to open + paused jobs.

Parameters

ParameterTypeDescription
includeRejectedstringquery
includeClosedstringquery
jobIdsstringquery

Response

200 Unified board (jobs + category columns). data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Get the AI qualifier setting of a position

GET https://app.erikawork.com/api/jobs/{jobId}/qualifier

The AI qualifier checks each sourced candidate against the position's must-haves and, in mode move, moves the qualified ones to targetStage (the next stage unless the position picked another one from targetOptions). It never rejects. requirements is the position's own list when one was set, else null (Erika derives the must-haves from the job and the application form).

Parameters

ParameterTypeDescription
jobIdstringpath · required

Response

200 Qualifier setting. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Change the AI qualifier of a position

PUT https://app.erikawork.com/api/jobs/{jobId}/qualifier

Set the mode, where qualified candidates go (targetStageId, one of targetOptions; null = the next stage after the one candidates land in, the default) and/or the position's own must-haves (requirements: null goes back to Erika's own list). Switching a position off also makes off the company default for new campaigns.

Parameters

ParameterTypeDescription
jobIdstringpath · required

Request body

FieldTypeDescription
mode"move" | "rank_only" | "off"move = Erika moves qualified candidates to the target stage; rank_only = only marks them, without moving (the value keeps its name for compatibility); off.
targetStageIdstring | null
requirementsobject[] | null

Response

200 Saved. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Pipeline Templates

List pipeline templates

GET https://app.erikawork.com/api/pipeline-templates

Response

200 Templates. data: PipelineTemplate[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create pipeline template

POST https://app.erikawork.com/api/pipeline-templates

Request body

FieldTypeDescription
namestringrequired · 1–100 chars
stagesobject[]required · min 1 items

Response

201 Created. data: PipelineTemplate

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Update pipeline template

PATCH https://app.erikawork.com/api/pipeline-templates/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
namestring1–100 chars
isDefaultboolean
stagesobject[]min 1 items

Response

200 Updated. data: PipelineTemplate

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete pipeline template

DELETE https://app.erikawork.com/api/pipeline-templates/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Candidates

List candidates

GET https://app.erikawork.com/api/candidates

Parameters

ParameterTypeDescription
sourcestringquery
tagstringquery
searchstringquery
limitintegerquery · ≥ 1 · ≤ 100
cursorstringquery

Response

200 Candidates page. data: Candidate[], plus nextCursor, hasMore

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create candidate

POST https://app.erikawork.com/api/candidates

Request body

FieldTypeDescription
firstNamestringrequired · 1–100 chars
lastNamestringrequired · 1–100 chars
emailstring (email)
phonePrefixstringmax 10 chars
phoneNumberstringmax 40 chars
linkedinUrlstring (uri)
sourcestringmax 60 chars
tagsstring[]

Response

201 Created. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Bulk create candidates

POST https://app.erikawork.com/api/candidates/bulk

Up to 1000 rows per request. Duplicates by email are skipped and reported in the response.

Request body

FieldTypeDescription
rowsobject[]required · min 1 items

Response

200 Bulk result. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get candidate by ID

GET https://app.erikawork.com/api/candidates/{id}

Full candidate detail including every application, its form answers, and the candidate's stated situation facts (candidateProfile: start availability, salary expectation, job-search status, best time to call). candidateProfile requires the API key to hold VIEW_SCREENING.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Candidate. data: CandidateDetail

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Update candidate

PATCH https://app.erikawork.com/api/candidates/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
firstNamestring1–100 chars
lastNamestring1–100 chars
emailstring (email)
phonePrefixstringmax 10 chars
phoneNumberstringmax 40 chars
linkedinUrlstring (uri)
sourcestringmax 60 chars
tagsstring[]

Response

200 Updated. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete candidate (soft delete)

DELETE https://app.erikawork.com/api/candidates/{id}

Soft-deletes the candidate and cascades to their applications + notes (the platform talent profile is left intact). Returns the bulk-delete result (deletedCount is 1 for this single-id path; deletedApplications is the cascade count).

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Add note to candidate

POST https://app.erikawork.com/api/candidates/{id}/notes

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
contentstringrequired · 1–10000 chars

Response

201 Note added. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Applications

List all applications (flat)

GET https://app.erikawork.com/api/applications

Flat list across all jobs. For paginated per-job results use GET /jobs/{jobId}/applications.

Response

200 Applications. data: ApplicationSummary[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

List applications for a job

GET https://app.erikawork.com/api/jobs/{jobId}/applications

Parameters

ParameterTypeDescription
jobIdstringpath · required
limitintegerquery · ≥ 1 · ≤ 100
cursorstringquery

Response

200 Page of applications. data: ApplicationListItem[], plus nextCursor, hasMore

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create application (assign candidate to job)

POST https://app.erikawork.com/api/jobs/{jobId}/applications

Parameters

ParameterTypeDescription
jobIdstringpath · required

Request body

FieldTypeDescription
candidateIdstringrequired
sourcestringmax 60 chars
stageIdstring

Response

201 Created. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get application

GET https://app.erikawork.com/api/applications/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Application. data: Application

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Delete application (soft delete)

DELETE https://app.erikawork.com/api/applications/{id}

Removes the application from boards, lists, exports and search. Destructive — distinct from rejecting (which keeps the record). Returns the bulk-delete result (deletedCount is 1 for this single-id path).

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: ApplicationBulkDeleteResult

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Move application to a different stage

PATCH https://app.erikawork.com/api/applications/{id}/stage

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
stageIdstringrequired

Response

200 Moved. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Change application status

PATCH https://app.erikawork.com/api/applications/{id}/status

Set to rejected, withdrawn, or hired. Reject requires either reason text or rejectionReasonId.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
status"rejected" | "withdrawn" | "hired"required
reasonstring
rejectionReasonIdstring
notestring

Response

200 Status changed. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Revert hired status back to active

PATCH https://app.erikawork.com/api/applications/{id}/unhire

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Reverted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Add note to application timeline

POST https://app.erikawork.com/api/applications/{id}/note

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
contentstringrequired · 1–10000 chars

Response

201 Note added. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Add a candidate to a position the AI qualifier suggested

POST https://app.erikawork.com/api/applications/{id}/qualifier/add-to-position

For a candidate the AI qualifier judged not qualified, add them to one of the other open positions it suggested (qualifier.suggestions on the application). Creates a new application with the same source; the original application stays. Both timelines note where the candidate came from. Requires MANAGE_CANDIDATES.

Parameters

ParameterTypeDescription
idstringpath · required

Request body

FieldTypeDescription
jobIdstring (uuid)required

Response

201 Added. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Ratings

Create or update current worker's rating

PUT https://app.erikawork.com/api/applications/{id}/rating

Idempotent — one rating per (worker, application). Subsequent PUTs replace the prior value.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
ratingintegerrequired · ≥ 1 · ≤ 5
commentKeysstring[]
commentstringmax 2000 chars

Response

200 Saved. data: Rating

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete current worker's rating

DELETE https://app.erikawork.com/api/applications/{id}/rating

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get all ratings for an application

GET https://app.erikawork.com/api/applications/{id}/ratings

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Ratings (one per worker who has rated). data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Attachments

List attachments on an application

GET https://app.erikawork.com/api/applications/{id}/attachments

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Attachments. data: Attachment[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Upload attachment to an application

POST https://app.erikawork.com/api/applications/{id}/attachments

multipart/form-data with file field. Max ~50MB.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

201 Uploaded. data: Attachment

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Get a signed download URL

GET https://app.erikawork.com/api/attachments/{id}/url

Returns a short-lived signed URL pointing at GCS. Use for direct browser downloads.

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Signed URL. data: object

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Download attachment (proxied stream)

GET https://app.erikawork.com/api/attachments/{id}/download

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required
inlinestringquery

Response

200 Binary file stream.

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 404 Resource not found
  • 500 Internal server error

Delete attachment

DELETE https://app.erikawork.com/api/attachments/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Rejection Reasons

List rejection reasons

GET https://app.erikawork.com/api/rejection-reasons

Parameters

ParameterTypeDescription
includeArchivedstringquery

Response

200 Reasons. data: RejectionReason[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create rejection reason

POST https://app.erikawork.com/api/rejection-reasons

Request body

FieldTypeDescription
labelstringrequired · 1–120 chars
descriptionstringmax 500 chars

Response

201 Created. data: RejectionReason

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Update rejection reason

PATCH https://app.erikawork.com/api/rejection-reasons/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
labelstring1–120 chars
descriptionstringmax 500 chars
isArchivedboolean

Response

200 Updated. data: RejectionReason

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete rejection reason (soft delete)

DELETE https://app.erikawork.com/api/rejection-reasons/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Reorder rejection reasons

POST https://app.erikawork.com/api/rejection-reasons/reorder

Request body

FieldTypeDescription
orderedIdsstring[]required · min 1 items

Response

200 Reordered. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Webhooks

List webhook registrations

GET https://app.erikawork.com/api/webhook-registrations

Response

200 Registrations. data: WebhookRegistration[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Create webhook registration

POST https://app.erikawork.com/api/webhook-registrations

The response includes a one-time secret used to sign deliveries — save it now, it can't be retrieved later.

Request body

FieldTypeDescription
namestringrequired · 1–100 chars
endpointUrlstring (uri)required
descriptionstringmax 500 chars
events"candidate.created" | "candidate.updated" | "application.created" | "application.stage_changed" | "application.qualified" | "application.unqualified" | "application.status_changed" | "screening.completed" | "screening.failed"[]required · min 1 items

Response

201 Created. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Update webhook registration

PATCH https://app.erikawork.com/api/webhook-registrations/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Request body

FieldTypeDescription
namestring1–100 chars
endpointUrlstring (uri)
descriptionstringmax 500 chars
events"candidate.created" | "candidate.updated" | "application.created" | "application.stage_changed" | "application.qualified" | "application.unqualified" | "application.status_changed" | "screening.completed" | "screening.failed"[]min 1 items
isActiveboolean

Response

200 Updated. data: WebhookRegistration

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Delete webhook registration

DELETE https://app.erikawork.com/api/webhook-registrations/{id}

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required

Response

200 Deleted. data: object

  • 400 Validation error or business-rule violation
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

List recent deliveries for a webhook

GET https://app.erikawork.com/api/webhook-registrations/{id}/events

Parameters

ParameterTypeDescription
idstringResource ID (UUID)path · required
limitintegerquery · ≥ 1 · ≤ 200

Response

200 Recent deliveries. data: WebhookEvent[]

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Organization

Get current organization

GET https://app.erikawork.com/api/organizations/me

Returns the organization associated with the API key. Note: PATCH /organizations/me is web-only.

Response

200 Organization details. data: Organization

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Credits

List credit purchases

GET https://app.erikawork.com/api/v1/credit-purchases

Chronological history (newest first) of credit top-ups, auto-recharges and subscription plan grants with the amount + currency charged — for billing transparency. Readable with either the VIEW_CAMPAIGN_API or MANAGE_CAMPAIGN_API scope.

Parameters

ParameterTypeDescription
limitstringPage size, 1–100 (default 20).query
beforestringISO timestamp cursor from a previous page's nextCursor — returns purchases strictly older than this.query

Response

200 Credit purchase history. data: CreditPurchaseHistory

  • 400 Invalid 'before' cursor
  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Billing

Get plan and credit balance

GET https://app.erikawork.com/api/billing/balance

Returns the org's active plan and remaining AI credits. Useful for external monitoring or budget alerts.

Response

200 Current balance. data: BillingBalance

  • 401 Missing or invalid API key
  • 403 API key lacks the permission for this endpoint, or endpoint is web-only
  • 500 Internal server error

Schemas

Organization

FieldTypeDescription
idstringrequired
pidintegerrequired
namestringrequired
slugstringrequired
timezonestringrequired
languagestringrequired
dateCreatedstring (date-time)required

ErrorResponse

Error response. Quote the requestId when contacting support.

FieldTypeDescription
successfalserequired
errorstringrequired
codestring
requestIdstring

Job

FieldTypeDescription
idstringrequired
pidintegerrequired
titlestringrequired
externalRefstring | nullYour own reference for this position, typically the job ID from your ATS. Free text, up to 100 characters. Every application on this job returns it as jobExternalRef, so you can match applications without a lookup.required · max 100 chars
descriptionstring | nullrequired
status"draft" | "open" | "paused" | "closed" | "archived"required
hiringManagerIdstring | nullrequired
jobDetailsJobDetailsrequired
dateCreatedstring (date-time)required
dateUpdatedstring (date-time)required

JobDetails

FieldTypeDescription
locationstring | null
departmentstring | null
employmentTypestring | null
remoteboolean | null
salaryMinnumber | null
salaryMaxnumber | null
salaryCurrencystring | null

Candidate

FieldTypeDescription
idstringrequired
pidintegerrequired
firstNamestringrequired
lastNamestringrequired
emailstring (email) | nullrequired
phonePrefixstring | nullrequired
phoneNumberstring | nullrequired
linkedinUrlstring | nullrequired
sourcestring | nullrequired
tagsstring[]required
dateCreatedstring (date-time)required
dateUpdatedstring (date-time)required

CandidateDetail

Type: any

CandidateApplication

FieldTypeDescription
idstringrequired
jobIdstringrequired
jobTitlestringrequired
jobStatusstringrequired
currentStageobjectrequired
statusstringrequired
averageRatingnumber | nullrequired
ratingCountintegerrequired
applicationAnswersobject[]Answers the candidate gave on the application formrequired
candidateProfileCandidateProfilerequired
dateCreatedstring (date-time)required

CandidateProfile

Candidate-stated situation facts, collected during screening. Null when the API key lacks VIEW_SCREENING or the candidate stated none of them.

FieldTypeDescription
startAvailabilityobject | nullHow soon they can start / notice periodrequired
salaryExpectationobject | nullVerbatim, with currency and period as they said itrequired
jobSearchStatusobject | nullrequired
bestTimeToCallobject | nullrequired
capturedAtstring (date-time) | nullWhen the facts were capturedrequired
isStalebooleanCaptured over 30 days ago — show the date, do not present as currentrequired

CallWindow

FieldTypeDescription
daysinteger[]ISO weekdays, 1 = Monday … 7 = Sundayrequired
fromstring"HH:mm", candidate-localrequired
tostring"HH:mm", exclusive endrequired

CallException

FieldTypeDescription
datestring"YYYY-MM-DD", candidate-localrequired
fromstringrequired
tostringrequired

ApplicationSummary

FieldTypeDescription
idstringrequired
candidateIdstringrequired
candidateNamestringrequired
candidateEmailstring | nullrequired
candidateTagsstring[]required
jobIdstringrequired
jobTitlestringrequired
jobExternalRefstring | nullThe job's externalRef: your own ATS position ID, read live from the job (so it reflects the job's current value, also on older applications). Null when the job has none.required
stageNamestringrequired
stageCategorystringrequired
sourcestringrequired

ApplicationListItem

FieldTypeDescription
idstringrequired
pidintegerrequired
candidateobjectrequired
jobExternalRefstring | nullThe job's externalRef: your own ATS position ID, read live from the job (so it reflects the job's current value, also on older applications). Null when the job has none.required
currentStageobjectrequired
status"active" | "rejected" | "withdrawn" | "hired"required
sourcestringrequired
isViewedbooleanrequired
averageRatingnumber | nullrequired
ratingCountintegerrequired
recentActivitiesobject[]required
candidateProfileCandidateProfilerequired
dateCreatedstring (date-time)required

Application

FieldTypeDescription
idstringrequired
pidintegerrequired
candidateobjectrequired
candidateProfileCandidateProfilerequired
jobobjectrequired
jobExternalRefstring | nullThe job's externalRef: your own ATS position ID, read live from the job (so it reflects the job's current value, also on older applications). Null when the job has none.required
currentStageobjectrequired
status"active" | "rejected" | "withdrawn" | "hired"required
sourcestringrequired
firstViewedAtstring (date-time) | nullrequired
firstViewedBystring | nullrequired
isViewedbooleanrequired
rejectedAtstring (date-time) | nullrequired
rejectionReasonstring | nullrequired
activitiesobject[]required
attachmentsobject[]required
ratingsobject[]required
averageRatingnumber | nullrequired
ratingCountintegerrequired
applicationAnswersobject[]required
answerFitmap of any | null | nullAdvisory per-answer requirement labels. Null when not evaluated.required
qualifierobject | nullAI qualifier result for sourced candidates: the position's must-haves checked one by one. It never rejects. Null when not judged (qualifier off, not a sourced candidate, or not run yet).required
applicationConsentsobject[]required
dateCreatedstring (date-time)required
dateUpdatedstring (date-time)required

ApplicationBulkDeleteResult

FieldTypeDescription
totalintegerrequired
deletedCountintegerrequired
skippedCountintegerrequired
deletedIdsstring[]required
jobTitlestring | nullrequired

Rating

FieldTypeDescription
workerIdstringrequired
workerNamestring | nullrequired
ratingintegerrequired · ≥ 1 · ≤ 5
commentKeysstring[]required
commentstring | nullrequired
dateCreatedstring (date-time)required
dateUpdatedstring (date-time)required

Attachment

FieldTypeDescription
idstringrequired
fileNamestringrequired
fileTypestring | nullrequired
contentTypestringrequired
sizeintegerrequired
dateCreatedstring (date-time)required

PipelineTemplate

FieldTypeDescription
idstringrequired
namestringrequired
isDefaultbooleanrequired
stagesobject[]required
dateCreatedstring (date-time)required

RejectionReason

FieldTypeDescription
idstringrequired
labelstringrequired
descriptionstring | nullrequired
isArchivedbooleanrequired
orderIndexintegerrequired

WebhookRegistration

FieldTypeDescription
idstringrequired
namestringrequired
endpointUrlstring (uri)required
descriptionstring | nullrequired
events"candidate.created" | "candidate.updated" | "application.created" | "application.stage_changed" | "application.qualified" | "application.unqualified" | "application.status_changed" | "screening.completed" | "screening.failed"[]required
isActivebooleanrequired
dateCreatedstring (date-time)required

WebhookEvent

FieldTypeDescription
idstringrequired
eventType"candidate.created" | "candidate.updated" | "application.created" | "application.stage_changed" | "application.qualified" | "application.unqualified" | "application.status_changed" | "screening.completed" | "screening.failed"Subscribe to one of the documented event names. See the event catalog in the Developers page.required
status"pending" | "processing" | "delivered" | "failed"required
attemptsintegerrequired
statusCodeinteger | nullrequired
errorstring | nullrequired
deliveredAtstring (date-time) | nullrequired
dateCreatedstring (date-time)required

SourcingCampaign

FieldTypeDescription
idstringrequired
titlestringrequired
jobIdstring | nullrequired
status"draft" | "ready" | "launching" | "active" | "paused" | "completed" | "cancelled"required
finishedOnstring | nullDay the campaign ran to its end date (YYYY-MM-DD); null while it can still deliver
archivedAtstring (date-time) | nullSet when a user archived (hid) the campaign in the app. Nothing is deleted.
creativesobject[]
dateCreatedstring (date-time)required

SourcingCreative

FieldTypeDescription
idstringrequired
semanticNamestring | nullrequired
creativeType"ugc" | "street_interview" | "radio_interview" | "pov_walkup" | "studio_backstage"required
languageCodestring | nullrequired
sourcingCampaignIdstringrequired
scriptstring | nullrequired
promptstring | nullrequired
filesmap of any | null[]
dateCreatedstring (date-time)required

SourcingAdvert

FieldTypeDescription
idstringrequired
creativeIdstringrequired
metaAdIdstring | nullrequired
status"active" | "paused" | "archived"required
dateCreatedstring (date-time)required

CampaignBuildAccepted

FieldTypeDescription
buildIdstringrequired
statusstringrequired
statusUrlstringrequired
webhookSecretstringShown ONCE. Verify the x-webhook-signature (base64 HMAC-SHA256) on the callback with it.

CreateCampaignBuild

FieldTypeDescription
jobDescriptionstringDescription Erika builds a NEW job from. Provide exactly one of jobDescription or jobId.50–20000 chars
jobIdstring (uuid)Reuse an EXISTING Erika job (no new job is created); targeting is seeded from its details. Provide exactly one of jobDescription or jobId.
budgetnumberTotal credit envelope. Production (videos + AI) is spent from it; the remainder funds Meta.required · > 0
budgetCurrency"CREDITS" | "USD" | "EUR"default "CREDITS"
durationintegerCampaign run length in daysrequired · > 0
citystringWork-location city. Inferred from the job description when omitted.1–120 chars
countryCodestringISO-3166 alpha-2 (e.g. CZ). Inferred from the job description when omitted.2–2 chars
languagestringAd + screening language (e.g. cs). Inferred from the job description when omitted.2–5 chars
startDatestringScheduled launch day, ISO YYYY-MM-DD. Omitted launches today. A past date is clamped to now.pattern ^\d{4}-\d{2}-\d{2}$
callbackUrlstring (uri)HTTPS endpoint POSTed a signed result on completion/failure
metadatamap of stringCaller-defined tracking, echoed back verbatim on the status endpoint and the completion webhook (your job id, client, brand, campaign ref). Opaque to Erika. Up to 20 keys; key <= 40 chars, value <= 500 chars.
idempotencyKeystringRequired. A retry with the same key returns the same build (no double spend).required · 8–255 chars

CampaignBuildStatus

FieldTypeDescription
buildIdstringrequired
status"queued" | "running" | "completed" | "failed"required
stepstringrequired
campaignIdstring | nullrequired
jobIdstring | nullrequired
metadatamap of stringThe tracking data you submitted on create, echoed back. Absent if none was sent.
linksobjectrequired
errorobject
dateCreatedstring (date-time)required
dateUpdatedstring (date-time)required

CreditPurchaseHistory

FieldTypeDescription
purchasesCreditPurchase[]required
hasMorebooleanTrue when more purchases exist past this page.required
nextCursorstring | nullPass as before to fetch the next page. Null on the last page.required

CreditPurchase

FieldTypeDescription
datestring (date-time)When the purchase was made.required
kind"manual" | "auto_recharge" | "subscription" | "granted"manual = one-off top-up you bought; auto_recharge = charged automatically when the balance ran low; subscription = monthly plan credit grant (renewal, initial subscribe, or plan change); granted = credits Erika added to your account at no charge (no amount, no invoice).required
creditsintegerCredits granted by this purchase.required
amountinteger | nullMoney charged in MINOR units of currency (e.g. 425000 = 4,250.00 CZK). Null only for legacy top-ups recorded before the amount was stored.required
currencystring | nullLowercase ISO currency code (e.g. "czk"), or null if unknown.required
invoiceIdstring | nullStripe invoice id, when one exists.required
referencestring | nullStripe checkout-session/invoice id or auto-recharge attempt id.required

BillingBalance

FieldTypeDescription
plan"free" | "starter" | "growth" | "scale" | "pro"Active subscription planrequired
creditsRemainingintegerrequired · ≥ 0
creditsMonthlyinteger | nullrequired · ≥ 0
trialEndsAtstring (date-time) | nullrequired