Moving from v1
Version 2 does what v1 does, with standard sign-in, real status codes and the same names everywhere. Version 1 keeps working while you move, and the job adverts you have sent come with you.
What comes with you
v1 and v2 share the same job adverts. A job ad you sent in v1 with ProjectReference ad-12345
is the job advert with externalReference ad-12345 in v2, and its ConnectID is the
feAdId you have. The script on its page keeps working, and the statistics go on.
You can move one call at a time: what you send through v2 is there in v1, and the other way round.
The calls
| v1 | v2 |
|---|---|
GET Auth/Authorize?apiKey= | POST/api/v2/auth/token with client_id and client_secret |
POST Partner/GetPixelScript | POST/api/v2/job-adverts |
POST Partner/GetPixelScript with feAdId | PATCH/api/v2/job-adverts/{connectId} |
POST Partner/GetCampaignStatistics | GET/api/v2/job-adverts/{connectId}/statistics |
POST Partner/GetFrantzSegments | GET/api/v2/audiences |
Sign-in
| v1 | v2 |
|---|---|
An API key in the address of Auth/Authorize | A client id and secret, sent in a form to POST /api/v2/auth/token. Ask Frantz for a client. |
| A token that lasts 30 days | A token that lasts an hour (expires_in) |
apiToken in the body of every call | Authorization: Bearer header |
TokenExpiracy in every response | Gone. Use expires_in from the token response. |
| One token for everything | Scopes: job-adverts:write and statistics:read |
See Sign-in and scopes.
Errors
v1 answers 200 to almost everything and puts the outcome in StatusCode and
StatusMessage in the body. v2 answers with the real HTTP status, and with
Problem Details when something is wrong. Check the HTTP status, not the body.
GetPixelScript becomes POST /job-adverts
| v1 field | v2 field |
|---|---|
ProjectReference | externalReference (required, up to 50 characters) |
LandingPageUrl | landingPageUrl (required) |
Title | title |
campaignStartDate, campaignEndDate | startDate, endDate, as dates: 2026-11-30 |
ApplicationDueDate | applicationDueDate |
AudienceId | audienceId |
STYRK | styrk |
BannerShortText, BannerLogoUrl, BannerImageUrl | bannerShortText, bannerLogoUrl, bannerImageUrl |
feAdId in the request, to update a pixel | The ConnectID in the address of PATCH /api/v2/job-adverts/{connectId}, or send the same externalReference again |
| v1 response | v2 response |
|---|---|
feAdId | connectId |
frantzPixelScript, landingPageTopScript | script, the same tag |
ReportURL | reportUrl |
| - | All the job advert's fields, and createdDate and updatedDate |
The rules are the same as in v1: one job advert per reference, safe to repeat, and an ended job advert sent again
without an end date runs for another 21 days. New in v2: 201 for a new job advert and 200
for one you had, a null field stays as it is, and "" clears a text field.
GetCampaignStatistics becomes GET /job-adverts/{connectId}/statistics
The ConnectID (v1's connectID) moves from the body into the address.
| v1 field | v2 field |
|---|---|
StatsData | channels |
connectID on every row | connectId, once, at the top |
channelId | channelId |
network: Meta, LinkedIn, ... | network in lower case: meta, linkedin, ... |
mediaName | name |
bannerViews | impressions |
bannerClicks | clicks |
landingpageViews | pageViews |
clickedReadMore | readMoreClicks |
hasReadText | readers |
searchButton | applyClicks |
avgTime | avgTimeSeconds |
ReportUrl | reportUrl on the job advert |
| - | dataUntil, the last day the numbers include |
The numbers are the same as in v1. See Statistics.
GetFrantzSegments becomes GET /audiences
| v1 | v2 |
|---|---|
segmentLevel: Industry, Category, Speciality | ?level=industry, category or speciality |
feAdId, for the segment of a pixel | audienceId from GET /api/v2/job-adverts/{connectId}, then GET /api/v2/audiences/{audienceId} |
| - | ?title=, the audiences that fit a job title |
Segments, CountSegments | items |
SegmentLevel | level |
AudienceId | audienceId |
Industry, IndustryReach | industry.name, industry.reach |
Category, CategoryReach | category.name, category.reach |
Speciality, SpecialityReach | speciality.name, speciality.reach |
StyrkKode | styrk |
Step by step
- Ask Frantz for a client for the test environment, with the scopes you need.
- Build the sign-in, and send the token as
Authorization: Bearer. - Move the calls one at a time, and check the HTTP status instead of
StatusCode. - Test against
https://apitest.frantz.no. - Ask Frantz for a client for production, and switch over.
- Tell Frantz when you no longer use v1, so your API key can be switched off.