Skip to content

Authorship Intake

gabep-tech edited this page May 11, 2026 · 7 revisions

Submit and list Authorship intake data for reseller-owned accounts and campaigns. All endpoints require Authorization using Bearer JWT and/or API key. The authenticated reseller account is used to verify ownership.

Endpoints

Create Authorship Intake

POST /api/v1/authorship Creates one Authorship intake for an account/campaign pair. The API verifies that the reseller owns the account and campaign, confirms an Authorship task exists, requires the task to be Scheduled (status_id = 1), prevents duplicate intake rows, stores intake content, optionally updates the task image, adds a task note, and may add LinkedIn details to the campaign password locker.

Required JSON body

{
  "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"
  }
}
Required fields
account.account_id numeric
account.camp_id numeric
author.full_name string
author.position string
author.business_name string
linked_in object
Optional fields
linked_in.url string
linked_in.username string
linked_in.password string
link_image string
experience_history string
interests_facts string
areas_expertise string
education string
current_work string
credentials string
pub_awards string
link_image is normalized by adding https:// when no protocol is supplied. It is only kept when it contains one of: .png, .gif, .jpg, .jpeg, .bmp.

LinkedIn password locker behavior:

URL only: creates a LinkedIn password locker entry with the URL in note.
Username + password: stores the encrypted password and username for LinkedIn workflows.
Passwords must only be submitted over HTTPS.
Success response
{
  "data": {},
  "error": false,
  "messages": [
    "Authorship created successfully",
    "Success"
  ]
}
Common error responses
400 Bad Request

{
  "data": {},
  "error": true,
  "messages": [
    "The reseller does not own this account. - errorcode: authorship-v1-create:2",
    "Bad Request"
  ]
}
Other create errors include:

The reseller does not own this campaign. - errorcode: authorship-v1-create:3
An intake already exists for this account and campaign. - errorcode: authorship-v1-create:2
Task must be in Scheduled status (status_id = 1) to submit an intake. Current status: {status_id} - errorcode: authorship-v1-create:3
Account does not have Authorship plans - errorcode: authorship-v1-create:4
List Authorship Tasks
GET /api/v1/authorship

Returns Scheduled Authorship tasks for the authenticated reseller. Results are limited to task type 136, status_id = 1, incomplete tasks, and campaigns under the reseller account.

Query parameters
account_id numeric, optional
camp_id numeric, optional
start_date optional, YYYY-MM-DD, filters task.date_due >= start_date
end_date optional, YYYY-MM-DD, filters task.date_due <= end_date
needsIntakeData optional boolean: true returns tasks without intake data, false returns tasks with intake data
Example
curl -H "Authorization: Bearer $TOKEN" \
  "https://uat.services.semify.com/api/v1/authorship?account_id=12345&needsIntakeData=true"
Success response
{
  "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"
  ]
}
Validation errors
Invalid date formats, invalid date ranges, or invalid needsIntakeData values can return 400 Bad Request or 422 Unprocessable Entity.

{
  "error": true,
  "messages": [
    "start_date must be in YYYY-MM-DD format; needsIntakeData must be either 'true' or 'false'"
  ]
}
No results
{
  "data": {},
  "error": true,
  "messages": [
    "No authorship tasks found"
  ]
}
Workflow
Call GET /api/v1/authorship?needsIntakeData=true to find Scheduled Authorship tasks that still need intake data.
Submit POST /api/v1/authorship for the returned account_id and camp_id.
Confirm completion with GET /api/v1/authorship?account_id={id}&camp_id={id}&needsIntakeData=false.
Notes
Authorship task type is 136.
Create requires the task to be Scheduled (status_id = 1).
Only one intake is allowed per account_id + camp_id.
Date filters apply to task due date, not created date.
Submitted intake details are also written to a task note.

Clone this wiki locally