Skip to content

Lawyer verification

9 operations, each with its parameters, curl and TypeScript examples ready to copy, and its errors.

Operations marked /v1 authenticate with an agent token; the rest, with a panel session. How both work is in Authentication

myKyc

GET/_x/query/my-kyc

Firm memberPermission: kyc:submit

myKyc

Parameters of myKyc
NameInTypeRequired
userIdQuerystring (uuid)Yes
_firstQueryinteger 1–500page size; present, the response is the page envelope rather than the bare rows (1 to 500)No
_afterQuerystringthe nextCursor a previous page answered; needs _firstNo
curl
curl 'https://www.notificado.co/_x/query/my-kyc?userId=<userId>' \
  -b cookies.txt
TypeScript
const response = await fetch('https://www.notificado.co/_x/query/my-kyc?userId=<userId>', {
  headers: { cookie: sessionCookie },
});
const result = await response.json();
Example response
200
[
  null
]

Errors

  • 400 X_INPUT_INVALID or X_CURSOR_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

changeSirnaEmail

POST/api/change-sirna-email

Firm memberPermission: kyc:submit

changeSirnaEmail

Parameters of changeSirnaEmail
NameInTypeRequired
sirnaEmailBodystring 3–320Yes
curl
curl -X POST 'https://www.notificado.co/api/change-sirna-email' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"sirnaEmail":"<sirnaEmail>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/change-sirna-email', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "sirnaEmail": "<sirnaEmail>"
  }),
});
const result = await response.json();
Example response
200
{
  "currentSirnaEmail": "<currentSirnaEmail>",
  "expiresInMinutes": -9007199254740991,
  "requestId": "<requestId>",
  "sentTo": "<sentTo>"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

confirmSirnaEmailChange

POST/api/confirm-sirna-email-change

Firm memberPermission: kyc:submit

confirmSirnaEmailChange

Parameters of confirmSirnaEmailChange
NameInTypeRequired
codeBodystring 6–12Yes
curl
curl -X POST 'https://www.notificado.co/api/confirm-sirna-email-change' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"code":"<code>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/confirm-sirna-email-change', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "code": "<code>"
  }),
});
const result = await response.json();
Example response
200
{
  "pendingSirnaEmail": "<pendingSirnaEmail>",
  "sirnaEmail": "<sirnaEmail>",
  "status": "awaiting_staff"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

confirmUpload

POST/v1/confirm-upload

Firm memberPermission: or(kyc:submit, affiliate:self, affiliate:self, case:write)/v1 · bearer tokenIdempotency-KeyMCP tool: confirmUpload

Step 2: checks the stored bytes and answers the document id for attachDocument.

Parameters of confirmUpload
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
contentTypeBodystring 1–127Yes
filenameBodystring 1–255Yes
keyBodystring 1–512Yes
kindBody"certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro" | "einvoice_xml" | "einvoice_pdf"Yes
curl
curl -X POST 'https://www.notificado.co/v1/confirm-upload' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "contentType": "<contentType>",
  "filename": "<filename>",
  "key": "<key>",
  "kind": "certificado_vigencia"
}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/confirm-upload', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
  body: JSON.stringify({
    "contentType": "<contentType>",
    "filename": "<filename>",
    "key": "<key>",
    "kind": "certificado_vigencia"
  }),
});
const result = await response.json();
Example response
200
{
  "bytes": -9007199254740991,
  "createdAt": "2026-09-25T15:00:00Z",
  "filename": "<filename>",
  "id": "<id>",
  "kind": "certificado_vigencia",
  "mime": "<mime>",
  "pageCount": -9007199254740991,
  "sha256": "<sha256>"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

proveSirnaEmail

POST/api/prove-sirna-email

Firm memberPermission: kyc:submit

proveSirnaEmail

Parameters of proveSirnaEmail
NameInTypeRequired
codeBodystring 6–12Yes
curl
curl -X POST 'https://www.notificado.co/api/prove-sirna-email' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"code":"<code>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/prove-sirna-email', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "code": "<code>"
  }),
});
const result = await response.json();
Example response
200
{
  "evaluation": "<evaluation>",
  "proven": true,
  "reasons": [
    "<reasons>"
  ],
  "status": "<status>"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

requestUpload

POST/v1/request-upload

Firm memberPermission: or(kyc:submit, affiliate:self, affiliate:self, case:write)/v1 · bearer tokenIdempotency-KeyMCP tool: requestUpload

Step 1: a signed PUT grant for one PDF, PNG or JPEG (20 MB). PUT the bytes, then confirmUpload(key).

Parameters of requestUpload
NameInTypeRequired
Idempotency-KeyHeaderstring ≤ 255Replays the first response for a repeated key.No
contentTypeBodystring 1–127Yes
filenameBodystring 1–255Yes
kindBody"certificado_vigencia" | "cedula" | "tarjeta_profesional" | "provenance_proof" | "otro" | "einvoice_xml" | "einvoice_pdf"Yes
sizeBodyinteger 0–9007199254740991Yes
curl
curl -X POST 'https://www.notificado.co/v1/request-upload' \
  -H "authorization: Bearer $NOTIFICADO_TOKEN" \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
  "contentType": "<contentType>",
  "filename": "<filename>",
  "kind": "certificado_vigencia",
  "size": 0
}'
TypeScript
const response = await fetch('https://www.notificado.co/v1/request-upload', {
  method: 'POST',
  headers: { authorization: `Bearer ${token}`, 'content-type': 'application/json', 'idempotency-key': crypto.randomUUID() },
  body: JSON.stringify({
    "contentType": "<contentType>",
    "filename": "<filename>",
    "kind": "certificado_vigencia",
    "size": 0
  }),
});
const result = await response.json();
Example response
200
{
  "contentType": "<contentType>",
  "expiresAt": -9007199254740991,
  "key": "<key>",
  "maxBytes": -9007199254740991,
  "method": "PUT",
  "url": "<url>"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 409 X_IDEMPOTENCY_CONFLICT
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

resendPossessionCode

POST/api/resend-possession-code

Firm memberPermission: kyc:submit

resendPossessionCode

curl
curl -X POST 'https://www.notificado.co/api/resend-possession-code' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{}'
TypeScript
const response = await fetch('https://www.notificado.co/api/resend-possession-code', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({}),
});
const result = await response.json();
Example response
200
{
  "alreadyProven": true,
  "sentTo": "<sentTo>"
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

setMyName

POST/api/set-my-name

Firm memberPermission: kyc:submit

setMyName

Parameters of setMyName
NameInTypeRequired
fullNameBodystring 3–200Yes
curl
curl -X POST 'https://www.notificado.co/api/set-my-name' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{"fullName":"<fullName>"}'
TypeScript
const response = await fetch('https://www.notificado.co/api/set-my-name', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "fullName": "<fullName>"
  }),
});
const result = await response.json();
Example response
200
{
  "ok": true,
  "reverify": true
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds

submitKyc

POST/api/submit-kyc

Firm memberPermission: kyc:submit

submitKyc

Parameters of submitKyc
NameInTypeRequired
cedulaBodystring 1–32Yes
documentTypeBody"CC" | "CE" | "PPT"No
fullNameBodystring 1–200Yes
sirnaEmailBodystring (email) ≤ 320Yes
tarjetaProfesionalBodystring 1–32Yes
vigenciaDocumentIdBodystring (uuid)No
curl
curl -X POST 'https://www.notificado.co/api/submit-kyc' \
  -b cookies.txt \
  -H 'origin: https://www.notificado.co' \
  -H 'content-type: application/json' \
  -d '{
  "cedula": "<cedula>",
  "fullName": "<fullName>",
  "sirnaEmail": "<sirnaEmail>",
  "tarjetaProfesional": "<tarjetaProfesional>"
}'
TypeScript
const response = await fetch('https://www.notificado.co/api/submit-kyc', {
  method: 'POST',
  headers: { 'content-type': 'application/json', origin: 'https://www.notificado.co', cookie: sessionCookie },
  body: JSON.stringify({
    "cedula": "<cedula>",
    "fullName": "<fullName>",
    "sirnaEmail": "<sirnaEmail>",
    "tarjetaProfesional": "<tarjetaProfesional>"
  }),
});
const result = await response.json();
Example response
200
{
  "identityId": "<identityId>",
  "resubmitted": true,
  "status": "<status>",
  "warnings": [
    "<warnings>"
  ]
}

Errors

  • 400 X_INPUT_INVALID
  • 401 X_UNAUTHENTICATED — no credential, or one that did not resolve
  • 403 policy denied
  • 422 X_BODY_INVALID
  • 429 X_RATE_LIMITED — retry after Retry-After seconds