API reference
Generated from the same schemas as openapi.json. Base URL: https://app.originpixel.in
Try it
Send real requests with your own key. Read-only scopes are safest for exploring.
Kept in this browser tab only. Use a test key with read scopes.
Contacts
People and businesses you talk to. Shared by every product.
Scope contacts:read / contacts:write
- GET /api/v1/contacts
- POST /api/v1/contacts
- GET /api/v1/contacts/{id}
- PATCH /api/v1/contacts/{id}
- DELETE /api/v1/contacts/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| name | string | null | Full name. |
| string | null | Email address (lower case). | |
| phone | string | null | Phone number in E.164 form. |
| tags | array | Lower-case tags. |
| attributes | object | Your own key / value data. |
| source | string | null | Where the contact came from. |
| consent_marketing | boolean | Marketing consent given. |
| opted_out_at | date-time | null | When the contact opted out of messages. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: email (eq, in) · phone (eq) · source (eq, in) · tags (contains) · name (search) · consent_marketing (eq) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at. Writable on create: name, email, phone, tags, attributes, source, consent_marketing.
curl "https://app.originpixel.in/api/v1/contacts?limit=25&email=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/contacts" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Priya Raman","email":"priya@example.com","phone":"+919840012345","tags":["vip"]}'Leads
Sales opportunities in the AI Revenue Engine pipeline. New leads are scored and routed automatically.
Scope revenue_engine:read / revenue_engine:write
- GET /api/v1/leads
- POST /api/v1/leads
- GET /api/v1/leads/{id}
- PATCH /api/v1/leads/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| contact_id | uuid | null | The contact. |
| conversation_id | uuid | null | The conversation it came from. |
| name | string | Lead name. |
| stage | new | qualified | quoted | booked | won | lost | nurture | Pipeline stage. |
| value_estimate | number | null | Expected value. |
| currency | string | ISO 4217 currency code. |
| source | string | null | Source, e.g. website, whatsapp. |
| tags | array | Lower-case tags. |
| owner_id | uuid | null | Team login that owns the lead. |
| score | integer | null | Intent score 0-100 (computed). |
| score_reasons | array | Why the score was given. |
| next_action | string | null | Next step. |
| next_action_due | date-time | null | When the next step is due. |
| lost_reason | string | null | Why the lead was lost. |
| last_activity_at | date-time | Last activity. |
| stage_changed_at | date-time | Last stage change. |
| closed_at | date-time | null | When it was won or lost. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: stage (eq, neq, in) · source (eq, in) · contact_id (eq) · owner_id (eq) · score (gte, lte, gt, lt) · tags (contains) · name (search) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at, last_activity_at. Writable on create: name, contact_id, stage, value_estimate, currency, source, tags, next_action, next_action_due.
curl "https://app.originpixel.in/api/v1/leads?limit=25&stage=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/leads" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Website enquiry - dental implant","source":"website","value_estimate":45000,"currency":"INR"}'Conversations
Customer conversations on every channel (web chat, WhatsApp, email, voice).
Scope front_desk:read
- GET /api/v1/conversations
- GET /api/v1/conversations/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| contact_id | uuid | null | The contact. |
| channel_id | uuid | null | The channel. |
| status | open | pending | handover | closed | Status. |
| assigned_to | uuid | null | Assigned team login. |
| ai_enabled | boolean | The assistant answers. |
| subject | string | null | Subject (email). |
| last_message_at | date-time | null | Last message. |
| tags | array | Lower-case tags. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · contact_id (eq) · channel_id (eq) · tags (contains) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at.
curl "https://app.originpixel.in/api/v1/conversations?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Messages
Messages inside conversations. Also available as /conversations/{id}/messages.
Scope front_desk:read
- GET /api/v1/messages
- GET /api/v1/messages/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| conversation_id | uuid | The conversation. |
| direction | in | out | in = from the customer. |
| sender_kind | contact | ai | staff | system | Who wrote it. |
| body | string | null | Text. |
| attachments | array | Attachments. |
| created_at | date-time | When it was sent. |
Filters: conversation_id (eq) · direction (eq) · sender_kind (eq, in) · created_at (gt, gte, lt, lte). Sort: created_at.
curl "https://app.originpixel.in/api/v1/messages?limit=25&conversation_id=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Bookings
Appointments and reservations. Overlapping bookings on the same calendar are refused (409).
Scope front_desk:read / front_desk:write · needs front_desk.booking in the package
- GET /api/v1/bookings
- POST /api/v1/bookings
- GET /api/v1/bookings/{id}
- PATCH /api/v1/bookings/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| contact_id | uuid | null | The contact. |
| service_id | uuid | null | The service. |
| resource_id | uuid | null | The booking calendar (person, room, table). |
| starts_at | date-time | Start. |
| ends_at | date-time | End. |
| status | requested | confirmed | cancelled | no_show | done | Status. |
| source | string | null | Where it was made (api, web, voice...). |
| notes | string | null | Notes. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · contact_id (eq) · service_id (eq) · resource_id (eq) · starts_at (gt, gte, lt, lte) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: starts_at, created_at, updated_at. Writable on create: contact_id, service_id, resource_id, starts_at, ends_at, status, notes.
curl "https://app.originpixel.in/api/v1/bookings?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/bookings" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"starts_at":"2026-11-05T10:00:00+05:30","ends_at":"2026-11-05T10:30:00+05:30","status":"requested"}'Tickets
Support tickets with SLA targets. Status changes stay in the app (agents and workflows).
Scope customer_experience:read / customer_experience:write · needs customer_experience.tickets in the package
- GET /api/v1/tickets
- POST /api/v1/tickets
- GET /api/v1/tickets/{id}
- PATCH /api/v1/tickets/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| number | integer | Ticket number per business. |
| subject | string | Subject. |
| description | string | null | Description. |
| status | new | open | waiting_customer | resolved | closed | Status. |
| priority | low | normal | high | urgent | Priority. |
| category | string | Category key. |
| source | string | How it was created. |
| channel | string | null | Channel. |
| contact_id | uuid | null | The contact. |
| conversation_id | uuid | null | The conversation. |
| assignee_id | uuid | null | Assigned team login. |
| tags | array | Lower-case tags. |
| first_response_due_at | date-time | null | First response target. |
| resolution_due_at | date-time | null | Resolution target. |
| first_responded_at | date-time | null | First response. |
| resolved_at | date-time | null | Resolved. |
| closed_at | date-time | null | Closed. |
| first_response_breached | boolean | First response SLA missed. |
| resolution_breached | boolean | Resolution SLA missed. |
| sentiment | string | null | Customer mood. |
| csat_score | integer | null | CSAT 1-5. |
| ai_summary | string | null | AI summary. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, neq, in) · priority (eq, in) · category (eq) · contact_id (eq) · assignee_id (eq) · tags (contains) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at, number. Writable on create: subject, description, priority, category, channel, contact_id, tags.
curl "https://app.originpixel.in/api/v1/tickets?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/tickets" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"subject":"Order arrived damaged","priority":"high","channel":"email"}'Reviews
Customer reviews from Google, Facebook, Justdial and others. Negative reviews open alerts.
Scope customer_experience:read / customer_experience:write · needs customer_experience.reviews in the package
- GET /api/v1/reviews
- POST /api/v1/reviews
- GET /api/v1/reviews/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| source_id | uuid | The review source. |
| rating | integer | 1-5 stars. |
| body | string | null | Text. |
| author_display | string | null | Author name as shown. |
| reviewed_at | date-time | When it was written. |
| source_url | string | null | Link to the review. |
| external_id | string | null | Id on the review site. |
| status | new | replied | ignored | Status. |
| reply_draft | string | null | Reply draft. |
| replied_at | date-time | null | When it was replied to. |
| sentiment | string | null | positive, neutral or negative. |
| ticket_id | uuid | null | Ticket opened for it. |
| consent_to_feature | boolean | Customer agreed to feature it. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: rating (eq, gte, lte) · status (eq, in) · source_id (eq) · sentiment (eq, in) · reviewed_at (gt, gte, lt, lte) · created_at (gt, gte, lt, lte). Sort: reviewed_at, created_at, updated_at. Writable on create: source_id, rating, body, author_display, reviewed_at, source_url, external_id.
curl "https://app.originpixel.in/api/v1/reviews?limit=25&rating=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/reviews" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"source_id":"2f1c0a9e-5b7d-4c3a-9e8f-1a2b3c4d5e6f","rating":5,"body":"Very kind staff.","author_display":"Karthik S"}'Calls
Phone calls handled by the AI Voice Workforce, with summary, sentiment and outcome. Recordings are not exposed.
Scope voice:read
- GET /api/v1/calls
- GET /api/v1/calls/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| direction | inbound | outbound | Direction. |
| agent_id | uuid | null | Voice agent. |
| contact_id | uuid | null | The contact. |
| lead_id | uuid | null | Lead created or updated. |
| booking_id | uuid | null | Booking made on the call. |
| campaign_id | uuid | null | Outbound campaign. |
| from_number | string | null | Caller number. |
| to_number | string | null | Called number. |
| status | string | Call status. |
| outcome | string | null | answered, booked, message, transferred or missed. |
| language | string | null | Language. |
| started_at | date-time | Start. |
| answered_at | date-time | null | Answered. |
| ended_at | date-time | null | End. |
| duration_seconds | integer | null | Duration. |
| billed_minutes | integer | Billed minutes. |
| summary | string | null | Summary. |
| sentiment | string | null | Sentiment. |
| intent | string | null | Intent. |
| message_taken | string | null | Message taken for the team. |
| is_test | boolean | Simulated test call. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: direction (eq) · status (eq, in) · outcome (eq, in) · contact_id (eq) · lead_id (eq) · campaign_id (eq) · is_test (eq) · started_at (gt, gte, lt, lte) · created_at (gt, gte, lt, lte). Sort: started_at, created_at, updated_at.
curl "https://app.originpixel.in/api/v1/calls?limit=25&direction=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Campaigns
Old-lead and follow-up campaigns of the AI Revenue Engine.
Scope revenue_engine:read · needs revenue_engine.follow_ups in the package
- GET /api/v1/campaigns
- GET /api/v1/campaigns/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| name | string | Name. |
| sequence_id | uuid | Follow-up sequence. |
| segment | object | Who is in the campaign. |
| status | string | Status. |
| lead_count | integer | Leads in the campaign. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · sequence_id (eq) · created_at (gt, gte, lt, lte). Sort: created_at, updated_at.
curl "https://app.originpixel.in/api/v1/campaigns?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Call campaigns
Outbound call campaigns (calling windows, attempts, consent).
Scope voice:read · needs voice.outbound in the package
- GET /api/v1/voice-campaigns
- GET /api/v1/voice-campaigns/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| name | string | Name. |
| agent_id | uuid | Voice agent. |
| source | string | segment or list. |
| purpose | string | null | Purpose. |
| timezone | string | Calling timezone. |
| window_start | string | Calling window start (HH:MM:SS). |
| window_end | string | Calling window end. |
| window_days | array | Calling days. |
| max_attempts | integer | Attempts per person. |
| retry_minutes | integer | Minutes between attempts. |
| status | string | Status. |
| target_count | integer | People to call. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · agent_id (eq) · created_at (gt, gte, lt, lte). Sort: created_at, updated_at.
curl "https://app.originpixel.in/api/v1/voice-campaigns?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Prospects
B2B prospects of the AI Sales Workforce. A lawful basis is required; do-not-contact rules always apply.
Scope sales:read / sales:write · needs sales.prospecting in the package
- GET /api/v1/prospects
- POST /api/v1/prospects
- GET /api/v1/prospects/{id}
- PATCH /api/v1/prospects/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| account_id | uuid | null | Target account. |
| contact_id | uuid | null | Linked contact. |
| name | string | Name. |
| title | string | null | Job title. |
| string | null | Email. | |
| phone | string | null | Phone. |
| linkedin_url | string | null | LinkedIn profile. |
| timezone | string | null | Timezone. |
| region | in | us | ca | eu | uk | ae | sa | br | au | other | Region (decides the privacy rules). |
| lawful_basis | legitimate_interest | consent | none | Lawful basis for contact. |
| status | string | Status. |
| opted_out_at | date-time | null | Opted out. |
| last_contacted_at | date-time | null | Last contacted. |
| last_replied_at | date-time | null | Last reply. |
| source | string | null | Source. |
| owner_id | uuid | null | Owner. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · region (eq, in) · account_id (eq) · email (eq) · owner_id (eq) · name (search) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at. Writable on create: name, title, email, phone, linkedin_url, timezone, region, lawful_basis, basis_note, account_id, source, notes.
curl "https://app.originpixel.in/api/v1/prospects?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/prospects" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Anand Iyer","title":"Head of Operations","email":"anand@acme.example","region":"in","lawful_basis":"consent"}'Documents
Back-office document metadata (no file contents, no extracted values). Bank statements and KYC are never listed.
Scope back_office:read · needs back_office.documents in the package
- GET /api/v1/documents
- GET /api/v1/documents/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| doc_type_id | uuid | Document type. |
| file_name | string | File name. |
| mime_type | string | MIME type. |
| size_bytes | integer | Size. |
| sha256 | string | null | SHA-256 of the file. |
| status | string | Processing status. |
| scan_status | string | Virus scan status. |
| extraction_mode | string | null | ai, rules or manual. |
| extracted_fields | integer | null | Fields read. |
| corrected_fields | integer | null | Fields corrected in review. |
| record_id | uuid | null | Record created from it. |
| uploaded_at | date-time | null | Uploaded. |
| reviewed_at | date-time | null | Reviewed. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · doc_type_id (eq) · scan_status (eq) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at.
curl "https://app.originpixel.in/api/v1/documents?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Records
Approved bills, invoices, expenses, purchase orders and quotations (sensitive records excluded).
Scope back_office:read · needs back_office.data_entry in the package
- GET /api/v1/records
- GET /api/v1/records/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| kind | string | bill, invoice, expense, purchase_order or quote. |
| status | string | Status. |
| document_id | uuid | null | Source document. |
| party_id | uuid | null | Vendor or customer. |
| party_name | string | null | Vendor or customer name. |
| number | string | null | Document number. |
| issue_date | date | null | Issue date. |
| due_date | date | null | Due date. |
| currency | string | Currency. |
| subtotal | number | null | Subtotal. |
| tax_amount | number | null | Tax. |
| total | number | Total. |
| category | string | null | Category. |
| notes | string | null | Notes. |
| flags | array | Flags. |
| approved_at | date-time | null | Approved. |
| scheduled_for | date | null | Payment scheduled for. |
| paid_at | date-time | null | Marked paid. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: kind (eq, in) · status (eq, in) · party_id (eq) · issue_date (gte, lte) · due_date (gte, lte) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at.
curl "https://app.originpixel.in/api/v1/records?limit=25&kind=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"Posts
AI Content Studio posts. Posts created through the API are drafts; approval and publishing stay in the app.
Scope content:read / content:write · needs content.posts in the package
- GET /api/v1/posts
- POST /api/v1/posts
- GET /api/v1/posts/{id}
- PATCH /api/v1/posts/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| plan_id | uuid | null | Content plan. |
| channel | string | Channel. |
| status | string | idea, draft, in_review, approved, scheduled, published_manually or archived. |
| title | string | null | Title. |
| caption | string | null | Caption or body. |
| hashtags | array | Hashtags. |
| alt_text | string | null | Image alt text. |
| link_url | string | null | Link. |
| language | en | ta | hi | ar | Language. |
| publish_date | date | null | Planned date. |
| publish_time | string | null | Planned time (HH:MM:SS). |
| variant_of | uuid | null | Original post of a variant. |
| source | string | How it was made. |
| version | integer | Version number. |
| approved_at | date-time | null | Approved. |
| published_at | date-time | null | Marked published. |
| published_url | string | null | Published link. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · channel (eq, in) · plan_id (eq) · publish_date (gte, lte) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at. Writable on create: channel, title, caption, hashtags, alt_text, link_url, language, publish_date, publish_time.
curl "https://app.originpixel.in/api/v1/posts?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/posts" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"channel":"instagram","caption":"Diwali offer: 20% off cleaning this week."}'Knowledge articles
Knowledge base used by the AI assistants and the public help centre. Articles are indexed for search when saved.
Scope front_desk:read / front_desk:write
- GET /api/v1/knowledge-articles
- POST /api/v1/knowledge-articles
- GET /api/v1/knowledge-articles/{id}
- PATCH /api/v1/knowledge-articles/{id}
- DELETE /api/v1/knowledge-articles/{id}
| Field | Type | Description |
|---|---|---|
| id | uuid | Unique id (UUID). |
| title | string | Title. |
| source_kind | text | url | file | faq | Kind. |
| content | string | null | Text. |
| status | string | pending, processing, ready or error. |
| published | boolean | Shown in the public help centre. |
| slug | string | null | Help centre URL slug. |
| published_at | date-time | null | Published. |
| created_at | date-time | When it was created. |
| updated_at | date-time | When it last changed. |
Filters: status (eq, in) · published (eq) · source_kind (eq) · title (search) · created_at (gt, gte, lt, lte) · updated_at (gt, gte, lt, lte). Sort: created_at, updated_at. Writable on create: title, content, source_kind, published, slug.
curl "https://app.originpixel.in/api/v1/knowledge-articles?limit=25&status=..." \
-H "Authorization: Bearer $ORIGIN_API_KEY"curl -X POST "https://app.originpixel.in/api/v1/knowledge-articles" \
-H "Authorization: Bearer $ORIGIN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"title":"Parking","content":"Free parking is available behind the clinic from 9 am to 9 pm."}'Metrics
The Business Intelligence engine over every product, in the business's timezone. Scope business_intelligence:read.
GET /api/v1/metrics GET /api/v1/metrics/revenue.leads?from=2026-10-01&to=2026-10-31&grain=week&compare=true