Documentation Index
Fetch the complete documentation index at: https://docs.dokstamp.com/llms.txt
Use this file to discover all available pages before exploring further.
Operações em Lote
Para turmas grandes — centenas ou milhares de formandos — a API disponibiliza endpoints e padrões de lote para minimizar o número de requisições e reduzir o tempo de processamento.
Eliminação em lote
A maioria dos recursos suporta eliminação em lote via DELETE /recurso/batch/destroy com um corpo contendo UUIDs:
curl -X DELETE https://api.dokstamp.com/certificates/batch/destroy \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Tenant: {TENANT}" \
-d '{ "uuids": ["uuid-1", "uuid-2", "uuid-3"] }'
Emissão de certificados em lote (padrão)
Não existe um endpoint único de “criar certificados em lote” — cada certificado requer o seu próprio ficheiro exclusivo. No entanto, é possível otimizar o processo com um pipeline eficiente:
1. Enviar todos os ficheiros numa única requisição
curl -X POST https://api.dokstamp.com/files \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json" \
-H "X-Tenant: {TENANT}" \
-F "files[]=@diploma-1.pdf" \
-F "files[]=@diploma-2.pdf" \
-F "files[]=@diploma-3.pdf"
A resposta inclui um array de objetos de ficheiro. Mapeie cada ficheiro para um estudante pelo nome do ficheiro ou índice.
Utilize requisições HTTP concorrentes (Promise.all em JavaScript, cURL paralelo, pool do Guzzle em PHP):
const issuances = students.map((student, index) => ({
institution_uuid: INSTITUTION_UUID,
course_uuid: COURSE_UUID,
student_uuid: student.uuid,
file_uuid: files[index].uuid,
status: 'issued',
issued_at: new Date().toISOString(),
}));
const results = await Promise.all(
issuances.map(payload =>
fetch('https://api.dokstamp.com/certificates', {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Tenant': TENANT,
},
body: JSON.stringify(payload),
}).then(r => r.json())
)
);
const verificationUrls = results.map(r => r.data.public_verification_url);
use GuzzleHttp\Client;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
$client = new Client(['base_uri' => 'https://api.dokstamp.com']);
$headers = [
'Authorization' => "Bearer $token",
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'X-Tenant' => $tenant,
];
$requests = function () use ($students, $files, $headers) {
foreach ($students as $i => $student) {
$body = json_encode([
'institution_uuid' => INSTITUTION_UUID,
'course_uuid' => COURSE_UUID,
'student_uuid' => $student['uuid'],
'file_uuid' => $files[$i]['uuid'],
'status' => 'issued',
'issued_at' => now()->toIso8601String(),
]);
yield new Request('POST', 'certificates', $headers, $body);
}
};
$pool = new Pool($client, $requests(), ['concurrency' => 10]);
$pool->promise()->wait();
Reenvio de requisições de assinatura em lote
Para fluxos de assinatura de documentos, reenvie e-mails de pedido de assinatura para múltiplos signatários de uma vez:
POST /documents/signatures/batch/resend
curl -X POST https://api.dokstamp.com/documents/signatures/batch/resend \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Tenant: {TENANT}" \
-d '{
"document_ids": [101, 102, 103]
}'
Assinatura institucional em lote
Assine múltiplos documentos de uma vez com o certificado digital institucional:
POST /documents/batch/sign/{cert_id}
curl -X POST "https://api.dokstamp.com/documents/batch/sign/1" \
-H "Authorization: Bearer {TOKEN}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Tenant: {TENANT}" \
-d '{
"document_ids": [101, 102, 103],
"pin": "123456"
}'
Paginação para grandes conjuntos de resultados
Ao obter listas grandes (ex.: todos os estudantes para identificar certificados em falta), utilize paginação:
# Obter todas as matrículas concluídas em páginas de 200
PAGE=1
while true; do
RESPONSE=$(curl -s "$API/enrollments?where[completion_status]=completed&per_page=200&page=$PAGE" \
-H "Authorization: Bearer $TOKEN" \
-H "Accept: application/json" \
-H "X-Tenant: $TENANT")
TOTAL_PAGES=$(echo $RESPONSE | jq -r '.meta.last_page')
echo "A processar página $PAGE de $TOTAL_PAGES"
# Processar itens...
[ "$PAGE" -ge "$TOTAL_PAGES" ] && break
PAGE=$((PAGE + 1))
done