API reference

The API the web application uses, and later the systems of organizations. The base address is /api/v1; texts come in the request language (Arabic or English).

M1 Identity, accounts and organizations

Create an account, person, empty passport and consents

POST /api/v1/accounts

  • Permission (document 06): P-101
  • Open without signing in
  • On success: 201
Request fields
FieldTypeRequired
proofstringYes
name_arstringYes
name_latinstringNo
governorate_codestring | nullNo
residence_countrystringNo
passwordstringNo
preferred_languagear | enNo
accept_termsbooleanYes
consentsobject[]No
national_idstringNo

Send a one-time code to a phone number

POST /api/v1/auth/otp

  • Permission (document 06): P-101
  • Open without signing in
  • On success: 202
Request fields
FieldTypeRequired
phone_e164stringYes
purposesign_up | sign_in | change_phone | recoveryYes

Check a one-time code and return a short-lived proof

POST /api/v1/auth/otp/verify

  • Permission (document 06): P-101
  • Open without signing in
  • On success: 200
Request fields
FieldTypeRequired
phone_e164stringYes
purposesign_up | sign_in | change_phone | recoveryYes
codestringYes

Start account recovery for a lost phone

POST /api/v1/auth/recovery

  • Permission (document 06): public
  • Open without signing in
  • On success: 201, 202
Request fields
FieldTypeRequired
old_phone_e164stringYes
proofstringYes
passwordstringNo
recovery_codestringNo

Upload identity evidence for a manual recovery

POST /api/v1/auth/recovery/{case_id}/evidence

  • Permission (document 06): public
  • Open without signing in
  • On success: 202
Request fields
FieldTypeRequired
proofstringYes
filestring (uri)Yes

Sign in with phone and password or a code proof

POST /api/v1/auth/sessions

  • Permission (document 06): public
  • Open without signing in
  • On success: 201
Request fields
FieldTypeRequired
phone_e164stringNo
passwordstringNo
proofstringNo

Sign out

DELETE /api/v1/auth/sessions/current

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Give the second factor for this session (authenticator or recovery code)

POST /api/v1/auth/sessions/current/mfa

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
codestringYes

Confirm the password or a code to the current number again before a sensitive change

POST /api/v1/auth/sessions/current/reauth

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 204
Request fields
FieldTypeRequired
passwordstringNo
proofstringNo

The network of experts abroad

GET /api/v1/diaspora-network

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Upload a file (quarantined until scanned)

POST /api/v1/files

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 202
Request fields
FieldTypeRequired
filestring (uri)Yes

The 14 governorates in the request language

GET /api/v1/governorates

  • Permission (document 06): public
  • Open without signing in
  • On success: 200

Takes no request body.

Own account, roles and memberships

GET /api/v1/me

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Switch the active role and organization

PUT /api/v1/me/active-role

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
rolestringYes
org_idstring | null (uuid)No

List own consents and their history

GET /api/v1/me/consents

  • Permission (document 06): P-103
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Give or withdraw consent for a purpose

PUT /api/v1/me/consents/{purpose}

  • Permission (document 06): P-103
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
grantedbooleanYes

Request an export of own data (JSON and PDF)

POST /api/v1/me/data-exports

  • Permission (document 06): P-103
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
formatjson | pdfYes

Delete own account after the grace period

POST /api/v1/me/deletion

  • Permission (document 06): P-103
  • Needs a signed-in session
  • On success: 202

Takes no request body.

What I offer from abroad

GET /api/v1/me/diaspora-offer

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Offer expertise from abroad

PUT /api/v1/me/diaspora-offer

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
residence_countrystringYes
offersremote_work | mentoring | consulting | volunteering | return[]Yes
fieldsstring[]No

Accept or refuse an invitation or an ownership offer

POST /api/v1/me/invitations/{membership_id}/decision

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 204
Request fields
FieldTypeRequired
acceptbooleanYes

Start an authenticator app: a new key, shown once

POST /api/v1/me/mfa/totp

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Turn the authenticator app on with its first code; returns 10 recovery codes once

POST /api/v1/me/mfa/totp/confirm

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
codestringYes

Change the phone number after a code to the new number

PUT /api/v1/me/phone

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
proofstringYes

List own sessions and devices

GET /api/v1/me/sessions

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200

Takes no request body.

End every other session

DELETE /api/v1/me/sessions

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 204

Takes no request body.

End a session

DELETE /api/v1/me/sessions/{session_id}

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Get an access token with client credentials

POST /api/v1/oauth/token

  • Permission (document 06): public
  • Open without signing in
  • On success: 200
Request fields
FieldTypeRequired
grant_typeclient_credentialsYes
client_idstringYes
client_secretstringYes
scopestringNo

Register an organization (becomes pending approval)

POST /api/v1/organizations

  • Permission (document 06): P-104
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
org_typecompany | government | ngo | international | issuer | syndicate | training_provider | investorYes
legal_namestringYes
registration_nostringYes
sector_codeA | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | UYes
governorate_codestringYes
women_ledbooleanNo
file_idsstring (uuid)[]Yes

Organization profile

GET /api/v1/organizations/{org_id}

  • Permission (document 06): P-105
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Edit the organization profile and documents

PATCH /api/v1/organizations/{org_id}

  • Permission (document 06): P-105
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
org_typecompany | government | ngo | international | issuer | syndicate | training_provider | investorNo
legal_namestringNo
registration_nostringNo
sector_codeA | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | UNo
governorate_codestringNo
women_ledbooleanNo
file_idsstring (uuid)[]No

List API clients

GET /api/v1/organizations/{org_id}/api-clients

  • Permission (document 06): P-110
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Create an API client (secret shown once)

POST /api/v1/organizations/{org_id}/api-clients

  • Permission (document 06): P-110
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
namestringYes
scopesopportunities:read | opportunities:write | applications:read | applications:write | verification:read | verification:write | verification:bulk[]Yes
rate_limit_per_minintegerNo

Revoke an API client

DELETE /api/v1/organizations/{org_id}/api-clients/{client_id}

  • Permission (document 06): P-110
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Rotate the client secret

POST /api/v1/organizations/{org_id}/api-clients/{client_id}/rotation

  • Permission (document 06): P-110
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
overlap_hoursintegerNo

List members and their roles

GET /api/v1/organizations/{org_id}/members

  • Permission (document 06): P-106
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Invite a member with a role

POST /api/v1/organizations/{org_id}/members

  • Permission (document 06): P-106
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
phone_e164stringYes
rolerecruiter | verifier | viewer | trainer | analystYes

Change a member's role

PATCH /api/v1/organizations/{org_id}/members/{member_id}

  • Permission (document 06): P-106
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
rolerecruiter | verifier | viewer | trainer | analystNo

Remove a member (ends sessions and keys)

DELETE /api/v1/organizations/{org_id}/members/{member_id}

  • Permission (document 06): P-106
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Transfer ownership to another member

POST /api/v1/organizations/{org_id}/ownership-transfer

  • Permission (document 06): P-107
  • Needs a signed-in session
  • On success: 202
Request fields
FieldTypeRequired
member_idstring (uuid)Yes
my_new_rolerecruiter | verifier | viewer | trainer | analystNo

Production API clients waiting for approval

GET /api/v1/staff/api-clients

  • Permission (document 06): P-108
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Approve or refuse a production API client

POST /api/v1/staff/api-clients/{client_id}/decision

  • Permission (document 06): P-108
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
approvebooleanYes

Possible duplicate people and organizations

GET /api/v1/staff/duplicates

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Merge or dismiss a possible duplicate

POST /api/v1/staff/duplicates/decisions

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
kindperson | organizationYes
kept_idstring (uuid)Yes
other_idstring (uuid)Yes
decisionmerged | dismissedYes

Organizations waiting for approval

GET /api/v1/staff/organizations

  • Permission (document 06): P-108
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Approve, reject, suspend or close an organization

POST /api/v1/staff/organizations/{org_id}/decision

  • Permission (document 06): P-108
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
decisionapprove | reject | request_info | suspend | closeYes
reasonstringNo
record_typesqualification | certificate | training | experience | membership | license[]No

Manual recovery queue

GET /api/v1/staff/recovery-cases

  • Permission (document 06): P-111
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Approve or refuse a manual recovery

POST /api/v1/staff/recovery-cases/{case_id}/decision

  • Permission (document 06): P-111
  • Needs a signed-in session
  • On success: 204
Request fields
FieldTypeRequired
approvebooleanYes
reasonstringYes

applications

Confirm a hire; adds the job to the passport at L2

POST /api/v1/applications/{app_id}/hire-confirmation

  • Permission (document 06): P-308
  • Needs a signed-in session
  • On success: 201

Takes no request body.

catalog

Curated collections, drafts included

GET /api/v1/catalog/collections

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Create a curated collection

POST /api/v1/catalog/collections

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
title_arstringYes
title_enstringYes
source_notestringYes
course_idsstring (uuid)[]No
publishbooleanNo

Edit or publish a curated collection

PATCH /api/v1/catalog/collections/{collection_id}

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
title_arstringNo
title_enstringNo
source_notestringNo
course_idsstring (uuid)[]No
publishbooleanNo

Catalog courses in every state

GET /api/v1/catalog/courses

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Add a course to the catalog

POST /api/v1/catalog/courses

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
provider_idstring (uuid)No
provider_course_idstringNo
titlestringYes
languagear | enYes
delivery_modeself_paced | live_online | in_personYes
fee_typefree | paid | subsidized | grant_eligibleYes
fee_amountstring | null (decimal)No
duration_hoursstring | null (decimal)No
gives_certificatebooleanNo
enrollment_urlstring | nullNo
skill_codesstring[]No
statusimported | published | needs_update | expired | archivedNo
confirmbooleanNo

One catalog course

GET /api/v1/catalog/courses/{course_id}

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Edit a course

PATCH /api/v1/catalog/courses/{course_id}

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
provider_idstring (uuid)No
provider_course_idstringNo
titlestringNo
languagear | enNo
delivery_modeself_paced | live_online | in_personNo
fee_typefree | paid | subsidized | grant_eligibleNo
fee_amountstring | null (decimal)No
duration_hoursstring | null (decimal)No
gives_certificatebooleanNo
enrollment_urlstring | nullNo
skill_codesstring[]No
statusimported | published | needs_update | expired | archivedNo
confirmbooleanNo

Import a provider's course file

POST /api/v1/catalog/imports

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
provider_idstring (uuid)Yes
filestring (uri)Yes

A checked course file

GET /api/v1/catalog/imports/{import_id}

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Import the valid rows of a checked file

POST /api/v1/catalog/imports/{import_id}/confirmation

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 201

Takes no request body.

The error report of a course file (CSV)

GET /api/v1/catalog/imports/{import_id}/report

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Course providers

GET /api/v1/catalog/providers

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Add a course provider

POST /api/v1/catalog/providers

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
namestringYes
accreditation_statusstringNo
websiteobjectNo
phonestringNo

Sync a provider's courses by its API

POST /api/v1/catalog/providers/{provider_id}/sync

  • Permission (document 06): P-504
  • Needs a signed-in session
  • On success: 202

Takes no request body.

collections

Published curated collections

GET /api/v1/collections

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 200

Takes no request body.

One published curated collection

GET /api/v1/collections/{collection_id}

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 200

Takes no request body.

contracts

One contract with its milestones, deliveries and history

GET /api/v1/contracts/{contract_id}

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Change the contract; the other party confirms it again

PATCH /api/v1/contracts/{contract_id}

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
scopestringNo
pricestring (decimal)No
currencySYP | USDNo
milestonesobject[]No

Confirm a contract (active when both confirm)

POST /api/v1/contracts/{contract_id}/confirmation

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Open a dispute

POST /api/v1/contracts/{contract_id}/disputes

  • Permission (document 06): P-406
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
statementstringYes
evidence_file_idstring | null (uuid)No

Deliver a milestone

POST /api/v1/contracts/{contract_id}/milestones/{milestone_id}/deliveries

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
notestringNo
file_idstring | null (uuid)No

Accept or return a delivery

POST /api/v1/contracts/{contract_id}/milestones/{milestone_id}/review

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
resultaccepted | changes_requestedYes
commentstringNo

Rate the other party after completion

POST /api/v1/contracts/{contract_id}/ratings

  • Permission (document 06): P-406
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
starsintegerYes
commentstringNo

conversations

Own conversations

GET /api/v1/conversations

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Start the conversation of a contract, an application or an offer

POST /api/v1/conversations

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
context_typecontract | application | offerYes
context_idstring (uuid)Yes

One conversation with its messages

GET /api/v1/conversations/{conversation_id}

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Send a message

POST /api/v1/conversations/{conversation_id}/messages

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
bodystringYes

courses

Search the course catalog

GET /api/v1/courses

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 200

Takes no request body.

One course with sessions and source

GET /api/v1/courses/{course_id}

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 200

Takes no request body.

Count a visit to the provider, a question or a save

POST /api/v1/courses/{course_id}/actions

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 202
Request fields
FieldTypeRequired
actionprovider | enquiry | saveYes

Compare up to 4 courses

GET /api/v1/courses/comparison

  • Permission (document 06): P-502
  • Open without signing in
  • On success: 200

Takes no request body.

M2 Skills Passport and verification

Who viewed my profile

GET /api/v1/me/access-log

  • Permission (document 06): P-207
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Generate a CV from the passport (Arabic or English PDF)

POST /api/v1/me/cv

  • Permission (document 06): P-205
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
languagear | enYes
templateclassic | bandYes
sectionsqualification | certificate | training | experience | skill | language | project | volunteering | membership | license[]Yes
excludestring (uuid)[]No
phonebooleanNo
citybooleanNo

Import own education records after consent

POST /api/v1/me/education-imports

  • Permission (document 06): P-203
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
ministrymoe | moheYes

Status of an import

GET /api/v1/me/education-imports/{import_id}

  • Permission (document 06): P-203
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Keep or exclude the fetched education records

POST /api/v1/me/education-imports/{import_id}/confirmation

  • Permission (document 06): P-203
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
keepinteger[]Yes

Suggest an issuer that is not on the platform

POST /api/v1/me/issuer-suggestions

  • Permission (document 06): P-202
  • Needs a signed-in session
  • On success: 202
Request fields
FieldTypeRequired
namestringYes
sectionqualification | certificate | training | experience | skill | language | project | volunteering | membership | licenseYes

Own passport with all records

GET /api/v1/me/passport

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Add a record

POST /api/v1/me/passport/entries

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
occupation_codestring | nullNo
file_idsstring (uuid)[]No
sectionqualification | certificate | training | experience | skill | language | project | volunteering | membership | licenseYes
dataobjectYes

Edit a record (an L2 record becomes a new L0 version)

PATCH /api/v1/me/passport/entries/{entry_id}

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
occupation_codestring | nullNo
file_idsstring (uuid)[]No
dataobjectNo

Delete an unverified record

DELETE /api/v1/me/passport/entries/{entry_id}

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Dispute or ask to correct a verified record

POST /api/v1/me/passport/entries/{entry_id}/disputes

  • Permission (document 06): P-208
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
reasonstringYes
evidence_file_idstring | null (uuid)No

Issuers that can verify the record, and what they would see

GET /api/v1/me/passport/entries/{entry_id}/verification-requests

  • Permission (document 06): P-202
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Ask an issuer to verify a record

POST /api/v1/me/passport/entries/{entry_id}/verification-requests

  • Permission (document 06): P-202
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
issuer_org_idstring (uuid)Yes

Visibility of sections and fields

GET /api/v1/me/passport/visibility

  • Permission (document 06): P-204
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Set visibility of sections and fields

PUT /api/v1/me/passport/visibility

  • Permission (document 06): P-204
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
sectionsobjectNo
fieldsobjectNo

The passport as the public or an employer sees it

GET /api/v1/me/passport/visibility/preview

  • Permission (document 06): P-204
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Records an issuer uploaded for me

GET /api/v1/me/pending-claims

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Accept or reject a pending claim

POST /api/v1/me/pending-claims/{claim_id}/decision

  • Permission (document 06): P-201
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
acceptbooleanYes

The QR share link in force

GET /api/v1/me/share-links

  • Permission (document 06): P-205
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Create a QR share link

POST /api/v1/me/share-links

  • Permission (document 06): P-205
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Revoke a QR share link

DELETE /api/v1/me/share-links/{link_id}

  • Permission (document 06): P-205
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Own work log

GET /api/v1/me/work-log

  • Permission (document 06): P-207
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Upload a CSV of verified records

POST /api/v1/organizations/{org_id}/bulk-verifications

  • Permission (document 06): P-210
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
filestring (uri)Yes
record_typequalification | certificate | training | experience | skill | language | project | volunteering | membership | licenseYes

Batch status and counts

GET /api/v1/organizations/{org_id}/bulk-verifications/{batch_id}

  • Permission (document 06): P-210
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Confirm the import of a checked file

POST /api/v1/organizations/{org_id}/bulk-verifications/{batch_id}/confirmation

  • Permission (document 06): P-210
  • Needs a signed-in session
  • On success: 202

Takes no request body.

Row errors as CSV

GET /api/v1/organizations/{org_id}/bulk-verifications/{batch_id}/errors

  • Permission (document 06): P-210
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Issuer queue of record disputes

GET /api/v1/organizations/{org_id}/disputes

  • Permission (document 06): P-211
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One dispute with the record and its history

GET /api/v1/organizations/{org_id}/disputes/{dispute_id}

  • Permission (document 06): P-211
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Decide a dispute; correct or revoke a record

POST /api/v1/organizations/{org_id}/disputes/{dispute_id}/decision

  • Permission (document 06): P-211
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
outcomeverify | uphold | revokeYes
methodregistry_check | original_document | direct_confirmationNo
notestringNo
dataobjectNo

Issuer queue of verification requests

GET /api/v1/organizations/{org_id}/verification-requests

  • Permission (document 06): P-209
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One request with the shared fields

GET /api/v1/organizations/{org_id}/verification-requests/{request_id}

  • Permission (document 06): P-209
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Accept or reject a verification request

POST /api/v1/organizations/{org_id}/verification-requests/{request_id}/decision

  • Permission (document 06): P-209
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
decisionaccept | rejectYes
methodregistry_check | original_document | direct_confirmationNo
reasonnot_found | data_mismatch | not_genuine | otherNo
notestringNo
valid_untilstring (date)No

Records the issuer verified, found by the person's name

GET /api/v1/organizations/{org_id}/verified-records

  • Permission (document 06): P-211
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Revoke a record the issuer verified

POST /api/v1/organizations/{org_id}/verified-records/{entry_id}/revocation

  • Permission (document 06): P-211
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
reasonstringYes

Open a shared passport by QR token

GET /api/v1/shared/{token}

  • Permission (document 06): P-206
  • Open without signing in
  • On success: 200

Takes no request body.

me

Own applications and their status

GET /api/v1/me/applications

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One application with its history

GET /api/v1/me/applications/{app_id}

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Withdraw an application

POST /api/v1/me/applications/{app_id}/withdrawal

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Block an account

POST /api/v1/me/blocks

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
account_idstring (uuid)Yes

Unblock an account

DELETE /api/v1/me/blocks/{account_id}

  • Permission (document 06): P-405
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Set career goals

PUT /api/v1/me/career-goals

  • Permission (document 06): P-501
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
occupation_codestring | nullYes

Own contracts, as client or freelancer

GET /api/v1/me/contracts

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 200

Takes no request body.

The interest questionnaire, the answers so far and the goal

GET /api/v1/me/interest-profile

  • Permission (document 06): P-501
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Save the interest questionnaire

PUT /api/v1/me/interest-profile

  • Permission (document 06): P-501
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
answersobjectNo
personalization_onboolean | nullNo

Confirm an interview or ask for another time

POST /api/v1/me/interviews/{interview_id}/answer

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
confirmbooleanYes
notestringNo

Own learning paths

GET /api/v1/me/learning-paths

  • Permission (document 06): P-503
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Build a learning path for the career goal

POST /api/v1/me/learning-paths

  • Permission (document 06): P-503
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Update progress of a step

PATCH /api/v1/me/learning-paths/{path_id}/activities/{step_id}

  • Permission (document 06): P-503
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
statustodo | in_progress | attended | skipped | masteredNo

My mentoring requests, sent and received

GET /api/v1/me/mentoring-requests

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Cases about my account or my organization's listings

GET /api/v1/me/moderation-cases

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One case as the reported party sees it

GET /api/v1/me/moderation-cases/{case_id}

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Channel and frequency per category

GET /api/v1/me/notification-preferences

  • Permission (document 06): P-705
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Change channel and frequency (security stays on)

PUT /api/v1/me/notification-preferences

  • Permission (document 06): P-705
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
preferencesobject[]Yes

In-app notification list

GET /api/v1/me/notifications

  • Permission (document 06): P-705
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Mark a notification read

POST /api/v1/me/notifications/{notification_id}/read

  • Permission (document 06): P-705
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Own offers and what happened to them

GET /api/v1/me/offers

  • Permission (document 06): P-403
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Invitations to apply that I received

GET /api/v1/me/opportunity-invitations

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Accept or decline an invitation to apply

POST /api/v1/me/opportunity-invitations/{invitation_id}/decision

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
acceptbooleanYes

Career recommendations and skill gaps with explanations

GET /api/v1/me/recommendations

  • Permission (document 06): P-501
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Mark a recommendation useful or not

POST /api/v1/me/recommendations/{rec_id}/feedback

  • Permission (document 06): P-501
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
usefulbooleanYes
commentstringNo

Saved opportunities and courses

GET /api/v1/me/saved-items

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Save an opportunity or a course

POST /api/v1/me/saved-items

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
item_typeopportunity | courseYes
item_idstring (uuid)Yes

Remove a saved item

DELETE /api/v1/me/saved-items/{item_id}

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 204

Takes no request body.

List search alerts

GET /api/v1/me/search-alerts

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Create a search alert

POST /api/v1/me/search-alerts

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
queryobjectYes

Delete a search alert

DELETE /api/v1/me/search-alerts/{alert_id}

  • Permission (document 06): P-302
  • Needs a signed-in session
  • On success: 204

Takes no request body.

Own service card and the projects it may show

GET /api/v1/me/service-card

  • Permission (document 06): P-401
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Publish or edit own service card

PUT /api/v1/me/service-card

  • Permission (document 06): P-401
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
titlestringYes
categorydesign | translation | software | engineering | accounting | teaching | construction | marketing | writing | otherYes
price_minstring | null (decimal)No
price_maxstring | null (decimal)No
currencySYP | USDNo
delivery_daysinteger | nullNo
statuspublished | hiddenNo
portfoliostring (uuid)[]No

mentoring-requests

Request mentoring

POST /api/v1/mentoring-requests

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
mentor_idstring (uuid)Yes
goalstringYes
time_zonestringYes

Confirm that a mentoring session took place

POST /api/v1/mentoring-requests/{request_id}/confirmation

  • Permission (document 06): P-601
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
add_to_work_logbooleanNo

Accept, decline or complete mentoring

POST /api/v1/mentoring-requests/{request_id}/decision

  • Permission (document 06): P-602
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
decisionaccept | decline | completeYes
session_atstring (date-time)No
time_zonestringNo
meeting_detailsstringNo
add_to_work_logbooleanNo

moderation-cases

Appeal a moderation decision

POST /api/v1/moderation-cases/{case_id}/appeals

  • Permission (document 06): P-102
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
reasonstringYes

offers

Accept an offer; the others are declined

POST /api/v1/offers/{offer_id}/acceptance

  • Permission (document 06): P-404
  • Needs a signed-in session
  • On success: 201

Takes no request body.

opportunities

Search published opportunities

GET /api/v1/opportunities

  • Permission (document 06): P-301
  • Open without signing in
  • On success: 200

Takes no request body.

One published opportunity

GET /api/v1/opportunities/{opp_id}

  • Permission (document 06): P-301
  • Open without signing in
  • On success: 200

Takes no request body.

What applying shares, and what the passport does not show

GET /api/v1/opportunities/{opp_id}/application-preview

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Apply with answers and files

POST /api/v1/opportunities/{opp_id}/applications

  • Permission (document 06): P-303
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
messagestringNo
answersobjectNo
file_idsstring (uuid)[]No

organizations

One application with the candidate passport view

GET /api/v1/organizations/{org_id}/applications/{app_id}

  • Permission (document 06): P-305
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Schedule an interview

POST /api/v1/organizations/{org_id}/applications/{app_id}/interviews

  • Permission (document 06): P-306
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
scheduled_atstring (date-time)Yes
time_zonestringYes
modein_person | phone | onlineYes
location_or_linkstring | nullNo

Move a candidate to the next stage

POST /api/v1/organizations/{org_id}/applications/{app_id}/transitions

  • Permission (document 06): P-305
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
actionshortlist | interview | offer | hire | rejectYes
reasonstringNo

Reschedule or cancel an interview

PATCH /api/v1/organizations/{org_id}/interviews/{interview_id}

  • Permission (document 06): P-306
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
actionreschedule | cancelNo
scheduled_atstring (date-time)No
time_zonestringNo
modein_person | phone | onlineNo
location_or_linkstring | nullNo
reasonstringNo

Invitations sent and their answers

GET /api/v1/organizations/{org_id}/invitations

  • Permission (document 06): P-307
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Invite a person to apply

POST /api/v1/organizations/{org_id}/invitations

  • Permission (document 06): P-307
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
opportunity_idstring (uuid)Yes
person_idstring (uuid)Yes

Organization's opportunities

GET /api/v1/organizations/{org_id}/opportunities

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Create an opportunity (draft)

POST /api/v1/organizations/{org_id}/opportunities

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
opp_typejob | internship | training | scholarship | grant | volunteeringYes
titlestringYes
descriptionstringNo
occupation_codestring | nullNo
min_experience_yearsinteger | nullNo
education_levelobjectNo
languagesobject[]No
governorate_codestring | nullNo
is_remotebooleanNo
open_abroadbooleanNo
remote_from_abroadbooleanNo
tagswomen_focused | home_based | flexible_hours | digital[]No
deadlinestring (date)No
eligibilitystringNo
type_detailsobject | nullNo
skillsobject[]No
questionsobject[]No

One of the organization's opportunities

GET /api/v1/organizations/{org_id}/opportunities/{opp_id}

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Edit an opportunity

PATCH /api/v1/organizations/{org_id}/opportunities/{opp_id}

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 200
Request fields
FieldTypeRequired
opp_typejob | internship | training | scholarship | grant | volunteeringNo
titlestringNo
descriptionstringNo
occupation_codestring | nullNo
min_experience_yearsinteger | nullNo
education_levelobjectNo
languagesobject[]No
governorate_codestring | nullNo
is_remotebooleanNo
open_abroadbooleanNo
remote_from_abroadbooleanNo
tagswomen_focused | home_based | flexible_hours | digital[]No
deadlinestring (date)No
eligibilitystringNo
type_detailsobject | nullNo
skillsobject[]No
questionsobject[]No

Applications for an opportunity

GET /api/v1/organizations/{org_id}/opportunities/{opp_id}/applications

  • Permission (document 06): P-305
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Duplicate an opportunity

POST /api/v1/organizations/{org_id}/opportunities/{opp_id}/copies

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Publish, pause, close or reopen

POST /api/v1/organizations/{org_id}/opportunities/{opp_id}/transitions

  • Permission (document 06): P-304
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
actionpublish | pause | closeYes

Search the Reconstruction Experts Registry (logged)

GET /api/v1/organizations/{org_id}/reconstruction-experts

  • Permission (document 06): P-604
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One expert of the registry, as employers see them (logged)

GET /api/v1/organizations/{org_id}/reconstruction-experts/{person_id}

  • Permission (document 06): P-604
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Supply of verified professionals by occupation and governorate

GET /api/v1/organizations/{org_id}/reconstruction-supply

  • Permission (document 06): P-604
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Search discoverable people (logged)

GET /api/v1/organizations/{org_id}/talent

  • Permission (document 06): P-307
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One discoverable person's passport as employers see it (logged)

GET /api/v1/organizations/{org_id}/talent/{person_id}

  • Permission (document 06): P-307
  • Needs a signed-in session
  • On success: 200

Takes no request body.

reports

Report a listing, an account or a message

POST /api/v1/reports

  • Permission (document 06): P-309
  • Open without signing in
  • On success: 201
Request fields
FieldTypeRequired
target_typeopportunity | account | rating | messageYes
target_idstring (uuid)Yes
reasonfraud | discrimination | misleading | abuse | otherYes
detailsstringNo
evidence_file_idstring | null (uuid)No

service-cards

Search freelancers' service cards

GET /api/v1/service-cards

  • Permission (document 06): P-301
  • Open without signing in
  • On success: 200

Takes no request body.

staff

Decide an appeal (different moderator)

POST /api/v1/staff/appeals/{appeal_id}/decision

  • Permission (document 06): P-702
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
actionremove | restore | suspend | warnYes
reasonstringYes

Group effects found by the fairness audit

GET /api/v1/staff/fairness-reviews

  • Permission (document 06): P-906
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Record the human review of a fairness finding

POST /api/v1/staff/fairness-reviews/{review_id}/decision

  • Permission (document 06): P-906
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
outcomejustified | action_takenYes
notestringYes

Open and appealed freelance disputes

GET /api/v1/staff/freelance-disputes

  • Permission (document 06): P-407
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One dispute with the contract, messages and statements

GET /api/v1/staff/freelance-disputes/{dispute_id}

  • Permission (document 06): P-407
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Decide a freelance dispute

POST /api/v1/staff/freelance-disputes/{dispute_id}/decision

  • Permission (document 06): P-407
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
actionrestore | close_contract | remove_rating | warn | suspendYes
factsstringYes
reasonstringYes
partyobjectNo
rating_idstring | null (uuid)No

Escalate a failed call to the owner

POST /api/v1/staff/integration-calls/{call_id}/escalation

  • Permission (document 06): P-706
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Retry a failed call with the same key

POST /api/v1/staff/integration-calls/{call_id}/retry

  • Permission (document 06): P-706
  • Needs a signed-in session
  • On success: 201

Takes no request body.

Status of every integration

GET /api/v1/staff/integrations

  • Permission (document 06): P-706
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Moderation queue

GET /api/v1/staff/moderation-cases

  • Permission (document 06): P-701
  • Needs a signed-in session
  • On success: 200

Takes no request body.

One moderation case with its reports and evidence

GET /api/v1/staff/moderation-cases/{case_id}

  • Permission (document 06): P-701
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Hide, restore, remove, warn or suspend

POST /api/v1/staff/moderation-cases/{case_id}/decisions

  • Permission (document 06): P-701
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
actionremove | restore | suspend | warnYes
reasonstringYes

The register of sensitive fields

GET /api/v1/staff/sensitive-fields

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Review a sensitive field

POST /api/v1/staff/sensitive-fields/{field_key}/review

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
purpose_arstringNo
purpose_enstringNo
access_rolesstring[]No
optionalbooleanNo
review_monthsintegerNo

Add, map, merge, split or rename terms (new version)

POST /api/v1/staff/taxonomy/changes

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
notesstringNo
changesobject[]Yes

Suggested terms waiting for review, and the latest versions

GET /api/v1/staff/taxonomy/suggestions

  • Permission (document 06): P-704
  • Needs a signed-in session
  • On success: 200

Takes no request body.

taxonomy

Occupations with Arabic and English titles

GET /api/v1/taxonomy/occupations

  • Permission (document 06): P-301
  • Open without signing in
  • On success: 200

Takes no request body.

Skills with synonyms

GET /api/v1/taxonomy/skills

  • Permission (document 06): P-301
  • Open without signing in
  • On success: 200

Takes no request body.

Suggest a new skill or occupation term

POST /api/v1/taxonomy/suggestions

  • Permission (document 06): P-703
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
textstringYes
langar | enYes

women-in-business

Women in Business section content and opportunities

GET /api/v1/women-in-business

  • Permission (document 06): P-603
  • Open without signing in
  • On success: 200

Takes no request body.

work-requests

Post a freelance work request as a client

POST /api/v1/work-requests

  • Permission (document 06): P-402
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
titlestringYes
descriptionstringYes
deliverablesstringYes
budget_mininteger | nullNo
budget_maxinteger | nullNo
currencySYP | USDNo
duration_daysintegerYes
deadlinestring (date)Yes
is_remotebooleanNo
governorate_codestring | nullNo

Offers on own work request, with each freelancer's profile

GET /api/v1/work-requests/{opp_id}/offers

  • Permission (document 06): P-402
  • Needs a signed-in session
  • On success: 200

Takes no request body.

Send an offer

POST /api/v1/work-requests/{opp_id}/offers

  • Permission (document 06): P-403
  • Needs a signed-in session
  • On success: 201
Request fields
FieldTypeRequired
pricestring (decimal)Yes
currencySYP | USDNo
timeline_daysintegerYes
notestringNo

Errors

Every error is problem details (RFC 9457) with the type application/problem+json. It always has these fields:

status
The HTTP status
code
A stable code for programs, such as code_invalid
title
A short title in the request language
detail
An explanation for the user in the request language (when there is one)
request_id
The ID of the request; quote it to support
errors
Field errors: a list of field and message

Changes

1.2.0, 3 November 2026

  • Success statuses follow section 2.2 of document 10: 202 for sending a code and for recovery evidence, 200 for checking a code, 204 for a recovery decision.
  • Field errors are a list of field and message.
  • This page: every operation with its permission, in Arabic and English.

1.1.0, 3 November 2026

  • Error codes are lower case; account_locked answers 429 with the wait in seconds.
  • Four new operations: governorates, second factor, re-authentication, confirming the authenticator app.
  • Every error carries request_id.

1.0.0, 29 October 2026

  • First approved version.