API reference
Every public endpoint, with field-level documentation. Lists return { items, page, perPage, total }; resources return the object directly. Money is integer cents, timestamps are ISO 8601 in UTC.
Health
/v1/pingLiveness probe. Always 200 unless the platform is unreachable.
{
"ok": true,
"time": "2026-05-03T08:14:22.103Z"
}Companies
Operations on the organization the API key belongs to. There is no path-level org id; the key carries the binding.
/v1/companies/mecompany:readOrg identity, legal data, KYB status, active subscription plan.
Response
idstringrequiredOpaque organization identifier.namestringrequiredDisplay name.legalNamestringRegistered legal name. Snapshotted onto invoices at issue time.countryCodestringISO 3166-1 alpha-2 country code.taxIdstringLocal tax identifier (e.g. NIF in Spain).vatIdstringEU VAT id when applicable.typestringcompany for orgs with employees / contractors; freelancer_solo for one-person shops.companyfreelancer_solokybStatusstringOutcome of the KYB review.pendingin_reviewapprovedrejectedplanstringActive subscription plan key (trial, core, professional, global, enterprise, aor, custom_*).subscriptionStatusstringStripe subscription status.trialingactivepast_duecanceledunpaidcreatedAtISO 8601requiredOrg creation timestamp.
{
"id": "org_2024_AbCd",
"name": "Acme Corp",
"legalName": "Acme Corporation S.L.",
"countryCode": "ES",
"taxId": "B12345678",
"vatId": "ESB12345678",
"type": "company",
"kybStatus": "approved",
"plan": "global",
"subscriptionStatus": "active",
"createdAt": "2024-08-12T09:31:24.000Z"
}/v1/companies/me/statscompany:readQuick aggregates: total / active projects, member count.
{
"organizationId": "org_2024_AbCd",
"totalProjects": 42,
"activeProjects": 9,
"memberCount": 14
}Projects
Engagements and listings owned by the organization.
/v1/companies/me/projectsprojects:readPaginated list of projects the org owns.
Query parameters
pageinteger1-indexed. Default 1.perPageinteger1–100. Default 25.statusstringFilter by lifecycle status.searchstringSubstring match against title (case-insensitive).sortstringSort key. Default -createdAt.
{
"items": [
{
"id": "prj_2025_8f3a",
"type": "internal",
"title": "Mobile app rewrite",
"status": "active",
"currency": "EUR",
"budgetCents": 4500000,
"budgetHours": null,
"skills": ["react-native", "typescript", "graphql"],
"publishedAt": "2025-09-18T10:00:00.000Z",
"createdAt": "2025-09-12T15:42:08.000Z"
}
],
"page": 1,
"perPage": 25,
"total": 9
}/v1/companies/me/projects/:idprojects:readSingle project, full payload.
Response
idstringrequiredOpaque project identifier.typestringrequiredmarketplace = public listing accepting applications. internal = direct engagement with named members.marketplaceinternaltitlestringrequiredProject title.slugstringURL slug (only on marketplace projects).statusstringLifecycle status. The set of valid values depends on type.draftopenactiveon_holdclosedcancelledarchivedcurrencystringISO 4217 currency code for budget figures.budgetCentsintegerProject budget in cents. null when not set.budgetHoursintegerCapped hours when applicable. null when not set.skillsstring[]Skill slugs the project needs.startDateISO 8601Engagement start (planned).endDateISO 8601Engagement end (planned). null for ongoing.publishedAtISO 8601When the project was opened to applications. null for unpublished drafts.createdAtISO 8601requiredWhen the project was created.
Freelancers
People with at least one project membership in your organization.
/v1/companies/me/freelancersfreelancers:readDistinct freelancers across all projects.
Query parameters
pageinteger1-indexed. Default 1.perPageinteger1–100. Default 25.
Item shape
userIdstringrequiredUser identifier.namestringDisplay name.emailstringPrimary email.slugstringPublic profile slug at /freelance/<slug>.headlinestringOne-line professional headline.
/v1/companies/me/freelancers/:userIdfreelancers:readUser + freelancer profile. Returns 404 if the freelancer has no project relationship with you.
{
"user": {
"id": "usr_a4ef",
"name": "Marta López",
"email": "marta@example.com",
"isFreelancer": true
},
"profile": {
"userId": "usr_a4ef",
"slug": "marta-lopez",
"headline": "Senior backend engineer · Go / Postgres"
}
}Invoices
Issued and received invoices, including consolidated MoR billing, self-billing and credit notes.
/v1/companies/me/invoicesinvoices:readPaginated list. The org is matched as either issuer or recipient.
Query parameters
pageinteger1-indexed. Default 1.perPageinteger1–100. Default 25.statusstringFilter by status. Multiple values comma-separated.typestringFilter by invoice type.
Item shape
idstringrequiredOpaque invoice id.typestringrequiredInvoice category. consolidated = MoR billing; self_billing = platform paying freelancer.consolidatedself_billingsubscriptioncredit_noteproformalocalstatusstringrequiredLifecycle.draftissuedsentpaidoverduecancelledcreditedinvoiceNumberstringSequential issuer-side number. null while draft.issuerOrganizationIdstringIssuer org. Snapshot of the issuer fields stays on the invoice forever.recipientOrganizationIdstringRecipient org (when the recipient is a legal entity).recipientUserIdstringRecipient user (for self-billing scenarios).currencystringrequiredISO 4217.subtotalCentsintegerrequiredPre-tax total.taxAmountCentsintegerrequiredTax accumulated across breakdown rows.totalCentsintegerrequiredCustomer-facing total (subtotal + tax).paidCentsintegerSum of payments received against this invoice.taxModelstringResolved tax rule for this invoice.standard_vatreverse_chargeexemptirnrexportissueDateYYYY-MM-DDIssue date. null while draft.dueDateYYYY-MM-DDCustomer payment deadline.paidAtISO 8601When the last reconciliation flipped status to paid.downloadTokenstringPublic token for /v1/invoices/public/:token download. null until issued.
Payments
Inbound payments to the organization.
/v1/companies/me/paymentspayments:readPaginated list, ordered by created date descending.
Query parameters
pageinteger1-indexed. Default 1.perPageinteger1–100. Default 25.statusstringFilter by status. Multiple values comma-separated.
Item shape
idstringrequiredOpaque payment id.railstringrequiredMoney rail used.stripe_cardsepa_transferwise_inboundbridge_usdcstatusstringrequiredPayment lifecycle.pendingprocessingsucceededfailedrefundedamountCentsintegerrequiredAmount the payer was charged.currencystringrequiredISO 4217.feeCentsintegerWorksible/PSP fees deducted before settlement.netCentsintegerAmount that actually settled into the wallet (amount minus fees).payerEmailstringEmail of the payer. Captured from the payment session.createdAtISO 8601requiredPayment creation.succeededAtISO 8601When the payment cleared.