-
Notifications
You must be signed in to change notification settings - Fork 0
Authorship Intake
gabep-tech edited this page May 4, 2026
·
7 revisions
Submit and list Authorship intake data for accounts and campaigns. Use this when an Authorship workflow task exists and the reseller submits author profile information for a campaign.
All endpoints require Authorization (Bearer JWT and/or API key — match other v1 Semify API wiki pages).
-
Endpoint:
POST /api/v1/authorship -
Description: Creates an authorship intake for the account and campaign: writes
authorship_intakeand related content rows, updates the task’slink_imagewhen valid, adds a task note, and may add a LinkedIn entry to the campaign password locker (URL only, or username + encrypted password). Fails if an intake already exists or prerequisites are not met. -
Required JSON body:
-
account(object):account_id(integer),camp_id(integer) -
author(object):full_name(string),position(string),business_name(string) -
linked_in(object, required): all keys optional, but typically provide at least one of:-
url(string) — public LinkedIn profile URL; stored on the intake and duplicated in lockernotewhen applicable -
username(string) andpassword(string) — when both are non-empty, the password is stored encrypted in the password locker; only transmit over HTTPS
-
-
-
Optional body fields (strings):
link_image,experience_history,interests_facts,areas_expertise,education,current_work,credentials,pub_awards
-
Endpoint:
GET /api/v1/authorship -
Description: Returns Scheduled Authorship tasks (
task_type_id136, status Scheduled, not completed), optionally filtered. -
Query parameters (all optional):
-
account_id(integer) -
camp_id(integer) -
start_date,end_date(YYYY-MM-DD) — filter on task due date (date_due) -
needsIntakeData(trueorfalse) —true: tasks without an intake;false: tasks with an intake
-
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"account": { "account_id": 12345, "camp_id": 54321 },
"author": {
"full_name": "Jane Doe",
"position": "Editor",
"business_name": "Example Co"
},
"linked_in": { "url": "https://www.linkedin.com/in/janedoe" },
"link_image": "https://example.com/photo.jpg",
"credentials": "Certified Example",
"experience_history": "10 years in SEO"
}' \
"https://uat.services.semify.com/api/v1/authorship"curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"account": { "account_id": 12345, "camp_id": 54321 },
"author": {
"full_name": "Jane Doe",
"position": "Editor",
"business_name": "Example Co"
},
"linked_in": {
"url": "https://www.linkedin.com/in/janedoe",
"username": "user@example.com",
"password": "useStrongSecretsOnlyOnHTTPS"
}
}' \
"https://uat.services.semify.com/api/v1/authorship"curl -H "Authorization: Bearer $TOKEN" \
"https://uat.services.semify.com/api/v1/authorship?account_id=12345&needsIntakeData=true"{
"data": {},
"error": false,
"messages": [
"Authorship created successfully",
"Success"
]
}{
"data": {},
"error": true,
"messages": [
"An intake already exists for this account and campaign. - errorcode: authorship-v1-create:2",
"Bad Request"
]
}{
"data": {},
"error": true,
"messages": [
"Account does not have LR3 Authorship plans - errorcode: authorship-v1-create:4",
"Bad Request"
]
}{
"data": {},
"error": true,
"messages": [
"start_date must be in YYYY-MM-DD format; needsIntakeData must be either 'true' or 'false'"
]
}{
"data": [
{
"task_id": 1001,
"camp_id": 54321,
"task_name": "LR3 Authorship",
"task_type_id": 136,
"task_type_name": "LR3 Authorship",
"camp_name": "Example Campaign",
"account_id": 12345,
"status": "Scheduled",
"date_due": "2026-05-15",
"created_date": "2026-05-01",
"intake_id": null
}
],
"error": false,
"messages": [
"Successfully retrieved 1 scheduled Authorship tasks",
"with filters: account_id: 12345, needsIntakeData: true"
]
}{
"data": {},
"error": true,
"messages": ["No authorship tasks found"]
}- Confirm the account–campaign has an LR3 Authorship task in Scheduled status.
- If an intake already exists for that
account_idandcamp_id, creation returns an error—resolve via internal process if needed. - Submit
POST /api/v1/authorshipwith author profile fields andlinked_inas required by your integration (URL and/or credentials). - Confirm with
GET /api/v1/authorship?...&needsIntakeData=falsethat an intake is attached.
- HTTPS: Always use TLS; never send LinkedIn passwords over insecure connections.
- Task type: Listing targets task type 136, Scheduled, not completed.
-
One intake per
account_id+camp_idpair. -
Image URLs:
link_imagemust use a common raster extension (.png,.gif,.jpg,.jpeg,.bmp) or it may be cleared. -
Due-date filters:
start_date/end_dateapply todate_due, not task created date. - Password storage: LinkedIn passwords are stored encrypted for Semify locker workflows; treat API credentials as highly sensitive.