API reference
Your code can haggle too.
Open a private negotiation from your CRM. Answer offers from a script. Pull your deals into your own tools. Everything a seller does in the app, over HTTP.
Create a key in the app, under Settings, API keys. Then ask who you are. The answer says whether the selling endpoints will respond, and why not when they won't.
Part of Pro and Business. Machines can read openapi.json.
https://hagg.in/api/v1export HAGGIN_KEY=hg_live_...
curl https://hagg.in/api/v1/me \
-H "Authorization: Bearer $HAGGIN_KEY"Authentication
Send the key as a bearer token on every request, over https. A key is yours, not your company's. It acts as you, and it sells for the company you belong to. Leave the company, or drop off Pro, and the selling endpoints stop answering. The key is kept.
Two kinds. Full access does anything you can do in the app. Read only can look and can't touch. You see a key once, when you create it. We store a hash, so we can't show it again. Lost it? Revoke it and make another.
Keep keys on a server. There are no CORS headers, on purpose. A key in a browser is a key in public.
curl https://hagg.in/api/v1/selling/haggins \
-H "Authorization: Bearer hg_live_4f9K...c2Xa"Conventions
JSON in, JSON out, snake_case. Money is in minor units: 9900 is 99.00. Times are ISO 8601 in UTC. Ids are UUIDs.
One thing comes back under data. Lists add pagination, and take limit (up to 100) and offset.
Where a text is empty you get null, and you can send null back. The buyer's email is null until a deal is agreed and they said yes to sharing it. Same rule as the app and the webhooks.
The shapes are the ones your webhooks already send. What we push and what we answer use the same words.
{
"data": [
{ "id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83", "title": "Acme, let's talk" }
],
"pagination": { "limit": 50, "offset": 0, "total": 132, "has_more": true }
}Errors
A refusal always looks the same. Branch on code, it is stable. message is for people and may change. Quote request_id when you write to us.
- 400
invalid_jsonThe body is not JSON. - 401
invalid_api_keyNo key, a malformed one, or one that was revoked. - 403
insufficient_accessA read only key tried to change something. - 403
plan_requiredSelling through the API is part of Pro and Business. - 403
no_organizationThe account has no company yet. Create it in the app. - 403
mode_not_allowedThis key can't act on that side. - 403
no_allowanceNo slot or allowance left to publish with. - 404
not_foundIt doesn't exist, or it isn't yours. Same answer for both. - 409
haggin_closedThe Haggin is not open anymore. - 409
idempotency_in_progressThe first request with this Idempotency-Key is still running. - 413
body_too_largeBodies can be up to 100 KB. - 422
validation_errorSomething in the body or the query is wrong.fieldssays what. - 422
request_rejectedValid, but not allowed right now. The message says why: not your move, already closed. - 422
idempotency_key_reusedThat Idempotency-Key was used for a different request. - 429
rate_limitedToo fast.Retry-Aftersays when. - 500
internal_errorOur fault. Safe to retry. Send us therequest_id.
{
"error": {
"code": "validation_error",
"message": "Check the fields.",
"fields": {
"invited_email": ["Who is this Haggin for? Add their email."]
},
"request_id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21"
}
}Rate limits
Per key: 120 requests a minute, 30 of them writes. Writes are tighter because most of them email a real person. Every response says where you stand. Past the limit you get a 429 with Retry-After, in seconds.
A loop that counters every offer sends an email every time. Your buyers are people. Build accordingly.
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1789995878
Retry-After: 23Idempotent requests
Send an Idempotency-Key header on any write and a retry can't do it twice. The same key gets the same answer for 24 hours, marked Idempotent-Replayed: true. The same key with a different body is refused. Use a fresh UUID per action.
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/accept \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Idempotency-Key: 6f2b7c1e-5a0d-4c58-9f0e-7d1f3f1c2a90"Account
Who the key belongs to, and what it can do right now.
Who am I
GET/api/v1/me
Make this your first call. selling.enabled tells you whether the selling endpoints will answer, and why not when they won't.
Any keyRead only is enough
curl https://hagg.in/api/v1/me \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"user": {
"id": "20c4729b-2aa9-44dd-adad-969d15524ad6",
"email": "sam@acme.com",
"name": "Sam Carter",
"company": "Acme",
"role": "Founder",
"website": "https://acme.com",
"channels": []
},
"key": {
"id": "744a539e-68ff-42ac-8649-80ebacee2c35",
"access": "full",
"modes": [
"selling"
]
},
"selling": {
"enabled": true,
"organization": {
"id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
"name": "Acme",
"slug": "acme",
"website": "https://acme.com",
"created_at": "2026-08-02T15:41:07.000Z"
},
"entitlements": {
"plan": "pro",
"plan_source": "subscription",
"plan_expires_at": null,
"subscription_status": "active",
"max_live_haggins": 5,
"live_haggins": 3,
"available_slots": 2,
"trial_remaining": 0,
"unused_campaign_purchases": 0,
"publish": {
"allowed": true,
"source": "plan",
"max_duration_days": null,
"permanent_allowed": true
}
}
}
}
}Update your profile
PUT/api/v1/me/profile
What the other side of a negotiation sees about you. Replaces the whole profile.
Any keyFull access
Body
namestringRequiredcompanystringrolestringchannelsarray of objectsformatenumRequiredx_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastotherhandlestringRequiredaudienceinteger or null
websitestring
curl -X PUT https://hagg.in/api/v1/me/profile \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "20c4729b-2aa9-44dd-adad-969d15524ad6",
"email": "sam@acme.com",
"name": "Sam Carter",
"company": "Acme",
"role": "Founder",
"website": "https://acme.com",
"channels": []
}
}Your plan and what it allows
GET/api/v1/me/billing
Read only. publish.allowed says whether publishing a Haggin would go through right now. Paying and changing plan happen in the app.
Any keyRead only is enough
curl https://hagg.in/api/v1/me/billing \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"plan": "pro",
"plan_source": "subscription",
"plan_expires_at": null,
"subscription_status": "active",
"max_live_haggins": 5,
"live_haggins": 3,
"available_slots": 2,
"trial_remaining": 0,
"unused_campaign_purchases": 0,
"publish": {
"allowed": true,
"source": "plan",
"max_duration_days": null,
"permanent_allowed": true
}
}
}The company you sell as
GET/api/v1/selling/organization
Pro and BusinessRead only is enough
curl https://hagg.in/api/v1/selling/organization \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
"name": "Acme",
"slug": "acme",
"website": "https://acme.com",
"created_at": "2026-08-02T15:41:07.000Z"
}
}Rename it, or change its website
PUT/api/v1/selling/organization
Pro and BusinessFull access
Body
namestringRequiredwebsitestring
curl -X PUT https://hagg.in/api/v1/selling/organization \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "e9c77553-e95b-44ec-b2cc-086ef9420e4f",
"name": "Acme",
"slug": "acme",
"website": "https://acme.com",
"created_at": "2026-08-02T15:41:07.000Z"
}
}Haggins
Your negotiation pages. A private negotiation is a Haggin made for one person.
List your Haggins
GET/api/v1/selling/haggins
Pro and BusinessRead only is enoughPaginated
Query parameters
statusOnly these.
draftliveclosedexpiredkindOnly these.
publicprivatelimit1 to 100. Default 50.
offsetWhere to start. Default 0.
curl https://hagg.in/api/v1/selling/haggins \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": [
{
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null,
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:13:02.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
}
],
"negotiations": {
"total": 1,
"open": 1,
"won": 0
}
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
}
}Create a draft
POST/api/v1/selling/haggins
Nothing is public and no allowance is spent until you publish. For a private negotiation, send kind: "private" with the person's email: only that address can make an offer, and the link can't be guessed.
Pro and BusinessFull access
Body
goalenumget_customersconvert_trialsrecover_churntest_pricingrun_launchotherbusiness_contextenumlaunchinglow_conversionlosing_on_pricemany_customersexperimentingothertitlestringRequiredintrostringkindenumRequiredpublicprivateinvited_namestringinvited_emailstringproductsarray of objectsRequiredidstringnamestringRequireddescriptionstringinfo_urlstringstandard_price_centsintegerRequiredcurrencyenumRequiredUSDEURGBPbilling_periodenumRequiredmonthyearone_timepricing_modelenumRequiredflatper_seat
optionsarray of objectsRequiredtypeenumRequiredlicensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustomkeystringlabelstringenabledbooleanRequiredhintstringinternal_notesstringconfigobjectformatsarray of enumsx_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother
allow_custom_offersbooleanRequiredprice_term_monthsinteger or nullduration_daysinteger or nullRequiredon_expiryenumRequiredkeep_openclosedeal_termsstring
curl -X POST https://hagg.in/api/v1/selling/haggins \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Acme, let's talk",
"kind": "private",
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"products": [
{
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
}
],
"options": [
{
"type": "licenses",
"enabled": true
},
{
"type": "annual_commitment",
"enabled": true
},
{
"type": "testimonial",
"enabled": true,
"internal_notes": "Only if they have an audience"
}
],
"allow_custom_offers": true,
"price_term_months": 12,
"duration_days": 14,
"on_expiry": "close"
}'{
"data": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "draft",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": null,
"expires_at": null,
"closed_at": null,
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:12:44.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"goal": null,
"business_context": null,
"allow_custom_offers": true,
"deal_terms": null,
"max_duration_days": null,
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat",
"description": null,
"info_url": "https://acme.com/pricing",
"negotiation_count": 1
}
],
"options": [
{
"type": "licenses",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "annual_commitment",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "testimonial",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": "Only if they have an audience",
"config": {
"formats": []
}
}
]
}
}One Haggin, with products and options
GET/api/v1/selling/haggins/{id}
What you get here can be sent back to PUT as it is.
Pro and BusinessRead only is enough
curl https://hagg.in/api/v1/selling/haggins/$ID \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null,
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:13:02.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"goal": null,
"business_context": null,
"allow_custom_offers": true,
"deal_terms": null,
"max_duration_days": null,
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat",
"description": null,
"info_url": "https://acme.com/pricing",
"negotiation_count": 1
}
],
"options": [
{
"type": "licenses",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "annual_commitment",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "testimonial",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": "Only if they have an audience",
"config": {
"formats": []
}
}
]
}
}Update a Haggin
PUT/api/v1/selling/haggins/{id}
Replaces the editable part, products and options included: what you leave out of a list is removed. A product that already has offers keeps its name and price, and can't be removed. Read it, change it, send it back.
Pro and BusinessFull access
Body
titlestringRequiredintrostringproductsarray of objectsRequiredidstringnamestringRequireddescriptionstringinfo_urlstringstandard_price_centsintegerRequiredcurrencyenumRequiredUSDEURGBPbilling_periodenumRequiredmonthyearone_timepricing_modelenumRequiredflatper_seat
allow_custom_offersbooleanRequiredprice_term_monthsinteger or nullon_expiryenumRequiredkeep_openclosedeal_termsstringoptionsarray of objectsRequiredtypeenumRequiredlicensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustomkeystringlabelstringenabledbooleanRequiredhintstringinternal_notesstringconfigobjectformatsarray of enumsx_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastother
expires_atstring or null
curl -X PUT https://hagg.in/api/v1/selling/haggins/$ID \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null,
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:13:02.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"goal": null,
"business_context": null,
"allow_custom_offers": true,
"deal_terms": null,
"max_duration_days": null,
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat",
"description": null,
"info_url": "https://acme.com/pricing",
"negotiation_count": 1
}
],
"options": [
{
"type": "licenses",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "annual_commitment",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "testimonial",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": "Only if they have an audience",
"config": {
"formats": []
}
}
]
}
}Go live
POST/api/v1/selling/haggins/{id}/publish
Spends a slot or an allowance. Refused with no_allowance when there is none.
Pro and BusinessFull accessEmails your team
curl -X POST https://hagg.in/api/v1/selling/haggins/$ID/publish \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null,
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:13:02.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"goal": null,
"business_context": null,
"allow_custom_offers": true,
"deal_terms": null,
"max_duration_days": null,
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat",
"description": null,
"info_url": "https://acme.com/pricing",
"negotiation_count": 1
}
],
"options": [
{
"type": "licenses",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "annual_commitment",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "testimonial",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": "Only if they have an audience",
"config": {
"formats": []
}
}
]
}
}Close it
POST/api/v1/selling/haggins/{id}/close
For good. With on_expiry: "close" the open negotiations close too and their buyers are told. Otherwise they carry on.
Pro and BusinessFull accessEmails your team
curl -X POST https://hagg.in/api/v1/selling/haggins/$ID/close \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "closed",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": "2026-09-21T11:02:37.000Z",
"intro": null,
"invited_name": "Ana",
"invited_email": "ana@bravolabs.com",
"duration_days": 14,
"on_expiry": "close",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:13:02.000Z",
"url": "https://hagg.in/app/haggins/9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"goal": null,
"business_context": null,
"allow_custom_offers": true,
"deal_terms": null,
"max_duration_days": null,
"products": [
{
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat",
"description": null,
"info_url": "https://acme.com/pricing",
"negotiation_count": 1
}
],
"options": [
{
"type": "licenses",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "annual_commitment",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": null,
"config": {
"formats": []
}
},
{
"type": "testimonial",
"key": null,
"label": null,
"enabled": true,
"hint": null,
"internal_notes": "Only if they have an audience",
"config": {
"formats": []
}
}
]
}
}Negotiations
The inbox. Read offers, then accept, counter or pass.
The inbox
GET/api/v1/selling/negotiations
Filtering and sorting run over the 500 most recently active negotiations that match view, haggin_id and product_id. Narrow with those first. The buyer's email is not in the list: it is on the negotiation and on the deal, once you may have it.
Pro and BusinessRead only is enoughPaginated
Query parameters
viewattentionis what waits on you. Defaultall.attentionopenwaitingacceptedclosedallsortDefault
activity.bestnewestoldesthighestratiolicensespotentialactivityhaggin_idOne Haggin.
product_idOne of that Haggin's products.
min_ratioOffer divided by standard price, at least this. 0.5 is half price.
max_ratioBelow this.
min_licensesAt least this many licenses.
itemOffers that include this extra.
contenttestimonialceo_callreferralcase_studylicensesannual_commitmentlifetimeqBuyer, company, Haggin or product contains this.
limit1 to 100. Default 50.
offsetWhere to start. Default 0.
curl https://hagg.in/api/v1/selling/negotiations \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": [
{
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "waiting_for_buyer",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": null,
"close_reason": null,
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T10:31:50.000Z",
"closed_at": null,
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"kind": "private",
"status": "live"
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
]
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"interpretation": {
"ratio": 0.8,
"potential": "high"
},
"deal": null
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
}
}One negotiation, with every offer
GET/api/v1/selling/negotiations/{id}
Pro and BusinessRead only is enough
curl https://hagg.in/api/v1/selling/negotiations/$ID \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "waiting_for_buyer",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": null,
"close_reason": null,
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T10:31:50.000Z",
"closed_at": null,
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": null
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"offers": [
{
"id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
"seq": 1,
"author": "buyer",
"status": "countered",
"amount_cents": 5900,
"currency": "USD",
"billing_period": "month",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": false,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:04:11.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": "Happy to record one"
}
]
},
{
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
],
"deal": null
}
}Accept the current offer
POST/api/v1/selling/negotiations/{id}/accept
Creates the deal. It comes back in deal.
Pro and BusinessFull accessEmails the buyer
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/accept \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "accepted",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": null,
"close_reason": null,
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T11:02:37.000Z",
"closed_at": "2026-09-21T11:02:37.000Z",
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": null
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"offers": [
{
"id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
"seq": 1,
"author": "buyer",
"status": "countered",
"amount_cents": 5900,
"currency": "USD",
"billing_period": "month",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": false,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:04:11.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": "Happy to record one"
}
]
},
{
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
],
"deal": {
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "agreed",
"payment_status": "pending",
"payment_link_url": null,
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": null,
"paid_at": null,
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e"
}
}
}Counter
POST/api/v1/selling/negotiations/{id}/counter
Same shape as an offer. Extras must be ones the Haggin has switched on.
Pro and BusinessFull accessEmails the buyer
Body
amount_centsintegerRequiredbilling_periodenumRequiredmonthyearone_timelicensesinteger or nullis_lifetimebooleanannual_commitmentbooleanprice_term_monthsinteger or nullcustom_termsstringitemsarray of objectspartyenumbuyersellertypeenumRequiredlicensesannual_commitmentlifetimecontenttestimonialceo_callreferralcase_studycustomformatenumx_postlinkedin_postinstagramtiktokyoutubeblog_postnewsletterpodcastotherkeystringdetailstring
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/counter \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount_cents": 7900,
"billing_period": "month",
"licenses": 10,
"annual_commitment": true,
"items": [
{
"party": "buyer",
"type": "testimonial"
}
]
}'{
"data": {
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "waiting_for_buyer",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": null,
"close_reason": null,
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T10:31:50.000Z",
"closed_at": null,
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": null
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"offers": [
{
"id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
"seq": 1,
"author": "buyer",
"status": "countered",
"amount_cents": 5900,
"currency": "USD",
"billing_period": "month",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": false,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:04:11.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": "Happy to record one"
}
]
},
{
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
],
"deal": null
}
}Pass on the current offer
POST/api/v1/selling/negotiations/{id}/reject
Ends the negotiation. Only when it is your move.
Pro and BusinessFull accessEmails the buyer
Body
reasonenumtoo_lownot_our_audiencespam
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/reject \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "rejected",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": "seller",
"close_reason": "rejected",
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T10:31:50.000Z",
"closed_at": "2026-09-21T10:31:50.000Z",
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": null
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"offers": [
{
"id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
"seq": 1,
"author": "buyer",
"status": "countered",
"amount_cents": 5900,
"currency": "USD",
"billing_period": "month",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": false,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:04:11.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": "Happy to record one"
}
]
},
{
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
],
"deal": null
}
}Walk away
POST/api/v1/selling/negotiations/{id}/close
Ends an open negotiation, whoever's move it is.
Pro and BusinessFull accessEmails the buyer
Body
reasonenumtoo_lownot_our_audiencespam
curl -X POST https://hagg.in/api/v1/selling/negotiations/$ID/close \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"status": "closed",
"url": "https://hagg.in/app/negotiations/dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"closed_by": "seller",
"close_reason": "closed_by_seller",
"close_detail": null,
"expires_at": null,
"created_at": "2026-09-21T10:04:11.000Z",
"last_activity_at": "2026-09-21T10:31:50.000Z",
"closed_at": "2026-09-21T10:31:50.000Z",
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc",
"status": "live",
"kind": "private",
"price_term_months": 12,
"public_url": "https://hagg.in/h/p-5zbqmrkdrhmc",
"published_at": "2026-09-21T09:13:02.000Z",
"expires_at": "2026-10-05T09:13:02.000Z",
"closed_at": null
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": null
},
"offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"offers": [
{
"id": "1f6d2a90-7c3e-4f1b-8a55-3c9e0d4b7a01",
"seq": 1,
"author": "buyer",
"status": "countered",
"amount_cents": 5900,
"currency": "USD",
"billing_period": "month",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": false,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:04:11.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": "Happy to record one"
}
]
},
{
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "pending",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
],
"deal": null
}
}Pass on many at once
POST/api/v1/selling/negotiations/bulk-reject
Up to 200. Ones that are not yours, or not waiting on you, are skipped, not failed.
Pro and BusinessFull accessEmails the buyer
Body
negotiation_idsarray of stringsRequired
curl -X POST https://hagg.in/api/v1/selling/negotiations/bulk-reject \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"negotiation_ids": [
"…",
"…"
]
}'{
"data": {
"rejected": 12,
"skipped": 1
}
}Deals
What happens after yes: the payment link, the terms, the handover.
List your deals
GET/api/v1/selling/deals
agreed ones are waiting for your payment link.
Pro and BusinessRead only is enoughPaginated
Query parameters
statusOnly these.
agreedpayment_readywonlimit1 to 100. Default 50.
offsetWhere to start. Default 0.
curl https://hagg.in/api/v1/selling/deals \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": [
{
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "payment_ready",
"payment_status": "pending",
"payment_link_url": "https://buy.stripe.com/aEU5kF",
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": null,
"paid_at": null,
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
"negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"haggin": {
"id": "9ecf3137-f90e-45c7-b5e7-685dde8cff83",
"title": "Acme, let's talk",
"slug": "p-5zbqmrkdrhmc"
},
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": "ana@bravolabs.com"
},
"accepted_offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "accepted",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
}
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
}
}One deal, with its terms
GET/api/v1/selling/deals/{id}
Pro and BusinessRead only is enough
curl https://hagg.in/api/v1/selling/deals/$ID \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "payment_ready",
"payment_status": "pending",
"payment_link_url": "https://buy.stripe.com/aEU5kF",
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": null,
"paid_at": null,
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
"negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"payment_provider": "manual_link",
"payment_link_added_at": "2026-09-21T11:20:03.000Z",
"terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
"instructions": null,
"instructions_sent_at": null,
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": "ana@bravolabs.com"
},
"accepted_offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "accepted",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"terms_acceptance": null
}
}Say where the buyer pays
PUT/api/v1/selling/deals/{id}/payment-link
Your own checkout, https only. HAGGIN never touches the money. The first time, the deal becomes payment_ready.
Pro and BusinessFull accessEmails the buyer
Body
urlstringRequired
curl -X PUT https://hagg.in/api/v1/selling/deals/$ID/payment-link \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://buy.stripe.com/…"
}'{
"data": {
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "payment_ready",
"payment_status": "pending",
"payment_link_url": "https://buy.stripe.com/aEU5kF",
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": null,
"paid_at": null,
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
"negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"payment_provider": "manual_link",
"payment_link_added_at": "2026-09-21T11:20:03.000Z",
"terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
"instructions": null,
"instructions_sent_at": null,
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": "ana@bravolabs.com"
},
"accepted_offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "accepted",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"terms_acceptance": null
}
}Tell the buyer what happens next
POST/api/v1/selling/deals/{id}/instructions
Only once the deal is won. Every call sends the email again, with replies going to you.
Pro and BusinessFull accessEmails the buyer
Body
instructionsstringRequired
curl -X POST https://hagg.in/api/v1/selling/deals/$ID/instructions \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "won",
"payment_status": "pending",
"payment_link_url": "https://buy.stripe.com/aEU5kF",
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": "2026-09-21T12:40:18.000Z",
"paid_at": null,
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
"negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"payment_provider": "manual_link",
"payment_link_added_at": "2026-09-21T11:20:03.000Z",
"terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
"instructions": "Your seats are live. Log in and invite your team.",
"instructions_sent_at": "2026-09-21T12:55:00.000Z",
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": "ana@bravolabs.com"
},
"accepted_offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "accepted",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"terms_acceptance": {
"accepted_at": "2026-09-21T12:40:18.000Z",
"terms_version": "v1"
}
}
}Mark it paid, or not
POST/api/v1/selling/deals/{id}/paid
Your own bookkeeping: you say when the money landed.
Pro and BusinessFull access
Body
paidbooleanRequired
curl -X POST https://hagg.in/api/v1/selling/deals/$ID/paid \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json"{
"data": {
"id": "9414c619-9a10-48af-89dc-55f57fe2e08e",
"status": "won",
"payment_status": "paid",
"payment_link_url": "https://buy.stripe.com/aEU5kF",
"terms_version": "v1",
"agreed_at": "2026-09-21T11:02:37.000Z",
"won_at": "2026-09-21T12:40:18.000Z",
"paid_at": "2026-09-22T08:03:00.000Z",
"url": "https://hagg.in/app/deals/9414c619-9a10-48af-89dc-55f57fe2e08e",
"negotiation_id": "dea5e4cc-64e9-495b-a000-3a699d45cf3e",
"payment_provider": "manual_link",
"payment_link_added_at": "2026-09-21T11:20:03.000Z",
"terms_text": "This deal is between the buyer and the seller. The agreed price, volume and any extras listed above are the full terms of the deal.",
"instructions": null,
"instructions_sent_at": null,
"product": {
"id": "4b0c7e52-1d7a-4c0e-9d53-0f6f1b7a2c11",
"name": "Team plan",
"standard_price_cents": 9900,
"currency": "USD",
"billing_period": "month",
"pricing_model": "per_seat"
},
"buyer": {
"id": "ddeaa69d-3549-4935-a4c5-8de0b813eb72",
"name": "Ana Ruiz",
"company": "Bravo Labs",
"role": "CEO",
"website": "https://bravolabs.com",
"channels": [
{
"format": "x_post",
"handle": "@anaruiz",
"audience": 38000
}
],
"email": "ana@bravolabs.com"
},
"accepted_offer": {
"id": "8a2e5c17-0b94-4d6f-b3a1-6e7f9c2d5b02",
"seq": 2,
"author": "seller",
"status": "accepted",
"amount_cents": 7900,
"currency": "USD",
"billing_period": "year",
"licenses": 10,
"is_lifetime": false,
"annual_commitment": true,
"price_term_months": 12,
"custom_terms": null,
"standard_price_cents": 9900,
"created_at": "2026-09-21T10:31:50.000Z",
"items": [
{
"party": "buyer",
"type": "testimonial",
"format": null,
"key": null,
"label": null,
"detail": null
}
]
},
"terms_acceptance": {
"accepted_at": "2026-09-21T12:40:18.000Z",
"terms_version": "v1"
}
}
}Webhooks
Where HAGGIN tells you things. Set it up here, or in the app.
Your endpoint
GET/api/v1/selling/webhook-endpoint
One per company. The signing secret is shown to full access keys only.
Pro and BusinessRead only is enough
curl https://hagg.in/api/v1/selling/webhook-endpoint \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "cccfc047-c04e-4c76-a19a-271562480289",
"url": "https://hooks.acme.com/haggin",
"enabled": true,
"events": [
"offer.received",
"deal.won"
],
"secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
"disabled_reason": null,
"consecutive_failures": 0,
"last_delivery_at": "2026-09-21T10:31:50.000Z",
"last_delivery_status": "delivered",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:12:44.000Z"
}
}Set your endpoint
PUT/api/v1/selling/webhook-endpoint
https, public address. An empty events list means every event, including ones added later.
Pro and BusinessFull access
Body
urlstringRequiredenabledbooleaneventsarray of strings
curl -X PUT https://hagg.in/api/v1/selling/webhook-endpoint \
-H "Authorization: Bearer $HAGGIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.acme.com/haggin",
"enabled": true,
"events": [
"offer.received",
"deal.won"
]
}'{
"data": {
"id": "cccfc047-c04e-4c76-a19a-271562480289",
"url": "https://hooks.acme.com/haggin",
"enabled": true,
"events": [
"offer.received",
"deal.won"
],
"secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
"disabled_reason": null,
"consecutive_failures": 0,
"last_delivery_at": "2026-09-21T10:31:50.000Z",
"last_delivery_status": "delivered",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:12:44.000Z"
}
}New signing secret
POST/api/v1/selling/webhook-endpoint/rotate-secret
The old one stops validating at once.
Pro and BusinessFull access
curl -X POST https://hagg.in/api/v1/selling/webhook-endpoint/rotate-secret \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "cccfc047-c04e-4c76-a19a-271562480289",
"url": "https://hooks.acme.com/haggin",
"enabled": true,
"events": [
"offer.received",
"deal.won"
],
"secret": "whsec_MfKQ9r8GKYqrTwjUPD8ILPZIo2LaLaSw",
"disabled_reason": null,
"consecutive_failures": 0,
"last_delivery_at": "2026-09-21T10:31:50.000Z",
"last_delivery_status": "delivered",
"created_at": "2026-09-21T09:12:44.000Z",
"updated_at": "2026-09-21T09:12:44.000Z"
}
}Send a ping
POST/api/v1/selling/webhook-endpoint/test
Pro and BusinessFull access
curl -X POST https://hagg.in/api/v1/selling/webhook-endpoint/test \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
"event_type": "ping",
"status": "delivered",
"attempts": 1,
"next_attempt_at": null,
"last_attempt_at": "2026-09-21T10:31:50.000Z",
"response_status": 200,
"response_body": "ok",
"error": null,
"delivered_at": "2026-09-21T10:31:50.000Z",
"created_at": "2026-09-21T10:31:50.000Z",
"payload": {
"id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
"type": "ping",
"created_at": "2026-09-21T10:31:50.000Z",
"data": {
"organization": "Acme"
}
}
}
}Recent deliveries
GET/api/v1/selling/webhook-deliveries
The latest 50, with what your endpoint answered.
Pro and BusinessRead only is enoughPaginated
Query parameters
limit1 to 100. Default 50.
offsetWhere to start. Default 0.
curl https://hagg.in/api/v1/selling/webhook-deliveries \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": [
{
"id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
"event_type": "ping",
"status": "delivered",
"attempts": 1,
"next_attempt_at": null,
"last_attempt_at": "2026-09-21T10:31:50.000Z",
"response_status": 200,
"response_body": "ok",
"error": null,
"delivered_at": "2026-09-21T10:31:50.000Z",
"created_at": "2026-09-21T10:31:50.000Z",
"payload": {
"id": "0f1c6b1e-9f4a-4e0b-9a1e-2f0a7c4d9b21",
"type": "ping",
"created_at": "2026-09-21T10:31:50.000Z",
"data": {
"organization": "Acme"
}
}
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 1,
"has_more": false
}
}Try one again, now
POST/api/v1/selling/webhook-deliveries/{id}/retry
Pro and BusinessFull access
curl -X POST https://hagg.in/api/v1/selling/webhook-deliveries/$ID/retry \
-H "Authorization: Bearer $HAGGIN_KEY"{
"data": {
"result": "delivered"
}
}