Programs & structure
List and update programs, tracks, and rounds. Patch lifecycle, intake fields, and branding copy within the scopes you grant.
Scoped bearer tokens, REST reads and writes under /integrations/v1, and signed outbound webhooks.
Base URL https://api.newempactwork.com
Create a token under Integrations in the product. Grant programs:read. Then:
curl -sS https://api.newempactwork.com/integrations/v1/programs \
-H "Authorization: Bearer YOUR_TOKEN"
{
"success": true,
"data": [
{
"programId": "prg_01HXYZ...",
"name": "2026 Innovation Challenge",
"year": 2026,
"lifecycleStatus": "underway"
}
],
"meta": {
"hasMore": false
}
}
Envelope shape matches the published OpenAPI. Field sets vary by resource — see the programs reference.
Send a scoped bearer token on every request:
Authorization: Bearer <64-char hex token>
Create and revoke tokens under Integrations in the product. Revoking takes effect immediately. Tokens are auditable per request.
Optional Idempotency-Key on POST, PATCH, and DELETE. Cached for 24 hours per business + token + key + request body hash — retries after a timeout return the original response instead of applying the change twice.
Each route requires a matching scope. A read-only token cannot write.
Read: submissions:read, programs:read, tracks:read, rounds:read, reviews:read, feedback:read, supplements:read, audit:read, payments:read, assignments:read, reviewers:read, emails:read, applicants:read, files:read, schemas:read, rubrics:read, exports:read
Write: submissions:write, assignments:write, supplements:write, feedback:write, programs:write, tracks:write, rounds:write, reviewers:write, emails:write, exports:write
Surface area to sync a CRM or AMS, or to let an AI tool operate a program — without a separate agent product.
List and update programs, tracks, and rounds. Patch lifecycle, intake fields, and branding copy within the scopes you grant.
Create and update submissions; submit, screen, advance, eliminate, reopen, or withdraw.
Invite reviewers, auto or bulk assign, reassign, read reviews and rubrics, release feedback.
Read payment status and pull the audit trail that makes agent and integration actions defensible.
Async JSON packages with applicants, reviewers, submissions, raw reviews, and completed COI attestations.
Every path, parameter, and response schema is in the OpenAPI-generated reference.
Open reference →Every delivery is a JSON POST. The header is X-Webhook-Signature: sha256=<hex> — an HMAC-SHA256 of the raw request body using your endpoint secret. Verify with a constant-time compare before trusting the payload.
{
"eventType": "submission.submitted",
"eventId": "…",
"timestamp": "2026-03-20T12:00:00.000Z",
"data": { }
}
import hmac, hashlib
expected = "sha256=" + hmac.new(
secret.encode(), raw_body, hashlib.sha256
).hexdigest()
assert hmac.compare_digest(
header_value, expected
)
Failed deliveries (non-2xx or network errors) are retried. Make handlers idempotent using eventId.
| Limit | Value |
|---|---|
Requests on /integrations/v1 |
300 per minute per token |
Create export (POST /exports) |
1 request per five minutes per token |
Responses use a shared envelope. On failure, inspect error.code, error.message, and optional error.details.
{
"success": false,
"error": {
"code": "string",
"message": "string",
"details": {}
}
}
List endpoints may also return meta.lastEvaluatedKey and meta.hasMore for pagination. Route-level response schemas live in the API reference.
Grouped the way a program runs. Schema links open the published webhook events reference.
Applicant registered applicant.registered
Fires when an innovator self-registers on a public track URL.
Submission started submission.draft_created
Fires when an applicant begins a submission and saves the first draft.
Submission completed submission.submitted
Fires when an applicant submits a complete application.
Submission withdrawn submission.withdrawn
Fires when a submission is withdrawn from consideration.
Supplement received supplement.response.submitted
Fires when a requested supplement is submitted.
Payment completed payment.succeeded
Fires when a required entry fee is paid or recorded as paid offline.
Payment failed payment.failed
Fires when an application fee payment fails.
Payment waived payment.waived
Fires when staff waives an application fee.
Submission state changed submission.state_changed
Fires on any submission state transition (screen, advance, eliminate, withdraw, reopen). Dedicated events such as submission.withdrawn may also fire for the same change.
Program lifecycle changed program.lifecycle_status_changed
Fires when a program lifecycle status changes (for example draft → configured, underway, completed, or archived).
Full payload shapes: webhook events reference.
The same Integration API and audit log that sync a CRM can power an AI agent calling /integrations/v1 — ChatGPT, Claude, or a custom tool. Read-only credentials for an agent that summarizes. Scoped write credentials for an agent that acts. Every request is auditable under the token that made it.
Breaking changes ship under a new path version. The /integrations/v1 contract you build against keeps working.
We give 90 days written notice before deprecating anything, sent to every account with an active token.
The published API reference is generated from the public OpenAPI specification — the same contract the API serves. The documentation tracks the running surface.
/integrations/v1 supports read and write scopes. A read-only token cannot write. You grant only the scopes the integration needs when you create the token.programs:read or submissions:write). Existing tokens do not receive new scopes until you update them. Revoking a token takes effect immediately and does not disturb staff sign-in.
Integration questions go to the same inbox as the product. Include the endpoint, the scope on your token, and the error.code if you have one.