/projects

The redirect ids are the point of creating a project over the API. They are the callbacks the client pastes into their own survey platform's exit-redirect settings, as …/survey/c_{id}, d_{id}, t_{id}, q_{id}, plus the test* quartet for a project being checked out in Testing.

Qualifications cannot be set here — they have their own PUT sub-resource, so creating a project with qualifications is two calls.

POSThttps://dashboard.a2bsample.com/api/developer/playground/client/projects
RequiresAuthorizationandX-Api-Tokenas headers.
Client
Client·Projects·POST/projects
POSThttps://dashboard.a2bsample.com/api/developer/playground/client/projects
Request body
Response

Send a request to see the response.

Example request

Request
curl --request POST \  --url 'https://dashboard.a2bsample.com/api/developer/playground/client/projects' \  --header 'Authorization: Bearer $A2B_BEARER_TOKEN' \  --header 'X-Api-Token: $A2B_API_TOKEN' \  --header 'Accept: application/json' \  --header 'Content-Type: application/json' \  --data '{"projectName":"Playground test project","reqComplete":100,"loi":10,"ir":30,"cpc":2.5,"status":1,"surveyLink":"https://survey.example.com/s/abc","surveyTestLink":"https://survey.example.com/s/abc?test=1"}'

Request

Headers4

Authorizationstringrequired

The secret half. A client token starts clt_ — the four-character prefix says which table to resolve it in, so the row it matches is the caller. A vnd_… token on this prefix is a 403, not a 404.

example: Bearer clt_4c8ea1f52d6b8e0c4a919f1c4e2a7b3d
X-Api-Tokenstringrequired

The identity half — this client's own 40-hex apiToken, the value GET /api/developer/me echoes back. Compared in constant time against the bearer token's own row, so a bearer token lifted on its own is not enough to call the playground.

example: 3c7a1b905e424d189f637a2c5e1b8d40b1d9f4e6
Content-Typestringrequired

Request media type.

default: application/json
Acceptstringoptional

Response media type.

default: application/json

Body20

projectNamestringrequired

Required on create and non-blank. Unique system-wide, not per client — a clash is a 409.

example: Q3 Brand Tracker
parentProjectIdstring<uuid>optional
studyTypeintegeroptional
default: 1
countryIdstring<uuid>optional

Must exist, or 400 Unknown countryId: ….

languageIdstring<uuid>optional

Must exist.

currencyIdstring<uuid>optional

Must exist. Defaults to United States Dollar.

cpcnumberoptional

The client's own rate per complete.

default: 0
surveyLinkstringoptional
surveyTestLinkstringoptional

Required if status is 2 (Testing). Checked last, against the values just assigned rather than against the request, so it catches both moving a project into Testing with no test link and clearing the test link of a project already sitting in Testing.

reqCompleteintegeroptional
loiintegeroptional
irintegeroptional
statusintegeroptional
default: 11234567
devicestringoptional

1 Monitor, 2 Smartphone, 3 Tablet. Blank means any.

notesstringoptional
projectBriefstringoptional
targetAgeMinintegeroptional
targetAgeMaxintegeroptional
targetGenderstringoptional

Send "" to lift the restriction.

MALEFEMALEANY
targetZipCodesstringoptional

Request body

JSONapplication/json
{  "projectName": "Playground test project",  "reqComplete": 100,  "loi": 10,  "ir": 30,  "cpc": 2.5,  "status": 1,  "surveyLink": "https://survey.example.com/s/abc",  "surveyTestLink": "https://survey.example.com/s/abc?test=1"}

Responses

201Created

Created. The response carries the eight redirect ids.

successboolean
Whether the call succeeded.
messagestring
projectobject
A project as its owning client sees it. vendorCpi is absent from this record entirely, not present-and-nulled — a field that is never populated is one nobody has to remember to null on a new code path.
Example response
{  "success": true,  "message": "Project created.",  "project": {    "id": "9f1c4e2a-7b3d-4c8e-a1f5-2d6b8e0c4a91",    "pId": 1042,    "parentProjectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "projectName": "Q3 Brand Tracker",    "studyType": 1,    "status": 3,    "statusLabel": "Running",    "countryId": "b1d9f4e6-2a80-4c35-97e1-6f3b0d8a5c72",    "countryName": "United States",    "languageId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "languageName": "English",    "currencyId": "2d6b8e0c-4a91-4e2a-9f1c-7b3d4c8ea1f5",    "currencyName": "United States Dollar",    "cpc": 4.5,    "surveyLink": "https://survey.example.com/s/9f1c4e2a",    "surveyTestLink": "https://survey.example.com/s/9f1c4e2a?test=1",    "reqComplete": 500,    "loi": 12,    "ir": 35,    "device": "1,2",    "notes": "string",    "projectBrief": "string",    "targetAgeMin": 0,    "targetAgeMax": 0,    "targetGender": "MALE",    "targetZipCodes": "string",    "completeRedirectId": "c1a4e2a7-b3d4-4c8e-a1f5-2d6b8e0c4a91",    "disqualifyRedirectId": "d2a4e2a7-b3d4-4c8e-a1f5-2d6b8e0c4a91",    "terminateRedirectId": "t3a4e2a7-b3d4-4c8e-a1f5-2d6b8e0c4a91",    "quotaFullRedirectId": "q4a4e2a7-b3d4-4c8e-a1f5-2d6b8e0c4a91",    "testCompleteRedirectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "testDisqualifyRedirectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "testTerminateRedirectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "testQuotaFullRedirectId": "5f1c8a3e-9d21-4c77-92f0-1b3a4d6e8c00",    "createdAt": "2026-08-24T14:32:07",    "updatedAt": "2026-08-25T09:11:40"  }}